Browse Source

电子单签收数据预处理第一版

njs 6 months ago
parent
commit
bb21319093

+ 2 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/HanaOrderComponent.java

@@ -1337,6 +1337,8 @@ public class HanaOrderComponent {
             int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"deliverSignature/"))));
             long endTime=System.currentTimeMillis();
             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);

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

@@ -0,0 +1,35 @@
+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 Integer signType;
+
+    /** 运单计算用主单总差值*/
+    private String differenceQty;
+
+    /** 异常处理订单签收状态 1未开始补货;2补货中; 3部分签收;4全部签收
+     * */
+    private String abnormalStatus;
+
+    /**运单下交货单数量*/
+    private String deliverNum;
+}

+ 4 - 14
suishenbang-system/src/main/java/com/dgtly/system/domain/MetaHanaDeliverSign.java

@@ -16,59 +16,49 @@ import com.dgtly.common.core.domain.BaseEntity;
 public class MetaHanaDeliverSign extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
-
     /** 交货单号 */
-    @Excel(name = "交货单号")
     private String deliverNumber;
 
     /** 交货单行项目号 */
-    @Excel(name = "交货单行项目号")
     private String deliverItem;
 
     /** 物料号 */
-    @Excel(name = "物料号")
     private String matnrCode;
 
     /** 订单号 */
-    @Excel(name = "订单号")
     private String orderNumber;
 
     /** 订单行项目 */
-    @Excel(name = "订单行项目")
     private String orderItem;
 
     /** 订单创建日期 */
-    @Excel(name = "订单创建日期")
     private String orderCreateTime;
 
     /** 交货数量 */
-    @Excel(name = "交货数量")
     private String deliverQty;
 
     /** 实收数量 */
-    @Excel(name = "实收数量")
     private String actualQty;
 
     /** 差异数量 */
-    @Excel(name = "差异数量")
     private String differenceQty;
 
     /** 客户签署日期 */
-    @Excel(name = "客户签署日期")
     private String zdateDate;
 
     /** 客户签署时间 */
-    @Excel(name = "客户签署时间")
     private String zdateTime;
 
     /** 异常处理订单 */
-    @Excel(name = "异常处理订单")
     private String abnormalOrder;
 
     /** 异常处理订单签收状态 */
-    @Excel(name = "异常处理订单签收状态")
     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;
+
+}

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

@@ -1,6 +1,9 @@
 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;
@@ -73,4 +76,65 @@ public interface MetaHanaDeliverSignMapper
      * @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(@Param("OrderNumber") String OrderNumber, @Param("OrderItem")String OrderItem);
+
+    /**
+     * @description: 根据运单查询交货单签收信息
+     * @param: [OrderNumber]
+     * @return: java.util.List<com.dgtly.system.domain.DeliverSignVO>
+     * @author: njs
+     * @date: 2025/6/5 10:05
+     */
+    List<DeliverSignVO> selectDeliverSignByTmsShipmentNumber(@Param("tmsShipmentNumber") String tmsShipmentNumber);
+
+
+
+    /**
+     * @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);
+
+
+
+
 }

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

@@ -54,4 +54,14 @@ public interface IMetaHanaDeliverSignService
     public int deleteMetaHanaDeliverSignById(String deliverNumber);
 
 
+    /**
+     * @description: 预处理电子单签收数据,交货单,订单,运单签收状态和最近一次签收时间
+     * @param: []
+     * @return: boolean
+     * @author: njs
+     * @date: 2025/6/5 9:53
+     */
+    public void pretreatmentHanaDeliverSign();
+
+
 }

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

@@ -1,6 +1,12 @@
 package com.dgtly.system.service.impl;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+
+import com.dgtly.system.domain.DeliverSignVO;
+import com.dgtly.system.domain.OrderSignVO;
+import com.dgtly.system.domain.TmsShipmentSignVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.dgtly.system.mapper.MetaHanaDeliverSignMapper;
@@ -82,5 +88,150 @@ public class MetaHanaDeliverSignServiceImpl implements IMetaHanaDeliverSignServi
         return metaHanaDeliverSignMapper.deleteMetaHanaDeliverSignById(deliverNumber);
     }
 
