Explorar o código

提交新增合同文件校验

chenxiaofei hai 1 mes
pai
achega
02808f4ca1

+ 1 - 1
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java

@@ -288,5 +288,5 @@ public interface RemoteSystemService {
     EntTypeResDto queryEntTypeById(Long entId);
 
 
-
+    KwsRoleDto queryByRoleIdAndEntId(Long currentRoleId);
 }

+ 25 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsRoleDto.java

@@ -0,0 +1,25 @@
+package com.sckw.system.api.model.dto.res;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.sckw.core.model.base.BaseModel;
+import lombok.Data;
+
+/**
+ * 岗位角色
+ * @author zk
+ * @date 2023-05-31
+ */
+@Data
+public class KwsRoleDto extends BaseModel {
+
+    /**
+     * 角色名称
+     */
+    private String name;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+}

+ 19 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteSystemServiceImpl.java

@@ -16,6 +16,7 @@ import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.*;
 import com.sckw.system.api.model.pojo.DeptInfoPojo;
+import com.sckw.system.dao.KwsRoleDao;
 import com.sckw.system.dao.SysDictDao;
 import com.sckw.system.model.*;
 import com.sckw.system.model.vo.res.FindAreaTreeResVo;
@@ -23,6 +24,7 @@ import com.sckw.system.model.vo.res.KwsUserResVo;
 import com.sckw.system.service.KwsUserService;
 import com.sckw.system.service.SysAreaService;
 import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.jetbrains.annotations.Nullable;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +38,7 @@ import java.util.stream.Collectors;
  * @date 2023/6/12
  */
 @DubboService(group = "design", version = "1.0.0")
