Browse Source

Merge remote-tracking branch 'origin/prd' into prd

zxfqwert 4 months ago
parent
commit
b6712da107
22 changed files with 1506 additions and 117 deletions
  1. 8 8
      suishenbang-admin/src/main/resources/application-prod-druid.yml
  2. 6 3
      suishenbang-admin/src/main/resources/application-uat-druid.yml
  3. 6 2
      suishenbang-admin/src/main/resources/application-uat.yml
  4. 3 3
      suishenbang-admin/src/main/resources/application.yml
  5. 1 1
      suishenbang-admin/src/main/resources/templates/system/alertConfiguration/add.html
  6. 1 1
      suishenbang-admin/src/main/resources/templates/system/alertConfiguration/edit.html
  7. 13 10
      suishenbang-api/src/main/resources/application-uat-druid.yml
  8. 2 2
      suishenbang-api/src/main/resources/application.yml
  9. 17 1
      suishenbang-quartz/src/main/java/com/dgtly/quartz/task/RyTask.java
  10. 7 9
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java
  11. 548 69
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/HanaOrderComponent.java
  12. 38 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/DeliverSignVO.java
  13. 64 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/MetaHanaDeliverSign.java
  14. 24 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/OrderSignVO.java
  15. 24 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/TmsShipmentSignVO.java
  16. 150 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/MetaHanaDeliverSignMapper.java
  17. 3 2
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysMagnetLogMapper.java
  18. 67 0
      suishenbang-system/src/main/java/com/dgtly/system/service/IMetaHanaDeliverSignService.java
  19. 276 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/MetaHanaDeliverSignServiceImpl.java
  20. 23 5
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysMagnetLogServiceImpl.java
  21. 221 0
      suishenbang-system/src/main/resources/mapper/system/MetaHanaDeliverSignMapper.xml
  22. 4 1
      suishenbang-system/src/main/resources/mapper/system/SysMagnetLogMapper.xml

+ 8 - 8
suishenbang-admin/src/main/resources/application-prod-druid.yml

@@ -13,9 +13,9 @@ spring:
             slave:
             slave:
                 # 从数据源开关/默认关闭
                 # 从数据源开关/默认关闭
                 enabled: false
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             # 初始连接数
             initialSize: 10
             initialSize: 10
             # 最小连接池数量
             # 最小连接池数量
@@ -35,7 +35,7 @@ spring:
             testWhileIdle: true
             testWhileIdle: true
             testOnBorrow: false
             testOnBorrow: false
             testOnReturn: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
                 enabled: true
             statViewServlet:
             statViewServlet:
                 enabled: true
                 enabled: true
@@ -43,15 +43,15 @@ spring:
                 allow:
                 allow:
                 url-pattern: /druid/*
                 url-pattern: /druid/*
                 # 控制台管理用户名和密码
                 # 控制台管理用户名和密码
-                login-username: 
-                login-password: 
+                login-username:
+                login-password:
             filter:
             filter:
                 stat:
                 stat:
                     enabled: true
                     enabled: true
                     # 慢SQL记录
                     # 慢SQL记录
                     log-slow-sql: true
                     log-slow-sql: true
-                    slow-sql-millis: 5000
+                    slow-sql-millis: 30000
                     merge-sql: true
                     merge-sql: true
                 wall:
                 wall:
                     config:
                     config:
-                        multi-statement-allow: true
+                        multi-statement-allow: true

+ 6 - 3
suishenbang-admin/src/main/resources/application-uat-druid.yml

@@ -6,9 +6,12 @@ spring:
         druid:
         druid:
             # 主库数据源
             # 主库数据源
             master:
             master:
-                url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                username: ssbtest
+#                password: Ssbtest#0812
+                url: jdbc:mysql://pc-uf6y41z2eu263pi22.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: ssbtest
                 username: ssbtest
-                password: Ssbtest#0812
+                password: Ssbtest#0617
             # 从库数据源
             # 从库数据源
             slave:
             slave:
                 # 从数据源开关/默认关闭
                 # 从数据源开关/默认关闭
@@ -50,7 +53,7 @@ spring:
                     enabled: true
                     enabled: true
                     # 慢SQL记录
                     # 慢SQL记录
                     log-slow-sql: true
                     log-slow-sql: true
-                    slow-sql-millis: 5000
+                    slow-sql-millis: 30000
                     merge-sql: true
                     merge-sql: true
                 wall:
                 wall:
                     config:
                     config:

+ 6 - 2
suishenbang-admin/src/main/resources/application-uat.yml

@@ -32,9 +32,13 @@ hana:
   hana-user: SSB_HANA
   hana-user: SSB_HANA
   hana-pwd: s$EW12445T
   hana-pwd: s$EW12445T
   mysql-driver: com.mysql.jdbc.Driver
   mysql-driver: com.mysql.jdbc.Driver
-  mysql-url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#  mysql-url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#  mysql-user: ssbtest
+#  mysql-pwd: Ssbtest#0812
+  mysql-url: jdbc:mysql://pc-uf6y41z2eu263pi22.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
   mysql-user: ssbtest
   mysql-user: ssbtest
-  mysql-pwd: Ssbtest#0812
+  mysql-pwd: Ssbtest#0617
+
 
 
 qiyeweixin:
 qiyeweixin:
   #企业微信id
   #企业微信id

+ 3 - 3
suishenbang-admin/src/main/resources/application.yml

@@ -1,5 +1,5 @@
 spring:
 spring:
-  profiles: 
-    active: uat
+  profiles:
+    active: dev
 
 
-#开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod
+#开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod

+ 1 - 1
suishenbang-admin/src/main/resources/templates/system/alertConfiguration/add.html

@@ -31,7 +31,7 @@
                 <div class="action">
                 <div class="action">
                     <input type="file" class="" name="avatar" id="avatar" accept="image/*" value="上传"/>
                     <input type="file" class="" name="avatar" id="avatar" accept="image/*" value="上传"/>
                 </div>
                 </div>
-                <span style="font-size: 12px;color: #999999">建议图片宽度260px,高度300px</span>
+                <span style="font-size: 12px;color: #999999">建议图片宽度260px,高度300px,宽高比5:8</span>
             </div>
             </div>
         </div>
         </div>
         <div class="form-group" id="alertContentItem">
         <div class="form-group" id="alertContentItem">

+ 1 - 1
suishenbang-admin/src/main/resources/templates/system/alertConfiguration/edit.html

@@ -33,7 +33,7 @@
                     <div class="action">
                     <div class="action">
                         <input type="file" class="" name="avatar" id="avatar" accept="image/*" value="上传"/>
                         <input type="file" class="" name="avatar" id="avatar" accept="image/*" value="上传"/>
                     </div>
                     </div>
-                    <span style="font-size: 12px;color: #999999">建议图片宽度260px,高度300px</span>
+                    <span style="font-size: 12px;color: #999999">建议图片宽度260px,高度300px,宽高比5:8</span>
                 </div>
                 </div>
             </div>
             </div>
             <div class="form-group" id="alertContentItem">
             <div class="form-group" id="alertContentItem">

+ 13 - 10
suishenbang-api/src/main/resources/application-uat-druid.yml

@@ -6,16 +6,19 @@ spring:
         druid:
         druid:
             # 主库数据源
             # 主库数据源
             master:
             master:
-                url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                username: ssbtest
-                password: Ssbtest#0812
+#                url: jdbc:mysql://pc-uf637rafh16b6nl16.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                username: ssbtest
+#                password: Ssbtest#0812
+                 url: jdbc:mysql://pc-uf6y41z2eu263pi22.rwlb.rds.aliyuncs.com:3306/ssbtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                 username: ssbtest
+                 password: Ssbtest#0617
             # 从库数据源
             # 从库数据源
             slave:
             slave:
                 # 从数据源开关/默认关闭
                 # 从数据源开关/默认关闭
                 enabled: false
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             # 初始连接数
             initialSize: 5
             initialSize: 5
             # 最小连接池数量
             # 最小连接池数量
@@ -35,7 +38,7 @@ spring:
             testWhileIdle: true
             testWhileIdle: true
             testOnBorrow: false
             testOnBorrow: false
             testOnReturn: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
                 enabled: true
             statViewServlet:
             statViewServlet:
                 enabled: true
                 enabled: true
@@ -43,8 +46,8 @@ spring:
                 allow:
                 allow:
                 url-pattern: /druid/*
                 url-pattern: /druid/*
                 # 控制台管理用户名和密码
                 # 控制台管理用户名和密码
-                login-username: 
-                login-password: 
+                login-username:
+                login-password:
             filter:
             filter:
                 stat:
                 stat:
                     enabled: true
                     enabled: true
@@ -54,4 +57,4 @@ spring:
                     merge-sql: true
                     merge-sql: true
                 wall:
                 wall:
                     config:
                     config:
-                        multi-statement-allow: true
+                        multi-statement-allow: true

+ 2 - 2
suishenbang-api/src/main/resources/application.yml

@@ -1,5 +1,5 @@
 spring:
 spring:
   profiles:
   profiles:
-    active: uat
+    active: dev
 
 
-#开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod
+#开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod

+ 17 - 1
suishenbang-quartz/src/main/java/com/dgtly/quartz/task/RyTask.java

@@ -13,7 +13,7 @@ import org.springframework.stereotype.Component;
 
 
 /**
 /**
  * 定时任务调度测试
  * 定时任务调度测试
- * 
+ *
  * @author dgtly
  * @author dgtly
  */
  */
 @Component("ryTask")
 @Component("ryTask")
@@ -71,6 +71,22 @@ public class RyTask
         hanaOrderComponent.hanaSalesOrderSync();
         hanaOrderComponent.hanaSalesOrderSync();
     }
     }
 
 
