Ver Fonte

暂停订单逻辑编写beta版(未测试)

yejian016332 há 3 anos atrás
pai
commit
1a0b4bb8ea

+ 1 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/dao/TaskNodeMapper.java

@@ -31,4 +31,5 @@ public interface TaskNodeMapper extends SuperMapper<TaskNode> {
 
     List<TaskNode> getInstructions(TaskNode taskNode);
 
+    int selectCurrentProduceSort(Map param);
 }

+ 19 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/TaskNodeService.java

@@ -1,6 +1,7 @@
 package com.github.zuihou.business.operationManagementCenter.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.zuihou.base.R;
 import com.github.zuihou.base.service.SuperService;
@@ -127,4 +128,22 @@ public interface TaskNodeService extends SuperService<TaskNode> {
     R<String> handModeStockIn(Map conMap);
 
 
+    /**
+     * 根据工件id删除结点任务表
+     * @param param
+     */
+    void deleteByWorkpieceId(Map param);
+
+    /**
+     * 根据当前加工工件工序的最后序号删除结点任务表
+     * @param param
+     */
+    void deleteByWorkpieceSort(Map param);
+
+    /**
+     * 找到当前加工工件工序的最后序号
+     * @param param
+     * @return
+     */
+    int selectCurrentProduceSort(Map param);
 }

+ 43 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/OrderServiceImpl.java

@@ -2,6 +2,7 @@ package com.github.zuihou.business.operationManagementCenter.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.zuihou.base.service.SuperServiceImpl;
 import com.github.zuihou.business.DemoLine.DemoCacheKey;
@@ -336,6 +337,7 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
         String taskBatchNo = map.get("taskBatchNo")==null?"":map.get("taskBatchNo").toString();
         isFalse(StringUtils.isEmpty(taskBatchNo),"排产批次号不能为空");
 
+       // TOTO add by yejian by read code 判断是否已经点击过一键生产逻辑修改
         Object obj = redisTemplate.opsForValue().get(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+taskBatchNo);
         if(obj==null){
             redisTemplate.opsForValue().set(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+taskBatchNo,"1",60,TimeUnit.SECONDS);
@@ -417,7 +419,47 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Order orderSuspend(Order model){
+        // 暂停订单,根据订单id找到相应的task,tasknode相应的信息,删除相应未执行的工序结点
+        // TODO 等代码稳定后增加资源锁,防止一边在加工,一边在暂停订单造成数据的不一致
+        QueryWrapper<TWorkpiece> queryTWorkpieceWrapper = new QueryWrapper<TWorkpiece>();
+        queryTWorkpieceWrapper.eq("orderId", model.getId());
+        queryTWorkpieceWrapper.in("produceStatus",new ArrayList<String>(Arrays.asList("1", "2")));
+        List<TWorkpiece> tWorkpieces = workpieceMapper.selectList(queryTWorkpieceWrapper);
+        // 依次根据工件id删除相应的数据
+        for(TWorkpiece tWorkpiece : tWorkpieces){
+            if("1".equals(tWorkpiece.getProduceStatus())){
+                // 未开始加工,全量删除,先删除结点表,在删除task表
+                // 删除tasknode表中除下料的未执行结点
+                Map param = new HashMap();
+                param.put("completeBatchNo", tWorkpiece.getCompleteBatchNo());
+                taskNodeService.deleteByWorkpieceId(param);
+
+                QueryWrapper<TTask> tTaskWrapper = new QueryWrapper<TTask>();
+                tTaskWrapper.eq("completeBatchNo", tWorkpiece.getCompleteBatchNo());
+                taskMapper.delete(tTaskWrapper);
+
+            }else if("2".equals(tWorkpiece.getProduceStatus())){
+                // 已开始加工,只删除未开始的工序
+                // 找到当前在工工序的最后的一个结点序号
+                Map param = new HashMap();
+                param.put("completeBatchNo", tWorkpiece.getCompleteBatchNo());
+                int completeBatchSort = taskNodeService.selectCurrentProduceSort(param);
+
+                param.clear();
+                param.put("completeBatchNo", param.get("completeBatchNo"));
+                param.put("completeBatchSort", completeBatchSort);
+                taskNodeService.deleteByWorkpieceSort(param);
+
+                // 删除task表的数据
+                QueryWrapper<TTask> tTaskWrapper = new QueryWrapper<TTask>();
+                tTaskWrapper.eq("completeBatchNo", tWorkpiece.getCompleteBatchNo());
+                tTaskWrapper.eq("status","1");
+                taskMapper.delete(tTaskWrapper);
+            }
+        }
+
 
         return model;
     }
@@ -465,6 +507,7 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
         if(taskList==null||taskList.size()==0)
             return;
         //把任务按工件分组,只取出(过滤)加工序,
+        // TOTO add by yejian by read code 加工序判断需要调整
         Map<String,List<TTask>>taskMap = taskList.stream().filter((item) -> item.getProcedureNo().equals(DemoLineConstant.DEMOLINE_WORK_OP)).collect(groupingBy(TTask::getCompleteBatchNo));
         //获取资源和产线的关系
         List<Map> list = productionresourceviewMapper.getResourceZone();

+ 20 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskNodeServiceImpl.java

@@ -1655,5 +1655,25 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
         return result;
     }
 
+    @Override
+    public void deleteByWorkpieceId(Map param) {
+        QueryWrapper<TaskNode> taskNodeWrapper = new QueryWrapper<TaskNode>();
+        taskNodeWrapper.eq("completeBatchNo", param.get("completeBatchNo"));
+        baseMapper.delete(taskNodeWrapper);
+    }
+
+    @Override
+    public int selectCurrentProduceSort(Map param) {
+        return baseMapper.selectCurrentProduceSort(param);
+    }
+
+
+    @Override
+    public void deleteByWorkpieceSort(Map param) {
+        QueryWrapper<TaskNode> taskNodeWrapper = new QueryWrapper<TaskNode>();
+        taskNodeWrapper.eq("completeBatchNo", param.get("completeBatchNo"));
+        taskNodeWrapper.gt("completeBatchSort", param.get("completeBatchSort"));
+        baseMapper.delete(taskNodeWrapper);
+    }
 
 }

+ 15 - 0
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/operationManagementCenter/TaskNodeMapper.xml

@@ -82,4 +82,19 @@
         order by prority desc
     </select>
 
+    <select id="selectCurrentProduceSort" resultType="java.lang.Integer">
+        SELECT
+          MAX(ittn.complete_batch_sort)
+        FROM imcs_t_task_node ittn
+        WHERE ittn.task_id = (SELECT
+            itt.id
+          FROM imcs_t_task itt
+          WHERE 1=1
+        <if test="completeBatchNo != '' and completeBatchNo != null " >
+            and itt.complete_batch_no = #{completeBatchNo}
+        </if>
+          AND (itt.status = '1'
+          OR itt.status = '2'))
+    </select>
+
 </mapper>