+@RequiredArgsConstructor
 public class RemoteSystemServiceImpl implements RemoteSystemService {
 
     @Autowired
@@ -50,6 +53,8 @@ public class RemoteSystemServiceImpl implements RemoteSystemService {
     @Autowired
     private SysAreaService sysAreaService;
 
+    private final KwsRoleDao kwsRoleDao;
+
     /**
      * @param keys type#value,type#value
      * @return Map<String, SysDictResDto>
@@ -914,4 +919,18 @@ public class RemoteSystemServiceImpl implements RemoteSystemService {
         return remoteBaseService.queryEntTypeById(entId).get(0);
     }
 
+    @Override
+    public KwsRoleDto queryByRoleIdAndEntId(Long currentRoleId) {
+        KwsRole kwsRole = kwsRoleDao.selectByKey(currentRoleId);
+        if (Objects.isNull(kwsRole)){
+            return new KwsRoleDto();
+        }
+        KwsRoleDto kwsRoleDto = new KwsRoleDto();
+        kwsRoleDto.setName(kwsRole.getName());
+        kwsRoleDto.setEntId(kwsRole.getEntId());
+        kwsRoleDto.setId(kwsRole.getId());
+        kwsRoleDto.setStatus(kwsRole.getStatus());
+        return kwsRoleDto;
+    }
+
 }

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

@@ -703,7 +703,7 @@ public class KwtWaybillOrderController {
      */
     @PostMapping("/queryWaybillOrderNodeTimeline")
     @Operation(summary = "查询运单节点轨迹时间线")
-    public BaseResult<List<WaybillOrderNodeVo>> queryWaybillOrderNodeTimeline(@RequestBody @Valid WaybillOrderNodeReq req) {
+    public BaseResult<WaybillOrderNodeVo> queryWaybillOrderNodeTimeline(@RequestBody @Valid WaybillOrderNodeReq req) {
         return BaseResult.success(waybillOrderV1Service.queryWaybillOrderNodeTimeline(req));
     }
 

+ 118 - 74
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderNodeVo.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author system
@@ -14,84 +15,127 @@ import java.io.Serializable;
 @Data
 @Schema(description = "运单节点轨迹响应对象")
 public class WaybillOrderNodeVo implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 节点ID
-     */
-    @Schema(description = "节点ID")
-    private Long id;
-
-    /**
-     * 时间
-     */
-    @Schema(description = "操作时间,格式:yyyy-MM-dd HH:mm:ss")
-    private String createTime;
-
     /**
-     * 运单状态
+     * 运单节点轨迹
      */
-    @Schema(description = "运单状态码")
-    private Integer orderStatus;
-    /**
-     * 状态码描述
-     */
-    @Schema(description = "状态码描述")
-    private String orderStatusName;
-
-    /**
-     * 状态描述
-     */
-    @Schema(description = "状态描述,如:车辆【川A5478C】司机【张三】装载货物【铁矿石】【参运】【28.70吨】")
-    private String statusDesc;
-
-    /**
-     * 车牌号
-     */
-    @Schema(description = "车牌号")
-    private String truckNo;
-
+    @Schema(description = "运单节点轨迹")
+    private List<WaybillOrderNode> waybillOrderNodes;
     /**
-     * 司机名称
+     * 时间线
      */
-    @Schema(description = "司机名称")
-    private String driverName;
-
-    /**
-     * 地磅名称
-     */
-    @Schema(description = "地磅名称")
-    private String weighbridgeName;
-
-    /**
-     * 地址
-     */
-    @Schema(description = "地址,如:四川省成都市新都区新都大道")
-    private String address;
-
-    /**
-     * 经度
-     */
-    @Schema(description = "经度")
-    private String lng;
+    @Schema(description = "时间线")
+    private List<Timeline> timelines;
+    @Serial
+    private static final long serialVersionUID = 1L;
 
-    /**
-     * 纬度
-     */
-    @Schema(description = "纬度")
-    private String lat;
 
-    /**
-     * 是否过磅
-     */
-    @Schema(description = "是否过磅")
-    private Boolean hasWeighbridge;
-
-    /**
-     * 图片路径
-     */
-    @Schema(description = "过磅图片路径")
-    private String imageUrl;
+    @Data
+    public static class Timeline implements Serializable{
+        @Serial
+        private static final long serialVersionUID = -3995085472087958354L;
+        /**
+         * 节点ID
+         */
+        @Schema(description = "节点ID")
+        private Long id;
+
+        /**
+         * 时间
+         */
+        @Schema(description = "操作时间,格式:yyyy-MM-dd HH:mm:ss")
+        private String createTime;
+
+        /**
+         * 运单状态
+         */
+        @Schema(description = "运单状态码")
+        private Integer orderStatus;
+        /**
+         * 状态码描述
+         */
+        @Schema(description = "状态码描述")
+        private String orderStatusName;
+
+        /**
+         * 备注
+         */
+        @Schema(description = "备注")
+        private String remark;
+
+        /**
+         * 车牌号
+         */
+        @Schema(description = "车牌号")
+        private String truckNo;
+
+        /**
+         * 司机名称
+         */
+        @Schema(description = "司机名称")
+        private String driverName;
+
+        /**
+         * 地磅名称
+         */
+        @Schema(description = "地磅名称")
+        private String weighbridgeName;
+
+        /**
+         * 地址
+         */
+        @Schema(description = "地址,如:四川省成都市新都区新都大道")
+        private String address;
+
+        /**
+         * 经度
+         */
+        @Schema(description = "经度")
+        private String lng;
+
+        /**
+         * 纬度
+         */
+        @Schema(description = "纬度")
+        private String lat;
+
+        /**
+         * 是否过磅
+         */
+        @Schema(description = "是否过磅")
+        private Boolean hasWeighbridge;
+
+        /**
+         * 图片路径
+         */
+        @Schema(description = "过磅图片路径")
+        private String imageUrl;
+
+    }
+    @Data
+    public static class WaybillOrderNode implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 4006243555652895243L;
+        /**
+         * 节点ID
+         */
+        @Schema(description = "节点ID")
+        private Long id;
+
+        /**
+         * 时间
+         */
+        @Schema(description = "操作时间,格式:yyyy-MM-dd HH:mm:ss")
+        private String createTime;
+
+        /**
+         * 运单状态
+         */
+        @Schema(description = "运单状态码")
+        private Integer orderStatus;
+        /**
+         * 状态码描述
+         */
+        @Schema(description = "状态码描述")
+        private String orderStatusName;
+    }
 }

+ 52 - 23
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -128,6 +128,7 @@ public class KwtWaybillOrderV1Service {
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     private final KwtWaybillOrderTicketRepository  kwtWaybillOrderTicketRepository;
     private final KwtWaybillOrderNodeRepository kwtWaybillOrderNodeRepository;
+    private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
     @Resource
     private StreamBridge streamBridge;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -3381,10 +3382,13 @@ public class KwtWaybillOrderV1Service {
             //获取更新 订单状态
             KwtLogisticsOrder kwtLogisticsOrder = getKwtLogisticsOrder(kwtLogistics, subtask);
             boolean b1 = kwtLogisticsOrderRepository.updateById(kwtLogisticsOrder);
-
+            // 存储记录
+            String remark = "审核通过,运单【"+ billOrder.getWOrderNo() + "】已完成";
+            saveNode(billOrder, subtask, status,remark);
             if (!b || !b1){
                 throw new BusinessException("审核运单失败");
             }
+
             return Boolean.TRUE;
         }
         // 驳回的订单可以通过完善单证变成已完成
@@ -3398,6 +3402,12 @@ public class KwtWaybillOrderV1Service {
             kwtWaybillOrderTicket.setUrls(req.getAddressUrl());
             kwtWaybillOrderTicket.setUploadingTime(new Date());
             Boolean b1 = kwtWaybillOrderTicketRepository.updateByBillOrderIdAndType(kwtWaybillOrderTicket, 2);
+            // 存储记录
+            Long currentRoleId = LoginUserHolder.getCurrentRoleId();
+            KwsRoleDto kwsRoleDto = remoteSystemService.queryByRoleIdAndEntId(currentRoleId);
+            String roleName =  Objects.nonNull(kwsRoleDto) ? kwsRoleDto.getName() : "";
+            String remark = "供应方,【"+roleName+"】【"+LoginUserHolder.getUserName()+"】已审核单证";
+            saveNode(billOrder, subtask, status,remark);
             if (!b || !b1){
                throw new BusinessException("完整单证失败");
             }
@@ -3406,6 +3416,15 @@ public class KwtWaybillOrderV1Service {
         return Boolean.FALSE;
     }
 
+    private void saveNode(KwtWaybillOrder billOrder, KwtWaybillOrderSubtask subtask, Integer status,String remark) {
+        KwtWaybillOrderNode kwtWaybillOrderNode = new KwtWaybillOrderNode();
+        kwtWaybillOrderNode.setWOrderId(billOrder.getId());
+        kwtWaybillOrderNode.setWSubtaskId(subtask.getId());
+        kwtWaybillOrderNode.setOrderStatus(status);
+        kwtWaybillOrderNode.setRemark(remark);
+        waybillOrderNodeRepository.save(kwtWaybillOrderNode);
+    }
+
     @NotNull
     private static KwtLogisticsOrder getKwtLogisticsOrder(KwtLogisticsOrder kwtLogistics, KwtWaybillOrderSubtask subtask) {
         if (Objects.isNull(kwtLogistics)){
@@ -3470,7 +3489,7 @@ public class KwtWaybillOrderV1Service {
      * @author system
      * @date 2025/06/24
      */
-    public List<WaybillOrderNodeVo> queryWaybillOrderNodeTimeline(WaybillOrderNodeReq req) {
+    public WaybillOrderNodeVo queryWaybillOrderNodeTimeline(WaybillOrderNodeReq req) {
         log.info("查询运单节点轨迹,请求参数:{}", JSON.toJSONString(req));
         
         // 查询节点轨迹数据
@@ -3478,7 +3497,7 @@ public class KwtWaybillOrderV1Service {
                 req.getWOrderId(), req.getWSubtaskId());
         
         if (CollectionUtils.isEmpty(nodes)) {
-            return new ArrayList<>();
+            return new WaybillOrderNodeVo();
         }
 
         // 查询运单子单信息,用于获取商品名称和重量
@@ -3498,27 +3517,19 @@ public class KwtWaybillOrderV1Service {
         Map<Long, KwtLogisticsOrderGoods> goodsMap = goodsList.stream()
                 .collect(Collectors.toMap(KwtLogisticsOrderGoods::getLOrderId, Function.identity(), (k1, k2) -> k1));
 
-        // 查询过磅单据信息(如果有地磅)
-//        Set<Long> nodeIds = nodes.stream()
-//                .filter(n -> n.getWeighbridgeId() != null)
-//                .map(KwtWaybillOrderNode::getId)
-//                .collect(Collectors.toSet());
-//        Map<Long, KwtWaybillOrderTicket> ticketMap = new HashMap<>();
-//        if (!nodeIds.isEmpty()) {
-//            // 这里假设根据wSubtaskId和地址ID查询
-//            // 实际可能需要根据具体业务调整查询逻辑
-//        }
 
         // 单位字典
-        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);
+//        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);
 
         // 转换为VO对象
-        List<WaybillOrderNodeVo> voList = new ArrayList<>();
+        WaybillOrderNodeVo waybillOrderNodeVo = new WaybillOrderNodeVo();
+        List<WaybillOrderNodeVo.Timeline> voList = new ArrayList<>();
         for (KwtWaybillOrderNode node : nodes) {
-            WaybillOrderNodeVo vo = new WaybillOrderNodeVo();
+            WaybillOrderNodeVo.Timeline vo = new WaybillOrderNodeVo.Timeline();
+            //WaybillOrderNodeVo vo = new WaybillOrderNodeVo();
             vo.setId(node.getId());
             vo.setCreateTime(DateUtils.format(node.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
             vo.setOrderStatus(node.getOrderStatus());
@@ -3531,9 +3542,9 @@ public class KwtWaybillOrderV1Service {
             vo.setHasWeighbridge(node.getWeighbridgeId() != null);
 
             // 构建状态描述
-            KwtWaybillOrderSubtask subtask = subtaskMap.get(node.getWSubtaskId());
-            String statusDesc = buildStatusDescription(node, subtask, goodsMap, unitMap);
-            vo.setStatusDesc(statusDesc);
+            //KwtWaybillOrderSubtask subtask = subtaskMap.get(node.getWSubtaskId());
+           // String statusDesc = buildStatusDescription(node, subtask, goodsMap, unitMap);
+            vo.setRemark(node.getRemark());
 
             // 构建地址信息
             String address = buildAddressFromLatLng(node.getLng(), node.getLat());
@@ -3541,8 +3552,26 @@ public class KwtWaybillOrderV1Service {
 
             voList.add(vo);
         }
+        waybillOrderNodeVo.setTimelines(voList);
+        Map<Integer, List<WaybillOrderNodeVo.Timeline>> statusAndTimelineMap = voList.stream()
+                .filter(t ->!Arrays.asList(CarWaybillV1Enum.WAIT_UNLOADING.getCode(),CarWaybillV1Enum.APPROVAL_TREAT.getCode(), CarWaybillV1Enum.COMPLETION_UNLOADING.getCode()).contains(t.getOrderStatus()))
+                .sorted(Comparator.comparing(WaybillOrderNodeVo.Timeline::getCreateTime))
+                .collect(Collectors.groupingBy(WaybillOrderNodeVo.Timeline::getOrderStatus));
+        List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = Lists.newArrayList();
+        statusAndTimelineMap.forEach((status, timelines) -> {
+            WaybillOrderNodeVo.WaybillOrderNode waybillOrderNode = new WaybillOrderNodeVo.WaybillOrderNode();
+            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(timelines)){
+                WaybillOrderNodeVo.Timeline timeline = timelines.get(0);
+                waybillOrderNode.setId(timeline.getId());
+                waybillOrderNode.setCreateTime(timeline.getCreateTime());
+                waybillOrderNode.setOrderStatus(timeline.getOrderStatus());
+                waybillOrderNode.setOrderStatusName(CarWaybillV1Enum.geDesc( timeline.getOrderStatus()));
+                nodeList.add(waybillOrderNode);
+            }
+        });
 
-        return voList;
+        waybillOrderNodeVo.setWaybillOrderNodes(nodeList);
+        return waybillOrderNodeVo;
     }
 
     /**