+    /**HANA交货单电子签收定时同时*/
+    public void hanaSalesDeliverSignatureSync() throws Exception {
+        hanaOrderComponent.hanaSalesDeliverSignatureSync();
+    }
+
+    /**
+     * @description: C类产品订单标记
+     * @param: []
+     * @return: void
+     * @author: njs
+     * @date: 2025/5/7 13:22
+     */
+    public void hanaErpOrderSyncByC()throws Exception {
+        hanaOrderComponent.hanaErpOrderSyncByC();
+    }
+
     /*HANA交货单数据定时同步*/
     /*HANA交货单数据定时同步*/
     public void hanaDeliverOrderSync() throws Exception {
     public void hanaDeliverOrderSync() throws Exception {
         hanaOrderComponent.hanaDeliverOrderSync();
         hanaOrderComponent.hanaDeliverOrderSync();

+ 7 - 9
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java

@@ -828,7 +828,7 @@ public class AnalysisDiyCustomerComponent {
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     if (("0").equals(user.getIsSync())) {
                     if (("0").equals(user.getIsSync())) {
                         //查询该用户是否存在该接口返回中
                         //查询该用户是否存在该接口返回中
-
+                        user.setPhonenumber(jo.getString("mobile"));
                         if (user.getSysUserExt().getIsCustomerManager() == null) {
                         if (user.getSysUserExt().getIsCustomerManager() == null) {
                             user.getSysUserExt().setIsCustomerManager(isManager + "");
                             user.getSysUserExt().setIsCustomerManager(isManager + "");
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
@@ -909,10 +909,9 @@ public class AnalysisDiyCustomerComponent {
                             }
                             }
                         }*/
                         }*/
                         /*解决名称不一样的情况*/
                         /*解决名称不一样的情况*/
-                        if (!user.getUserName().equals(name)) {
                             user.setUserName(name);
                             user.setUserName(name);
                             sysUserService.updateUserInfo(user);
                             sysUserService.updateUserInfo(user);
-                        }
+
                         List<AssRelcustomerinfo> assRelcustomerinfoList = new ArrayList<>();
                         List<AssRelcustomerinfo> assRelcustomerinfoList = new ArrayList<>();
                         /*过滤导购*/
                         /*过滤导购*/
                         if (isManager != 0 && !("019").equals(userOld.getSysUserExt().getOrgCode().substring(0, 3)) && !("019").equals(userOld.getSysUserExt().getCustomerCode().substring(0, 3))
                         if (isManager != 0 && !("019").equals(userOld.getSysUserExt().getOrgCode().substring(0, 3)) && !("019").equals(userOld.getSysUserExt().getCustomerCode().substring(0, 3))
@@ -1361,6 +1360,7 @@ public class AnalysisDiyCustomerComponent {
                     (首先查询当前用户职位,判断当前职位是否包含当前职位,不存在就更新,存在就不更新)*/
                     (首先查询当前用户职位,判断当前职位是否包含当前职位,不存在就更新,存在就不更新)*/
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     if(("0").equals(user.getIsSync())){
                     if(("0").equals(user.getIsSync())){
+                        user.setPhonenumber(jo.getString("mobile"));
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //查询该用户是否存在该接口返回中
                         //查询该用户是否存在该接口返回中
                         sysUserService.insertUserRole(user.getUserId(), roleStoreIds[0]);
                         sysUserService.insertUserRole(user.getUserId(), roleStoreIds[0]);
@@ -1392,10 +1392,9 @@ public class AnalysisDiyCustomerComponent {
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                         }
                         }
                         /*解决名称不一样的情况*/
                         /*解决名称不一样的情况*/
-                        if (!user.getUserName().equals(name)) {
                             user.setUserName(name);
                             user.setUserName(name);
                             sysUserService.updateUserInfo(user);
                             sysUserService.updateUserInfo(user);
-                        }
+
 
 
 
 
                     }
                     }
@@ -1590,6 +1589,7 @@ public class AnalysisDiyCustomerComponent {
                     (首先查询当前用户职位,判断当前职位是否包含当前职位,不存在就更新,存在就不更新)*/
                     (首先查询当前用户职位,判断当前职位是否包含当前职位,不存在就更新,存在就不更新)*/
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     if(("0").equals(user.getIsSync())){
                     if(("0").equals(user.getIsSync())){
+                        user.setPhonenumber(jo.getString("mobile"));
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //查询该用户是否存在该接口返回中
                         //查询该用户是否存在该接口返回中
                         sysUserService.insertUserRole(user.getUserId(), roleStoreIds[0]);
                         sysUserService.insertUserRole(user.getUserId(), roleStoreIds[0]);
@@ -1619,10 +1619,9 @@ public class AnalysisDiyCustomerComponent {
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                             sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                         }
                         }
                         /*解决名称不一样的情况*/
                         /*解决名称不一样的情况*/
-                        if (!user.getUserName().equals(name)) {
                             user.setUserName(name);
                             user.setUserName(name);
                             sysUserService.updateUserInfo(user);
                             sysUserService.updateUserInfo(user);
-                        }
+
 
 
 
 
                     }
                     }
@@ -1827,6 +1826,7 @@ public class AnalysisDiyCustomerComponent {
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     SysUser user = sysUserService.selectUserByLoginName(userid);
                     user.getSysUserExt().setSalesLevel("customer_level");
                     user.getSysUserExt().setSalesLevel("customer_level");
                     if(("0").equals(user.getIsSync())){
                     if(("0").equals(user.getIsSync())){
+                        user.setPhonenumber(jo.getString("mobile"));
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //每个接口查询俩次是否有重复开始查询一次,快结束查一次
                         //查询该用户是否存在该接口返回中
                         //查询该用户是否存在该接口返回中
                         if(user.getSysUserExt().getIsCustomerManager()==null ){
                         if(user.getSysUserExt().getIsCustomerManager()==null ){
@@ -1863,10 +1863,8 @@ public class AnalysisDiyCustomerComponent {
                         }
                         }
                         sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                         sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                         /*解决名称不一样的情况*/
                         /*解决名称不一样的情况*/
-                        if(!user.getUserName().equals(name)) {
                             user.setUserName(name);
                             user.setUserName(name);
                             sysUserService.updateUserInfo(user);
                             sysUserService.updateUserInfo(user);
-                        }
                     }
                     }
                     sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                     sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
                 }
                 }

+ 548 - 69
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/HanaOrderComponent.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime;
 import com.dgtly.common.config.Global;
 import com.dgtly.common.config.Global;
 import com.dgtly.common.utils.DateUtils;
 import com.dgtly.common.utils.DateUtils;
 import com.dgtly.common.utils.http.HttpUtils;
 import com.dgtly.common.utils.http.HttpUtils;
+import com.dgtly.system.service.IMetaHanaDeliverSignService;
 import com.dgtly.system.service.ISysUserOrderAuthorService;
 import com.dgtly.system.service.ISysUserOrderAuthorService;
 import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -11,7 +12,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-
 import java.io.*;
 import java.io.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.sql.*;
 import java.sql.*;
@@ -19,6 +19,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
 
 
 @Component
 @Component
 public class HanaOrderComponent {
 public class HanaOrderComponent {
@@ -52,6 +53,10 @@ public class HanaOrderComponent {
 
 
     @Autowired
     @Autowired
     private ISysUserOrderAuthorService userOrderAuthorService;
     private ISysUserOrderAuthorService userOrderAuthorService;
+
+    @Autowired
+    private IMetaHanaDeliverSignService metaHanaDeliverSignService;
+
     public HanaOrderComponent() {
     public HanaOrderComponent() {
     }
     }
 
 
@@ -109,6 +114,8 @@ public class HanaOrderComponent {
                 "               T.NTGEW_MARA,\n"+
                 "               T.NTGEW_MARA,\n"+
                 "               T.PSTYV,\n"+
                 "               T.PSTYV,\n"+
                 "               T.UEPOS, \n"+
                 "               T.UEPOS, \n"+
+                "               T.MAABC, \n"+
+                "               T.ZCODE8, \n"+
                 "\t replace(replace(T.BSTKD_E,CHAR(10),''),CHAR(13),'') BSTKD_E \n" +
                 "\t replace(replace(T.BSTKD_E,CHAR(10),''),CHAR(13),'') BSTKD_E \n" +
                 "FROM (\n" +
                 "FROM (\n" +
                 "\n" +
                 "\n" +
@@ -165,6 +172,8 @@ public class HanaOrderComponent {
                 "               A.NTGEW_MARA,"+
                 "               A.NTGEW_MARA,"+
                 "               A.PSTYV,"+
                 "               A.PSTYV,"+
                 "               A.UEPOS,"+
                 "               A.UEPOS,"+
+                "               A.MAABC,"+
+                "               A.ZCODE8,"+
                 "                A.BSTKD_E "+
                 "                A.BSTKD_E "+
                 "FROM \"_SYS_BIC\".\"com.sd/CAL_SALES\"" +
                 "FROM \"_SYS_BIC\".\"com.sd/CAL_SALES\"" +
                 "('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
                 "('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
@@ -191,8 +200,67 @@ public class HanaOrderComponent {
 
 
     }
     }
 
 
+    /**
+     * @description: C类产品订单标记
+     * @param: []
+     * @return: void
+     * @author: njs
+     * @date: 2025/5/7 13:24
+     */
+    public void hanaErpOrderSyncByC() throws  Exception {
+        Connection con = this.getHanaConnection();
+        PreparedStatement pstmt = con.prepareStatement("SELECT MAABC,SPRAS,TMABC,MANDT FROM ERP.TMABCT");
+
+        Long startTime = System.currentTimeMillis();
+        ResultSet rs = pstmt.executeQuery();
+        Long endTime = System.currentTimeMillis();
+        log.info("TMABCT查询用时:" + (endTime - startTime)+"毫秒");
+        this.createTmabcTxt(rs);
+        this.runLoadTmabcTxt();
+        this.closeConnection(con, pstmt);
+
+    }
+
+
+    /**
+     * @description: 交货单电子签收数据同步
+     * @param: []
+     * @return: void
+     * @author: njs
+     * @date: 2024/12/31 10:14
+     */
+    public void hanaSalesDeliverSignatureSync() throws Exception {
+        Connection con = this.getHanaConnection();
+        PreparedStatement pstmt = con.prepareStatement("SELECT\n" +
+                "\t VBELN,\n" +
+                 "\t POSNR,\n" +
+                "\t MATNR,\n" +
+                "\t VGBEL,\n" +
+                "\t VGPOS, \n"+
+                "\t ERDAT_SO,\n" +
+                "\t LFIMG,\n" +
+                "\t MODIFIEDVALUE,\n" +
+                "\t LFIMG_CY,\n" +
+                "\t ZDATE_KH,\n" +
+                "\t ZTIME_KH,\n" +
+                "\t ZVBELN_YCHH,\n" +
+                "\t ZSTATUS_HH,\n" +
+                "\t CONTRACTID, \n" +
+                "\t BIZNO, \n" +
+                 "\t MANDT \n" +
+                " FROM  ERP.ZSDT056 where ERDAT_SO between ADD_MONTHS(CURRENT_DATE, -3) AND CURRENT_DATE");
+
+        Long startTime = System.currentTimeMillis();
+        ResultSet rs = pstmt.executeQuery();
+        Long endTime = System.currentTimeMillis();
+        log.info("hanaSalesDeliverSignatureSync查询用时:" + (endTime - startTime)+"毫秒");
+        this.createDeliverSignatureTxt(rs);
+        this.runLoadDeliverSignature();
+        this.closeConnection(con, pstmt);
+
+    }
     /*批量插入*/
     /*批量插入*/
-    private void insertSalesOrderResult(ResultSet rs) throws Exception {
+  /*  private void insertSalesOrderResult(ResultSet rs) throws Exception {
         Connection conn = null;
         Connection conn = null;
         PreparedStatement pstm =null;
         PreparedStatement pstm =null;
         PreparedStatement pstm1 =null;
         PreparedStatement pstm1 =null;
@@ -209,7 +277,7 @@ public class HanaOrderComponent {
             if (rs.next()) {
             if (rs.next()) {
                 long i=0;
                 long i=0;
                 ResultSetMetaData rsmd = rs.getMetaData();
                 ResultSetMetaData rsmd = rs.getMetaData();
-                /*循环遍历数据,创建执行批量插入的sql语句*/
+                *//*循环遍历数据,创建执行批量插入的sql语句*//*
                 do {
                 do {
                     i++;
                     i++;
                     pstm.setString(1, rs.getString("VBELN"));
                     pstm.setString(1, rs.getString("VBELN"));
@@ -283,7 +351,192 @@ public class HanaOrderComponent {
                 }
                 }
             }
             }
         }
         }
+    }*/
+
+    //C类
+    private int  createTmabcTxt(ResultSet result) throws Exception {
+        File file = null;
+        FileWriter fw = null;
+        Connection conn = null;
+        PreparedStatement pstm =null;
+        int j =0;
+        try {
+            long i =0;
+
+            //创建IO需求的条件,并声明输出路径
+            file = new File((Global.getTemdataPath()+"erpOrderByC/"));
+            log.info("erpOrderByC数据缓存路径:" + Global.getTemdataPath()+"erpOrderByC/");
+            if(!file.exists()){
+                file.mkdir();
+            }
+
+            file = new File(Global.getTemdataPath()+"erpOrderByC/"+j+".txt");
+            if(!file.exists()){
+                file.createNewFile();
+            }else {
+                //取得这个目录下的所有子文件对象
+                File[] files = new File(Global.getTemdataPath()+"erpOrderByC/").listFiles();
+                //遍历该目录下的文件对象
+
+                for (File f: files){
+                    f.delete();
+                }
+                file.delete();
+                file.createNewFile();
+            }
+            fw = new FileWriter(file);
+            Long startTime = System.currentTimeMillis();
+            while (result.next()){
+
+                fw.write(
+                        result.getString("MAABC")
+                                +"$$"+ result.getString("SPRAS")
+                                +"$$"+ result.getString("TMABC")
+                                +"$$"+ result.getString("MANDT")
+                                + "\r\n");
+
+                fw.flush();
+                i++;
+                if (i%50000==0){
+                    j++;
+                    //创建IO需求的条件,并声明输出路径
+                    file = new File(Global.getTemdataPath()+"erpOrderByC/"+j+".txt");
+                    if(!file.exists()){
+                        file.createNewFile();
+                    }else {
+                        file.delete();
+                        file.createNewFile();
+                    }
+                    fw = new FileWriter(file);
+
+                }
+            }
+            Long endTime = System.currentTimeMillis();
+            log.info("生成erpOrderByC-TXT用时:" + (endTime - startTime) + "毫秒");
+
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            fw.close();
+            if(pstm!=null){
+                try {
+                    pstm.close();
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+            }
+            if(conn!=null){
+                try {
+                    conn.close();
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+        return j;
+    }
+
+//电子单签收
+
+    private int createDeliverSignatureTxt(ResultSet result) throws Exception {
+        File file = null;
+        FileWriter fw = null;
+        Connection conn = null;
+        PreparedStatement pstm =null;
+        int j =0;
+        try {
+            long i =0;
+
+            //创建IO需求的条件,并声明输出路径
+            file = new File((Global.getTemdataPath()+"deliverSignature/"));
+            log.info("deliverSignature数据缓存路径:" + Global.getTemdataPath()+"deliverSignature/");
+            if(!file.exists()){
+                file.mkdir();
+            }
+
+            file = new File(Global.getTemdataPath()+"deliverSignature/"+j+".txt");
+            if(!file.exists()){
+                file.createNewFile();
+            }else {
+                //取得这个目录下的所有子文件对象
+                File[] files = new File(Global.getTemdataPath()+"deliverSignature/").listFiles();
+
+                for (File f: files){
+                    f.delete();
+                }
+                file.delete();
+                file.createNewFile();
+            }
+            fw = new FileWriter(file);
+            Long startTime = System.currentTimeMillis();
+            while (result.next()){
+
+                fw.write(
+                        result.getString("VBELN")
+                         +"$$"+ result.getString("POSNR")
+                                +"$$"+ result.getString("MATNR")
+                                +"$$"+ result.getString("VGBEL")
+                                +"$$"+ result.getString("VGPOS")
+                                +"$$"+ result.getString("ERDAT_SO")
+                                +"$$"+ result.getString("LFIMG")
+                                +"$$"+ result.getString("MODIFIEDVALUE")
+                                +"$$"+ result.getString("LFIMG_CY")
+                                +"$$"+ result.getString("ZDATE_KH")
+                                +"$$"+ result.getString("ZTIME_KH")
+                                +"$$"+ result.getString("ZVBELN_YCHH")
+                                +"$$"+ result.getString("ZSTATUS_HH")
+                                +"$$"+ result.getString("CONTRACTID")
+                                +"$$"+ result.getString("BIZNO")
+                                +"$$"+ result.getString("MANDT")
+                                + "\r\n");
+
+
+                fw.flush();
+                i++;
+                if (i%50000==0){
+                    j++;
+                    //创建IO需求的条件,并声明输出路径
+                    file = new File(Global.getTemdataPath()+"deliverSignature/"+j+".txt");
+                    if(!file.exists()){
+                        file.createNewFile();
+                    }else {
+                        file.delete();
+                        file.createNewFile();
+                    }
+                    fw = new FileWriter(file);
+
+                }
+            }
+            Long endTime = System.currentTimeMillis();
+            log.info("生成deliverSignature-TXT用时:" + (endTime - startTime) + "毫秒");
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            fw.close();
+            if(pstm!=null){
+                try {
+                    pstm.close();
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+            }
+            if(conn!=null){
+                try {
+                    conn.close();
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+        return j;
     }
     }
+
 //订单
 //订单
     private int createSalesOrderTxt(ResultSet result) throws Exception {
     private int createSalesOrderTxt(ResultSet result) throws Exception {
         File file = null;
         File file = null;
@@ -375,6 +628,8 @@ public class HanaOrderComponent {
                                 +"$$"+ result.getString("NTGEW_MARA")
                                 +"$$"+ result.getString("NTGEW_MARA")
                                 +"$$"+ result.getString("PSTYV")
                                 +"$$"+ result.getString("PSTYV")
                                 +"$$"+ result.getString("UEPOS")
                                 +"$$"+ result.getString("UEPOS")
+                                +"$$"+ result.getString("MAABC")
+                                +"$$"+ result.getString("ZCODE8")
                                 +"$$"+ result.getString("BSTKD_E")
                                 +"$$"+ result.getString("BSTKD_E")
                                 + "\r\n");
                                 + "\r\n");
 
 
@@ -751,11 +1006,11 @@ public class HanaOrderComponent {
             Long endTime = System.currentTimeMillis();
             Long endTime = System.currentTimeMillis();
             log.info("生成selfDeliverOrder-TXT用时:" + (endTime - startTime) + "毫秒");
             log.info("生成selfDeliverOrder-TXT用时:" + (endTime - startTime) + "毫秒");
 
 
-            conn = getMysqlConnection();
+         /*   conn = getMysqlConnection();
             //生产表
             //生产表
             String sql = "TRUNCATE TABLE meta_hana_self_deliver_order";
             String sql = "TRUNCATE TABLE meta_hana_self_deliver_order";
             pstm = conn.prepareStatement(sql);
             pstm = conn.prepareStatement(sql);
-            pstm.execute();
+            pstm.execute();*/
         }catch (Exception e){
         }catch (Exception e){
             e.printStackTrace();
             e.printStackTrace();
         }finally {
         }finally {
@@ -903,7 +1158,7 @@ public class HanaOrderComponent {
     }
     }
 
 
     /*批量插入*/
     /*批量插入*/
-    private void insertDeliverOrderResult(ResultSet rs) throws Exception {
+    /*private void insertDeliverOrderResult(ResultSet rs) throws Exception {
         Connection conn = null;
         Connection conn = null;
         PreparedStatement pstm =null;
         PreparedStatement pstm =null;
         PreparedStatement pstm1 =null;
         PreparedStatement pstm1 =null;
@@ -921,7 +1176,7 @@ public class HanaOrderComponent {
                 long i =0;
                 long i =0;
                 ResultSetMetaData rsmd = rs.getMetaData();
                 ResultSetMetaData rsmd = rs.getMetaData();
                 int colNum = rsmd.getColumnCount();
                 int colNum = rsmd.getColumnCount();
-                /*循环遍历数据,创建执行批量插入的sql语句*/
+                *//*循环遍历数据,创建执行批量插入的sql语句*//*
                 do {
                 do {
                     pstm.setString(1, rs.getString("VBELN"));
                     pstm.setString(1, rs.getString("VBELN"));
                     pstm.setString(2, rs.getString("POSNR"));
                     pstm.setString(2, rs.getString("POSNR"));
@@ -998,7 +1253,7 @@ public class HanaOrderComponent {
                 }
                 }
             }
             }
         }
         }
-    }
+    }*/
 
 
 
 
 
 
@@ -1024,26 +1279,27 @@ public class HanaOrderComponent {
         }
         }
         return result;
         return result;
     }
     }
-//订单
-    public void runLoadSalesOrder() throws Exception{
+
+    //订单C类标识
+    private void runLoadTmabcTxt()throws Exception{
         //生产表
         //生产表
         Connection conn = null;
         Connection conn = null;
         PreparedStatement pstm =null;
         PreparedStatement pstm =null;
         try{
         try{
             conn = getMysqlConnection();
             conn = getMysqlConnection();
-            String sql = "TRUNCATE TABLE meta_hana_sales_order";
+            String sql = "TRUNCATE TABLE meta_hana_order_maabc";
             pstm = conn.prepareStatement(sql);
             pstm = conn.prepareStatement(sql);
             pstm.execute();
             pstm.execute();
-            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_sales_order fields terminated by '$$' lines terminated by '\\n'";
+            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_order_maabc fields terminated by '$$' lines terminated by '\\n'";
             long beginTime=System.currentTimeMillis();
             long beginTime=System.currentTimeMillis();
-            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"salesOrder/"))));
+            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"erpOrderByC/"))));
             long endTime=System.currentTimeMillis();
             long endTime=System.currentTimeMillis();
-            log.info("importing salesOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
-            String result = HttpUtils.sendGet(orderGetDataHook);
-            log.info("清空salesOrder缓存:"+result);
+            log.info("importing erpOrderByC := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
+
         }catch (Exception e){
         }catch (Exception e){
-            String name ="meta_hana_sales_order订单表同步异常";
+            String name ="meta_hana_order_maabc订单C类标识表同步异常";
             userOrderAuthorService.sendMailHanaWarning(name);
             userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name, e);
             e.printStackTrace();
             e.printStackTrace();
         }finally {
         }finally {
             if(pstm!=null){
             if(pstm!=null){
@@ -1063,29 +1319,32 @@ public class HanaOrderComponent {
                 }
                 }
             }
             }
         }
         }
-        //测试表
-//        String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table sap_hana_sales_order fields terminated by '?' lines terminated by '\\n'";
-        //生产表
+
     }
     }
 
 
