From 4ec6ef1a2d0bbf92c41b9b5d0a80b1f12d1db30a Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 4 Mar 2026 13:19:25 +0800 Subject: [PATCH 1/4] =?UTF-8?q?demand:=20=20=20tms-=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E5=AE=9A=E5=88=B6-=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=B4=A6=E5=8D=95=E6=97=B6=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E6=97=A5=E7=AE=97=E6=B3=95=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20tms-=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E6=9C=88=E7=BB=93=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A6=E5=8D=95=E6=97=B6=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E6=97=A5=E7=AE=97=E6=B3=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmisSettleBillServiceImpl.java | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java index b9d4e09bf..c5cf4adbd 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java @@ -394,8 +394,21 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS } else{ Date billMonthDate = DateUtils.parseDate(emisSettleBill.getBillMonth() + "-"+settleDay); - paymentDueDate = DateUtils.addMonths(billMonthDate,1); - paymentDueDate= DateUtils.addDays(paymentDueDate,creditPeriod.intValue()); + + // credit_period 为 30/60/90 且结算日为每月 1 号时,按对应月份月末作为最后付款日 + if ((creditPeriod.intValue() == 30 || creditPeriod.intValue() == 60 || creditPeriod.intValue() == 90) + && monthUser.getSettleDay() == 1) { + Calendar cal = Calendar.getInstance(); + cal.setTime(billMonthDate); + // 30 -> 加 1 个月,60 -> 加 2 个月,90 -> 加 3 个月 + cal.add(Calendar.MONTH, creditPeriod.intValue() / 30); + // 设置为该月的最后一天 + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + paymentDueDate = cal.getTime(); + } else { + paymentDueDate = DateUtils.addMonths(billMonthDate,1); + paymentDueDate= DateUtils.addDays(paymentDueDate,creditPeriod.intValue()); + } } // 最后付款时间 @@ -441,10 +454,21 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS updBill.setCreditPeriod(creditPeriod); updBill.setSettleDay(settleDay); - // 现金账期从寄件开始10天 + // 根据账期与结算日计算最后付款时间 Date billMonthDate = DateUtils.parseDate(oldEmisSettleBill.getBillMonth() + "-" + settleDay); - Date paymentDueDate = DateUtils.addMonths(billMonthDate, 1); - paymentDueDate = DateUtils.addDays(paymentDueDate, creditPeriod.intValue()); + Date paymentDueDate; + + if ((creditPeriod.intValue() == 30 || creditPeriod.intValue() == 60 || creditPeriod.intValue() == 90) + && settleDay == 1) { + Calendar cal = Calendar.getInstance(); + cal.setTime(billMonthDate); + cal.add(Calendar.MONTH, creditPeriod.intValue() / 30); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + paymentDueDate = cal.getTime(); + } else { + paymentDueDate = DateUtils.addMonths(billMonthDate, 1); + paymentDueDate = DateUtils.addDays(paymentDueDate, creditPeriod.intValue()); + } // 最后付款时间 updBill.setPaymentDueDate(paymentDueDate); From 6d98cb17b6180fb73afe10e01ad75e54f5ebfffe Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 4 Mar 2026 14:32:04 +0800 Subject: [PATCH 2/4] =?UTF-8?q?demand:=20=20=20tms-=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E5=AE=9A=E5=88=B6-=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=B4=A6=E5=8D=95=E6=97=B6=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E6=97=A5=E7=AE=97=E6=B3=95=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20tms-=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E6=9C=88=E7=BB=93=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A6=E5=8D=95=E6=97=B6=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E6=97=A5=E7=AE=97=E6=B3=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmisSettleBillServiceImpl.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java index c5cf4adbd..d1a07a79f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java @@ -1608,6 +1608,63 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS @Override public int updateEmisSettleBill(EmisSettleBill emisSettleBill) { + // 如果修改了billMonth,需要重新计算最后回款日 + if (emisSettleBill.getId() != null && StringUtils.isNotEmpty(emisSettleBill.getBillMonth())) { + EmisSettleBill oldBill = emisSettleBillMapper.selectEmisSettleBillById(emisSettleBill.getId()); + if (oldBill != null && !emisSettleBill.getBillMonth().equals(oldBill.getBillMonth())) { + // billMonth发生变化,且是月结类型,需要重新计算最后回款日 + if ("2".equals(oldBill.getSettleType())) { + EmisCustomerUser monthUser = getCustomerUserByMonthlyPayCode(oldBill.getCustNo()); + if (monthUser != null) { + // 默认30天,从1号开始 + BigDecimal creditPeriod = BigDecimal.valueOf(30D); + Integer settleDay = 1; + + if (monthUser.getCreditPeriod() != null) { + creditPeriod = monthUser.getCreditPeriod(); + } + + if (monthUser.getSettleDay() != null) { + settleDay = monthUser.getSettleDay(); + } + + Date paymentDueDate = null; + // 周结和半月结的特殊处理 + if (creditPeriod.intValue() == 7) { +// // 获取今日零点 T+6,T为出账日 +// String currDayStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date()); +// Date currDayDate = DateUtils.parseDate(currDayStr); +// paymentDueDate = DateUtils.addDays(currDayDate, 7); + } else if (creditPeriod.intValue() == 15) { +// String currDayStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date()); +// Date currDayDate = DateUtils.parseDate(currDayStr); +// paymentDueDate = DateUtils.addDays(currDayDate, 15); + } else { + Date billMonthDate = DateUtils.parseDate(emisSettleBill.getBillMonth() + "-" + settleDay); + + // credit_period 为 30/60/90 且结算日为每月 1 号时,按对应月份月末作为最后付款日 + if ((creditPeriod.intValue() == 30 || creditPeriod.intValue() == 60 || creditPeriod.intValue() == 90) + && monthUser.getSettleDay() == 1) { + Calendar cal = Calendar.getInstance(); + cal.setTime(billMonthDate); + // 30 -> 加 1 个月,60 -> 加 2 个月,90 -> 加 3 个月 + cal.add(Calendar.MONTH, creditPeriod.intValue() / 30); + // 设置为该月的最后一天 + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + paymentDueDate = cal.getTime(); + } else { + paymentDueDate = DateUtils.addMonths(billMonthDate, 1); + paymentDueDate = DateUtils.addDays(paymentDueDate, creditPeriod.intValue()); + } + } + + // 设置重新计算后的最后回款日 + emisSettleBill.setPaymentDueDate(paymentDueDate); + } + } + } + } + return emisSettleBillMapper.updateEmisSettleBill(emisSettleBill); } From ebba0584c6a534ecc3deecfa79ce4f4957fa9408 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 4 Mar 2026 17:47:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?demand:=20=20=20tms-=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E8=BD=AC=E4=BB=B6=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/web/emis/EmisWaybillTransferController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillTransferController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillTransferController.java index a7f494880..a8b5d7117 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillTransferController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillTransferController.java @@ -161,7 +161,7 @@ public class EmisWaybillTransferController extends EmisBaseController String billCode = emisWaybillTransfer.getBillCode(); // 获取主单号 String mainBillCode = emisBaseService.getMainBillCode(billCode); - + // 检查主单号的问题件(问题件通常关联到主单号) EmisWaybillProblemInfo queryProblem = new EmisWaybillProblemInfo(); queryProblem.setBillCode(mainBillCode); @@ -169,7 +169,7 @@ public class EmisWaybillTransferController extends EmisBaseController if(!CollectionUtils.isEmpty(problemList)){ for(EmisWaybillProblemInfo problemInfo : problemList){ Integer problemType = problemInfo.getProblemType(); - if(problemType != null && (problemType == 151 || problemType == 170 || problemType == 173)){ + if (problemType != null && (problemType == 151 || problemType == 170 || problemType == 173) && mainBillCode.equals(problemInfo.getBillCode())) { String problemTypeName = ""; if(problemType == 151){ problemTypeName = "面单删除"; @@ -182,7 +182,7 @@ public class EmisWaybillTransferController extends EmisBaseController } } } - + // 如果传入的是子单号,也检查子单号的问题件 if(!billCode.equals(mainBillCode)){ EmisWaybillProblemInfo querySubProblem = new EmisWaybillProblemInfo(); @@ -191,7 +191,7 @@ public class EmisWaybillTransferController extends EmisBaseController if(!CollectionUtils.isEmpty(subProblemList)){ for(EmisWaybillProblemInfo problemInfo : subProblemList){ Integer problemType = problemInfo.getProblemType(); - if(problemType != null && (problemType == 151 || problemType == 170 || problemType == 173)){ + if (problemType != null && (problemType == 151 || problemType == 170 || problemType == 173) && billCode.equals(problemInfo.getBillCode())) { String problemTypeName = ""; if(problemType == 151){ problemTypeName = "面单删除"; From a512286963a6ba4c5842f82038a5f64858e104e6 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 5 Mar 2026 14:23:32 +0800 Subject: [PATCH 4/4] =?UTF-8?q?demand:=20=20=20tms-=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E8=BF=90=E5=8D=95=E5=88=A9=E6=B6=A6?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1-=E7=BB=9F=E8=AE=A1=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E5=88=A9=E6=B6=A6=E5=89=94=E9=99=A4=E9=97=AE=E9=A2=98=E4=BB=B6?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E9=9D=A2=E5=8D=95=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9A=84=E8=BF=90=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emis-biz/src/main/resources/mapper/EmisTmsCostProfitMapper.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/emis-biz/src/main/resources/mapper/EmisTmsCostProfitMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsCostProfitMapper.xml index b8a255def..ab85bc8ba 100644 --- a/emis-biz/src/main/resources/mapper/EmisTmsCostProfitMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTmsCostProfitMapper.xml @@ -56,6 +56,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from emis_tms_cost_profit b,emis_waybill a a.bill_code=b.bill_code and a.del_flag='0' and b.del_flag='0' + and not EXISTS ( + select 1 from emis_waybill_problem_info ewpi where a.bill_code=ewpi.bill_code and ewpi.del_flag='0' and ewpi.`problem_type` in(151) + ) and b.id = #{id} and ( FIND_IN_SET(b.`bill_code`,#{billCode}) ) and b.standard_fee = #{standardFee}