Ver Fonte

矿山域-流程管理

ltt há 1 ano atrás
pai
commit
1dec41c473

+ 6 - 0
business-modules/business-mine/pom.xml

@@ -52,6 +52,12 @@
             <artifactId>gson</artifactId>
             <version>2.11.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>business-usual-transport</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 </project>

+ 23 - 4
business-modules/business-mine/src/main/java/com/sckw/mine/controller/TaskCardController.java

@@ -6,10 +6,7 @@ import com.sckw.mine.entity.req.TaskCardPageListParam;
 import com.sckw.mine.service.TaskCardService;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @desc: 任务卡片
@@ -51,5 +48,27 @@ public class TaskCardController {
         return taskCardService.carryTrack(reviewOrderParam);
     }
 
+    /**
+     * @Description: 订单列表状态统计
+     * @Author: Lt
+     * @Date: 2024/5/11 15:45
+     */
+    @GetMapping("/getStatusCountListInSingleQuery")
+    public HttpResult getStatusCountListInSingleQuery()
+    {
+        return HttpResult.ok(taskCardService.getStatusCountListInSingleQuery());
+    }
+
+    /**
+     * @Description: 运单-详情
+     * @Author: Lt
+     * @Date: 2024/5/8 20:03
+     */
+    @GetMapping("/detail")
+    public HttpResult detail(@RequestParam("taskId") String taskId)
+    {
+        return HttpResult.ok(taskCardService.detail(taskId));
+    }
+
 
 }

+ 5 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/KwBusinessActionTrack.java