-    public void runLoadFreezeCustomer()throws Exception{
+
+
+ //电子单签收状态
+ public void runLoadDeliverSignature () throws Exception{
         //生产表
         //生产表
         Connection conn = null;
         Connection conn = null;
         PreparedStatement pstm =null;
         PreparedStatement pstm =null;
-        try {
+        try{
             conn = getMysqlConnection();
             conn = getMysqlConnection();
-            //生产表
-            String sql = "TRUNCATE TABLE meta_hana_not_freeze_customer";
+            String sql = "TRUNCATE TABLE meta_hana_deliver_sign";
             pstm = conn.prepareStatement(sql);
             pstm = conn.prepareStatement(sql);
             pstm.execute();
             pstm.execute();
-            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_not_freeze_customer fields terminated by '$$' lines terminated by '\\n'";
+            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_deliver_sign fields terminated by '$$' lines terminated by '\\n'";
             long beginTime=System.currentTimeMillis();
             long beginTime=System.currentTimeMillis();
-            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"freezeCustomer/"))));
+            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"deliverSignature/"))));
             long endTime=System.currentTimeMillis();
             long endTime=System.currentTimeMillis();
-            log.info("importing freezeCustomer := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
-        } catch (SQLException e) {
-            String name ="meta_hana_not_freeze_customer 未冻结经销商表同步异常";
+            log.info("importing salesOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
+        //预处理电子单签收数据
+             metaHanaDeliverSignService.pretreatmentHanaDeliverSign();
+        }catch (Exception e){
+            String name ="meta_hana_deliver_sign电子单签收表同步异常";
             userOrderAuthorService.sendMailHanaWarning(name);
             userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name, e);
             e.printStackTrace();
             e.printStackTrace();
         }finally {
         }finally {
             if(pstm!=null){
             if(pstm!=null){
@@ -1105,27 +1364,117 @@ public class HanaOrderComponent {
                 }
                 }
             }
             }
         }
         }
