瀏覽代碼

会计归档数据查询优化

徐滕 2 周之前
父節點
當前提交
bca2badb37

+ 79 - 14
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml

@@ -164,6 +164,49 @@
         fi.red_invoice_relevancy_number
     </sql>
 
+    <sql id="New_Base_Column_List">
+        fi.id,
+        fi.create_by_id,
+        fi.create_time,
+        fi.update_by_id,
+        fi.update_time,
+        fi.del_flag,
+        fi.remarks,
+        fi.type,
+        fi.no,
+        fi.billing_type,
+        fi.billing_workplace_real,
+        fi.taxpayer_identification_no,
+        fi.address,
+        fi.tel_phone,
+        fi.open_bank,
+        fi.bank_account,
+        fi.name,
+        fi.receivables_type,
+        fi.billing_content,
+        CASE WHEN fibs.rn = 1 THEN fi.account ELSE 0 END as account,
+        fi.billing_content_terms,
+        fi.billing_people,
+        fi.billing_date,
+        fi.collect_date,
+        fi.billing_people_real,
+        fi.reconciliation_people,
+        fi.reconciliation_area,
+        fi.billing_workplace_real_id,
+        fi.billing_people_id,
+        fi.status,
+        fi.proc_ins_id,
+        fi.process_definition_id,
+        fi.receivables_status,
+        fi.invalid_status,
+        fi.receivables_date,
+        fi.is_multiple,
+        fi.actual_drawer_email_address,
+        fi.red_invoice_flag,
+        fi.red_invoice_relevancy_id,
+        fi.red_invoice_relevancy_number
+    </sql>
+
     <select id="getFii" resultType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceInvalidDTO">
         select
         <include refid="FII_Column_List"></include>
@@ -202,30 +245,50 @@
 
     <select id="findList" resultMap="BaseResultMap">
         select
-        DISTINCT
-        <include refid="Base_Column_List"></include>,
+        <include refid="New_Base_Column_List"></include>,
         su.name as operator,
         so.name as operator_office,
         fibs.report_no,
         fibs.program_no,
-        (select
+        -- 获取项目名称
         CASE
-        WHEN RIGHT( GROUP_CONCAT(case when program_id is null then 2 else 1 end),1) =2 THEN GROUP_CONCAT(concat('其他:',wipr1.program_name))
-        WHEN RIGHT( GROUP_CONCAT(case when program_id is null then 2 else 1 end),1) =1 THEN GROUP_CONCAT(rpr1.name)
-        ELSE '' END
-        FROM finance_invoice_base wipr1
-        LEFT JOIN program_project_list_info rpr1 ON wipr1.program_id = rpr1.id
-        WHERE wipr1.invoice_id = fi.id) as programName,
-        cfid.number as "number",
-        cfid.account as "accountDetail",
+        WHEN fibs.program_id is null THEN concat('其他:', fibs.program_name)
+        ELSE rpr1.name
+        END as programName,
+        -- 按行号匹配金额和账户信息,没有则显示0或空
+        COALESCE(detail.amount, 0) as amount,
+        detail.account as accountDetail,
+        detail.number as number,
         art.ID_ as task_id,
         art_invalid.ID_ as task_id_invalid,
         su1.name as reconciliationPeopleName
-        from finance_invoice fi
-        left join finance_invoice_base fibs on fibs.invoice_id = fi.id and fibs.del_flag = '0'
-        left join finance_invoice_detail cfid on cfid.invoice_id = fi.id and cfid.del_flag = '0'
+        from (
+        -- 为finance_invoice_base添加行号(兼容旧版MySQL)
+        select
+        fib.*,
+        @row_num := if(@prev_invoice_id = fib.invoice_id, @row_num + 1, 1) as rn,
+        @prev_invoice_id := fib.invoice_id
+        from finance_invoice_base fib,
+        (select @row_num := 0, @prev_invoice_id := null) as vars
+        where fib.del_flag = '0'
+        order by fib.invoice_id, fib.id
+        ) fibs
+        left join program_project_list_info rpr1 on fibs.program_id = rpr1.id
+        -- 关联主表
+        left join finance_invoice fi on fibs.invoice_id = fi.id
+        -- 为finance_invoice_detail添加行号并关联(兼容旧版MySQL)
+        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 finance_invoice_detail fid,
+        (select @row_num2 := 0, @prev_invoice_id2 := null) as vars2
+        where fid.del_flag = '0'
+        order by fid.invoice_id, fid.id
+        ) detail on fibs.invoice_id = detail.invoice_id and fibs.rn = detail.rn
+        -- 其他关联表
         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'