@@ -50,6 +50,11 @@ public class KwBusinessActionTrack implements Serializable {
      */
     private String status;
 
+    /*
+    任务是否被操作过
+     */
+    private Integer isAction;
+
     /**
      * create_by
      */

+ 10 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/req/TaskCardPageListParam.java

@@ -43,5 +43,15 @@ public class TaskCardPageListParam {
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    /*
+    状态筛选
+     */
+    private Integer status;
+
+    /*
+    是否被操作过的任务
+     */
+    private Integer isAction;
+
 
 }

+ 14 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/MineOrderDetailRes.java

@@ -23,6 +23,11 @@ public class MineOrderDetailRes {
      */
     private String mineOrderNo;
 
+    /*
+    矿料名称
+     */
+    private String mineName;
+
     /**
      * 订单来源
      */
@@ -123,6 +128,15 @@ public class MineOrderDetailRes {
     矿料体积
      */
     private String mineVol;
+    private Integer type;
+    private String typeStr;
+    private Integer unit;
+    private String unitStr;
+    private String size;
+    private String weight;
+    private String value;
+
+    private String workName;
 
     /*
     采购数量

+ 8 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/TaskCardPageListRes.java

@@ -64,6 +64,14 @@ public class TaskCardPageListRes {
 
     private String createBy;
 
+    private Integer isAction;
+    private Integer isTransport;
+
+    /*
+    订单id
+     */
+    private String mineOrderId;
+
     
 
 }

+ 2 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/mapper/KwBusinessActionTrackMapper.java

@@ -19,4 +19,6 @@ public interface KwBusinessActionTrackMapper extends BaseMapper<KwBusinessAction
 
     List<TaskCardPageListRes> taskCardPageList(@Param("param") TaskCardPageListParam taskCardPageListParam);
 
+    List<Map<String, Object>> countByStatus(@Param("tenantId") String tenantId);
+
 }

+ 24 - 1
business-modules/business-mine/src/main/java/com/sckw/mine/service/MineService.java

@@ -8,6 +8,7 @@ import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.page.PageRes;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.TenantUtil;
 import com.sckw.core.web.response.HttpResult;
@@ -20,9 +21,12 @@ import com.sckw.mine.entity.req.MineAddParam;
 import com.sckw.mine.entity.res.MineOrderDetailRes;
 import com.sckw.mine.entity.res.MineOrderPageListRes;
 import com.sckw.mine.enums.MineStatusEnum;
+import com.sckw.mine.enums.MineralAggregateTypeEnum;
 import com.sckw.mine.enums.TransportUnderEnum;
 import com.sckw.mine.mapper.*;
 import com.sckw.redis.utils.RedissonUtils;
+import com.sckw.usual.enums.OrderDictTypeEnum;
+import com.sckw.usual.service.OrderDictService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -60,6 +64,9 @@ public class MineService {
     @Autowired
     WorkFlowNodeMapper workFlowNodeMapper;
 
+    @Autowired
+    OrderDictService orderDictService;
+
     /**
      * @Description: 矿山域订单添加
      * @Author: Lt
@@ -145,6 +152,22 @@ public class MineService {
             kwBusinessMineOrder.setOrderSourceStr(kwBusinessMineOrder.getOrderSource() == 1 ? "生产自建" : "销售流转");
         }
 
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getType())) {
+            kwBusinessMineOrder.setTypeStr(MineralAggregateTypeEnum.getNameByCode(kwBusinessMineOrder.getType()));
+        }
+
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getUnit())) {
+            Map<String, Map<String, String>> dict = orderDictService.queryDictByType(new ArrayList<>(Arrays.asList(OrderDictTypeEnum.GOODS_UNIT.getType())));
+            Map<String, String> goodsUnitMap;
+            if (CollectionUtils.isNotEmpty(dict)) {
+                goodsUnitMap = CollectionUtils.isNotEmpty(dict.get(OrderDictTypeEnum.GOODS_UNIT.getType())) ? dict.get(OrderDictTypeEnum.GOODS_UNIT.getType()) : new HashMap<>(16);
+            } else {
+                goodsUnitMap = new HashMap<>(16);
+            }
+            kwBusinessMineOrder.setUnitStr(goodsUnitMap.getOrDefault(kwBusinessMineOrder.getUnit().toString(), ""));
+        }
+
+
         return kwBusinessMineOrder;
 
     }
@@ -154,7 +177,7 @@ public class MineService {
     * @Author: Lt
     * @Date: 2024/6/5 15:49
     */
-    private String getStatusStr(String status)
+    public String getStatusStr(String status)
     {
         String tenantId = TenantUtil.getTenant();
         Object node = RedissonUtils.get(tenantId + "node");

+ 129 - 15
business-modules/business-mine/src/main/java/com/sckw/mine/service/TaskCardService.java

@@ -7,24 +7,27 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.page.PageRes;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.TenantUtil;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mine.common.OrderServerCommon;
 import com.sckw.mine.entity.KwBusinessActionTrack;
 import com.sckw.mine.entity.KwBusinessMineOrder;
 import com.sckw.mine.entity.KwBusinessWorkFlowNode;
+import com.sckw.mine.entity.dto.NodeStatusDTO;
 import com.sckw.mine.entity.req.ReviewOrderParam;
 import com.sckw.mine.entity.req.TaskCardPageListParam;
+import com.sckw.mine.entity.res.MineOrderDetailRes;
 import com.sckw.mine.entity.res.TaskCardPageListRes;
 import com.sckw.mine.enums.MineStatusEnum;
-import com.sckw.mine.mapper.KwBusinessActionTrackMapper;
-import com.sckw.mine.mapper.MineMapper;
-import com.sckw.mine.mapper.MineOrderMapper;
-import com.sckw.mine.mapper.WorkFlowNodeMapper;
+import com.sckw.mine.enums.MineralAggregateTypeEnum;
+import com.sckw.mine.mapper.*;
+import com.sckw.usual.enums.OrderDictTypeEnum;
+import com.sckw.usual.service.OrderDictService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @desc:
@@ -40,6 +43,9 @@ public class TaskCardService {
     @Autowired
     MineMapper mineMapper;
 
+    @Autowired
+    NodeMapper nodeMapper;
+
     @Autowired
     MineOrderMapper mineOrderMapper;
 
@@ -49,6 +55,12 @@ public class TaskCardService {
     @Autowired
     WorkFlowNodeMapper workFlowNodeMapper;
 
+    @Autowired
+    OrderDictService orderDictService;
+
+    @Autowired
+    MineService mineService;
+
 
     /**
     * @Description: 任务卡片分页列表
@@ -59,9 +71,6 @@ public class TaskCardService {
     {
         PageHelper.startPage(param.getPage(), param.getPageSize());
         List<TaskCardPageListRes> businessTruckPageListRes = kwBusinessActionTrackMapper.taskCardPageList(param);
-        //businessTruckPageListRes.forEach(e -> {
-        //    e.setStatusStr(MineStatusEnum.getNameByCode(e.getStatus()));
-        //});
         return HttpResult.ok(new PageRes<>(new PageInfo<>(businessTruckPageListRes)));
     }
 
@@ -72,7 +81,8 @@ public class TaskCardService {
     */
     public HttpResult reviewOrder(ReviewOrderParam reviewOrderParam)
     {
-        KwBusinessActionTrack kwBusinessActionTrack = kwBusinessActionTrackMapper.selectById(reviewOrderParam.getId());
+        String trackId = reviewOrderParam.getId();
+        KwBusinessActionTrack kwBusinessActionTrack = kwBusinessActionTrackMapper.selectById(trackId);
         if (ObjectUtils.isNull(kwBusinessActionTrack))
         {
             return HttpResult.error("当前任务不存在");
@@ -90,7 +100,13 @@ public class TaskCardService {
         //找到当前流程下所有节点
         List<KwBusinessWorkFlowNode> list = workFlowNodeMapper.selectList(new QueryWrapper<KwBusinessWorkFlowNode>()
                 .eq("flow_id", flowId).eq("del_flag", Global.NUMERICAL_ZERO)
+                .orderBy(true, false, "sort")
         );
+        //如果是最后一个节点就不操作
+        if (!list.isEmpty() && list.get(list.size() - 1).getId().equals(kwBusinessActionTrack.getStatus())) {
+            // 如果列表不为空且最后一个元素的id等于status,则执行你的逻辑
+            return HttpResult.error("当前任务已完结");
+        }
 
         List<KwBusinessActionTrack> kwBusinessActionTracks = kwBusinessActionTrackMapper.selectList(new QueryWrapper<KwBusinessActionTrack>()
                 .eq("mine_order_id", orderId)
@@ -103,10 +119,10 @@ public class TaskCardService {
             String nextNodeId = null;
             String nextNodeName = null;
             //找到它的下一个任务是什么
-            for (int i = 0; i < list.size(); i++) {
-                if (list.get(i).getNodeId().equals(kwBusinessActionTrack.getStatus())) {
-                    nextNodeId = list.get(i + 1).getNodeId();
-                    nextNodeName = list.get(i + 1).getNodeName();
+            for (KwBusinessWorkFlowNode l : list) {
+                if (Integer.valueOf(l.getNodeId()) > Integer.valueOf(kwBusinessActionTrack.getStatus())) {
+                    nextNodeId = l.getNodeId();
+                    nextNodeName = l.getNodeName();
                 }
             }
             //防止多次审核
@@ -135,6 +151,11 @@ public class TaskCardService {
             orderServerCommon.saveActionTrack(orderId, String.valueOf(MineStatusEnum.FIFTEEN.getCode()), nameByCode, nameByCode);
             orderStatus = String.valueOf(MineStatusEnum.FIFTEEN.getCode());
         }
+        //修改任务是否被操作过的状态
+        LambdaUpdateWrapper<KwBusinessActionTrack> trackUpdateWrapper = new LambdaUpdateWrapper<>();
+        trackUpdateWrapper.set(KwBusinessActionTrack::getIsAction, Global.NUMERICAL_ONE).eq(KwBusinessActionTrack::getId, trackId);
+        kwBusinessActionTrackMapper.update(null, trackUpdateWrapper);
+
         //修改订单状态
         LambdaUpdateWrapper<KwBusinessMineOrder> objectLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         objectLambdaUpdateWrapper.set(KwBusinessMineOrder::getStatus, orderStatus).eq(KwBusinessMineOrder::getId, orderId);
@@ -152,7 +173,8 @@ public class TaskCardService {
     */
     public HttpResult carryTrack(ReviewOrderParam reviewOrderParam)
     {
-        KwBusinessActionTrack kwBusinessActionTrack = kwBusinessActionTrackMapper.selectById(reviewOrderParam.getId());
+        String trackId = reviewOrderParam.getId();
+        KwBusinessActionTrack kwBusinessActionTrack = kwBusinessActionTrackMapper.selectById(trackId);
         if (ObjectUtils.isNull(kwBusinessActionTrack))
         {
             return HttpResult.error("当前任务不存在");
@@ -194,6 +216,11 @@ public class TaskCardService {
             }
         }
 
+        //修改任务是否被操作过的状态
+        LambdaUpdateWrapper<KwBusinessActionTrack> trackUpdateWrapper = new LambdaUpdateWrapper<>();
+        trackUpdateWrapper.set(KwBusinessActionTrack::getIsAction, Global.NUMERICAL_ONE).eq(KwBusinessActionTrack::getId, trackId);
+        kwBusinessActionTrackMapper.update(null, trackUpdateWrapper);
+
         //执行任务
         orderServerCommon.saveActionTrack(orderId, nextStatusId, nextNodeName, nextNodeName);
 
@@ -208,6 +235,93 @@ public class TaskCardService {
 
 
 
+    }
+
+    public List<Map<String, Object>> getStatusCountListInSingleQuery() {
+        String tenantId = TenantUtil.getTenant();
+        // 查询每个状态的计数
+        List<Map<String, Object>> statusCounts = kwBusinessActionTrackMapper.countByStatus(tenantId);
+
+
+        List<NodeStatusDTO> sortedEnums = nodeMapper.selectListNode(tenantId);
+
+        // 创建要追加在最前面的元素
+        NodeStatusDTO firstElement = new NodeStatusDTO();
+        firstElement.setMsg(MineStatusEnum.getNameByCode(MineStatusEnum.ZERO.getCode()));
+        firstElement.setCode(String.valueOf(MineStatusEnum.ZERO.getCode()));
+
+        // 创建要追加在最后的元素
+        NodeStatusDTO lastElement = new NodeStatusDTO();
+        lastElement.setMsg(MineStatusEnum.getNameByCode(MineStatusEnum.TWENTY.getCode()));
+        lastElement.setCode(String.valueOf(MineStatusEnum.TWENTY.getCode()));
+
+        NodeStatusDTO twoElement = new NodeStatusDTO();
+        twoElement.setMsg(MineStatusEnum.getNameByCode(MineStatusEnum.FIFTEEN.getCode()));
+        twoElement.setCode(String.valueOf(MineStatusEnum.FIFTEEN.getCode()));
+
+        // 将元素追加到列表的最前面
+        sortedEnums.add(0, firstElement);
+        sortedEnums.add(1, twoElement);
+
+        // 将元素追加到列表的最后面
+        sortedEnums.add(lastElement);
+        // 将查询结果转换为所需的格式
+        //List<MineStatusEnum> sortedEnums = MineStatusEnum.getSortList();
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (NodeStatusDTO enumItem : sortedEnums) {
+            Map<String, Object> statusCount = statusCounts.stream()
+                    .filter(c -> enumItem.getCode().equals(c.get("status")))
+                    .findFirst()
+                    .orElseGet(() -> Map.of("status", enumItem.getCode(), "count", 0));
+            result.add(
+                    Map.of(
+                            "key", enumItem.getMsg(),
+                            "value", enumItem.getCode(),
+                            "data", statusCount.get("count")
+                    )
+            );
+        }
+        return result;
+    }
+
+    public MineOrderDetailRes detail(String taskId) {
+
+
+        //根据taskId找到订单id
+        KwBusinessActionTrack kwBusinessActionTrack = kwBusinessActionTrackMapper.selectById(taskId);
+        if (ObjectUtils.isNull(kwBusinessActionTrack)) {
+            throw new RuntimeException("当前任务数据不存在");
+        }
+        MineOrderDetailRes kwBusinessMineOrder = mineOrderMapper.selectOrderById(String.valueOf(kwBusinessActionTrack.getMineOrderId()));
+        if (ObjectUtils.isNull(kwBusinessMineOrder)) {
+            throw new RuntimeException("当前数据不存在");
+        }
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getStatus())) {
+
+            kwBusinessMineOrder.setStatusStr(mineService.getStatusStr(kwBusinessMineOrder.getStatus()));
+        }
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getOrderSource())) {
+            kwBusinessMineOrder.setOrderSourceStr(kwBusinessMineOrder.getOrderSource() == 1 ? "生产自建" : "销售流转");
+        }
+
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getType())) {
+            kwBusinessMineOrder.setTypeStr(MineralAggregateTypeEnum.getNameByCode(kwBusinessMineOrder.getType()));
+        }
+
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getUnit())) {
+            Map<String, Map<String, String>> dict = orderDictService.queryDictByType(new ArrayList<>(Arrays.asList(OrderDictTypeEnum.GOODS_UNIT.getType())));
+            Map<String, String> goodsUnitMap;
+            if (CollectionUtils.isNotEmpty(dict)) {
+                goodsUnitMap = CollectionUtils.isNotEmpty(dict.get(OrderDictTypeEnum.GOODS_UNIT.getType())) ? dict.get(OrderDictTypeEnum.GOODS_UNIT.getType()) : new HashMap<>(16);
+            } else {
+                goodsUnitMap = new HashMap<>(16);
+            }
+            kwBusinessMineOrder.setUnitStr(goodsUnitMap.getOrDefault(kwBusinessMineOrder.getUnit().toString(), ""));
+        }
+
+
+        return kwBusinessMineOrder;
+
     }
 
 

+ 22 - 1
business-modules/business-mine/src/main/resources/mapper/KwBusinessActionTrackMapper.xml

@@ -27,12 +27,16 @@
             o.mine_order_no,
             o.cg_company,
             o.delivery_cutoff_time,
+            o.is_transport,
             tk.content statusStr,
             o.create_time orderCreateTime,
             tk.create_time,
             tk.create_by,
+            tk.is_action,
             wf.work_name,
-            ag.name
+            ag.name,
+            tk.status,
+            tk.mine_order_id mineOrderId
 
             from kw_business_action_track tk
         left join kw_business_mine_order o on o.id = tk.mine_order_id
@@ -56,8 +60,25 @@
             <if test="param.endTime != '' and param.endTime != null">
                 and tk.create_time  &lt;= #{param.endTime}
             </if>
+            <if test="param.status != null">
+                and tk.status = #{param.status}
+            </if>
+            <if test="param.isAction != null">
+                and tk.is_action = #{param.isAction}
+            </if>
         </where>
         order by tk.create_time desc
 
     </select>
+
+    <select id="countByStatus" resultType="java.util.Map">
+        SELECT `status`, COUNT(*) AS count FROM kw_business_action_track
+        <where>
+            del_flag = 0
+            <if test="tenantId != '' and tenantId != null">
+                and tenant_id  = #{tenantId}
+            </if>
+        </where>
+        GROUP BY `status`
+    </select>
 </mapper>

+ 11 - 1
business-modules/business-mine/src/main/resources/mapper/MineOrderMapper.xml

@@ -81,11 +81,21 @@
         m.mine_vol,
         m.purchase_num,
         m.mine_weight,
-        n.transport_order_no
+        n.transport_order_no,
+        w.work_name,
+        a.name mineName,
+        a.type,
+        a.code,
+        a.unit,
+        a.size,
+        a.weight,
+        a.value
 
         from kw_business_mine_order o
         left join kw_business_transport_order_no n on n.mine_order_id = o.id
         left join kw_business_mine m on m.mine_order_id = o.id
+        left join kw_business_mineral_aggregate a on o.mineral_aggregate_id = a.id
+        left join kw_business_work_flow w on o.work_flow = w.id
         where o.del_flag = 0 and o.id = #{orderId} and o.del_flag = 0
     </select>
 

+ 2 - 0
business-modules/business-usual-transport/src/main/java/com/sckw/usual/entity/req/OrderGeneralTransportReq.java

@@ -22,6 +22,8 @@ public class OrderGeneralTransportReq implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    private String id;
+
     /*
     订单来源
      */

+ 7 - 3
business-modules/business-usual-transport/src/main/java/com/sckw/usual/service/OrderActionService.java

@@ -152,10 +152,14 @@ public class OrderActionService {
         KwOrderUsualLandTransportMoreReq usualMore = orderGeneralTransportReq.getOrderMore();
 
         KwOrder kwOrder = BeanUtil.copyProperties(orderGeneralTransportReq, KwOrder.class);
-        long id = new IdWorker(Global.NUMERICAL_ONE).nextId();
-        kwOrder.setId(id);
-
+        long id;
+        if (ObjectUtils.isNotNull(orderGeneralTransportReq.getId())){
+            id = Long.valueOf(orderGeneralTransportReq.getId());
+        }else{
+            id = new IdWorker(Global.NUMERICAL_ONE).nextId();
 
+        }
+        kwOrder.setId(id);
         LocalDate currentDate = LocalDate.now();
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
         String orderPrefix = currentDate.format(formatter);