+
+    }
+
+//订单
+    public void runLoadSalesOrder(){
+
+        try (
+                Connection conn = getMysqlConnection();
+                Statement stmt = conn.createStatement()
+        ) {
+            // 设置事务隔离级别
+            conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+            // 开启事务
+            conn.setAutoCommit(false);
+
+            try {
+                // 1. 创建临时表
+                stmt.execute("CREATE TABLE IF NOT EXISTS meta_hana_sales_order_temp LIKE meta_hana_sales_order");
+
+                // 2. 加载数据到临时表
+                String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_sales_order_temp fields terminated by '$$' lines terminated by '\\n'";
+                long beginTime = System.currentTimeMillis();
+                String filePath = Global.getTemdataPath() + "salesOrder/";
+                try (InputStream inputStream = mergeGetStream(new File(filePath))) {
+                    int rows = this.bulkLoadFromInputStream(testSql, inputStream);
+                    long endTime = System.currentTimeMillis();
+                    log.info("importing salesOrder := {} rows data into mysql from {} and cost {} ms!", rows, filePath, (endTime - beginTime));
+                }
+
+                //删除旧表
+                try (Connection tempConn = getMysqlConnection();
+                     Statement tempStmt = tempConn.createStatement()) {
+                    tempStmt.execute("DROP TABLE IF EXISTS meta_hana_sales_order_old");
+                    log.info("成功删除旧表: meta_hana_sales_order_old");
+                } catch (Exception e) {
+                    log.error("删除旧表失败,表名: meta_hana_sales_order_old", e);
+                }
+
+                // 1. 先设置会话级锁等待超时为3秒
+                try (Statement timeOut = conn.createStatement()) {
+                    timeOut.execute("SET SESSION innodb_lock_wait_timeout = 3");
+                }
+
+                // 2. 执行RENAME并设置语句级超时(原子切换表(RENAME是原子操作))
+                try (Statement renameTable = conn.createStatement()) {
+                    renameTable.setQueryTimeout(3); // 语句执行超时3秒
+                    renameTable.execute("RENAME TABLE meta_hana_sales_order TO meta_hana_sales_order_old, " +
+                            "meta_hana_sales_order_temp TO meta_hana_sales_order");
+                }
+
+                // 提交事务
+                conn.commit();
+
+
+                // 清空缓存
+                String result = HttpUtils.sendGet(orderGetDataHook);
+                log.info("清空salesOrder缓存:{}", result);
+            } catch (Exception e) {
+                // 回滚事务
+                try {
+                    conn.rollback();
+                    // 清理临时表
+                    try {
+                        stmt.execute("DROP TABLE IF EXISTS meta_hana_sales_order_temp");
+                    } catch (SQLException ex) {
+                        log.error("清理临时表失败", ex);
+                    }
+                } catch (SQLException ex) {
+                    log.error("事务回滚失败", ex);
+                }
+
+            } finally {
+                try {
+                    conn.setAutoCommit(true);
+                } catch (SQLException ex) {
+                    log.error("恢复自动提交模式失败", ex);
+                }
+            }
+        } catch (Exception e) {
+            String name = "meta_hana_sales_order订单表同步异常";
+            userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name + ", 文件路径: " + Global.getTemdataPath() + "salesOrder/", e);
+            throw new RuntimeException(e);
+        }
+
+
+
     }
     }
 
 
 
 
-    public void runLoadSelfReviewedDeliverOrder()throws Exception{
+
+
+    public void runLoadFreezeCustomer()throws Exception{
         //生产表
         //生产表
         Connection conn = null;
         Connection conn = null;
         PreparedStatement pstm =null;
         PreparedStatement pstm =null;
         try {
         try {
             conn = getMysqlConnection();
             conn = getMysqlConnection();
             //生产表
             //生产表
-            String sql = "TRUNCATE TABLE meta_hana_self_deliver_order";
+            String sql = "TRUNCATE TABLE meta_hana_not_freeze_customer";
             pstm = conn.prepareStatement(sql);
             pstm = conn.prepareStatement(sql);
             pstm.execute();
             pstm.execute();
-            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_self_deliver_order fields terminated by '$$' lines terminated by '\\n'";
+            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_not_freeze_customer fields terminated by '$$' lines terminated by '\\n'";
             long beginTime=System.currentTimeMillis();
             long beginTime=System.currentTimeMillis();
-            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"selfDeliverOrder/"))));
+            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"freezeCustomer/"))));
             long endTime=System.currentTimeMillis();
             long endTime=System.currentTimeMillis();
