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 @@
-