diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettlePayRecordMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettlePayRecordMapper.java index 34bf56cbb..27231f9f6 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettlePayRecordMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettlePayRecordMapper.java @@ -1,10 +1,10 @@ -/** +/** * @Project: emis * @Title: EmisSettlePayRecordMapper.java * @author linfso * @date 2024-07-21 13:31:24 * @Copyright: ShangHai Doitinfo 2022 All rights reserved. - * @version v1.0 + * @version v1.0 * @Description:

账单收退款记录 Mapper 接口

* Warning : This file is generate by ai tools,don't edit!!! */ @@ -29,20 +29,19 @@ public interface EmisSettlePayRecordMapper extends BaseMapper selectEmisSettlePayRecordList(EmisSettlePayRecord emisSettlePayRecord); - public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord); - + public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord); public List selectSettlePayRecordListBySettleBillNo(String settleBillNo); @@ -52,32 +51,32 @@ public interface EmisSettlePayRecordMapper extends BaseMapper> calculateRecedMoney(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List> calculateRecedMoney(@Param("beginTime") String beginTime, + @Param("endTime") String endTime); + + /** + * 根据支付ID列表获取运单号 + * + * @param payIds 支付ID列表 + * @return 运单号映射 + */ + List> getWaybillCodesByPayIds(@Param("list") List payIds); + + /** + * 根据支付ID列表获取账单金额 + * + * @param payIds 支付ID列表 + * @return 账单金额映射 + */ + List> getBillAmountsByPayIds(@Param("list") List payIds); + + /** + * 根据支付ID列表获取开票金额 + * + * @param payIds 支付ID列表 + * @return 开票金额映射 + */ + List> getInvoiceAmountsByPayIds(@Param("list") List payIds); + + /** + * 根据支付ID列表获取开票状态 + * + * @param payIds 支付ID列表 + * @return 开票状态映射 + */ + List> getInvoiceStatusByPayIds(@Param("list") List payIds); + + /** + * 根据支付ID列表获取发票申请备注 + * + * @param payIds 支付ID列表 + * @return 发票申请备注映射 + */ + List> getInvoiceRemarksByPayIds(@Param("list") List payIds); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettlePayRecordService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettlePayRecordService.java index 247c74241..3ec4c0c13 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettlePayRecordService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettlePayRecordService.java @@ -1,10 +1,10 @@ - /** + /** * @Project: emis * @Title: EmisSettlePayRecordService.java * @author linfso * @date 2024-07-21 13:31:24 * @Copyright: ShangHai Duta 2022 All rights reserved. - * @version v1.0 + * @version v1.0 * @Description:

账单收退款记录 服务类接口

*/ package com.xdadan.erp.emis.service; @@ -23,24 +23,24 @@ import com.xdadan.erp.emis.domain.stat.PayBackRecordDtl; * @author linfso * @date 2024-07-21 13:31:24 */ -public interface IEmisSettlePayRecordService +public interface IEmisSettlePayRecordService { /** * 主键查询 * @param id - * @return + * @return */ public EmisSettlePayRecord selectEmisSettlePayRecordById(Long id); /** * 查询账单收退款记录列表 - * + * * @param emisSettlePayRecord 账单收退款记录 * @return 账单收退款记录集合 */ public List selectEmisSettlePayRecordList(EmisSettlePayRecord emisSettlePayRecord); - public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord); + public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord); public List queryPayBackRecordList(EmisSettlePayRecord emisSettlePayRecord); @@ -48,15 +48,15 @@ public interface IEmisSettlePayRecordService /** * 检查是否重复 - * - * @param emisSettlePayRecord + * + * @param emisSettlePayRecord * @return 数量 */ public int checkUnique(EmisSettlePayRecord emisSettlePayRecord); /** * 新增账单收退款记录 - * + * * @param emisSettlePayRecord 账单收退款记录 * @return 结果 */ @@ -64,7 +64,7 @@ public interface IEmisSettlePayRecordService /** * 修改账单收退款记录 - * + * * @param emisSettlePayRecord 账单收退款记录 * @return 结果 */ @@ -72,7 +72,7 @@ public interface IEmisSettlePayRecordService /** * 批量删除账单收退款记录 - * + * * @param ids 需要删除的账单收退款记录主键集合 * @return 结果 */ @@ -80,7 +80,7 @@ public interface IEmisSettlePayRecordService /** * 删除账单收退款记录信息 - * + * * @param id 账单收退款记录主键 * @return 结果 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java index 51159abe8..1ef18ea0b 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java @@ -1,10 +1,10 @@ - /** + /** * @Project: emis * @Title: EmisSettlePayRecordServiceImpl.java * @author linfso * @date 2024-07-21 13:31:24 * @Copyright: ShangHai Duta 2022 All rights reserved. - * @version v1.0 + * @version v1.0 * @Description:

账单收退款记录 实体类

*/ @@ -16,6 +16,9 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; @@ -24,12 +27,10 @@ import com.xdadan.erp.emis.domain.stat.PayBackRecordDtl; import com.xdadan.erp.emis.mapper.*; import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.service.IEmisSettleBillService; -import com.xdadan.erp.emis.service.IEmisSettleSubBillService; import com.xdadan.erp.emis.utils.WaybillHelper; import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,14 +38,17 @@ import com.xdadan.erp.emis.service.IEmisSettlePayRecordService; /** * 账单收退款记录Service业务层处理 - * + * * @author linfso * @date 2024-07-21 13:31:24 */ @Slf4j @Service -public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements IEmisSettlePayRecordService -{ +public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements IEmisSettlePayRecordService { + + // 创建线程池用于并行查询 + private final ExecutorService executorService = Executors.newFixedThreadPool(5); + @Autowired private EmisSettlePayRecordMapper emisSettlePayRecordMapper; @@ -57,23 +61,18 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I @Autowired private EmisSettleBillMapper emisSettleBillMapper; - @Autowired - private EmisSettleSubBillMapper emisSettleSubBillMapper; - @Autowired private IEmisSettleBillService emisSettleBillService; - @Autowired private EmisSettleInvoiceRecordMapper emisSettleInvoiceRecordMapper; @Autowired private EmisSettlePayInvoiceRelMapper emisSettlePayInvoiceRelMapper; - /** * 查询账单收退款记录 - * + * * @param id 账单收退款记录主键 * @return 账单收退款记录 */ @@ -83,22 +82,202 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I return emisSettlePayRecordMapper.selectEmisSettlePayRecordById(id); } - /** - * 查询账单收退款记录列表 - * + * 查询账单收退款记录列表(带扩展信息) + * * @param emisSettlePayRecord 账单收退款记录 * @return 账单收退款记录 */ @Override - public List selectEmisSettlePayRecordList(EmisSettlePayRecord emisSettlePayRecord) - { - return emisSettlePayRecordMapper.selectEmisSettlePayRecordList(emisSettlePayRecord); + public List selectEmisSettlePayRecordList(EmisSettlePayRecord emisSettlePayRecord) { + // 先查询基础数据 + List baseList = emisSettlePayRecordMapper + .selectEmisSettlePayRecordList(emisSettlePayRecord); + + if (CollectionUtils.isEmpty(baseList)) { + return baseList; + } + + // 提取支付ID列表 + List payIds = baseList.stream() + .map(EmisSettlePayRecord::getPayId) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(java.util.stream.Collectors.toList()); + + if (CollectionUtils.isEmpty(payIds)) { + return baseList; + } + + // 并行查询扩展信息 + CompletableFuture> waybillCodesFuture = CompletableFuture + .supplyAsync(() -> getWaybillCodesMap(payIds), executorService); + CompletableFuture> billAmountsFuture = CompletableFuture + .supplyAsync(() -> getBillAmountsMap(payIds), executorService); + CompletableFuture> invoiceAmountsFuture = CompletableFuture + .supplyAsync(() -> getInvoiceAmountsMap(payIds), executorService); + CompletableFuture> invoiceStatusFuture = CompletableFuture + .supplyAsync(() -> getInvoiceStatusMap(payIds), executorService); + CompletableFuture> invoiceRemarksFuture = CompletableFuture + .supplyAsync(() -> getInvoiceRemarksMap(payIds), executorService); + + try { + // 等待所有查询完成并获取结果 + Map waybillCodesMap = waybillCodesFuture.join(); + Map billAmountsMap = billAmountsFuture.join(); + Map invoiceAmountsMap = invoiceAmountsFuture.join(); + Map invoiceStatusMap = invoiceStatusFuture.join(); + Map invoiceRemarksMap = invoiceRemarksFuture.join(); + + // 组装数据 + for (EmisSettlePayRecord record : baseList) { + String payId = record.getPayId(); + + // 设置运单号 + if (waybillCodesMap.containsKey(payId)) { + record.setBillCodes((String) waybillCodesMap.get(payId)); + } + + // 设置账单金额 + if (billAmountsMap.containsKey(payId)) { + record.setBillAmount((BigDecimal) billAmountsMap.get(payId)); + } + + // 设置开票金额 + if (invoiceAmountsMap.containsKey(payId)) { + record.setInvoiceAmount((BigDecimal) invoiceAmountsMap.get(payId)); + } + + // 设置开票状态 + if (invoiceStatusMap.containsKey(payId)) { + record.setInvoiceStatus((String) invoiceStatusMap.get(payId)); + } + + // 设置备注(发票申请备注) + if (invoiceRemarksMap.containsKey(payId)) { + record.setRemark((String) invoiceRemarksMap.get(payId)); + } + } + } catch (Exception e) { + log.error("并行查询扩展信息时发生异常", e); + // 如果并行查询失败,回退到串行查询 + Map waybillCodesMap = getWaybillCodesMap(payIds); + Map billAmountsMap = getBillAmountsMap(payIds); + Map invoiceAmountsMap = getInvoiceAmountsMap(payIds); + Map invoiceStatusMap = getInvoiceStatusMap(payIds); + Map invoiceRemarksMap = getInvoiceRemarksMap(payIds); + + // 组装数据 + for (EmisSettlePayRecord record : baseList) { + String payId = record.getPayId(); + + // 设置运单号 + if (waybillCodesMap.containsKey(payId)) { + record.setBillCodes((String) waybillCodesMap.get(payId)); + } + + // 设置账单金额 + if (billAmountsMap.containsKey(payId)) { + record.setBillAmount((BigDecimal) billAmountsMap.get(payId)); + } + + // 设置开票金额 + if (invoiceAmountsMap.containsKey(payId)) { + record.setInvoiceAmount((BigDecimal) invoiceAmountsMap.get(payId)); + } + + // 设置开票状态 + if (invoiceStatusMap.containsKey(payId)) { + record.setInvoiceStatus((String) invoiceStatusMap.get(payId)); + } + + // 设置备注(发票申请备注) + if (invoiceRemarksMap.containsKey(payId)) { + record.setRemark((String) invoiceRemarksMap.get(payId)); + } + } + } + + return baseList; + } + + /** + * 获取运单号映射 + */ + private Map getWaybillCodesMap(List payIds) { + List> waybillCodesList = emisSettlePayRecordMapper.getWaybillCodesByPayIds(payIds); + Map result = new java.util.HashMap<>(); + for (Map map : waybillCodesList) { + String payId = (String) map.get("pay_id"); + if (payId != null) { + result.put(payId, map.get("bill_codes")); + } + } + return result; + } + + /** + * 获取账单金额映射 + */ + private Map getBillAmountsMap(List payIds) { + List> billAmountsList = emisSettlePayRecordMapper.getBillAmountsByPayIds(payIds); + Map result = new java.util.HashMap<>(); + for (Map map : billAmountsList) { + String payId = (String) map.get("pay_id"); + if (payId != null) { + result.put(payId, map.get("rec_money")); + } + } + return result; + } + + /** + * 获取开票金额映射 + */ + private Map getInvoiceAmountsMap(List payIds) { + List> invoiceAmountsList = emisSettlePayRecordMapper.getInvoiceAmountsByPayIds(payIds); + Map result = new java.util.HashMap<>(); + for (Map map : invoiceAmountsList) { + String payId = (String) map.get("pay_id"); + if (payId != null) { + result.put(payId, map.get("total_amount")); + } + } + return result; + } + + /** + * 获取开票状态映射 + */ + private Map getInvoiceStatusMap(List payIds) { + List> invoiceStatusList = emisSettlePayRecordMapper.getInvoiceStatusByPayIds(payIds); + Map result = new java.util.HashMap<>(); + for (Map map : invoiceStatusList) { + String payId = (String) map.get("pay_id"); + if (payId != null) { + result.put(payId, map.get("status")); + } + } + return result; + } + + /** + * 获取发票申请备注映射 + */ + private Map getInvoiceRemarksMap(List payIds) { + List> invoiceRemarksList = emisSettlePayRecordMapper.getInvoiceRemarksByPayIds(payIds); + Map result = new java.util.HashMap<>(); + for (Map map : invoiceRemarksList) { + String payId = (String) map.get("pay_id"); + if (payId != null) { + result.put(payId, map.get("invoice_remark")); + } + } + return result; } @Override - public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord) - { + public Map getSettlePayStatInfoMap(EmisSettlePayRecord emisSettlePayRecord) { return emisSettlePayRecordMapper.getSettlePayStatInfoMap(emisSettlePayRecord); } @@ -117,8 +296,8 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I /** * 检查是否重复 - * - * @param emisSettlePayRecord + * + * @param emisSettlePayRecord * @return 数量 */ @Override @@ -129,7 +308,7 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I /** * 新增账单收退款记录 - * + * * @param emisSettlePayRecord 账单收退款记录 * @return 结果 */ @@ -310,7 +489,7 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I /** * 修改账单收退款记录 - * + * * @param emisSettlePayRecord 账单收退款记录 * @return 结果 */ @@ -322,7 +501,7 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I /** * 批量删除账单收退款记录 - * + * * @param ids 需要删除的账单收退款记录主键 * @return 结果 */ @@ -334,7 +513,7 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I /** * 删除账单收退款记录信息 - * + * * @param id 账单收退款记录主键 * @return 结果 */ diff --git a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml index b79a94c32..3ba211c5d 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml @@ -95,83 +95,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.refund_remark, a.refund_op_man_code, a.refund_register_site_code, a.refund_register_man_code, a.satisfy_money, a.satisfy_reason, a.allowance_money, a.allowance_reason, a.deduction_money, a.deduction_reason, a.other_money, - a.other_reason, a.trade_date, - -- 重新赋值备注字段:财务开票备注+账单备注 - CONCAT_WS(';', - COALESCE(invoice_remarks.invoice_remark, ''), - COALESCE(bill_remark.remark, '') - ) as remark, - a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.create_site, a.update_site, - -- 运单号(多个用逗号分隔) - COALESCE(waybill_codes.bill_codes, '') as bill_codes, - -- 账单金额 - COALESCE(bill_amount.rec_money, 0) as bill_amount, - -- 开票金额 - COALESCE(invoice_amount.total_amount, 0) as invoice_amount, - -- 开票状态 - COALESCE(invoice_status.status, '0') as invoice_status + a.other_reason, a.trade_date, a.remark, + a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.create_site, a.update_site from emis_settle_pay_record a - -- 关联获取运单号 - left join ( - select - espbr.pay_id, - GROUP_CONCAT(essb.bill_code SEPARATOR ',') as bill_codes - from emis_settle_pay_bill_rel espbr - left join emis_settle_sub_bill essb on espbr.settle_bill_no = essb.settle_bill_no - where espbr.del_flag = '0' and essb.del_flag = '0' - group by espbr.pay_id - ) waybill_codes on a.pay_id = waybill_codes.pay_id - -- 关联获取账单金额 - left join ( - select - espbr.pay_id, - esb.rec_money - from emis_settle_pay_bill_rel espbr - left join emis_settle_bill esb on espbr.settle_bill_no = esb.settle_bill_no - where espbr.del_flag = '0' and esb.del_flag = '0' - group by espbr.pay_id - ) bill_amount on a.pay_id = bill_amount.pay_id - -- 关联获取开票金额 - left join ( - select - espir.pay_id, - SUM(esir.open_money) as total_amount - from emis_settle_pay_invoice_rel espir - left join emis_settle_invoice_record esir on espir.apply_seq_no = esir.apply_seq_no - where espir.del_flag = '0' and esir.del_flag = '0' and esir.invoice_status = '1' - group by espir.pay_id - ) invoice_amount on a.pay_id = invoice_amount.pay_id - -- 关联获取开票状态 - left join ( - select - espir.pay_id, - esir.invoice_status as status - from emis_settle_pay_invoice_rel espir - left join emis_settle_invoice_record esir on espir.apply_seq_no = esir.apply_seq_no - where espir.del_flag = '0' and esir.del_flag = '0' - group by espir.pay_id - ) invoice_status on a.pay_id = invoice_status.pay_id - -- 关联获取财务开票备注 - left join ( - select - espir.pay_id, - GROUP_CONCAT(esir.invioce_remark SEPARATOR ';') as invoice_remark - from emis_settle_pay_invoice_rel espir - left join emis_settle_invoice_record esir on espir.apply_seq_no = esir.apply_seq_no - where espir.del_flag = '0' and esir.del_flag = '0' - and esir.invioce_remark is not null and esir.invioce_remark != '' - group by espir.pay_id - ) invoice_remarks on a.pay_id = invoice_remarks.pay_id - -- 关联获取账单备注 - left join ( - select - espbr.pay_id, - esb.remark - from emis_settle_pay_bill_rel espbr - left join emis_settle_bill esb on espbr.settle_bill_no = esb.settle_bill_no - where espbr.del_flag = '0' and esb.del_flag = '0' - group by espbr.pay_id - ) bill_remark on a.pay_id = bill_remark.pay_id + + + + + + + + + + + + + + + + +