-            log.info("importing selfDeliverOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
+            log.info("importing freezeCustomer := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
         } catch (SQLException e) {
         } catch (SQLException e) {
-            String name ="meta_hana_self_deliver_order 自提提前过账表同步异常";
+            String name ="meta_hana_not_freeze_customer 未冻结经销商表同步异常";
             userOrderAuthorService.sendMailHanaWarning(name);
             userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name, e);
             e.printStackTrace();
             e.printStackTrace();
         }finally {
         }finally {
             if(pstm!=null){
             if(pstm!=null){
@@ -1148,47 +1497,177 @@ public class HanaOrderComponent {
     }
     }
 
 
 
 
-    public void runLoadDeliverOrder() throws Exception{
-        Connection conn = null;
-        PreparedStatement pstm =null;
-        //测试表
-//        String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table sap_hana_deliver_order fields terminated by '?' lines terminated by '\\n'";
-        //生产表
-        try {
-            conn = getMysqlConnection();
-            //生产表
-            String sql = "TRUNCATE TABLE meta_hana_deliver_order";
-            pstm = conn.prepareStatement(sql);
-            pstm.execute();
-            String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_deliver_order fields terminated by '$$' lines terminated by '\\n'";
-            long beginTime=System.currentTimeMillis();
-            int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"deliverOrder/"))));
-            long endTime=System.currentTimeMillis();
-            log.info("importing deliverOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
-            String result = HttpUtils.sendGet(deliverGetDataHook);
-            log.info("清空deliverOrder缓存:"+result);
-        } catch (SQLException e) {
-            String name ="meta_hana_deliver_order 交货单表同步异常";
-            userOrderAuthorService.sendMailHanaWarning(name);
-            e.printStackTrace();
-        }finally {
-            if(pstm!=null){
+    public void runLoadSelfReviewedDeliverOrder()throws Exception{
+        try (
+                Connection conn = getMysqlConnection();
+                Statement stmt = conn.createStatement()
+        ) {
+            // 设置事务隔离级别
+            conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+            // 开启事务
+            conn.setAutoCommit(false);
+
+            try {
+                // 1. 创建临时表
+                stmt.execute("CREATE TABLE IF NOT EXISTS meta_hana_self_deliver_order_temp LIKE meta_hana_self_deliver_order");
+
+                // 2. 加载数据到临时表
+                String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_self_deliver_order_temp fields terminated by '$$' lines terminated by '\\n'";
+                long beginTime = System.currentTimeMillis();
+                String filePath = Global.getTemdataPath() + "selfDeliverOrder/";
+                try (InputStream inputStream = mergeGetStream(new File(filePath))) {
+                    int rows = this.bulkLoadFromInputStream(testSql, inputStream);
+                    long endTime = System.currentTimeMillis();
+                    log.info("importing selfDeliverOrder := {} rows data into mysql from {} and cost {} ms!", rows, filePath, (endTime - beginTime));
+                }
+
+                //删除旧表
+                try (Connection tempConn = getMysqlConnection();
+                     Statement tempStmt = tempConn.createStatement()) {
+                    tempStmt.execute("DROP TABLE IF EXISTS meta_hana_self_deliver_order_old");
+                    log.info("成功删除旧表: meta_hana_self_deliver_order_old");
+                } catch (Exception e) {
+                    log.error("删除旧表失败,表名: meta_hana_self_deliver_order_old", e);
+                }
+
+                // 1. 先设置会话级锁等待超时为3秒
+                try (Statement timeOut = conn.createStatement()) {
+                    timeOut.execute("SET SESSION innodb_lock_wait_timeout = 3");
+                }
+
+                // 2. 执行RENAME并设置语句级超时(原子切换表(RENAME是原子操作))
+                try (Statement renameTable = conn.createStatement()) {
+                    renameTable.setQueryTimeout(3); // 语句执行超时3秒
+                    renameTable.execute("RENAME TABLE meta_hana_self_deliver_order TO meta_hana_self_deliver_order_old, " +
+                            "meta_hana_self_deliver_order_temp TO meta_hana_self_deliver_order");
+                }
+
+
+                // 提交事务
+                conn.commit();
+
+
+
+            } catch (Exception e) {
+                // 回滚事务
                 try {
                 try {
-                    pstm.close();
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    throw new RuntimeException(e);
+                    conn.rollback();
+                    // 清理临时表
+                    try {
+                        stmt.execute("DROP TABLE IF EXISTS meta_hana_self_deliver_order_temp");
+                    } catch (SQLException ex) {
+                        log.error("清理临时表失败", ex);
+                    }
+                } catch (SQLException ex) {
+                    log.error("事务回滚失败", ex);
+                }
+
+                throw new RuntimeException(e);
+            } finally {
+                try {
+                    conn.setAutoCommit(true);
+                } catch (SQLException ex) {
+                    log.error("恢复自动提交模式失败", ex);
                 }
                 }
             }
             }
-            if(conn!=null){
+        } catch (Exception e) {
+            String name = "meta_hana_self_deliver_order自提提前过账表同步异常";
+            userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name + ", 文件路径: " + Global.getTemdataPath() + "selfDeliverOrder/", e);
+            throw new RuntimeException(e);
+        }
+
+
+    }
+
+
+    public void runLoadDeliverOrder() throws Exception{
+        try (
+                Connection conn = getMysqlConnection();
+                Statement stmt = conn.createStatement()
+        ) {
+            // 设置事务隔离级别
+            conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+            // 开启事务
+            conn.setAutoCommit(false);
+
+            try {
+                // 1. 创建临时表
+                stmt.execute("CREATE TABLE IF NOT EXISTS meta_hana_deliver_order_temp LIKE meta_hana_deliver_order");
+
+                // 2. 加载数据到临时表
+                String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_deliver_order_temp fields terminated by '$$' lines terminated by '\\n'";
+                long beginTime = System.currentTimeMillis();
+                String filePath = Global.getTemdataPath() + "deliverOrder/";
+                try (InputStream inputStream = mergeGetStream(new File(filePath))) {
+                    int rows = this.bulkLoadFromInputStream(testSql, inputStream);
+                    long endTime = System.currentTimeMillis();
+                    log.info("importing deliverOrder := {} rows data into mysql from {} and cost {} ms!", rows, filePath, (endTime - beginTime));
+                }
+
+                //删除旧表
+                try (Connection tempConn = getMysqlConnection();
+                     Statement tempStmt = tempConn.createStatement()) {
+                    tempStmt.execute("DROP TABLE IF EXISTS meta_hana_deliver_order_old");
+                    log.info("成功删除旧表: meta_hana_deliver_order_old");
+                } catch (Exception e) {
+                    log.error("删除旧表失败,表名: meta_hana_deliver_order_old", e);
+                }
+
+
+                // 1. 先设置会话级锁等待超时为3秒
+                try (Statement timeOut = conn.createStatement()) {
+                    timeOut.execute("SET SESSION innodb_lock_wait_timeout = 3");
+                }
+
+                // 2. 执行RENAME并设置语句级超时(原子切换表(RENAME是原子操作))
+                try (Statement renameTable = conn.createStatement()) {
+                    renameTable.setQueryTimeout(3); // 语句执行超时3秒
+                    renameTable.execute("RENAME TABLE meta_hana_deliver_order TO meta_hana_deliver_order_old, " +
+                            "meta_hana_deliver_order_temp TO meta_hana_deliver_order");
+                }
+
+
+                // 提交事务
+                conn.commit();
+
+
+
+                // 清空缓存
+                String result = HttpUtils.sendGet(orderGetDataHook);
+                log.info("清空deliverOrder缓存:{}", result);
+            } catch (Exception e) {
+                // 回滚事务
                 try {
                 try {
-                    conn.close();
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    throw new RuntimeException(e);
+                    conn.rollback();
+                    // 清理临时表
+                    try {
+                        stmt.execute("DROP TABLE IF EXISTS meta_hana_deliver_order_temp");
+                    } catch (SQLException ex) {
+                        log.error("清理临时表失败", ex);
+                    }
+                } catch (SQLException ex) {
+                    log.error("事务回滚失败", ex);
+                }
+
+                throw new RuntimeException(e);
+            } finally {
+                try {
+                    conn.setAutoCommit(true);
+                } catch (SQLException ex) {
+                    log.error("恢复自动提交模式失败", ex);
                 }
                 }
             }
             }
+        } catch (Exception e) {
+            String name = "meta_hana_deliver_order订单表同步异常";
+            userOrderAuthorService.sendMailHanaWarning(name);
+            log.error(name + ", 文件路径: " + Global.getTemdataPath() + "deliverOrder/", e);
+            throw new RuntimeException(e);
         }
         }
+
+
+
+
     }
     }
 
 
     public static InputStream mergeGetStream(File sourceFile) throws FileNotFoundException {
     public static InputStream mergeGetStream(File sourceFile) throws FileNotFoundException {

+ 38 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/DeliverSignVO.java

@@ -0,0 +1,38 @@
+package com.dgtly.system.domain;
+
+import lombok.Data;
+
+/**
+ * @description: 电子单签收状态
+ * @param:
+ * @return:
+ * @author: njs
+ * @date: 2025/6/5 11:14
+ */
+@Data
+public class DeliverSignVO {
+
+    private String zDate;
+
+    /** 客户签署日期 */
+    private String zdateDate;
+
+    /** 异常处理订单 */
+    private String abnormalOrder;
+
+    /**订单类型 ,异常签收 0 或者正常签收 1 或者未签收 3*/
+    private String signType;
+
+    /** 运单计算用主单总差值*/
+    private String differenceQty;
+
+    /** 异常处理订单签收状态 1未开始补货;2补货中; 3部分签收;4全部签收
+     * */
+    private String abnormalStatus;
+
+    /**运单下交货单数量*/
+    private String deliverNum;
+
+    /**运单*/
+    private String tmsShipmentNum;
+}

+ 64 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/MetaHanaDeliverSign.java

@@ -0,0 +1,64 @@
+package com.dgtly.system.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dgtly.common.annotation.Excel;
+import com.dgtly.common.core.domain.BaseEntity;
+
+/**
+ * 电子单签收状态数量对象 meta_hana_deliver_sign
+ *
+ * @author njs
+ * @date 2025-01-03
+ */
+@Data
+public class MetaHanaDeliverSign extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+    /** 交货单号 */
+    private String deliverNumber;
+
+    /** 交货单行项目号 */
+    private String deliverItem;
+
+    /** 物料号 */
+    private String matnrCode;
+
+    /** 订单号 */
+    private String orderNumber;
+
+    /** 订单行项目 */
+    private String orderItem;
+
+    /** 订单创建日期 */
+    private String orderCreateTime;
+
+    /** 交货数量 */
+    private String deliverQty;
+
+    /** 实收数量 */
+    private String actualQty;
+
+    /** 差异数量 */
+    private String differenceQty;
+
+    /** 客户签署日期 */
+    private String zdateDate;
+
+    /** 客户签署时间 */
+    private String zdateTime;
+
+    /** 异常处理订单 */
+    private String abnormalOrder;
+
+    /** 异常处理订单签收状态 */
+    private String abnormalStatus;
+
+    /** 合同号 */
+    private String contractCode;
+
+    /**函数拼接而成的时间*/
+    private String signTime;
+
+}

+ 24 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/OrderSignVO.java

@@ -0,0 +1,24 @@
+package com.dgtly.system.domain;
+
+import lombok.Data;
+
+/**
+ * @description: 预处理订单签收状态
+ * @param:
+ * @return:
+ * @author: njs
+ * @date: 2025/6/5 11:39
+ */
+@Data
+public class OrderSignVO {
+
+    /**最近一次签收时间*/
+    private String zdateDate;
+
+    /** 订单 */
+    private String orderNumber;
+
+    /**订单类型 ,异常签收 0 或者正常签收 1 或者未签收 3*/
+    private Integer signType;
+
+}

+ 24 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/TmsShipmentSignVO.java

@@ -0,0 +1,24 @@
+package com.dgtly.system.domain;
+
+import lombok.Data;
+
+/**
+ * @description: 预处理运单签收状态
+ * @param:
+ * @return:
+ * @author: njs
+ * @date: 2025/6/5 11:39
+ */
+@Data
+public class TmsShipmentSignVO {
+
+    /**最近一次签收时间*/
+    private String zdateDate;
+
+    /** 运单 */
+    private String tmsShipmentNumber;
+
+    /**订单类型 ,异常签收 0 或者正常签收 1 或者未签收 3*/
+    private Integer signType;
+
+}

+ 150 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/MetaHanaDeliverSignMapper.java

@@ -0,0 +1,150 @@
+package com.dgtly.system.mapper;
+
+import com.dgtly.system.domain.DeliverSignVO;
+import com.dgtly.system.domain.MetaHanaDeliverSign;
+import com.dgtly.system.domain.OrderSignVO;
+import com.dgtly.system.domain.TmsShipmentSignVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 电子单签收状态数量Mapper接口
+ *
+ * @author dgtly
+ * @date 2025-01-03
+ */
+public interface MetaHanaDeliverSignMapper
+{
+    /**
+     * 查询电子单签收状态数量
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 电子单签收状态数量
+     */
+    public MetaHanaDeliverSign selectMetaHanaDeliverSignById(String deliverNumber);
+
+    /**
+     * 查询电子单签收状态数量列表
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 电子单签收状态数量集合
+     */
+    public List<MetaHanaDeliverSign> selectMetaHanaDeliverSignList(MetaHanaDeliverSign metaHanaDeliverSign);
+
+
+
+
+    /**
+     * 修改电子单签收状态数量
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 结果
+     */
+    public int updateMetaHanaDeliverSign(MetaHanaDeliverSign metaHanaDeliverSign);
+
+    /**
+     * 删除电子单签收状态数量
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 结果
+     */
+    public int deleteMetaHanaDeliverSignById(String deliverNumber);
+
+    /**
+     * 批量删除电子单签收状态数量
+     *
+     * @param deliverNumbers 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaHanaDeliverSignByIds(String[] deliverNumbers);
+
+    /**
+     * @description: 查询有补货订单的电子签收数据
+     * @param: []
+     * @return: java.util.List<com.dgtly.system.domain.MetaHanaDeliverSign>
+     * @author: njs
+     * @date: 2025/1/3 15:58
+     */
+    public List<MetaHanaDeliverSign> selectMetaHanaDeliverSignListHavingAbnormal();
+
+    /**
+     * @description: 根据补货订单的订单号和行号查询该补货订单的详情
+     * @param: []
+     * @return: com.dgtly.system.domain.MetaHanaDeliverSign
+     * @author: njs
+     * @date: 2025/1/3 16:04
+     */
+    MetaHanaDeliverSign selectAbnormalSignByabnormalOrderAndItem(@Param("abnormalOrder") String abnormalOrder,@Param("abnormalOrderItem") String abnormalOrderItem);
+
+    /**
+     * @description: 根据订单查询补货订单记录
+     * @param: [OrderNumber]
+     * @return: java.util.List<com.dgtly.system.domain.DeliverSignVO>
+     * @author: njs
+     * @date: 2025/6/5 10:10
+     */
+    List<DeliverSignVO> selectDeliverSignByOrderNumber(@Param("OrderNumber") String OrderNumber);
+
+    /**
+     * @description: 根据订单号和行项目号查询该订单的电子签收信息
+     * @param: [OrderNumber, OrderItem]
+     * @return: java.util.List<com.dgtly.system.domain.MetaHanaDeliverSign>
+     * @author: njs
+     * @date: 2025/6/5 10:09
+     */
+    List<MetaHanaDeliverSign> selectDeliverSignListByOrderNumberAndOrderItem();
+
+    /**
+     * @description: 根据运单查询交货单签收信息
+     * @param: [OrderNumber]
+     * @return: java.util.List<com.dgtly.system.domain.DeliverSignVO>
+     * @author: njs
+     * @date: 2025/6/5 10:05
+     */
+    List<DeliverSignVO> selectDeliverSignByTmsShipmentNumber();
+
+
+
+    /**
+     * @description: 查询电子单签收订单集合
+     * @param: []
+     * @return: java.util.List<java.lang.String>
+     * @author: njs
+     * @date: 2025/6/5 11:30
+     */
+    List<String> selectOrderNumberSign();
+
+    /**
+     * @description: 查询运单下签收集合
+     * @param: []
+     * @return: java.util.List<java.lang.String>
+     * @author: njs
+     * @date: 2025/6/5 11:34
+     */
+    List<String> selectTmsShipmentNumberSign();
+
+    /***/
+    void truncateOrderSign();
+
+    void truncateTmsShipmentSign();
+
+    void batchOrderSign(@Param("list") List<OrderSignVO> list);
+
+
+    void batchTmsShipmentSign(@Param("list") List<TmsShipmentSignVO> list);
+
+
+    /**
+     * @description: 根据运单查询交货单数据
+     * @param: [tmsShipmentNumber]
+     * @return: java.util.List<java.lang.String>
+     * @author: njs
+     * @date: 2025/6/5 16:32
+     */
+   List<String> selectDeliverNumListByTmsShipmentNumber(@Param("tmsShipmentNumber") String tmsShipmentNumber);
+
+
+
+
+}

+ 3 - 2
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysMagnetLogMapper.java

@@ -2,6 +2,7 @@ package com.dgtly.system.mapper;
 
 
 import com.dgtly.system.domain.SysMagnetLog;
 import com.dgtly.system.domain.SysMagnetLog;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 磁铁日志Mapper接口
  * 磁铁日志Mapper接口
@@ -62,8 +63,8 @@ public interface SysMagnetLogMapper
     /**
     /**
      * 根据用户id,移动端、电脑端,查询最近一点的埋点记录
      * 根据用户id,移动端、电脑端,查询最近一点的埋点记录
      *
      *
-     * @param sysMagnetLog 磁铁日志
+     * @param paramMap
      * @return 磁铁日志
      * @return 磁铁日志
      */
      */
-    public SysMagnetLog selectOneByCondition(SysMagnetLog sysMagnetLog);
+    public SysMagnetLog selectOneByCondition(Map<String,Object> paramMap);
 }
 }

