Просмотр исходного кода

修改bug:
私有应收,相同的车辆信息出现一次就行,不管几次结算,出现一条即可

jiakai 3 месяцев назад
Родитель
Сommit
0b1be6402b

+ 50 - 10
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -4412,18 +4412,58 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }else{
             exportSuperviseSettlementDetailExcelDtos = baseMapper.getSuperviseSettlementDetailExcelDtos(page, settlementQueryVo);
         }
-        exportSuperviseSettlementDetailExcelDtos.getRecords().forEach(dto -> {
-            if (dto.getInvoiceParty().equals("1")) {
-                dto.setInvoiceParty("我方开票");
-            } else if (dto.getInvoiceParty().equals("2")) {
-                dto.setInvoiceParty("保司开票");
+        if (CollUtil.isNotEmpty(exportSuperviseSettlementDetailExcelDtos.getRecords())){
+            // 根据invoiceId关联查询ins_ply_income_invoice_settlement表
+            LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getInvoiceId, exportSuperviseSettlementDetailExcelDtos.getRecords().stream().map(ExportSuperviseSettlementDetailExcelDto::getInvoiceId).toList());
+            insPlyIncomeInvoiceSettlementLambdaQueryWrapper.eq(InsPlyIncomeInvoiceSettlement::getIsDelete, 0);
+            if (StrUtil.isNotBlank(settlementQueryVo.getSettlementPerson())){
+                // 结算人
+                insPlyIncomeInvoiceSettlementLambdaQueryWrapper.eq(InsPlyIncomeInvoiceSettlement::getCreateBy, settlementQueryVo.getSettlementPerson());
             }
-            if (dto.getStatus().equals("1")) {
-                dto.setStatus("已结算");
-            } else if (dto.getStatus().equals("0")) {
-                dto.setStatus("未结算");
+            if (StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd())) {
+                // 结算时间
+                insPlyIncomeInvoiceSettlementLambdaQueryWrapper.between(StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd()),
+                        InsPlyIncomeInvoiceSettlement::getCreateTime, settlementQueryVo.getSettlementTimeStart(), settlementQueryVo.getSettlementTimeEnd());
             }
-        });
+            List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
+            // 如果结算记录不为空,且结算人、结算时间不为空,则根据结算记录的invoiceId过滤列表
+            Map<String, InsPlyIncomeInvoiceSettlement> settlementMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlements)){
+                if (StrUtil.isNotBlank(settlementQueryVo.getSettlementPerson()) || (StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd()))) {
+                    List<String> invoiceList = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getInvoiceId).toList();
+                    // filter:lambda 返回 true 的元素留下,false 的剔除
+                    exportSuperviseSettlementDetailExcelDtos.setRecords(exportSuperviseSettlementDetailExcelDtos.getRecords().stream().filter(detail -> invoiceList.contains(detail.getInvoiceId())).toList());
+                }
+
+                // 冲突时保留旧值(第一条)
+                settlementMap = insPlyIncomeInvoiceSettlements.stream()
+                        .collect(Collectors.toMap(
+                                InsPlyIncomeInvoiceSettlement::getInvoiceId,
+                                Function.identity(),
+                                (oldVal, newVal) -> oldVal
+                        ));
+            }
+
+            final Map<String, InsPlyIncomeInvoiceSettlement> finalSettlementMap = settlementMap;
+            exportSuperviseSettlementDetailExcelDtos.getRecords().forEach(dto -> {
+                if (dto.getInvoiceParty().equals("1")) {
+                    dto.setInvoiceParty("我方开票");
+                } else if (dto.getInvoiceParty().equals("2")) {
+                    dto.setInvoiceParty("保司开票");
+                }
+                if (dto.getStatus().equals("1")) {
+                    dto.setStatus("已结算");
+                } else if (dto.getStatus().equals("0")) {
+                    dto.setStatus("未结算");
+                }
+                InsPlyIncomeInvoiceSettlement insPlyIncomeInvoiceSettlement = finalSettlementMap.get(dto.getInvoiceId());
+                if (null != insPlyIncomeInvoiceSettlement){
+                    dto.setSettlementPerson(insPlyIncomeInvoiceSettlement.getCreateBy());
+                    dto.setSettlementTime(insPlyIncomeInvoiceSettlement.getCreateTime());
+                }
+            });
+        }
         return exportSuperviseSettlementDetailExcelDtos;
     }
 

