|
@@ -2,7 +2,10 @@ package com.dgtly.system.service.impl;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import com.dgtly.system.domain.DeliverSignVO;
|
|
import com.dgtly.system.domain.DeliverSignVO;
|
|
|
import com.dgtly.system.domain.OrderSignVO;
|
|
import com.dgtly.system.domain.OrderSignVO;
|
|
@@ -97,62 +100,73 @@ public class MetaHanaDeliverSignServiceImpl implements IMetaHanaDeliverSignServi
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public void pretreatmentHanaDeliverSign() {
|
|
public void pretreatmentHanaDeliverSign() {
|
|
|
- List<String> orderList = metaHanaDeliverSignMapper.selectOrderNumberSign();
|
|
|
|
|
|
|
+ List<MetaHanaDeliverSign> orderList = metaHanaDeliverSignMapper.selectDeliverSignListByOrderNumberAndOrderItem();
|
|
|
|
|
+
|
|
|
//先处理订单,(处理电子单签收里的订单)
|
|
//先处理订单,(处理电子单签收里的订单)
|
|
|
if(orderList !=null && orderList.size()>0){
|
|
if(orderList !=null && orderList.size()>0){
|
|
|
List<OrderSignVO> orderSignVOList = new ArrayList<>();
|
|
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");
|
|
|
|
|
|
|
+ // 先建立运单号与对象的映射关系
|
|
|
|
|
+ Map<String, List<MetaHanaDeliverSign>> orderSignList = orderList.stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(MetaHanaDeliverSign::getOrderNumber));
|
|
|
|
|
+
|
|
|
|
|
+ // 遍历处理每个运单号
|
|
|
|
|
+ orderSignList.forEach((orderNum, list) -> {
|
|
|
|
|
+ if(orderSignVOList !=null && orderSignVOList.size()>0){
|
|
|
|
|
+ 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(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){
|
|
if(orderSignVOList !=null && orderSignVOList.size()>0){
|
|
|
//清除表数据再批量新增
|
|
//清除表数据再批量新增
|
|
|
metaHanaDeliverSignMapper.truncateOrderSign();
|
|
metaHanaDeliverSignMapper.truncateOrderSign();
|
|
@@ -162,82 +176,100 @@ public class MetaHanaDeliverSignServiceImpl implements IMetaHanaDeliverSignServi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//再处理运单,(处理tms运单表中的运单)
|
|
//再处理运单,(处理tms运单表中的运单)
|
|
|
- List<String> tmsShipMentList = metaHanaDeliverSignMapper.selectTmsShipmentNumberSign();
|
|
|
|
|
|
|
+ List<DeliverSignVO> tmsShipMentList = metaHanaDeliverSignMapper.selectDeliverSignByTmsShipmentNumber();
|
|
|
if(tmsShipMentList !=null && tmsShipMentList.size()>0){
|
|
if(tmsShipMentList !=null && tmsShipMentList.size()>0){
|
|
|
List<TmsShipmentSignVO> tmsList = new ArrayList<>();
|
|
List<TmsShipmentSignVO> tmsList = new ArrayList<>();
|
|
|
- tmsShipMentList.forEach(tmsShipmentNumber->{
|
|
|
|
|
- TmsShipmentSignVO signVO = new TmsShipmentSignVO();
|
|
|
|
|
- signVO.setTmsShipmentNumber(tmsShipmentNumber);
|
|
|
|
|
- //abnormalStatus 1未签收;2未开始补货;3部分签收;4全部签收
|
|
|
|
|
- List<String> deliverNumberList = metaHanaDeliverSignMapper.selectDeliverNumListByTmsShipmentNumber(tmsShipmentNumber);
|
|
|
|
|
- if(deliverNumberList !=null){
|
|
|
|
|
- List<DeliverSignVO> deliverSignList = metaHanaDeliverSignMapper.selectDeliverSignByTmsShipmentNumber(deliverNumberList);
|
|
|
|
|
- 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);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ List<String> tmsSignList = new ArrayList<>();
|
|
|
|
|
+ // 先建立运单号与对象的映射关系
|
|
|
|
|
+ Map<String, List<DeliverSignVO>> shipmentMap = tmsShipMentList.stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(DeliverSignVO::getTmsShipmentNum));
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
- signList.add(sign.getSignType().toString());
|
|
|
|
|
|
|
+ // 遍历处理每个运单号
|
|
|
|
|
+ shipmentMap.forEach((shipmentNum, list) -> {
|
|
|
|
|
+ if (tmsList != null && tmsList.size() > 0) {
|
|
|
|
|
+ //已处理过就跳过
|
|
|
|
|
+ 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")) {
|
|
|
|
|
+ sign.setSignType(1);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sign.setSignType(3);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //abnormalStatus 1未签收;2未开始补货;3部分签收;4全部签收
|
|
|
|
|
+ if (("4").equals(sign.getAbnormalStatus())) {
|
|
|
|
|
+ //正常签收
|
|
|
|
|
+ sign.setSignType(1);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //异常签收 待签收
|
|
|
|
|
+ sign.setSignType(0);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- 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);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ tmsSignList.add(sign.getSignType().toString());
|
|
|
|
|
|
|
|
- }else{
|
|
|
|
|
- //未签收
|
|
|
|
|
- signVO.setSignType(3);
|
|
|
|
|
- }
|
|
|
|
|
- }else{
|
|
|
|
|
- //未签收
|
|
|
|
|
- signVO.setSignType(3);
|
|
|
|
|
- }
|
|
|
|
|
- tmsList.add(signVO);
|
|
|
|
|
- });
|
|
|
|
|
- if(tmsList !=null && tmsList.size()>0){
|
|
|
|
|
- //清楚表数据再批量新增
|
|
|
|
|
- metaHanaDeliverSignMapper.truncateTmsShipmentSign();
|
|
|
|
|
- metaHanaDeliverSignMapper.batchTmsShipmentSign(tmsList);
|
|
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|