@@ -234,6 +297,7 @@
         ${ew.customSqlSegment}
     </select>
 
+
     <select id="findRedList" resultMap="BaseResultMap">
         select
         DISTINCT

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

@@ -92,6 +92,8 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
         QueryWrapper<FinanceInvoice> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( FinanceInvoiceWrapper.INSTANCE.toEntity(financeInvoiceDTO), FinanceInvoice.class );
         queryWrapper.eq("fi.del_flag","0");
         queryWrapper.orderByDesc("fi.create_time");
+        queryWrapper.orderByAsc("fi.id");
+        queryWrapper.orderByAsc("fibs.rn");
         ArrayList<String> searchIdList = new ArrayList<>();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         AtomicInteger checkNum = new AtomicInteger();

+ 1 - 1
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/mapper/xml/ProjectListMapper.xml

@@ -1016,7 +1016,7 @@
         ORDER BY a.update_time DESC
     </select>
     <select id="getOverArchiveFlag" resultType="java.lang.Integer">
-        select count(a.id) from program_archive a
+        select count(b.id) from program_archive a
          left join program_project_list_info b on a.program_id = b.id AND b.del_flag = 0
         where a.over_archive_status =1 and a.status != 7 and a.create_by_id = #{currentUser.id}
     </select>

+ 12 - 7
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/controller/CwProjectReportArchiveController.java

