Browse Source

1、4.2接口调整;

zk 1 year ago
parent
commit
9b7c0c55d0

+ 12 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -197,6 +197,18 @@ public enum CarWaybillEnum {
                 || code == CarWaybillEnum.APPROVAL_NO_PASS.getCode();
     }
 
+    /**
+     * @param code 状态码
+     * @desc 是否可以变更司机
+     * @author zk
+     * @date 2023/8/2
+     **/
+    public static boolean editTicket(int code) {
+        return code == CarWaybillEnum.APPROVAL_TREAT.getCode()
+                || code == CarWaybillEnum.APPROVAL_NO_PASS.getCode()
+                || code == CarWaybillEnum.APPROVAL_IN.getCode() ;
+    }
+
     /**
      * @param code 状态码
      * @desc 是否可以变更司机/车辆

+ 5 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -542,8 +542,11 @@ public class KwtWaybillOrderController {
      * @date 2024/3/7
      **/
     @PostMapping("/editTicketV3")
-    public HttpResult editTicketV3(@RequestBody @Valid WaybillOrderEditTicketDto params){
-        return waybillOrderV1Service.editTicketV1(params);
+    public HttpResult editTicketV3(@RequestBody @Valid List<WaybillOrderEditTicketDto> params){
+        if (CollectionUtils.isEmpty(params)) {
+            return HttpResult.error("榜单信息不存在,请确认!");
+        }
+        return waybillOrderV1Service.editTicketV2(params);
     }
 
     /**

+ 117 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -58,6 +58,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author zk
@@ -714,6 +715,7 @@ public class KwtWaybillOrderV1Service {
                 KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
                 //数据组装
                 JSONObject addressJson = new JSONObject();
+                addressJson.put("wAddressId", address.getId());
                 addressJson.put("addressType", address.getAddressType());
                 addressJson.put("addressName", address.getName());
                 addressJson.put("addressCityName", address.getCityName());
@@ -1828,6 +1830,113 @@ public class KwtWaybillOrderV1Service {
         return HttpResult.ok();
     }
 
+    /**
+     * @param params {}
+     * @desc 修改单证-多个修改
+     * @author zk
+     * @date 2024/3/7
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult editTicketV2(List<WaybillOrderEditTicketDto> params) {
+        /*1、校验*/
+        for (WaybillOrderEditTicketDto ticketDto:params) {
+            Long wTicketId = ticketDto.getWTicketId();
+            KwtWaybillOrderTicket ticket = waybillOrderTicketDao.selectById(wTicketId);
+            //榜单信息
+            if (ticket == null) {
+                return HttpResult.error("榜单信息不存在,请确认!");
+            }
+        }
+
+        //数据处理
+        for (WaybillOrderEditTicketDto ticketDto:params) {
+            Long wTicketId = ticketDto.getWTicketId();
+            KwtWaybillOrderTicket ticket = waybillOrderTicketDao.selectById(wTicketId);
+            Long wOrderId = ticket.getWOrderId();
+            //运单信息
+            KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
+            if (waybillOrder == null) {
+                return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
+            }
+            //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能卸货
+            if (!CarWaybillEnum.editTicket(waybillOrder.getStatus())) {
+                return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能修改榜单!");
+            }
+            //地址信息
+            KwtWaybillOrderAddress address = waybillOrderAddressDao.selectById(ticket.getWAddressId());
+            if (address == null) {
+                return HttpResult.error("运单该地址已不存在!");
+            }
+
+            /*2、更新装卸货榜单信息*/
+            //榜单信息
+            List<WaybillOrderTicketLoadingDto> loading = ticketDto.getLoading();
+            waybillOrderTicketService.editTicketV1(loading, ticket.getWAddressId(), ticketDto.getUrls(), ticketDto.getOperateTime());
+
+            /*3、更新车辆运单-子单*/
+            //运单子单信息
+            KwtWaybillOrderSubtask orderSubtask = waybillOrderSubtaskDao.selectById(ticket.getWSubtaskId());
+            //物流运单信息
+            KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(orderSubtask.getLOrderId());
+            //运单-子单装货榜单信息
+            List<KwtWaybillOrderTicket> loadTickets = waybillOrderTicketDao.findWaybillOrderTicketV1(wOrderId, ticket.getWSubtaskId(), AddressDefaultTypeEnum.SHIPMENT.getCode(), orderSubtask.getUnit());
+            //运单-子单卸货榜单信息
+            List<KwtWaybillOrderTicket> unloadTickets = waybillOrderTicketDao.findWaybillOrderTicketV1(wOrderId, ticket.getWSubtaskId(), AddressDefaultTypeEnum.TAKE.getCode(), orderSubtask.getUnit());
+            //装货-总量
+            BigDecimal loadAmount = loadTickets.stream().map(KwtWaybillOrderTicket::getAmount ).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //卸货-总量
+            BigDecimal unloadAmount = unloadTickets.stream().map(KwtWaybillOrderTicket::getAmount ).reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderSubtask.setLoadAmount(loadAmount);
+            orderSubtask.setUnloadAmount(unloadAmount);
+            orderSubtask.setDeficitAmount(orderSubtask.getLoadAmount().subtract(orderSubtask.getUnloadAmount()));
+            BigDecimal deficitPrice = deficitPrice(orderSubtask.getLoadAmount(), orderSubtask.getDeficitAmount(),
+                    logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
+            orderSubtask.setDeficitPrice(deficitPrice);
+            waybillOrderSubtaskDao.updateById(orderSubtask);
+
+            /*4、更新车辆运单子单状态*/
+            //运单子单信息
+            List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskDao.findByWOrderId(orderSubtask.getWOrderId());
+            for (KwtWaybillOrderSubtask subtask:subtasks) {
+                //运单子单状态不为驳回状态则不更新运单状态
+                if (!subtask.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode())) {
+                    return HttpResult.ok();
+                }
+                //榜单存在审核失败状态则不更新运单状态
+                List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(null, subtask.getId(), null);
+                for (KwtWaybillOrderTicket ticket1:tickets) {
+                    if (ticket1.getStatus() == Global.NUMERICAL_ONE) {
+                        return HttpResult.ok();
+                    }
+                }
+                //运单-子弹当前为驳回则状态更新为单证更新审核中
+                int status = orderSubtask.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode()) ? CarWaybillEnum.APPROVAL_IN.getCode() : orderSubtask.getStatus();
+                subtask.setStatus(status);
+                waybillOrderSubtaskDao.updateById(subtask);
+            }
+
+            /*5、更新车辆运单-状态*/
+            //运单状态不为驳回状态则不更新运单状态
+            if (!waybillOrder.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode())) {
+                return HttpResult.ok();
+            }
+            //运单子单存在非待审核和审核中则不更新
+            subtasks = waybillOrderSubtaskDao.findByWOrderId(orderSubtask.getWOrderId());
+            for (KwtWaybillOrderSubtask subtask:subtasks) {
+                if (!subtask.getStatus().equals(CarWaybillEnum.APPROVAL_IN.getCode())
+                        && !subtask.getStatus().equals(CarWaybillEnum.APPROVAL_TREAT.getCode())) {
+                    return HttpResult.ok();
+                }
+            }
+            waybillOrder.setStatus(CarWaybillEnum.APPROVAL_IN.getCode());
+            waybillOrderV1Dao.updateById(waybillOrder);
+
+            /*4.2、新增运单状态记录*/
+            setWaybillOrderTrack(waybillOrder.getId(), null, null, null, waybillOrder.getStatus(), null);
+        }
+        return HttpResult.ok();
+    }
+
     /**
      * @param params {}
      * @desc 单证审核-驳回
@@ -2167,7 +2276,7 @@ public class KwtWaybillOrderV1Service {
 
         //操作人
         List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, null, null);
-        List<Long> userIds = tickets.stream().map(KwtWaybillOrderTicket::getCreateBy).toList();
+        List<Long> userIds = tickets.stream().flatMap(item -> Stream.of(item.getCreateBy(), item.getUpdateBy())).toList();
         List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
         Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         users.forEach(e -> usersMap.put(e.getId(), e));
@@ -2175,6 +2284,9 @@ public class KwtWaybillOrderV1Service {
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
         Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
 
+
+
+
         /*数据处理*/
         List<Map<String, Object>> addressList = new ArrayList<>();
         List<Integer> typeList = new ArrayList<>(){{add(AddressDefaultTypeEnum.SHIPMENT.getCode()); add(AddressDefaultTypeEnum.TAKE.getCode());}};
@@ -2201,6 +2313,10 @@ public class KwtWaybillOrderV1Service {
                 trackData.put("operateTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getOperateTime()) : null);
                 trackData.put("createTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getCreateTime()) : null);
                 trackData.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
+                trackData.put("approvalStatusName", ticket != null ? ApproveStatusEnum.getName(ticket.getStatus()) : null);
+                trackData.put("approvalByName", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? usersMap.get(ticket.getUpdateBy()) != null ? usersMap.get(ticket.getUpdateBy()).getName() : null : null);
+                trackData.put("approvalContent", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? ticket.getRemark() : null);
+                trackData.put("approvalTime", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? ticket.getUpdateTime() : null);
                 trackData.put("createByName", ticket != null ? usersMap.get(ticket.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(ticket.getCreateBy()).getName() : null);
                 trackData.put("addressName", address.getName());
                 trackData.put("addressCityName", address.getCityName());