From 362740d90310ce6f9e203a271c730ee5a3ecc7d2 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Tue, 18 Nov 2025 18:05:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?demand:=20=20=20=20TMS=E7=B3=BB=E7=BB=9F=20?= =?UTF-8?q?-=20=E7=BB=9F=E8=AE=A1=E6=8A=A5=E8=A1=A8=20-=20=E9=94=80?= =?UTF-8?q?=E5=94=AE=E5=9B=9E=E6=AC=BE=E7=8E=87=E7=BB=9F=E8=AE=A1=20-=20?= =?UTF-8?q?=E6=9C=88=E7=BB=93=E8=B4=A6=E5=8D=95=E5=9B=9E=E6=AC=BE=E7=8E=87?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E9=80=82=E5=BA=94=E5=8F=91?= =?UTF-8?q?=E7=A5=A8=E5=BB=B6=E6=9C=9F=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20=20TMS=E7=B3=BB=E7=BB=9F=20-=20=E7=BB=9F=E8=AE=A1=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=20-=E8=B4=A2=E5=8A=A1=E6=94=B6=E6=AC=BE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=20-=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E9=80=82?= =?UTF-8?q?=E5=BA=94=E5=8F=91=E7=A5=A8=E5=BB=B6=E6=9C=9F=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/EmisSettleBillMapper.xml | 172 +++++++++++++++++- .../mapper/EmisSettlePayRecordMapper.xml | 71 +++++++- 2 files changed, 234 insertions(+), 9 deletions(-) diff --git a/emis-biz/src/main/resources/mapper/EmisSettleBillMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleBillMapper.xml index d1e658bee..c6780d11b 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleBillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleBillMapper.xml @@ -294,9 +294,89 @@ SELECT a.settle_bill_no, sum( ifnull(d.pay_money,0) ) AS totalPayMoney, - sum( if(b.trade_date a.payment_due_date,ifnull(d.pay_money,0) ,0) ) AS recdMoneyIn, - sum( if(a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date ]]> a.payment_due_date and b.trade_date DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ),ifnull(d.pay_money,0) ,0) ) AS recdPayMoney60D, - sum( if( (a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date = ]]> DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) ) or ( ( (a.settle_type='2' and a.credit_period 30) or a.settle_type='1' ) and b.trade_date ]]> a.payment_due_date ),ifnull(d.pay_money,0) ,0) ) AS recdPayMoneyGreat60D + sum( + case + when a.settle_type = '2' + and a.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else a.payment_due_date + end + ) + then ifnull(d.pay_money,0) + when b.trade_date a.payment_due_date then ifnull(d.pay_money,0) + else 0 + end + ) AS recdMoneyIn, + sum( if( + a.settle_type='2' + and a.credit_period = ]]> 30 + and b.trade_date ]]> a.payment_due_date + and b.trade_date ]]> a.payment_due_date + and b.trade_date DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) + and NOT EXISTS ( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag='0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + ) + ,ifnull(d.pay_money,0) ,0) ) AS recdPayMoney60D, + sum( + case + when a.settle_type = '2' + and a.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date = ]]> + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else a.payment_due_date + end + ) + then ifnull(d.pay_money,0) + when (a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date = ]]> DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) ) or ( ( (a.settle_type='2' and a.credit_period 30) or a.settle_type='1' ) and b.trade_date ]]> a.payment_due_date ) + then ifnull(d.pay_money,0) + else 0 + end + ) AS recdPayMoneyGreat60D FROM emis_settle_bill a, emis_settle_pay_record b, @@ -833,9 +913,89 @@ SELECT a.settle_bill_no, sum( ifnull(d.pay_money,0) ) AS totalPayMoney, - sum( if(b.trade_date a.payment_due_date,ifnull(d.pay_money,0) ,0) ) AS recdMoneyIn, - sum( if(a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date ]]> a.payment_due_date and b.trade_date DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ),ifnull(d.pay_money,0) ,0) ) AS recdPayMoney60D, - sum( if( (a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date = ]]> DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) ) or ( ( (a.settle_type='2' and a.credit_period 30) or a.settle_type='1' ) and b.trade_date ]]> a.payment_due_date ),ifnull(d.pay_money,0) ,0) ) AS recdPayMoneyGreat60D + sum( + case + when a.settle_type = '2' + and a.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else a.payment_due_date + end + ) + then ifnull(d.pay_money,0) + when b.trade_date a.payment_due_date then ifnull(d.pay_money,0) + else 0 + end + ) AS recdMoneyIn, + sum( if( + a.settle_type='2' + and a.credit_period = ]]> 30 + and b.trade_date ]]> a.payment_due_date + and b.trade_date ]]> a.payment_due_date + and b.trade_date DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) + and NOT EXISTS ( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag='0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + ) + ,ifnull(d.pay_money,0) ,0) ) AS recdPayMoney60D, + sum( + case + when a.settle_type = '2' + and a.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = a.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date = ]]> + ( + case + when a.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when a.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when a.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(a.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else a.payment_due_date + end + ) + then ifnull(d.pay_money,0) + when (a.settle_type='2' and a.credit_period = ]]> 30 and b.trade_date ]]> a.payment_due_date and b.trade_date = ]]> DATE_SUB( a.payment_due_date, INTERVAL (a.credit_period-60) DAY ) ) or ( ( (a.settle_type='2' and a.credit_period 30) or a.settle_type='1' ) and b.trade_date ]]> a.payment_due_date ) + then ifnull(d.pay_money,0) + else 0 + end + ) AS recdPayMoneyGreat60D FROM emis_settle_bill a, emis_settle_pay_record b, diff --git a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml index be3282d31..7edd839ad 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml @@ -332,13 +332,78 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE espbr.del_flag=0 and esb.del_flag=0 and espbr.settle_bill_no=esb.settle_bill_no - and b.trade_date esb.payment_due_date + and ( + ( esb.settle_type = '2' + and esb.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = esb.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when esb.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when esb.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when esb.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date + ( + case + when esb.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when esb.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when esb.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else esb.payment_due_date + end + ) + ) or b.trade_date esb.payment_due_date + ) - and ( esb.settle_type='2' and esb.credit_period = ]]> 30 and b.trade_date ]]> esb.payment_due_date and b.trade_date ]]> esb.payment_due_date and b.trade_date DATE_SUB( esb.payment_due_date, INTERVAL (esb.credit_period-60) DAY ) ) + and ( esb.settle_type='2' and esb.credit_period = ]]> 30 and b.trade_date ]]> esb.payment_due_date and b.trade_date ]]> esb.payment_due_date and b.trade_date DATE_SUB( esb.payment_due_date, INTERVAL (esb.credit_period-60) DAY ) + and NOT EXISTS ( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag='0' + AND f.settle_bill_no = esb.settle_bill_no + AND f.bl_delay = '1' + ) ) - and ( ( esb.settle_type='2' and esb.credit_period = ]]> 30 and b.trade_date ]]> esb.payment_due_date and b.trade_date = ]]> DATE_SUB( esb.payment_due_date, INTERVAL (esb.credit_period-60) DAY ) ) or ( ( (esb.settle_type='2' and esb.credit_period 30) or esb.settle_type='1' ) and b.trade_date ]]> esb.payment_due_date ) ) + and ( + ( esb.settle_type = '2' + and esb.credit_period in (30,35,45,60,75,90) + and EXISTS( + SELECT 1 + FROM emis_settle_invoice_record f + WHERE f.del_flag = '0' + AND f.settle_bill_no = esb.settle_bill_no + AND f.bl_delay = '1' + AND f.apply_date + ( + case + when esb.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 2 MONTH) + when esb.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when esb.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + else NULL + end + ) + ) + and b.trade_date = ]]> + ( + case + when esb.credit_period in (30,35,45) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 3 MONTH) + when esb.credit_period in (60,75) then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 4 MONTH) + when esb.credit_period = 90 then DATE_ADD(STR_TO_DATE(CONCAT(REPLACE(esb.bill_month,'-',''),'01'),'%Y%m%d'), INTERVAL 5 MONTH) + else esb.payment_due_date + end + ) + ) or ( ( esb.settle_type='2' and esb.credit_period = ]]> 30 and b.trade_date ]]> esb.payment_due_date and b.trade_date = ]]> DATE_SUB( esb.payment_due_date, INTERVAL (esb.credit_period-60) DAY ) ) or ( ( (esb.settle_type='2' and esb.credit_period 30) or esb.settle_type='1' ) and b.trade_date ]]> esb.payment_due_date ) ) + ) From 4a7268b6e38abfcbb57fd723a337cada449a43d3 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 19 Nov 2025 14:56:55 +0800 Subject: [PATCH 2/3] =?UTF-8?q?demand:=20=20=20=20tms-=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8-=E6=9C=88=E7=BB=93=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E5=87=BA=E8=B4=A7=E7=BB=9F=E8=AE=A1-=E6=8C=89=E8=BF=90?= =?UTF-8?q?=E8=BE=93=E6=96=B9=E5=BC=8F=E7=BB=9F=E8=AE=A1-=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=A2=9E=E5=8A=A0=E4=B8=8E=E5=89=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=AE=B5=E6=AF=94=E8=BE=83=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20=20=20tms-=E7=BB=9F=E8=AE=A1=E6=8A=A5=E8=A1=A8-=E6=9C=88?= =?UTF-8?q?=E7=BB=93=E5=AE=A2=E6=88=B7=E5=87=BA=E8=B4=A7=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?-=E6=8C=89=E7=9B=AE=E7=9A=84=E5=9B=BD=E5=AE=B6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1-=E7=BB=9F=E8=AE=A1=E5=A2=9E=E5=8A=A0=E4=B8=8E?= =?UTF-8?q?=E5=89=8D=E4=B8=80=E4=B8=AA=E6=97=B6=E9=97=B4=E6=AE=B5=E6=AF=94?= =?UTF-8?q?=E8=BE=83=E9=80=BB=E8=BE=91=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/emis/EmisCustomerUserController.java | 4 +- .../vo/MonthlyCustomerShipmentStatVO.java | 77 ++++++++ .../service/IEmisCustomerUserService.java | 4 +- .../impl/EmisCustomerUserServiceImpl.java | 181 +++++++++++++++++- 4 files changed, 259 insertions(+), 7 deletions(-) diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCustomerUserController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCustomerUserController.java index d65b12235..95821223b 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCustomerUserController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCustomerUserController.java @@ -485,7 +485,7 @@ public class EmisCustomerUserController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisCustomerUser:monthlyShipmentStat')") @GetMapping("/monthlyShipmentStat") - public TableDataInfo monthlyShipmentStat(EmisWaybill emisWaybill) { + public TableDataInfo monthlyShipmentStat(EmisWaybill emisWaybill) throws EmisBizError { startPage(); // 设置权限参数 setPrivParams(emisWaybill); @@ -513,7 +513,7 @@ public class EmisCustomerUserController extends EmisBaseController @PreAuthorize("@ss.hasPermi('emis:emisCustomerUser:export')") @Log(title = "月结客户出货统计", businessType = BusinessType.EXPORT) @PostMapping("/exportMonthlyShipmentStat") - public void exportMonthlyShipmentStat(HttpServletResponse response, EmisWaybill emisWaybill) { + public void exportMonthlyShipmentStat(HttpServletResponse response, EmisWaybill emisWaybill) throws EmisBizError { // 设置权限参数 setPrivParams(emisWaybill); List list = emisCustomerUserService diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/MonthlyCustomerShipmentStatVO.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/MonthlyCustomerShipmentStatVO.java index 5bed08112..c2ba0f794 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/MonthlyCustomerShipmentStatVO.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/MonthlyCustomerShipmentStatVO.java @@ -40,6 +40,12 @@ public class MonthlyCustomerShipmentStatVO implements Serializable { /* 总重量 */ private BigDecimal totalWeight; + /* 总票数对比标记:1-大于上一时间段;2-小于上一时间段;0-相等;*/ + private Integer totalTicketsCompareFlag; + + /* 总重量对比标记:1-大于上一时间段;2-小于上一时间段;0-相等 */ + private Integer totalWeightCompareFlag; + /* 销售联系人(多个用/分隔) */ private String salesmen; @@ -49,71 +55,142 @@ public class MonthlyCustomerShipmentStatVO implements Serializable { /* 快递实际重量 */ private BigDecimal expressWeight; + /* 快递票数对比标记 */ + private Integer expressTicketsCompareFlag; + + /* 快递实际重量对比标记 */ + private Integer expressWeightCompareFlag; + /* 空运票数 */ private Integer airTickets; /* 空运实际重量 */ private BigDecimal airWeight; + /* 空运票数对比标记 */ + private Integer airTicketsCompareFlag; + + /* 空运实际重量对比标记 */ + private Integer airWeightCompareFlag; + /* 陆运票数 */ private Integer landTickets; /* 陆运实际重量 */ private BigDecimal landWeight; + /* 陆运票数对比标记 */ + private Integer landTicketsCompareFlag; + + /* 陆运实际重量对比标记 */ + private Integer landWeightCompareFlag; + /* 海运票数 */ private Integer seaTickets; /* 海运实际重量 */ private BigDecimal seaWeight; + /* 海运票数对比标记 */ + private Integer seaTicketsCompareFlag; + + /* 海运实际重量对比标记 */ + private Integer seaWeightCompareFlag; + /* 进口票数 */ private Integer importTickets; /* 进口实际重量 */ private BigDecimal importWeight; + /* 进口票数对比标记 */ + private Integer importTicketsCompareFlag; + + /* 进口实际重量对比标记 */ + private Integer importWeightCompareFlag; + /* 其他票数 */ private Integer otherTickets; /* 其他实际重量 */ private BigDecimal otherWeight; + /* 其他票数对比标记 */ + private Integer otherTicketsCompareFlag; + + /* 其他实际重量对比标记 */ + private Integer otherWeightCompareFlag; + /* 中国票数 */ private Integer chinaTickets; /* 中国实际重量 */ private BigDecimal chinaWeight; + /* 中国票数对比标记 */ + private Integer chinaTicketsCompareFlag; + /* 中国实际重量对比标记 */ + private Integer chinaWeightCompareFlag; + /* 越南票数 */ private Integer vietnamTickets; /* 越南实际重量 */ private BigDecimal vietnamWeight; + /* 越南票数对比标记 */ + private Integer vietnamTicketsCompareFlag; + /* 越南实际重量对比标记 */ + private Integer vietnamWeightCompareFlag; + /* 柬埔寨票数 */ private Integer cambodiaTickets; /* 柬埔寨实际重量 */ private BigDecimal cambodiaWeight; + /* 柬埔寨票数对比标记 */ + private Integer cambodiaTicketsCompareFlag; + /* 柬埔寨实际重量对比标记 */ + private Integer cambodiaWeightCompareFlag; + /* 缅甸票数 */ private Integer myanmarTickets; /* 缅甸实际重量 */ private BigDecimal myanmarWeight; + /* 缅甸票数对比标记 */ + private Integer myanmarTicketsCompareFlag; + /* 缅甸实际重量对比标记 */ + private Integer myanmarWeightCompareFlag; + /* 孟加拉票数 */ private Integer bangladeshTickets; /* 孟加拉实际重量 */ private BigDecimal bangladeshWeight; + /* 孟加拉票数对比标记 */ + private Integer bangladeshTicketsCompareFlag; + /* 孟加拉实际重量对比标记 */ + private Integer bangladeshWeightCompareFlag; + /* 老挝票数 */ private Integer laosTickets; /* 老挝实际重量 */ private BigDecimal laosWeight; + /* 老挝票数对比标记 */ + private Integer laosTicketsCompareFlag; + /* 老挝实际重量对比标记 */ + private Integer laosWeightCompareFlag; + /* 泰国票数 */ private Integer thailandTickets; /* 泰国实际重量 */ private BigDecimal thailandWeight; + /* 泰国票数对比标记 */ + private Integer thailandTicketsCompareFlag; + /* 泰国实际重量对比标记 */ + private Integer thailandWeightCompareFlag; + /* 首次签约日期 */ private String firstSigningDay; } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCustomerUserService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCustomerUserService.java index e3acbf6e8..2d13a2a31 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCustomerUserService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCustomerUserService.java @@ -12,6 +12,7 @@ package com.xdadan.erp.emis.service; import java.util.List; import com.xdadan.erp.emis.domain.EmisCustomerUser; import com.xdadan.erp.emis.domain.EmisWaybill; +import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.vo.MonthlyCustomerShipmentStatVO; /** @@ -94,8 +95,9 @@ public interface IEmisCustomerUserService * * @param emisWaybill 查询条件 * @return 统计结果列表 + * @throws com.xdadan.erp.emis.domain.exception.EmisBizError 当statType=3或4时,必需的时间参数缺失时抛出异常 */ - public List selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill); + public List selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) throws EmisBizError; /** * 查询月结客户出货明细 diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCustomerUserServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCustomerUserServiceImpl.java index fe69f2abb..eada1c6f5 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCustomerUserServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCustomerUserServiceImpl.java @@ -10,9 +10,11 @@ package com.xdadan.erp.emis.service.impl; -import java.util.List; +import java.util.*; import com.xdadan.erp.common.utils.SecurityUtils; +import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.service.EmisBaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -159,13 +161,184 @@ public class EmisCustomerUserServiceImpl extends EmisBaseService implements IEmi * @return 统计结果列表 */ @Override - public List selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) { + public List selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) throws EmisBizError { if("1".equals(emisWaybill.getParams().get("statType"))){ // 按运输方式统计 return emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill); } - // 按目的国家统计 - return emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill); + if("2".equals(emisWaybill.getParams().get("statType"))){ + // 按目的国家统计 + return emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill); + } + if("3".equals(emisWaybill.getParams().get("statType"))){ + // 按运输方式统计,增加与上一个时间段的票数、重量对比标记 + return buildShipmentStatWithCompare(emisWaybill, true); + } + if("4".equals(emisWaybill.getParams().get("statType"))){ + // 按目的国家统计,增加与上一个时间段的票数、重量对比标记 + return buildShipmentStatWithCompare(emisWaybill, false); + } + + return Collections.emptyList(); + } + + /** + * 构建带有对比标记的统计结果 + * + * @param emisWaybill 查询条件(包含当前时间段和对比时间段) + * @param byTransType true=按运输方式统计;false=按目的国家统计 + * @throws EmisBizError 当必需的时间参数缺失时抛出异常 + */ + private List buildShipmentStatWithCompare(EmisWaybill emisWaybill, boolean byTransType) throws EmisBizError { + if (emisWaybill.getParams() == null) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "比对参数不能为空"); + } + + // 获取当前时间段参数 + Object beginSendObj = emisWaybill.getParams().get("beginSendDate"); + Object endSendObj = emisWaybill.getParams().get("endSendDate"); + + // 获取对比时间段参数(前端传入) + Object beginCompareObj = emisWaybill.getParams().get("beginCompareDate"); + Object endCompareObj = emisWaybill.getParams().get("endCompareDate"); + + // 验证所有时间参数必须存在 + if (beginSendObj == null || !(beginSendObj instanceof String) || ((String) beginSendObj).trim().isEmpty()) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择寄件日期"); + } + if (endSendObj == null || !(endSendObj instanceof String) || ((String) endSendObj).trim().isEmpty()) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择寄件日期"); + } + if (beginCompareObj == null || !(beginCompareObj instanceof String) || ((String) beginCompareObj).trim().isEmpty()) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择比对日期"); + } + if (endCompareObj == null || !(endCompareObj instanceof String) || ((String) endCompareObj).trim().isEmpty()) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择比对日期"); + } + + String beginSendDate = ((String) beginSendObj).trim(); + String endSendDate = ((String) endSendObj).trim(); + String beginCompareDate = ((String) beginCompareObj).trim(); + String endCompareDate = ((String) endCompareObj).trim(); + + // 当前时间段统计 + List currentList = byTransType + ? emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill) + : emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill); + + try { + // 使用前端传入的对比时间段参数 + emisWaybill.getParams().put("beginSendDate", beginCompareDate); + emisWaybill.getParams().put("endSendDate", endCompareDate); + + List prevList = byTransType + ? emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill) + : emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill); + + // 还原时间参数 + emisWaybill.getParams().put("beginSendDate", beginSendDate); + emisWaybill.getParams().put("endSendDate", endSendDate); + + if (currentList == null || currentList.isEmpty() + || prevList == null || prevList.isEmpty()) { + return currentList; + } + + // 以 custNo 作为 key 进行对比 + Map prevMap = new HashMap<>(); + for (MonthlyCustomerShipmentStatVO item : prevList) { + if (item.getCustNo() != null) { + prevMap.put(item.getCustNo(), item); + } + } + + for (MonthlyCustomerShipmentStatVO cur : currentList) { + if (cur.getCustNo() == null) { + continue; + } + MonthlyCustomerShipmentStatVO prev = prevMap.get(cur.getCustNo()); + if (prev == null) { + continue; + } + + // 所有票数、重量字段都做对比:1-大于上一时间段;2-小于上一时间段;0-相等 + cur.setTotalTicketsCompareFlag(compareInteger(cur.getTotalTickets(), prev.getTotalTickets())); + cur.setTotalWeightCompareFlag(compareBigDecimal(cur.getTotalWeight(), prev.getTotalWeight())); + + // 按运输方式的票数、重量 + cur.setExpressTicketsCompareFlag(compareInteger(cur.getExpressTickets(), prev.getExpressTickets())); + cur.setExpressWeightCompareFlag(compareBigDecimal(cur.getExpressWeight(), prev.getExpressWeight())); + + cur.setAirTicketsCompareFlag(compareInteger(cur.getAirTickets(), prev.getAirTickets())); + cur.setAirWeightCompareFlag(compareBigDecimal(cur.getAirWeight(), prev.getAirWeight())); + + cur.setLandTicketsCompareFlag(compareInteger(cur.getLandTickets(), prev.getLandTickets())); + cur.setLandWeightCompareFlag(compareBigDecimal(cur.getLandWeight(), prev.getLandWeight())); + + cur.setSeaTicketsCompareFlag(compareInteger(cur.getSeaTickets(), prev.getSeaTickets())); + cur.setSeaWeightCompareFlag(compareBigDecimal(cur.getSeaWeight(), prev.getSeaWeight())); + + cur.setImportTicketsCompareFlag(compareInteger(cur.getImportTickets(), prev.getImportTickets())); + cur.setImportWeightCompareFlag(compareBigDecimal(cur.getImportWeight(), prev.getImportWeight())); + + cur.setOtherTicketsCompareFlag(compareInteger(cur.getOtherTickets(), prev.getOtherTickets())); + cur.setOtherWeightCompareFlag(compareBigDecimal(cur.getOtherWeight(), prev.getOtherWeight())); + + // 按目的国家的票数、重量(statType=4 时使用) + cur.setChinaTicketsCompareFlag(compareInteger(cur.getChinaTickets(), prev.getChinaTickets())); + cur.setChinaWeightCompareFlag(compareBigDecimal(cur.getChinaWeight(), prev.getChinaWeight())); + + cur.setVietnamTicketsCompareFlag(compareInteger(cur.getVietnamTickets(), prev.getVietnamTickets())); + cur.setVietnamWeightCompareFlag(compareBigDecimal(cur.getVietnamWeight(), prev.getVietnamWeight())); + + cur.setCambodiaTicketsCompareFlag(compareInteger(cur.getCambodiaTickets(), prev.getCambodiaTickets())); + cur.setCambodiaWeightCompareFlag(compareBigDecimal(cur.getCambodiaWeight(), prev.getCambodiaWeight())); + + cur.setMyanmarTicketsCompareFlag(compareInteger(cur.getMyanmarTickets(), prev.getMyanmarTickets())); + cur.setMyanmarWeightCompareFlag(compareBigDecimal(cur.getMyanmarWeight(), prev.getMyanmarWeight())); + + cur.setBangladeshTicketsCompareFlag(compareInteger(cur.getBangladeshTickets(), prev.getBangladeshTickets())); + cur.setBangladeshWeightCompareFlag(compareBigDecimal(cur.getBangladeshWeight(), prev.getBangladeshWeight())); + + cur.setLaosTicketsCompareFlag(compareInteger(cur.getLaosTickets(), prev.getLaosTickets())); + cur.setLaosWeightCompareFlag(compareBigDecimal(cur.getLaosWeight(), prev.getLaosWeight())); + + cur.setThailandTicketsCompareFlag(compareInteger(cur.getThailandTickets(), prev.getThailandTickets())); + cur.setThailandWeightCompareFlag(compareBigDecimal(cur.getThailandWeight(), prev.getThailandWeight())); + } + + return currentList; + } finally { + // 防御性措施:确保还原时间参数 + emisWaybill.getParams().put("beginSendDate", beginSendDate); + emisWaybill.getParams().put("endSendDate", endSendDate); + } + } + + private Integer compareInteger(Integer current, Integer previous) { + if (current == null || previous == null) { + return null; + } + int cmp = current.compareTo(previous); + if (cmp > 0) { + return 1; + } else if (cmp < 0) { + return 2; + } + return 0; + } + + private Integer compareBigDecimal(java.math.BigDecimal current, java.math.BigDecimal previous) { + if (current == null || previous == null) { + return null; + } + int cmp = current.compareTo(previous); + if (cmp > 0) { + return 1; + } else if (cmp < 0) { + return 2; + } + return 0; } /** From f9aa123aaabadab7a4cd10692941503b728b6f67 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 19 Nov 2025 16:13:03 +0800 Subject: [PATCH 3/3] =?UTF-8?q?demand:=20=20=20=20tms-=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8-=E6=9C=88=E7=BB=93=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E5=87=BA=E8=B4=A7=E7=BB=9F=E8=AE=A1-=E6=8C=89=E8=BF=90?= =?UTF-8?q?=E8=BE=93=E6=96=B9=E5=BC=8F=E7=BB=9F=E8=AE=A1-=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=A2=9E=E5=8A=A0=E4=B8=8E=E5=89=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=AE=B5=E6=AF=94=E8=BE=83=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20=20=20tms-=E7=BB=9F=E8=AE=A1=E6=8A=A5=E8=A1=A8-=E6=9C=88?= =?UTF-8?q?=E7=BB=93=E5=AE=A2=E6=88=B7=E5=87=BA=E8=B4=A7=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?-=E6=8C=89=E7=9B=AE=E7=9A=84=E5=9B=BD=E5=AE=B6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1-=E7=BB=9F=E8=AE=A1=E5=A2=9E=E5=8A=A0=E4=B8=8E?= =?UTF-8?q?=E5=89=8D=E4=B8=80=E4=B8=AA=E6=97=B6=E9=97=B4=E6=AE=B5=E6=AF=94?= =?UTF-8?q?=E8=BE=83=E9=80=BB=E8=BE=91=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 6143d2891..a656e54f1 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -3993,7 +3993,7 @@ - SELECT cu.customer_code AS customerCode, cu.customer_name AS customerName, @@ -4098,7 +4098,7 @@ - SELECT cu.customer_code AS customerCode, cu.customer_name AS customerName,