@@ -225,6 +225,12 @@ public class CwProjectReportArchiveController {
     @GetMapping("newExport")
     @ApiOperation(value = "导出归档数据")
     public void newExportFile(CwProjectReportArchiveDTO cwProjectReportArchiveDTO, Page <CwProjectReportArchiveDTO> page, ExcelOptions options,  HttpServletResponse response) throws Exception {
+        page.setSize (-1);
+        page.setCurrent (0);
+
+        String cwReimbursementSourceTypeDatas = SpringUtil.getBean ( IDictApi.class ).getDictListMapByDict ("cw_business_type");
+        Map<String,Object> cwReimbursementSourceTypeValueDTOs = JSON.parseObject(cwReimbursementSourceTypeDatas, new TypeReference<Map<String,Object>>() {});
+
         List<CwProjectReportArchiveExportDTO> result = cwProjectReportArchiveService.findExportList(page, cwProjectReportArchiveDTO).getRecords();
 
         
@@ -239,14 +245,13 @@ public class CwProjectReportArchiveController {
             }
             //字典值处理
             if(StringUtils.isNotBlank(re.getEntrustType())){
-                String entrustType = SpringUtil.getBean(IDictApi.class).getDictLabel(re.getEntrustType(), "cw_entrust_type", "");
-                re.setEntrustType(entrustType);
+                for (String key : cwReimbursementSourceTypeValueDTOs.keySet()) {
+                    if(re.getEntrustType().equals(key)){
+                        re.setEntrustType(String.valueOf(cwReimbursementSourceTypeValueDTOs.get(key)));
+                        break;
+                    }
+                }
             }
-            //根据报告复核的proinsid获取二级复核
-            String cprrProcInsId = re.getCprrProcInsId();
-            Map map = SpringUtil.getBean(IFlowableApi.class).historicTaskList2(cprrProcInsId);
-            String secondAuditName = map.get("secondAuditName").toString();
-            re.setSecondAuditName(secondAuditName);
             //设置序号
             re.setIndex(counter.getAndIncrement());
             CwProjectReportArchiveExportDTO exportDTO = new CwProjectReportArchiveExportDTO();

+ 19 - 44
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/mapper/xml/CwProjectReportArchiveMapper.xml

@@ -281,61 +281,36 @@
     <select id="findExportList"  resultType="com.jeeplus.finance.projectReportArchive.service.dto.CwProjectReportArchiveExportDTO">select
         DISTINCT
         <include refid="Base_Column_List"></include>,
-        cw_wcb.name as audited_units_name,
-        su.name as user_name,
-        su1.name as project_master_name,
-        su2.name as realHeaderName,
-        cw_pr.project_name as project_name,
-        cw_prnl.report_no,
+        su3.name as projectCreateName,
         date_format(cw_prnl.report_date,'%Y-%m-%d') as report_date,
-        art.ID_ as task_id,
-        crb.create_by_id as borrowUserId,
-        crb.proc_ins_id as procInsId2,
-        b.signature_annotator1_name,
-        b.signature_annotator2_name,
-        cwci.contract_no as contractNo,
-        cwci.contract_name as contractName,
-        pr.business_type as businessType,
+        cw_pa.audit_date as auditDate,
         cw_pa.approve_remarks as approveRemarks,
+        cw_pa.contract,
         cw_pa.approved_no_including_tax as approvedNoIncludingTax,
         cw_pa.approved_including_tax as approvedIncludingTax,
-        cw_pa.contract,
-        cprr.proc_ins_id as cprrProcInsId,
-        cw_pa.audit_date as auditDate,
-        cw_pa.entrust_type as entrustType
+        sureview.name as secondAuditName,
+
+        cw_pr.project_name as project_name,
+        cw_prnl.report_no,
+
+        su11.NAME AS signature_annotator1_name,
+        su22.NAME AS signature_annotator2_name
         from cw_project_report_archive cw_pa
-        left join cw_project_report_borrow crb on crb.archive_id = cw_pa.id and crb.del_flag = '0'
-        left join cw_work_client_base cw_wcb on cw_pa.audited_units = cw_wcb.id and cw_wcb.del_flag = '0'
-        left join sys_user su on su.id = cw_pa.create_by_id and su.del_flag = '0'
-        left join sys_office so on so.id = su.office_id and so.del_flag ='0'
         left join cw_project_records cw_pr on cw_pr.id = cw_pa.project_id and cw_pr.del_flag = '0'
         left join sys_user su1 on cw_pr.project_master_id = su1.id and su1.del_flag = '0'
         left join sys_user su2 on cw_pr.real_header = su2.id and su2.del_flag = '0'
         left join cw_project_report_new_line cw_prnl on cw_prnl.report_id = cw_pa.report_id and cw_prnl.del_flag = '0'
-        left join cw_project_members cpm on cw_pr.id = cpm.project_id
-        left join sys_user sub on cpm.user_id = sub.id
-        left join sys_user_manage_office sumo on sumo.office_id = sub.office_id
-        left join act_ru_task art ON cw_pa.proc_ins_id = art.PROC_INST_ID_
+        left join sys_user su3 on su3.id = cw_pr.create_by_id and su3.del_flag = '0'
+
         left join cw_project_report pr on cw_pa.report_id=pr.id and pr.del_flag = '0'
         left join cw_project_report_review cprr on cprr.report_id=pr.id and cprr.del_flag = '0'
-        left join cw_work_contract_info cwci on cwci.id=cw_pr.contract_id and cwci.del_flag = '0'
-        left join cw_work_contract_file_paper cwcfp on cwcfp.contract_info_id=cwci.id and cwcfp.del_flag = '0'
-        left join(
-        select
-        cw_prr.id as report_id,
-        prnl.report_no,
-        prnl.report_date,
-        cw_prr.signature_annotator1,
-        cw_prr.signature_annotator2,
-        prnl.create_by_id,
-        su11.name as signature_annotator1_name,
-        su22.name as signature_annotator2_name
-        from cw_project_report_new_line prnl
-        left join cw_project_report cw_prr on cw_prr.id = prnl.report_id and cw_prr.del_flag = '0'
-        left join sys_user su11 on su11.id = cw_prr.signature_annotator1 and su11.del_flag = '0'
-        left join sys_user su22 on su22.id = cw_prr.signature_annotator2 and su22.del_flag = '0'
-        where prnl.del_flag = '0'
-        ) b on b.report_id = cw_pa.report_id
+        left join sys_user sureview on cprr.review_by = sureview.id and sureview.del_flag = '0'
+
+        -- 原子查询b中的表直接关联到主查询
+        LEFT JOIN cw_project_report cw_prr ON cw_prr.id = cw_prnl.report_id AND cw_prr.del_flag = '0'
+        LEFT JOIN sys_user su11 ON su11.id = cw_prr.signature_annotator1 AND su11.del_flag = '0'
+        LEFT JOIN sys_user su22 ON su22.id = cw_prr.signature_annotator2 AND su22.del_flag = '0'
+
         ${ew.customSqlSegment}
         and cw_prnl.report_number is not null and cw_prnl.report_date is not null and cw_pa.del_flag = '0'
         <if test="sta == '超期未归档'">