diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java index cd7a6290c..6940f43a3 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java @@ -293,61 +293,70 @@ public class PlanController { @PreAuthorize("@ss.hasPermission('mes:plan:update')") public CommonResult updatePlanStatus(@Valid @RequestBody PlanStatusUpdateVO statusUpdateVO) { PlanDO planDO = planMapper.selectById(statusUpdateVO.getId()); - // 试产 - if ("pre".equals(statusUpdateVO.getCode())) { - planDO.setStatus(PlanStatusEnum.试产.getValue()); + if (planDO == null) { + return success(false); } - //开工 - if ("start".equals(statusUpdateVO.getCode())) { + + String code = statusUpdateVO.getCode(); + + // 1) 先处理计划状态 + if ("pre".equals(code)) { + planDO.setStatus(PlanStatusEnum.试产.getValue()); + } else if ("start".equals(code)) { planDO.setStatus(PlanStatusEnum.量产.getValue()); - } - //暂停 - else if ("pause".equals(statusUpdateVO.getCode())) { + } else if ("pause".equals(code)) { planDO.setStatus(PlanStatusEnum.暂停.getValue()); - } - //完工 - else if ("end".equals(statusUpdateVO.getCode())) { + } else if ("end".equals(code)) { planDO.setStatus(PlanStatusEnum.完工.getValue()); - } - // 入库 - else if ("store".equals(statusUpdateVO.getCode())) { + } else if ("store".equals(code)) { planDO.setStatus(PlanStatusEnum.已入库.getValue()); + } else if ("commence".equals(code)) { + planDO.setStatus(PlanStatusEnum.已开工.getValue()); + } + + // 2) 先落库计划状态(store 最后一条判断依赖这个) + planMapper.updateById(planDO); + + // 3) 入库后创建入库单 + if ("store".equals(code)) { planService.createPlanStockIn(statusUpdateVO, planDO); + } + // 4) 任务状态联动 + if (planDO.getTaskId() != null) { TaskDO taskDO = taskService.getTask(planDO.getTaskId()); if (taskDO != null) { - // 条件1:任务单已完成排产(按你的字段,通常 isScheduled == 1) - boolean scheduledFinished = Integer.valueOf(1).equals(taskDO.getIsScheduled()); - - // 条件2:任务单下所有计划都为入库 - List planList = planMapper.selectList( - Wrappers.lambdaQuery() - .eq(PlanDO::getTaskId, planDO.getTaskId()) - ); - boolean allPlanFinished = !planList.isEmpty() && planList.stream() - .allMatch(p -> Integer.valueOf(PlanStatusEnum.已入库.getValue()).equals(p.getStatus())); - - if (scheduledFinished && allPlanFinished) { - taskDO.setStatus(TaskStatusEnum.已完成.getValue()); // 10-已完成 + + // commence -> 生产中 + if ("commence".equals(code)) { + taskDO.setStatus(TaskStatusEnum.生产中.getValue()); taskService.updateTask(taskDO); } - } - } - else if ("commence".equals(statusUpdateVO.getCode())) { - planDO.setStatus(PlanStatusEnum.已开工.getValue()); + // store -> 满足条件则已完成 + if ("store".equals(code)) { + boolean scheduledFinished = Integer.valueOf(1).equals(taskDO.getIsScheduled()); - // 修改任务单状态为生产中 - TaskDO taskDO = taskService.getTask(planDO.getTaskId()); - if (taskDO != null) { - taskDO.setStatus(TaskStatusEnum.生产中.getValue()); - taskService.updateTask(taskDO); + List planList = planMapper.selectList( + Wrappers.lambdaQuery() + .eq(PlanDO::getTaskId, planDO.getTaskId()) + ); + + boolean allPlanStored = !planList.isEmpty() && planList.stream() + .allMatch(p -> Integer.valueOf(PlanStatusEnum.已入库.getValue()).equals(p.getStatus())); + + if (scheduledFinished && allPlanStored) { + taskDO.setStatus(TaskStatusEnum.已完成.getValue()); + taskService.updateTask(taskDO); + } + } } } - planMapper.updateById(planDO); + return success(true); } + @PutMapping("/updatePlanZjStatus") @Operation(summary = "更新生产计划质检状态") @PreAuthorize("@ss.hasPermission('mes:plan:update')") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java index 2521ed6d0..0ba71b2e1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java @@ -205,20 +205,21 @@ public class PlanServiceImpl implements PlanService { TaskDO task = taskService.getTask(plan.getTaskId()); if (task != null) { - // 9-生产中:不改状态 - if (!TaskStatusEnum.生产中.getValue().equals(task.getStatus())) { - // 先默认改为 7-部分排产 - Integer newStatus = TaskStatusEnum.部分排产.getValue(); + boolean fullyScheduled = totalNeed > 0 && totalPlanned >= totalNeed; - // 满足条件则改为 8-待生产 - if (totalNeed > 0 && totalPlanned >= totalNeed) { - newStatus = TaskStatusEnum.待生产.getValue(); - task.setIsScheduled(1); // 你原有逻辑保留 - } + // 1) 完成排产标记:满足条件就更新(与是否生产中无关) + if (fullyScheduled) { + task.setIsScheduled(1); + } - task.setStatus(newStatus); - taskService.updateTask(task); + // 2) 状态:生产中(9)不改;否则按条件改为7/8 + if (!TaskStatusEnum.生产中.getValue().equals(task.getStatus())) { + task.setStatus(fullyScheduled + ? TaskStatusEnum.待生产.getValue() + : TaskStatusEnum.部分排产.getValue()); } + + taskService.updateTask(task); }