+    /**
+     * @description: 预处理电子单签收数据,交货单,订单,运单签收状态和最近一次签收时间
+     * @param: []
+     * @return: boolean
+     * @author: njs
+     * @date: 2025/6/5 9:53
+     */
+    @Override
+    public void pretreatmentHanaDeliverSign() {
+       List<String>  orderList = metaHanaDeliverSignMapper.selectOrderNumberSign();
+        //先处理订单,(处理电子单签收里的订单)
+        if(orderList !=null && orderList.size()>0){
+            List<OrderSignVO> orderSignVOList = new ArrayList<>();
+            orderList.forEach(order->{
+                OrderSignVO vo = new OrderSignVO();
+                vo.setOrderNumber(order);
+                List<MetaHanaDeliverSign> hanaDeliverSignList = metaHanaDeliverSignMapper.selectDeliverSignListByOrderNumberAndOrderItem(order,null);
+                if(hanaDeliverSignList !=null && hanaDeliverSignList.size()>0){
+                    List<String> signList = new ArrayList<>();
+                    hanaDeliverSignList.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);
+                            vo.setZdateDate(hanaDeliverSignList.get(0).getSignTime());
+                        }else if(signList.contains("1") && !signList.contains("0")){
+                            //正常签收
+                            vo.setSignType(1);
+                            vo.setZdateDate(hanaDeliverSignList.get(0).getSignTime());
+                        }else{
+                            //未签收
+                            vo.setSignType(3);
+                        }
+                    }
+                }else{
+                    vo.setSignType(3);
+                }
+                orderSignVOList.add(vo);
+            });
+
+            if(orderSignVOList !=null && orderSignVOList.size()>0){
+                //清除表数据再批量新增
+                metaHanaDeliverSignMapper.truncateOrderSign();
+                metaHanaDeliverSignMapper.batchOrderSign(orderSignVOList);
+
+            }
+        }
+
+        //再处理运单,(处理tms运单表中的运单)
+        List<String>  tmsShipMentList = metaHanaDeliverSignMapper.selectTmsShipmentNumberSign();
+        if(tmsShipMentList !=null && tmsShipMentList.size()>0){
+            List<TmsShipmentSignVO> tmsList = new ArrayList<>();
+            tmsShipMentList.forEach(tmsShipmentNumber->{
+                TmsShipmentSignVO signVO = new TmsShipmentSignVO();
+                signVO.setTmsShipmentNumber(tmsShipmentNumber);
+            //abnormalStatus 1未签收;2未开始补货;3部分签收;4全部签收
+            List<DeliverSignVO> deliverSignList =  metaHanaDeliverSignMapper.selectDeliverSignByTmsShipmentNumber(tmsShipmentNumber);
+            if(deliverSignList !=null && deliverSignList.size()>0){
+                List<String> signList = new ArrayList<>();
+                deliverSignList.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")){
+                            sign.setSignType(1);
+                        }else{
+                            sign.setSignType(3);
+                        }
+                    }else{
+                        if(("4").equals(sign.getAbnormalStatus())){
+                            //正常签收
+                            sign.setSignType(1);
+                        }else{
+                            //异常签收 待签收
+                            sign.setSignType(0);
+                        }
+
+                    }
+                    signList.add(sign.getSignType().toString());
+
+                    if(!sign.getSignType().equals("3")){
+                        //最近一次签收日期
+                        if(sign.getZdateDate() !=null ){
+                            signVO.setZdateDate(sign.getZdateDate());
+                        }
+                    }
+
+                });
+                if(signList.contains("0")){
+                    signVO.setSignType(0);
+                }else if(!signList.contains("0") && signList.contains("1")){
+                    signVO.setSignType(1);
+                }else{
+                    signVO.setSignType(3);
+                }
+
+            }else{
+                //未签收
+                signVO.setSignType(3);
+            }
+                tmsList.add(signVO);
+            });
+            if(tmsList !=null && tmsList.size()>0){
+                //清楚表数据再批量新增
+                metaHanaDeliverSignMapper.truncateTmsShipmentSign();
+                metaHanaDeliverSignMapper.batchTmsShipmentSign(tmsList);
+
+            }
+
+        }
+
+    }
+
 
 }

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

@@ -93,4 +93,124 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </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
+        order_number AS orderNumber,
+        deliver_qty AS deliverQty,
+        actual_qty AS actualQty,
+        difference_qty AS differenceQty,
+        zdate_date AS zdateDate,
+        zdate_time AS zdateTime,
+        (select max(DATE_FORMAT( STR_TO_DATE( CONCAT( zdate_date, zdate_time ), '%Y%m%d%H%i%s' ), '%Y-%m-%d %H:%i:%s ' )) FROM
+        meta_hana_deliver_sign
+        <where>
+            <if test="OrderNumber !=null and OrderNumber !='' "> and order_number = #{OrderNumber}</if>
+            <if test="OrderItem !=null and OrderItem !='' "> and order_Item = #{OrderItem}</if>
+        </where>)  AS signTime,
+        abnormal_order AS abnormalOrder,
+        abnormal_status AS abnormalStatus
+        FROM
+        meta_hana_deliver_sign
+        <where>
+            <if test="OrderNumber !=null and OrderNumber !='' "> and order_number = #{OrderNumber}</if>
+            <if test="OrderItem !=null and OrderItem !='' "> and order_Item = #{OrderItem}</if>
+        </where>
+    </select>
+
+
+
+    <select id="selectDeliverSignByTmsShipmentNumber" resultType="com.dgtly.system.domain.DeliverSignVO">
+        SELECT
+            difference_qty AS differenceQty,
+            (
+                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,
+            (
+                SELECT
+                    max(
+                            DATE_FORMAT( STR_TO_DATE( CONCAT( zdate_date, zdate_time ), '%Y%m%d%H%i%s' ), '%Y-%m-%d %H:%i:%s ' ))
+                FROM
+
+
+                    meta_hana_deliver_sign
+                WHERE
+                        deliver_number IN  ( SELECT DISTINCT delivery_number FROM tms_logistics_status WHERE is_delete = '0' AND tms_shipment_number =#{tmsShipmentNumber} )) AS zdateDate,
+            zdate_date AS zDate
+        FROM
+            meta_hana_deliver_sign
+        WHERE
+                deliver_number IN ( SELECT DISTINCT delivery_number FROM tms_logistics_status WHERE is_delete = '0' AND tms_shipment_number =#{tmsShipmentNumber} )
+
+    </select>
+
+    <select id="selectOrderNumberSign" resultType="java.lang.String">
+        SELECT distinct order_number FROM meta_hana_deliver_sign
+    </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
+        (order_number,sign_time,sign_type)
+        values
+        <foreach collection="list" item="sign" separator=",">
+            (#{sign.tms_shipment_number},#{sign.zdateDate},
+            #{sign.signType})
+        </foreach>
+    </insert>
+
+
 </mapper>