+ 67 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/IMetaHanaDeliverSignService.java

@@ -0,0 +1,67 @@
+package com.dgtly.system.service;
+
+import com.dgtly.system.domain.MetaHanaDeliverSign;
+import java.util.List;
+
+/**
+ * 电子单签收状态数量Service接口
+ *
+ * @author dgtly
+ * @date 2025-01-03
+ */
+public interface IMetaHanaDeliverSignService
+{
+    /**
+     * 查询电子单签收状态数量
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 电子单签收状态数量
+     */
+    public MetaHanaDeliverSign selectMetaHanaDeliverSignById(String deliverNumber);
+
+    /**
+     * 查询电子单签收状态数量列表
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 电子单签收状态数量集合
+     */
+    public List<MetaHanaDeliverSign> selectMetaHanaDeliverSignList(MetaHanaDeliverSign metaHanaDeliverSign);
+
+
+
+    /**
+     * 修改电子单签收状态数量
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 结果
+     */
+    public int updateMetaHanaDeliverSign(MetaHanaDeliverSign metaHanaDeliverSign);
+
+    /**
+     * 批量删除电子单签收状态数量
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaHanaDeliverSignByIds(String ids);
+
+    /**
+     * 删除电子单签收状态数量信息
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 结果
+     */
+    public int deleteMetaHanaDeliverSignById(String deliverNumber);
+
+
+    /**
+     * @description: 预处理电子单签收数据,交货单,订单,运单签收状态和最近一次签收时间
+     * @param: []
+     * @return: boolean
+     * @author: njs
+     * @date: 2025/6/5 9:53
+     */
+    public void pretreatmentHanaDeliverSign();
+
+
+}

+ 276 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/MetaHanaDeliverSignServiceImpl.java

