Explorar o código

评估-调整发票列表查询逻辑,可查询无项目关联数据的发票记录

huangguoce hai 4 días
pai
achega
14e98474c5

+ 2 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/FinanceInvoiceMapper.java

@@ -23,6 +23,8 @@ import java.util.List;
 public interface FinanceInvoiceMapper extends BaseMapper<FinanceInvoice> {
 
     IPage<FinanceInvoiceDTO> findList(Page<FinanceInvoiceDTO> page, @Param(Constants.WRAPPER) QueryWrapper<FinanceInvoice> queryWrapper);
+    Long findListCount(@Param(Constants.WRAPPER) QueryWrapper<FinanceInvoice> queryWrapper);
+
     //查询红字发票数据
     IPage<FinanceInvoiceDTO> findRedList(Page<FinanceInvoiceDTO> page, @Param(Constants.WRAPPER) QueryWrapper<FinanceInvoice> queryWrapper);
     //@InterceptorIgnore(tenantLine = "true")

+ 40 - 5
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml

@@ -314,7 +314,7 @@
         select
         <include refid="New_Base_Column_List"></include>,
         -- 补全原有业务逻辑中缺失的account字段(ResultMap已有该字段映射)
-        CASE WHEN fibs.rn = 1 THEN fi.account ELSE 0 END AS account,
+        CASE WHEN fibs.rn = 1 OR fibs.rn IS NULL THEN fi.account ELSE 0 END AS account,
         su.name as operator,
         so.name as operator_office,
         fibs.report_no,
@@ -327,7 +327,8 @@
         art.ID_ as task_id,
         art_invalid.ID_ as task_id_invalid,
         su1.name as reconciliationPeopleName
-        from (
+        from finance_invoice fi
+        left join (
         -- 优化:MySQL5.7适配 - 先过滤+排序,再生成行号(减少临时表/文件排序)
         select
         fib.*,
@@ -337,10 +338,10 @@
         SELECT * FROM finance_invoice_base WHERE del_flag = '0' ORDER BY invoice_id, id
         ) fib,
         (select @row_num := 0, @prev_invoice_id := null) as vars
-        ) fibs
+        ) fibs on fibs.invoice_id = fi.id
         left join program_project_list_info rpr1 on fibs.program_id = rpr1.id
         -- 关联主表(原有逻辑不变)
-        left join finance_invoice fi on fibs.invoice_id = fi.id
+        -- left join finance_invoice fi on fibs.invoice_id = fi.id
         -- 优化明细表行号生成(MySQL5.7适配)
         left join (
         select
@@ -351,7 +352,7 @@
         SELECT * FROM finance_invoice_detail WHERE del_flag = '0' ORDER BY invoice_id, id
         ) fid,
         (select @row_num2 := 0, @prev_invoice_id2 := null) as vars2
-        ) detail on fibs.invoice_id = detail.invoice_id and fibs.rn = detail.rn
+        ) detail on detail.invoice_id = fi.id and (fibs.rn = detail.rn or fibs.rn is null)
         -- 原有关联表逻辑完全保留
         left join sys_user su on fi.create_by_id = su.id and su.del_flag = '0'
         left join sys_office so on su.office_id = so.id and so.del_flag = '0'
@@ -363,6 +364,40 @@
         ${ew.customSqlSegment}
     </select>
 
+    <select id="findListCount" resultType="java.lang.Long">
+        select count(1)
+        from finance_invoice fi
+                 left join (
+            -- 优化:MySQL5.7适配 - 先过滤+排序,再生成行号(减少临时表/文件排序)
+            select
+                fib.*,
+                @row_num := if(@prev_invoice_id = fib.invoice_id, @row_num + 1, 1) as rn,
+    @prev_invoice_id := fib.invoice_id
+            from (
+                SELECT * FROM finance_invoice_base WHERE del_flag = '0' ORDER BY invoice_id, id
+                ) fib,
+                (select @row_num := 0, @prev_invoice_id := null) as vars
+        ) fibs on fibs.invoice_id = fi.id
+                 left join program_project_list_info rpr1 on fibs.program_id = rpr1.id
+                 left join (
+            select
+                fid.*,
+                @row_num2 := if(@prev_invoice_id2 = fid.invoice_id, @row_num2 + 1, 1) as rn,
+    @prev_invoice_id2 := fid.invoice_id
+            from (
+                SELECT * FROM finance_invoice_detail WHERE del_flag = '0' ORDER BY invoice_id, id
+                ) fid,
+                (select @row_num2 := 0, @prev_invoice_id2 := null) as vars2
+        ) detail on detail.invoice_id = fi.id and (fibs.rn = detail.rn or fibs.rn is null)
+                 left join sys_user su on fi.create_by_id = su.id and su.del_flag = '0'
+                 left join sys_office so on su.office_id = so.id and so.del_flag = '0'
+                 left join act_ru_task art on fi.proc_ins_id = art.PROC_INST_ID_
+                 left join finance_invoice_invalid invalid on invalid.invoice_id = fi.id and invalid.del_flag = '0'
+                 left join act_ru_task art_invalid on invalid.proc_ins_id = art_invalid.PROC_INST_ID_
+                 left join sys_user su1 on su1.id = fi.reconciliation_people
+            ${ew.customSqlSegment}
+    </select>
+
 
     <select id="findRedList" resultMap="BaseResultMap">
         select

+ 7 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java

@@ -322,7 +322,14 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
                 queryWrapper.eq("fi.is_oms_billing", isOmsBilling);
             }
         }
+        //关闭自动查询count
+        page.setSearchCount(false);
+        //自定义count
+        Long total = financeInvoiceMapper.findListCount(queryWrapper);
+
         IPage<FinanceInvoiceDTO> pageList = financeInvoiceMapper.findList(page, queryWrapper);
+        pageList.setTotal(total);
+
         pageList.getRecords().stream().forEach(item ->{
             // 发票申请
             if (StringUtils.isNotBlank(item.getTaskId()) && StringUtils.isNotBlank(item.getStatus())) {