diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettlePayRel.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettlePayRel.java
index e72f3109b..fd61dd5ea 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettlePayRel.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettlePayRel.java
@@ -1,10 +1,10 @@
-/**
+/**
* @Project: emis
* @Title: EmisSettlePayRel.java
* @author linfso
* @date 2024-07-21 13:31:24
* @Copyright: ShangHai Duta 2022 All rights reserved.
- * @version v1.0
+ * @version v1.0
* @Description:
支付子账单关联表 实体类
*/
@@ -44,6 +44,8 @@ public class EmisSettlePayRel extends BaseEntity
private String billNo;
/* 金额 */
private BigDecimal payMoney;
+ /* 发票申请序号 */
+ private String applySeqNo;
// 扩展参数
private EmisWaybill waybillDetail;
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsSiteBatchMissStatistics.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsSiteBatchMissStatistics.java
index 2b4096038..127d153aa 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsSiteBatchMissStatistics.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsSiteBatchMissStatistics.java
@@ -5,6 +5,7 @@ import com.xdadan.erp.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
+import java.util.List;
/**
* 漏组批次统计查询结果DTO
@@ -27,4 +28,10 @@ public class EmisTmsSiteBatchMissStatistics extends BaseEntity {
/** 票数 */
private Integer ticketCount;
+
+ /** 多个寄件月份,逗号分隔,例如:2025-06,2025-07 */
+ private String billMonths;
+
+ /** 解析后的月份列表(yyyy-MM) */
+ private List billMonthList;
}
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 94ab7c7f7..bd5674035 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
@@ -815,8 +815,8 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
BigDecimal previousRecedMoney = invoiceRecord.getRecedMoney() != null ? invoiceRecord.getRecedMoney()
: BigDecimal.ZERO;
- // 计算当前收款记录中与该发票相关的运单收款金额
- BigDecimal currentInvoicePayMoney = calculateCurrentInvoicePayment(invoiceRecord, payRelList);
+ // 计算当前收款记录中与该发票相关的运单收款金额(以applySeqNo关联)
+ BigDecimal currentInvoicePayMoney = calculateCurrentInvoicePayment(applySeqNo, payRelList);
// 计算新的总收款金额 = 之前的收款金额 + 当前收款金额
BigDecimal totalRecedMoney = previousRecedMoney.add(currentInvoicePayMoney);
@@ -847,58 +847,27 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
}
/**
- * 计算当前收款记录中与该发票相关的运单收款金额
+ * 计算当前收款记录中与该发票相关的运单收款金额(按applySeqNo关联)
*
- * @param invoiceRecord 发票记录
- * @param payRelList 当前收款记录中的运单收款列表
+ * @param applySeqNo 发票申请序号
+ * @param payRelList 当前收款记录中的运单收款列表
* @return 当前收款金额
*/
- private BigDecimal calculateCurrentInvoicePayment(EmisSettleInvoiceRecord invoiceRecord,
- List payRelList) {
+ private BigDecimal calculateCurrentInvoicePayment(String applySeqNo, List payRelList) {
try {
- String settleBillNo = invoiceRecord.getSettleBillNo();
- if (StringUtils.isEmpty(settleBillNo)) {
+ if (StringUtils.isEmpty(applySeqNo) || CollectionUtils.isEmpty(payRelList)) {
return BigDecimal.ZERO;
}
- // 处理多个账单号的情况(用逗号分隔)
- String[] settleBillNos = settleBillNo.split(",");
- Set allBillCodes = new HashSet<>();
-
- for (String billNo : settleBillNos) {
- String trimmedBillNo = billNo.trim();
- if (StringUtils.isNotEmpty(trimmedBillNo)) {
- // 通过账单号找到该账单下的所有运单
- List subBillList = emisSettleSubBillMapper
- .selectSubBillListBySettleBillNo(trimmedBillNo);
- if (CollectionUtils.isNotEmpty(subBillList)) {
- // 收集该账单下的所有运单号
- Set billCodes = subBillList.stream()
- .map(EmisSettleSubBill::getBillCode)
- .filter(Objects::nonNull)
- .collect(Collectors.toSet());
- allBillCodes.addAll(billCodes);
- }
- }
- }
-
- if (allBillCodes.isEmpty()) {
- return BigDecimal.ZERO;
- }
-
- // 计算当前收款记录中属于该发票相关运单的收款金额
BigDecimal currentPayment = BigDecimal.ZERO;
for (EmisSettlePayRel payRel : payRelList) {
- if (payRel.getBillNo() != null && allBillCodes.contains(payRel.getBillNo())
- && payRel.getPayMoney() != null) {
+ if (applySeqNo.equals(payRel.getApplySeqNo()) && payRel.getPayMoney() != null) {
currentPayment = currentPayment.add(payRel.getPayMoney());
}
}
-
return currentPayment;
-
} catch (Exception e) {
- log.error("计算当前发票收款金额失败,申请序号: {}", invoiceRecord.getApplySeqNo(), e);
+ log.error("计算当前发票收款金额失败,申请序号: {}", applySeqNo, e);
return BigDecimal.ZERO;
}
}
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissStatisticsServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissStatisticsServiceImpl.java
index 0e305612d..7c05a9e4a 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissStatisticsServiceImpl.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissStatisticsServiceImpl.java
@@ -46,6 +46,7 @@ public class EmisTmsSiteBatchMissStatisticsServiceImpl implements IEmisTmsSiteBa
@Override
public List selectStatisticsList(
EmisTmsSiteBatchMissStatistics emisTmsSiteBatchMissStatistics) {
+ normalizeBillMonths(emisTmsSiteBatchMissStatistics);
log.info("查询漏组批次统计列表,startSiteCode: {}, billMonth: {}",
emisTmsSiteBatchMissStatistics.getStartSiteCode(), emisTmsSiteBatchMissStatistics.getBillMonth());
@@ -61,6 +62,7 @@ public class EmisTmsSiteBatchMissStatisticsServiceImpl implements IEmisTmsSiteBa
@Override
public void exportStatisticsData(HttpServletResponse response,
EmisTmsSiteBatchMissStatistics emisTmsSiteBatchMissStatistics) {
+ normalizeBillMonths(emisTmsSiteBatchMissStatistics);
try {
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -240,6 +242,7 @@ public class EmisTmsSiteBatchMissStatisticsServiceImpl implements IEmisTmsSiteBa
@Override
public void exportDetailDataByMonthStream(HttpServletResponse response,
EmisTmsSiteBatchMissStatistics emisTmsSiteBatchMissStatistics) {
+ normalizeBillMonths(emisTmsSiteBatchMissStatistics);
long startTime = System.currentTimeMillis();
try {
// 设置响应头
@@ -446,5 +449,36 @@ public class EmisTmsSiteBatchMissStatisticsServiceImpl implements IEmisTmsSiteBa
}
}
-
+ /**
+ * 归一化 billMonths 到 billMonthList,支持逗号分隔的多月份(yyyy-MM)。
+ */
+ private void normalizeBillMonths(EmisTmsSiteBatchMissStatistics query) {
+ if (query == null) {
+ return;
+ }
+ if (query.getBillMonthList() != null && !query.getBillMonthList().isEmpty()) {
+ return;
+ }
+ List result = new ArrayList<>();
+ String months = query.getBillMonths();
+ if (months != null && months.trim().length() > 0) {
+ String[] parts = months.split(",");
+ for (String p : parts) {
+ if (p != null) {
+ String v = p.trim();
+ if (v.length() > 0) {
+ result.add(v);
+ }
+ }
+ }
+ }
+ if (result.isEmpty() && query.getBillMonth() != null) {
+ synchronized (MONTH_FORMAT) {
+ result.add(MONTH_FORMAT.format(query.getBillMonth()));
+ }
+ }
+ if (!result.isEmpty()) {
+ query.setBillMonthList(result);
+ }
+ }
}
diff --git a/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml
index 00c7e7bb6..b5686b998 100644
--- a/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml
+++ b/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml
@@ -24,8 +24,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND bm.start_site_code = #{startSiteCode}
-
- AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') IN
+
+ #{bm}
+
+
+
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+
GROUP BY bm.start_site_code, s.site_name, DATE_FORMAT(w.send_date, '%Y-%m')
ORDER BY w.send_date,bm.start_site_code
@@ -68,8 +76,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND m.start_site_code = #{startSiteCode}
-
- AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') IN
+
+ #{bm}
+
+
+
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+
ORDER BY w.send_date DESC, m.bill_code
@@ -112,8 +128,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND m.start_site_code = #{query.startSiteCode}
-
- AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{query.billMonth}, '%Y-%m')
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') IN
+
+ #{bm}
+
+
+
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{query.billMonth}, '%Y-%m')
+
ORDER BY w.send_date DESC, m.bill_code
LIMIT #{offset}, #{limit}
@@ -128,8 +152,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND m.start_site_code = #{startSiteCode}
-
- AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') IN
+
+ #{bm}
+
+
+
+
+ AND DATE_FORMAT(w.send_date, '%Y-%m') = DATE_FORMAT(#{billMonth}, '%Y-%m')
+