@@ -0,0 +1,276 @@
+package com.dgtly.system.service.impl;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.dgtly.system.domain.DeliverSignVO;
+import com.dgtly.system.domain.OrderSignVO;
+import com.dgtly.system.domain.TmsShipmentSignVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.system.mapper.MetaHanaDeliverSignMapper;
+import com.dgtly.system.domain.MetaHanaDeliverSign;
+import com.dgtly.system.service.IMetaHanaDeliverSignService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 电子单签收状态数量Service业务层处理
+ *
+ * @author dgtly
+ * @date 2025-01-03
+ */
+@Service
+public class MetaHanaDeliverSignServiceImpl implements IMetaHanaDeliverSignService
+{
+
+    @Autowired
+    private MetaHanaDeliverSignMapper metaHanaDeliverSignMapper;
+
+    /**
+     * 查询电子单签收状态数量
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 电子单签收状态数量
+     */
+    @Override
+    public MetaHanaDeliverSign selectMetaHanaDeliverSignById(String deliverNumber)
+    {
+        return metaHanaDeliverSignMapper.selectMetaHanaDeliverSignById(deliverNumber);
+    }
+
+    /**
+     * 查询电子单签收状态数量列表
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 电子单签收状态数量
+     */
+    @Override
+    public List<MetaHanaDeliverSign> selectMetaHanaDeliverSignList(MetaHanaDeliverSign metaHanaDeliverSign)
+    {
+        return metaHanaDeliverSignMapper.selectMetaHanaDeliverSignList(metaHanaDeliverSign);
+    }
+
+
+
+    /**
+     * 修改电子单签收状态数量
+     *
+     * @param metaHanaDeliverSign 电子单签收状态数量
+     * @return 结果
+     */
+    @Override
+    public int updateMetaHanaDeliverSign(MetaHanaDeliverSign metaHanaDeliverSign)
+    {
+        return metaHanaDeliverSignMapper.updateMetaHanaDeliverSign(metaHanaDeliverSign);
+    }
+
+    /**
+     * 删除电子单签收状态数量对象
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaHanaDeliverSignByIds(String ids)
+    {
+        return metaHanaDeliverSignMapper.deleteMetaHanaDeliverSignByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除电子单签收状态数量信息
+     *
+     * @param deliverNumber 电子单签收状态数量ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaHanaDeliverSignById(String deliverNumber)
+    {
+        return metaHanaDeliverSignMapper.deleteMetaHanaDeliverSignById(deliverNumber);
+    }
+
+    /**
+     * @description: 预处理电子单签收数据,交货单,订单,运单签收状态和最近一次签收时间
+     * @param: []
+     * @return: boolean
+     * @author: njs
+     * @date: 2025/6/5 9:53
+     */
+    @Override
+    public void pretreatmentHanaDeliverSign() {
+        List<MetaHanaDeliverSign> orderList = metaHanaDeliverSignMapper.selectDeliverSignListByOrderNumberAndOrderItem();
+
+        //先处理订单,(处理电子单签收里的订单)
+        if(orderList !=null && orderList.size()>0){
+            List<OrderSignVO> orderSignVOList = new ArrayList<>();
+            // 先建立订单号与对象的映射关系
+            Map<String, List<MetaHanaDeliverSign>> orderSignList = orderList.stream()
+                    .collect(Collectors.groupingBy(MetaHanaDeliverSign::getOrderNumber));
+
+            // 遍历处理每个订单
+            orderSignList.forEach((orderNum, list) -> {
+                            if(!orderSignVOList.contains(orderNum)){
+                                OrderSignVO vo = new OrderSignVO();
+                                vo.setOrderNumber(orderNum);
+                                List<String> signList = new ArrayList<>();
+                                if(list !=null && list.size()>0){
+                                    list.forEach(sign->{
+                                        BigDecimal differenceQty = new BigDecimal(0);
+                                        //差值
+                                        if (org.apache.commons.lang.StringUtils.isNotBlank(sign.getDifferenceQty())) {
+                                            differenceQty = new BigDecimal(sign.getDifferenceQty());
+                                            differenceQty = differenceQty.setScale(0, BigDecimal.ROUND_HALF_UP);
+                                        }
+                                        //判断是否待签收和异常签收标记
+                                        if(differenceQty.compareTo(new BigDecimal("0")) == 0 ) {
+                                            if(sign.getZdateDate() !=null && !("").equals(sign.getZdateDate()) && !sign.getZdateDate().equals("00000000")){
+                                                //正常签收
+                                                signList.add("1");
+                                            }else{
+                                                //未签收
+                                                signList.add("3");
+                                            }
+                                        }else{
+                                            if(("全部签收").equals(sign.getAbnormalStatus())){
+                                                //正常签收
+                                                signList.add("1");
+                                            }else{
+                                                //异常签收 待签收
+                                                signList.add("0");
+                                            }
+                                        }
+                                    });
+
+                                    if(signList !=null && signList.size()>0){
+                                        if(signList.contains("0")){
+                                            //异常签收 待签收
+                                            vo.setSignType(0);
+                                            String signTime = findMaxValidDateTime(list);
+                                            vo.setZdateDate(signTime);
+                                        }else if(signList.contains("1") && !signList.contains("0")){
+                                            //正常签收
+                                            vo.setSignType(1);
+                                            String signTime = findMaxValidDateTime(list);
+                                            vo.setZdateDate(signTime);
+                                        }else{
+                                            //未签收
+                                            vo.setSignType(3);
+                                        }
+                                    }
+
+                                    orderSignVOList.add(vo);
+
+                                }
+                            }
+            });
+            if(orderSignVOList !=null && orderSignVOList.size()>0){
+                //清除表数据再批量新增
+                metaHanaDeliverSignMapper.truncateOrderSign();
+                metaHanaDeliverSignMapper.batchOrderSign(orderSignVOList);
+
+            }
+        }
+
+        //再处理运单,(处理tms运单表中的运单)
+        List<DeliverSignVO> tmsShipMentList =  metaHanaDeliverSignMapper.selectDeliverSignByTmsShipmentNumber();
+        if(tmsShipMentList !=null && tmsShipMentList.size()>0){
+            List<TmsShipmentSignVO> tmsList = new ArrayList<>();
+            // 先建立运单号与对象的映射关系
+            Map<String, List<DeliverSignVO>> shipmentMap = tmsShipMentList.stream()
+                    .collect(Collectors.groupingBy(DeliverSignVO::getTmsShipmentNum));
+
+            // 遍历处理每个运单号
+                        shipmentMap.forEach((shipmentNum, list) -> {
+                            List<String> tmsSignList = new ArrayList<>();
+                                //已处理过就跳过
+                                if (!tmsList.contains(shipmentNum)) {
+                                    TmsShipmentSignVO signVO = new TmsShipmentSignVO();
+                                    signVO.setTmsShipmentNumber(shipmentNum);
+                                    if (list != null && list.size() > 0) {
+                                        list.forEach(sign -> {
+                                            //计算该运单下电子签收单状态和最近签收时间
+                                            BigDecimal differenceQty = new BigDecimal(0);
+                                            if (org.apache.commons.lang.StringUtils.isNotBlank(sign.getDifferenceQty())) {
+                                                differenceQty = new BigDecimal(sign.getDifferenceQty());
+                                                differenceQty = differenceQty.setScale(0, BigDecimal.ROUND_HALF_UP);
+                                            }
+                                            //判断是否待签收和异常签收标记
+                                            if (differenceQty.compareTo(new BigDecimal("0")) == 0) {
+                                                //正常签收
+                                                //没有签收时间的则为未签收
+                                                if (sign.getZDate() != null && !("").equals(sign.getZDate()) && !sign.getZDate().equals("00000000")) {
+                                                    tmsSignList.add("1");
+                                                } else {
+                                                    tmsSignList.add("3");
+                                                }
+                                            } else {
+                                                //abnormalStatus 1未签收;2未开始补货;3部分签收;4全部签收
+                                                if (("4").equals(sign.getAbnormalStatus())) {
+                                                    //正常签收
+                                                    tmsSignList.add("1");
+                                                } else {
+                                                    //异常签收 待签收
+                                                    tmsSignList.add("0");
+                                                }
+
+                                            }
+
+                                        });
+
+                                        if (tmsSignList.contains("0")) {
+                                            signVO.setSignType(0);
+                                            String signTime = findMaxTMSDateTime(list);
+                                            signVO.setZdateDate(signTime);
+                                        } else if (!tmsSignList.contains("0") && tmsSignList.contains("1")) {
+                                            signVO.setSignType(1);
+                                            String signTime = findMaxTMSDateTime(list);
+                                            signVO.setZdateDate(signTime);
+                                        } else {
+                                            signVO.setSignType(3);
+                                        }
+
+                                    }else{
+                                        signVO.setSignType(3);
+                                    }
+
+                                    tmsList.add(signVO);
+                                }
+                        });
+                        if(tmsList !=null && tmsList.size()>0){
+                            //清楚表数据再批量新增
+                            metaHanaDeliverSignMapper.truncateTmsShipmentSign();
+                            metaHanaDeliverSignMapper.batchTmsShipmentSign(tmsList);
+
+                        }
+
+
+        }
+
+    }
+
+
+    public  String findMaxValidDateTime(List<MetaHanaDeliverSign> list) {
+        return list.stream()
+                .filter(obj -> !obj.getSignTime().startsWith("0000"))
+                .map(MetaHanaDeliverSign::getSignTime)  // 提取需要比较的字段
+                .max(Comparator.naturalOrder())
+                .orElse(null);
+    }
+
+    public  String findMaxTMSDateTime(List<DeliverSignVO> list) {
+        return list.stream()
+                .filter(obj -> !obj.getZdateDate().startsWith("0000"))
+                .map(DeliverSignVO::getZdateDate)  // 提取需要比较的字段
+                .max(Comparator.naturalOrder())
+                .orElse(null);
+    }
+
+
+
+
+}

+ 23 - 5
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysMagnetLogServiceImpl.java

@@ -1,8 +1,8 @@
 package com.dgtly.system.service.impl;
 package com.dgtly.system.service.impl;
 
 
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+
 import com.dgtly.common.utils.DateUtils;
 import com.dgtly.common.utils.DateUtils;
 import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.mapper.SysUserMapper;
 import com.dgtly.system.mapper.SysUserMapper;
@@ -71,10 +71,28 @@ public class SysMagnetLogServiceImpl implements ISysMagnetLogService
             sysMagnetLog.setCreateTime(sf.parse(createTimeStr));
             sysMagnetLog.setCreateTime(sf.parse(createTimeStr));
             //计算渠道看板、产品看板、会员看板的停留时长
             //计算渠道看板、产品看板、会员看板的停留时长
             //本次是主页、渠道看板、产品看板、会员看板、关闭数据看板
             //本次是主页、渠道看板、产品看板、会员看板、关闭数据看板