+ 7 - 29
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -876,10 +876,9 @@
 
     <select id="getSuperviseSettlementDetailExcelDtos" resultType="com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementDetailExcelDto">
         select ipi.contact_person, ipi.contact_person_phone,
-        ipiis.id as settlementId,
-        ipiis.invoice_id as invoiceId,
         io.company_name as companyName,
         io.signing_time as signingTime,
+        ipii.id as invoiceId,
         ipii.status as status,
         ipi.license_no as licenseNo,
         io.product_name as productName,
@@ -896,29 +895,14 @@
         ipi.jy_premium as jyPremium,
         ipi.jy_supervise_costs_proportion as jySuperviseCostsProportion,
         ipi.jy_policy_no as jyPolicyNo,
-        ipi.tax_premium as taxPremium,
-        ipii.create_by as invoicePerson,
-        ipii.create_time as invoiceTime,
-        ipiis.create_by as settlementPerson,
-        ipiis.create_time as settlementTime
-        FROM
-        ins_ply_income_invoice ipii
-        LEFT JOIN ins_ply_income_invoice_settlement ipiis ON ipiis.invoice_id = ipii.id AND ipiis.is_delete = 0
-        LEFT JOIN ins_ply_income_invoice_link ipil ON ipil.invoice_id = ipiis.invoice_id AND ipil.is_delete = 0
-        LEFT JOIN ins_ply_income ipi ON ipi.id = ipil.income_id AND ipi.is_delete = 0
-        LEFT JOIN ins_orders io ON ipi.order_no = io.id AND io.is_delete = 0
+        ipi.tax_premium as taxPremium
+        FROM ins_ply_income_invoice ipii
+        LEFT JOIN ins_ply_income_invoice_link ipil ON ipii.id = ipil.invoice_id AND ipil.is_delete = 0
+        LEFT JOIN ins_ply_income ipi ON ipi.id = ipil.income_id  AND ipi.is_delete = 0
+        LEFT JOIN ins_orders io  ON ipi.order_no = io.id  AND io.is_delete = 0
         <where>
             ipii.is_delete = 0
             AND ipii.system_code = #{settlementQueryVo.systemCode}
-            <if test="settlementQueryVo.settlementId != null and settlementQueryVo.settlementId != ''">
-                AND ipiis.id = #{settlementQueryVo.settlementId}
-            </if>
-            <if test="settlementQueryVo.settlementIds != null and settlementQueryVo.settlementIds != ''">
-                AND ipiis.id IN
-                <foreach collection="settlementQueryVo.settlementIds" item="settlementId" open="(" separator="," close=")">
-                    #{settlementId}
-                </foreach>
-            </if>
             <if test="settlementQueryVo.invoiceTypes != null and settlementQueryVo.invoiceTypes != ''">
                 AND ipii.invoice_type IN
                 <foreach collection="settlementQueryVo.invoiceTypes" item="invoiceType" open="(" separator="," close=")">
@@ -926,7 +910,7 @@
                 </foreach>
             </if>
             <if test="settlementQueryVo.invoiceId != null and settlementQueryVo.invoiceId != ''">
-                AND ipiis.invoice_id = #{settlementQueryVo.invoiceId}
+                AND ipii.id = #{settlementQueryVo.invoiceId}
             </if>
             <if test="settlementQueryVo.companyId != null and settlementQueryVo.companyId != ''">
                 AND ipi.company_id = #{settlementQueryVo.companyId}
@@ -934,12 +918,6 @@
             <if test="settlementQueryVo.invoiceParty != null and settlementQueryVo.invoiceParty != ''">
                 AND ipii.invoice_party = #{settlementQueryVo.invoiceParty}
             </if>
-            <if test="settlementQueryVo.settlementPerson != null and settlementQueryVo.settlementPerson != ''">
-                AND ipiis.create_by = #{settlementQueryVo.settlementPerson}
-            </if>
-            <if test="settlementQueryVo.settlementTimeStart != null and settlementQueryVo.settlementTimeStart != ''">
-                AND ipiis.create_time between #{settlementQueryVo.signingTimeStart} and #{settlementQueryVo.signingTimeEnd}
-            </if>
             <if test="settlementQueryVo.agreementType != null and settlementQueryVo.agreementType != ''">
                 AND ipi.agreement_type = #{settlementQueryVo.agreementType}
             </if>