瀏覽代碼

任务相关功能修改

yzc 1 年之前
父節點
當前提交
fef5da66a5

+ 1 - 1
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailController.java

@@ -70,7 +70,7 @@ public class ProductionTaskDetailController {
      * 生产任务接收
      */
     @PostMapping("/receive")
-    public void receive(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
+    public synchronized void receive(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
         productionTaskDetailService.receive(productionTaskDetailDto);
     }
 

+ 7 - 2
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetail.java

@@ -69,8 +69,13 @@ public class ProductionTaskDetail extends BasePo {
     private Integer circulationStatus;
 
     /**
-     * 接收人id
+     * 接收人id 作废
      */
-    private Long receivedUserId;
+//    private Long receivedUserId;
+
+    /**
+     * 接收时间
+     */
+    private Date receivedTime;
 
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetailRecord.java

@@ -34,4 +34,9 @@ public class ProductionTaskDetailRecord extends BasePo {
      */
     private Long personLiableId;
 
+    /**
+     * 接收时间
+     */
+    private Date receivedTime;
+
 }

+ 54 - 65
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -37,6 +37,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -159,13 +160,23 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
      */
     @Override
     public void circulation(ProductionTaskDetailDto productionTaskDetailDto) {
+        ProductionTaskDetail productionTaskDetail = this.getById(productionTaskDetailDto.getId());
+
         //修改流转状态
-        productionTaskDetailDto.setCirculationStatus(1);
-        //赋值接收人id
-        productionTaskDetailDto.setReceivedUserId(productionTaskDetailDto.getReceivedUserId());
+        productionTaskDetail.setCirculationStatus(1);
         //赋值流转人id
-        productionTaskDetailDto.setCirculationUserId(SecurityUtils.getUserId());
-        this.updateById(productionTaskDetailDto);
+        productionTaskDetail.setCirculationUserId(SecurityUtils.getUserId());
+
+
+        this.updateById(productionTaskDetail);
+
+        //创建任务明细记录
+        ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
+        productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
+        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetail.getProductionProcessesId());
+        productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
+        productionTaskDetailRecord.setReceivedTime(productionTaskDetail.getReceivedTime());
+        productionTaskDetailRecordService.save(productionTaskDetailRecord);
     }
 
     /**
@@ -181,6 +192,14 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         productionTaskDetail.setFinishTime(new Date());//记录完成时间
         this.updateById(productionTaskDetail);
 
+        //创建任务明细记录
+        ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
+        productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
+        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetail.getProductionProcessesId());
+        productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
+        productionTaskDetailRecord.setReceivedTime(productionTaskDetail.getReceivedTime());
+        productionTaskDetailRecordService.save(productionTaskDetailRecord);
+
         StockWait stockWait = new StockWait();
         stockWait.setType(1);//入库
         stockWait.setStatus(0);//待入库
@@ -201,8 +220,14 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     public Page<ProductionTaskDetailVo> receivePage(ProductionTaskDetailSelectDto dto) {
         IWrapper<ProductionTaskDetail> wrapper = getWrapper();
-        //过滤接收人为自己的任务
-        wrapper.eq(ProductionTaskDetail::getReceivedUserId, SecurityUtils.getUserId());
+
+        //过滤工序用户列表里有自己的数据
+        wrapper.eq("ptpd.user_id",SecurityUtils.getUserId());
+        //过滤正在流转中的数据
+        wrapper.eq("ptd",ProductionTaskDetail::getCirculationStatus,1);
+        //过滤未完工的数据
+        wrapper.eq("ptd",ProductionTaskDetail::getFinishStatus,0);
+
         return pageCom(wrapper, dto);
     }
 
@@ -213,78 +238,42 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     public void receive(ProductionTaskDetailDto productionTaskDetailDto) {
         ProductionTaskDetail productionTaskDetail = getById(productionTaskDetailDto.getId());
 
+        if(Objects.equals(0,productionTaskDetail.getCirculationStatus())){
+            throw new ServiceException("该任务已被他人接收,接收失败");
+        }
+
         //修改流转状态
         productionTaskDetail.setCirculationStatus(0);
-        //将下一工序赋值到当前工序
-        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getNextProductionProcessesId());
-        //将负责人赋值为接收人id
+        //将负责人赋值为自己
         productionTaskDetail.setPersonLiableId(SecurityUtils.getUserId());
-        //清空接收人
-        productionTaskDetail.setReceivedUserId(-1l);
+        //赋值接收时间
+        productionTaskDetail.setReceivedTime(new Date());
+
 
+        //将下一工序赋值到当前工序
+        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getNextProductionProcessesId());
         //清空下一工序
         productionTaskDetail.setNextProductionProcessesId(-1l);
-
-
-
         //查找下一工序相关信息 如果有则赋值
         ProductionTask productionTask = productionTaskService.getById(productionTaskDetail.getProductionTaskId());
         ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
         WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
-        if ("1".equals(workOrder.getIsCustomized())) {
-            List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q
-                    .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
-                    .orderByAsc(WorkOrderProductionProcesses::getSort));
-            if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
-                throw new ServiceException("定制工单 工序列表为空");
-            }
-
-            //赋值下一工序id
-            for (int i = 0; i < workOrderProductionProcesses.size(); i++) {
-                WorkOrderProductionProcesses wopp = workOrderProductionProcesses.get(i);
-                if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
-                    //默认赋值空 如果有下一节点赋值下一节点id
-                    if ((i + 1) < workOrderProductionProcesses.size()) {
-                        WorkOrderProductionProcesses nextProductionProcesses = workOrderProductionProcesses.get(i + 1);
-                        productionTaskDetail.setNextProductionProcessesId(nextProductionProcesses.getId());
-                        break;
-                    }
-                }
-            }
-        } else {
-            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
-            if (ObjectUtil.isEmpty(applicableProducts)) {
-                throw new ServiceException("未找到适用于该产品的工艺信息");
-            }
-            Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
-            if (ObjectUtil.isEmpty(technology)) {
-                throw new ServiceException("工艺信息不存在");
-            }
-            String processRoute = technology.getProcessRoute();
-            if (ObjectUtil.isEmpty(processRoute)) {
-                throw new ServiceException("工艺线路为空");
-            }
-            String[] split = processRoute.split(",");
-            //赋值下一工序id
-            for (int i = 0; i < split.length; i++) {
-                if (Long.parseLong(split[i])==productionTaskDetail.getProductionProcessesId()) {
-                    //默认赋值空 如果有下一节点赋值下一节点id
-                    if ((i + 1) < split.length) {
-                        productionTaskDetail.setNextProductionProcessesId(Long.parseLong(split[i + 1]));
-                        break;
-                    }
+        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
+        //赋值下一工序id
+        for (int i = 0; i < productionProcessesList.size(); i++) {
+            WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
+            if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
+                //默认赋值空 如果有下一节点赋值下一节点id
+                if ((i + 1) < productionProcessesList.size()) {
+                    WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i + 1);
+                    productionTaskDetail.setNextProductionProcessesId(nextProductionProcesses.getId());
+                    break;
                 }
             }
         }
 
-        this.updateById(productionTaskDetail);
 
-        //创建任务明细记录
-        ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
-        productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
-        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetail.getProductionProcessesId());
-        productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
-        productionTaskDetailRecordService.save(productionTaskDetailRecord);
+        this.updateById(productionTaskDetail);
     }
 
     /**
@@ -295,7 +284,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         //取消流转状态
         productionTaskDetailDto.setCirculationStatus(0);
         //将接收人赋值为空
-        productionTaskDetailDto.setReceivedUserId(-1l);
+//        productionTaskDetailDto.setReceivedUserId(-1l);
         this.updateById(productionTaskDetailDto);
     }
 

+ 16 - 8
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -271,11 +271,20 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             productionTaskDetail.setProductionTaskId(productionTaskDto.getId());//任务id
             productionTaskDetail.setFinishStatus(0);//默认状态未完工
             productionTaskDetail.setProductId(workOrder.getProductId());//产品id
-            productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
-            productionTaskDetail.setNextProductionProcessesId(nextProductionProcessesId);//第二个工序id
+
+            //当前工序为空 下一工序为第一工序 接收后会切换
+            productionTaskDetail.setNextProductionProcessesId(productionProcessesId);
+
+//            productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
+//            productionTaskDetail.setNextProductionProcessesId(nextProductionProcessesId);//第二个工序id
+
             //生成SN
             productionTaskDetail.setProductSn(String.format("%s-%03d", productionTaskDto.getCode(), i + 1));
-            productionTaskDetail.setPersonLiableId(productionTaskDto.getPersonLiableId());//负责人ID
+
+            //任务一创建 负责人为空 并直接在流转中 用于抢单
+//            productionTaskDetail.setPersonLiableId(productionTaskDto.getPersonLiableId());//负责人ID
+            productionTaskDetail.setCirculationStatus(1);//流转中
+
             productionTaskDetailList.add(productionTaskDetail);
             //创建任务明细记录
             ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
@@ -289,13 +298,13 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
 
         //添加任务对每一个工序的用户绑定
         List<ProductionTaskProcessesDetail> productionTaskProcessesDetailList = new ArrayList<>();
-        Map<Long,List<Long>> taskProcessesUserMap = JSONObject.parseObject(productionTaskDto.getTaskProcessesUser(),Map.class);
+        JSONObject taskProcessesUserJson = JSONObject.parseObject(productionTaskDto.getTaskProcessesUser());
         List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
         for (WorkOrderProductionProcesses workOrderProductionProcesses : productionProcessesList) {
             Long processesId = workOrderProductionProcesses.getId();
-            List<Long> userIds = taskProcessesUserMap.get(processesId);
-            if(ObjectUtil.isEmpty(userIds)){
-                throw new ServiceException(String.format("工序 %s 未配置用户",workOrderProductionProcesses.getName()));
+            List<Long> userIds = taskProcessesUserJson.getList(processesId.toString(), Long.class);
+            if (ObjectUtil.isEmpty(userIds)) {
+                throw new ServiceException(String.format("工序 %s 未配置用户", workOrderProductionProcesses.getName()));
             }
             for (Long userId : userIds) {
                 ProductionTaskProcessesDetail productionTaskProcessesDetail = new ProductionTaskProcessesDetail();
@@ -306,7 +315,6 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             }
         }
         productionTaskProcessesDetailService.saveBatch(productionTaskProcessesDetailList);
-        throw new ServiceException("111111111111");
     }
 
     @Override

+ 5 - 1
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -293,7 +293,11 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     public List<WorkOrderProductionProcesses> getProductionProcessesList(WorkOrder workOrder) {
         if (Objects.equals(workOrder.getIsCustomized(), "1")) {
             //获取定制工序列表
-            return workOrderProductionProcessesService.list(q -> q.eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId()));
+            List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q.eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId()));
+            if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
+                throw new ServiceException("定制工单 工序列表为空");
+            }
+            return workOrderProductionProcesses;
         } else {
             //获取基础工序列表
             List<ProductionProcesses> baseProductionProcessesList = productionProcessesService.getBaseProductionProcessesList(workOrder);

+ 2 - 0
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml

@@ -19,6 +19,8 @@
             ptd.circulation_user_id,
             ptd.circulation_status
         from production_task_detail ptd
+            left JOIN production_task_processes_detail ptpd ON ptpd.production_task_id = ptd.production_task_id
+            AND ptpd.production_processes_id = ptd.production_processes_id
             ${ew.customSqlSegment}
     </select>
     <select id="getWorkOrderByProductionTask" resultType="com.fjhx.mes.entity.work.vo.WorkOrderVo">