-            if("主页".equals(sysMagnetLog.getMagnetName()) || "渠道看板".equals(sysMagnetLog.getMagnetName()) || "产品看板".equals(sysMagnetLog.getMagnetName()) || "会员看板".equals(sysMagnetLog.getMagnetName()) || "关闭数据看板".equals(sysMagnetLog.getMagnetName())){
+            if("主页".equals(sysMagnetLog.getMagnetName()) || "渠道看板".equals(sysMagnetLog.getMagnetName()) || "产品看板".equals(sysMagnetLog.getMagnetName()) || "会员看板".equals(sysMagnetLog.getMagnetName()) || "关闭数据看板".equals(sysMagnetLog.getMagnetName())
+                    || "好邦手主页".equals(sysMagnetLog.getMagnetName()) || "好邦手渠道看板".equals(sysMagnetLog.getMagnetName()) || "好邦手产品看板".equals(sysMagnetLog.getMagnetName()) || "好邦手会员看板".equals(sysMagnetLog.getMagnetName())  || "好邦手关闭数据看板".equals(sysMagnetLog.getMagnetName())
+                    || "随身邦主页".equals(sysMagnetLog.getMagnetName()) || "随身邦渠道看板".equals(sysMagnetLog.getMagnetName()) || "随身邦产品看板".equals(sysMagnetLog.getMagnetName()) || "随身邦会员看板".equals(sysMagnetLog.getMagnetName())  || "随身邦关闭数据看板".equals(sysMagnetLog.getMagnetName())){
+               //判断是哪个入口
+                String agent="";
+                if(sysMagnetLog.getMagnetName().contains("好邦手")){
+                    agent="好邦手";
+                }else if(sysMagnetLog.getMagnetName().contains("随身邦")){
+                    agent="随身邦";
+                }
+                //传参
+                Map<String,Object> paramMap=new HashMap<String,Object>();
+                paramMap.put("userId",sysMagnetLog.getUserId());
+                paramMap.put("whatEnd",sysMagnetLog.getWhatEnd());
+                List<String> magentList=new ArrayList<String>();
+                magentList.add(agent+"渠道看板");
+                magentList.add(agent+"产品看板");
+                magentList.add(agent+"会员看板");
+                paramMap.put("magentList",magentList);
                 //查询最近的上次埋点
                 //查询最近的上次埋点
-                SysMagnetLog sysMagnetLogLast = sysMagnetLogMapper.selectOneByCondition(sysMagnetLog);
-                if(sysMagnetLogLast!=null && sysMagnetLogLast.getUpdateTime()==null && ("渠道看板".equals(sysMagnetLogLast.getMagnetName()) || "产品看板".equals(sysMagnetLogLast.getMagnetName()) || "会员看板".equals(sysMagnetLogLast.getMagnetName()))){
+                SysMagnetLog sysMagnetLogLast = sysMagnetLogMapper.selectOneByCondition(paramMap);
+                if(sysMagnetLogLast!=null && sysMagnetLogLast.getUpdateTime()==null){
                     //记录结束访问时间(仅渠道看板、产品看板、会员看板)
                     //记录结束访问时间(仅渠道看板、产品看板、会员看板)
                     sysMagnetLogLast.setUpdateTime(sysMagnetLog.getCreateTime());
                     sysMagnetLogLast.setUpdateTime(sysMagnetLog.getCreateTime());
                     //记录上次的停留时间
                     //记录上次的停留时间

+ 221 - 0
suishenbang-system/src/main/resources/mapper/system/MetaHanaDeliverSignMapper.xml

@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dgtly.system.mapper.MetaHanaDeliverSignMapper">
+
+    <resultMap type="MetaHanaDeliverSign" id="MetaHanaDeliverSignResult">
+        <result property="deliverNumber"    column="deliver_number"    />
+        <result property="deliverItem"    column="deliver_Item"    />
+        <result property="matnrCode"    column="matnr_code"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="orderItem"    column="order_Item"    />
+        <result property="orderCreateTime"    column="order_create_time"    />
+        <result property="deliverQty"    column="deliver_qty"    />
+        <result property="actualQty"    column="actual_qty"    />
+        <result property="differenceQty"    column="difference_qty"    />
+        <result property="zdateDate"    column="zdate_date"    />
+        <result property="zdateTime"    column="zdate_time"    />
+        <result property="abnormalOrder"    column="abnormal_order"    />
+        <result property="abnormalStatus"    column="abnormal_status"    />
+    </resultMap>
+
+    <sql id="selectMetaHanaDeliverSignVo">
+        select deliver_number, deliver_Item,matnr_code, order_number, order_Item, order_create_time, deliver_qty, actual_qty, difference_qty, zdate_date, zdate_time, abnormal_order, abnormal_status from meta_hana_deliver_sign
+    </sql>
+
+    <select id="selectMetaHanaDeliverSignList" parameterType="MetaHanaDeliverSign" resultMap="MetaHanaDeliverSignResult">
+        <include refid="selectMetaHanaDeliverSignVo"/>
+        <where>
+            <if test="deliverNumber != null  and deliverNumber != ''"> and deliver_number = #{deliverNumber}</if>
+            <if test="deliverItem != null  and deliverItem != ''"> and deliver_Item = #{deliverItem}</if>
+            <if test="matnrCode != null  and matnrCode != ''"> and matnr_code = #{matnrCode}</if>
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+            <if test="orderItem != null  and orderItem != ''"> and order_Item = #{orderItem}</if>
+            <if test="orderCreateTime != null  and orderCreateTime != ''"> and order_create_time = #{orderCreateTime}</if>
+            <if test="deliverQty != null  and deliverQty != ''"> and deliver_qty = #{deliverQty}</if>
+            <if test="actualQty != null  and actualQty != ''"> and actual_qty = #{actualQty}</if>
+            <if test="differenceQty != null  and differenceQty != ''"> and difference_qty = #{differenceQty}</if>
+            <if test="zdateDate != null  and zdateDate != ''"> and zdate_date = #{zdateDate}</if>
+            <if test="zdateTime != null  and zdateTime != ''"> and zdate_time = #{zdateTime}</if>
+            <if test="abnormalOrder != null  and abnormalOrder != ''"> and abnormal_order = #{abnormalOrder}</if>
+            <if test="abnormalStatus != null  and abnormalStatus != ''"> and abnormal_status = #{abnormalStatus}</if>
+
+        </where>
+    </select>
+
+    <select id="selectMetaHanaDeliverSignById" parameterType="String" resultMap="MetaHanaDeliverSignResult">
+        <include refid="selectMetaHanaDeliverSignVo"/>
+        where deliver_number = #{deliverNumber}
+    </select>
+
+
+
+    <update id="updateMetaHanaDeliverSign" parameterType="MetaHanaDeliverSign">
+        update meta_hana_deliver_sign
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="matnrCode != null  and matnrCode != ''">matnr_code = #{matnrCode},</if>
+            <if test="orderNumber != null  and orderNumber != ''">order_number = #{orderNumber},</if>
+            <if test="orderItem != null  and orderItem != ''">order_Item = #{orderItem},</if>
+            <if test="orderCreateTime != null  and orderCreateTime != ''">order_create_time = #{orderCreateTime},</if>
+            <if test="deliverQty != null  and deliverQty != ''">deliver_qty = #{deliverQty},</if>
+            <if test="actualQty != null  and actualQty != ''">actual_qty = #{actualQty},</if>
+            <if test="differenceQty != null  and differenceQty != ''">difference_qty = #{differenceQty},</if>
+            <if test="zdateDate != null  and zdateDate != ''">zdate_date = #{zdateDate},</if>
+            <if test="zdateTime != null  and zdateTime != ''">zdate_time = #{zdateTime},</if>
+            <if test="abnormalOrder != null  and abnormalOrder != ''">abnormal_order = #{abnormalOrder},</if>
+            <if test="abnormalStatus != null  and abnormalStatus != ''">abnormal_status = #{abnormalStatus},</if>
+
+        </trim>
+        where deliver_number = #{deliverNumber} and deliver_Item =#{deliverItem}
+    </update>
+
+    <delete id="deleteMetaHanaDeliverSignById" parameterType="String">
+        delete from meta_hana_deliver_sign where deliver_number = #{deliverNumber}
+    </delete>
+
+    <delete id="deleteMetaHanaDeliverSignByIds" parameterType="String">
+        delete from meta_hana_deliver_sign where deliver_number in
+        <foreach item="deliverNumber" collection="array" open="(" separator="," close=")">
+            #{deliverNumber}
+        </foreach>
+    </delete>
+
+    <select id="selectMetaHanaDeliverSignListHavingAbnormal" parameterType="MetaHanaDeliverSign" resultMap="MetaHanaDeliverSignResult">
+        <include refid="selectMetaHanaDeliverSignVo"/>
+        WHERE abnormal_order IS NOT NULL and abnormal_order !='' and abnormal_order !='null'
+    </select>
+
+    <select id="selectAbnormalSignByabnormalOrderAndItem" parameterType="MetaHanaDeliverSign" resultMap="MetaHanaDeliverSignResult">
+        <include refid="selectMetaHanaDeliverSignVo"/>
+         <where>
+            <if test="abnormalOrder != null  and abnormalOrder != ''"> and order_number = #{abnormalOrder}</if>
+         </where>
+         limit 1
+    </select>
+
+    <select id="selectDeliverSignByOrderNumber" resultType="com.dgtly.system.domain.DeliverSignVO">
+        SELECT
+            abnormal_order AS abnormalOrder,
+            SUM( difference_qty ) AS differenceQty,
+            min( CASE WHEN abnormal_status = '未开始补货' THEN 1 WHEN abnormal_status = '补货中' THEN 2 WHEN abnormal_status = '部分签收' THEN 3 WHEN abnormal_status = '全部签收' THEN 4 ELSE 5 END ) AS abnormalStatus,
+            max(
+                    DATE_FORMAT( STR_TO_DATE( CONCAT( zdate_date, zdate_time ), '%Y%m%d%H%i%s' ), '%Y-%m-%d %H:%i:%s ' )) AS zdateDate
+        FROM
+            meta_hana_deliver_sign
+        WHERE
+            order_number = #{OrderNumber}
+          AND abnormal_order IS NOT NULL
+          AND abnormal_order != ''
+        group by abnormal_order
+    </select>
+
+    <select id="selectDeliverSignListByOrderNumberAndOrderItem" resultType="com.dgtly.system.domain.MetaHanaDeliverSign">
+        SELECT
+            a.order_number AS orderNumber,
+            a.difference_qty AS differenceQty,
+            a.zdate_date AS zdateDate,
+            a.abnormal_status AS abnormalStatus,
+            DATE_FORMAT( MAX( STR_TO_DATE( CONCAT( a.zdate_date, a.zdate_time ), '%Y%m%d%H%i%s' )), '%Y-%m-%d %H:%i:%s' ) AS signTime
+        FROM
+            meta_hana_deliver_sign a
+        GROUP BY
+            a.order_number,
+            a.difference_qty,
+            a.zdate_date,
+            a.zdate_time,
+            a.abnormal_status
+    </select>
+
+
+
+    <select id="selectDeliverSignByTmsShipmentNumber" resultType="com.dgtly.system.domain.DeliverSignVO">
+        SELECT
+            b.tms_shipment_number AS tmsShipmentNum,
+            a.difference_qty AS differenceQty,
+            CASE
+                a.abnormal_status
+                WHEN '补货中' THEN
+                    1
+                WHEN '未开始补货' THEN
+                    2
+                WHEN '部分签收' THEN
+                    3
+                WHEN '全部签收' THEN
+                    4 ELSE 5
+                END AS abnormalStatus,
+            DATE_FORMAT( MAX( STR_TO_DATE( CONCAT( a.zdate_date, a.zdate_time ), '%Y%m%d%H%i%s' )), '%Y-%m-%d %H:%i:%s' ) AS zdateDate,
+            a.zdate_date AS zDate
+        FROM
+            meta_hana_deliver_sign a
+                JOIN (
+                SELECT
+                    tms_shipment_number,
+                    delivery_number
+                FROM
+                    tms_logistics_status
+                WHERE
+                    is_delete = '0'
+                  AND date_format( create_time, '%Y%m%d' ) >= DATE_ADD( LAST_DAY( NOW() - INTERVAL 4 MONTH ), INTERVAL 1 DAY )
+                GROUP BY
+                    tms_shipment_number,
+                    delivery_number
+            ) b ON a.deliver_number = b.delivery_number
+        GROUP BY
+            a.deliver_number,
+            a.deliver_Item,
+            a.difference_qty,
+            a.abnormal_status,
+            a.zdate_date,
+            a.zdate_time
+
+    </select>
+
+    <select id="selectOrderNumberSign" resultType="java.lang.String">
+        SELECT distinct order_number FROM meta_hana_deliver_sign
+    </select>
+
+    <select id="selectDeliverNumListByTmsShipmentNumber" resultType="java.lang.String">
+        SELECT DISTINCT delivery_number FROM tms_logistics_status WHERE is_delete = '0' AND tms_shipment_number =#{tmsShipmentNumber}
+    </select>
+
+    <select id="selectTmsShipmentNumberSign" resultType="java.lang.String">
+        SELECT DISTINCT
+            tms_shipment_number
+        FROM
+            tms_logistics_status
+        WHERE
+            is_delete = '0'
+          AND date_format( create_time, '%Y%m%d' ) >= DATE_ADD( LAST_DAY( NOW() - INTERVAL 4 MONTH ), INTERVAL 1 DAY )
+    </select>
+
+    <update id="truncateOrderSign">
+        TRUNCATE TABLE pretreatment_hana_order_sign
+    </update>
+
+    <update id="truncateTmsShipmentSign">
+        TRUNCATE TABLE pretreatment_hana_tms_shipment_sign
+    </update>
+
+    <insert id="batchOrderSign">
+        insert into pretreatment_hana_order_sign
+        (order_number,sign_time,sign_type)
+        values
+        <foreach collection="list" item="sign" separator=",">
+            (#{sign.orderNumber},#{sign.zdateDate},
+            #{sign.signType})
+        </foreach>
+    </insert>
+
+    <insert id="batchTmsShipmentSign">
+        insert into pretreatment_hana_tms_shipment_sign
+        (tms_shipment_number,sign_time,sign_type)
+        values
+        <foreach collection="list" item="sign" separator=",">
+            (#{sign.tmsShipmentNumber},#{sign.zdateDate},
+            #{sign.signType})
+        </foreach>
+    </insert>
+
+
+</mapper>

+ 4 - 1
suishenbang-system/src/main/resources/mapper/system/SysMagnetLogMapper.xml

@@ -131,7 +131,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
         <where>
             <if test="userId != null "> and user_id = #{userId}</if>
             <if test="userId != null "> and user_id = #{userId}</if>
             <if test="whatEnd != null "> and what_end = #{whatEnd}</if>
             <if test="whatEnd != null "> and what_end = #{whatEnd}</if>
-            and magnet_name in ('渠道看板','产品看板','会员看板')
+            and magnet_name in
+            <foreach item="magentName" collection="magentList" open="(" separator="," close=")">
+                #{magentName}
+            </foreach>
         </where>
         </where>
          order by create_time desc limit 1
          order by create_time desc limit 1
     </select>
     </select>