From 50e0fc614c171efe4092eb53531e1ee25a6e5d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= Date: Sat, 11 Apr 2026 16:07:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/produce/pojo/vo/WorkInProcessVO.java | 28 ++++++ .../controller/DisTaskingController.java | 7 ++ .../desk/produce/mapper/WorkOrderMapper.java | 4 + .../desk/produce/mapper/WorkOrderMapper.xml | 20 ++++ .../produce/service/IDisTaskingService.java | 2 + .../produce/service/IWorkOrderService.java | 3 + .../service/impl/DisTaskingServiceImpl.java | 98 +++++++++++++++++-- .../service/impl/WorkOrderServiceImpl.java | 6 ++ 8 files changed, 162 insertions(+), 6 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkInProcessVO.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkInProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkInProcessVO.java new file mode 100644 index 00000000..d96b009c --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkInProcessVO.java @@ -0,0 +1,28 @@ +package org.springblade.desk.produce.pojo.vo; + +import lombok.Data; +import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; + +import java.util.List; + +/** + * 在制品订单 视图实体类 + * + * @author litao + */ +@Data +public class WorkInProcessVO { + + private String partCode; + + private Long woId; + + private Long dispatcher; + + private String cardNo; + + private String batchNo; + + private Integer runStatus; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java index 1749ae00..ff9d40c2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java @@ -153,4 +153,11 @@ public class DisTaskingController extends BladeController { return R.success(); } + @GetMapping("/syncDisTasking") + @ApiOperationSupport(order = 10) + @Operation(summary = "同步任务分派", description = "同步任务分派") + public R syncDisTasking() { + return R.status(disTaskingService.syncDisTasking()); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java index bf191f99..6d423958 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java @@ -8,11 +8,13 @@ import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO; import org.springblade.desk.produce.pojo.dto.WorkOrderDTO; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO; +import org.springblade.desk.produce.pojo.vo.WorkInProcessVO; import org.springblade.desk.produce.pojo.vo.WorkOrderVO; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import java.util.List; import java.util.Map; +import java.util.Set; /** * 车间订单表 Mapper 接口 @@ -56,4 +58,6 @@ public interface WorkOrderMapper extends BaseMapper { WorkOrder getMaxByMesCard(String code); List listByYoId(Long fatherYoId); + + List getWorkInProcessByPartCode(Set partCodes); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml index 3c4768ce..5eec0f75 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml @@ -215,5 +215,25 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java index f97baf2a..47e6b44a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java @@ -27,4 +27,6 @@ public interface IDisTaskingService extends BaseService { void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO); boolean disTechnician(TaskCompleteDTO taskCompleteDTO); + + boolean syncDisTasking(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index f62e8109..addc0b8e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -13,6 +13,7 @@ import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.desk.produce.pojo.vo.*; import java.util.List; import java.util.Map; +import java.util.Set; /** * 车间订单表 服务类 @@ -229,4 +230,6 @@ public interface IWorkOrderService extends BaseService { void setRbFilePreserveData(List preserveSlotList, List qcProduceRunsList, WorkPlan workPlan, List dsRbFilePreserveSlotList, MacToolUse prMacToolUse); void addWorkOrder(WorkOrder newWo); + + Map> getWorkInProcessByPartCode(Set partCodes); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java index 2d148ea9..5d81a9ed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; @@ -17,6 +18,7 @@ import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; +import org.springblade.desk.produce.pojo.vo.WorkInProcessVO; import org.springblade.desk.produce.service.IDisTaskingService; import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderService; @@ -24,12 +26,12 @@ import org.springblade.desk.produce.service.IWorkPlanService; import org.springblade.desk.quality.pojo.entity.WorkPlanItem; import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.system.cache.UserCache; -import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 调度任务分派 服务实现类 @@ -51,8 +53,6 @@ public class DisTaskingServiceImpl extends BaseServiceImpl disTaskHandle(IPage page, TaskCompleteDTO taskCompleteDTO) { IPage iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO)); @@ -96,15 +96,17 @@ public class DisTaskingServiceImpl extends BaseServiceImpl ddtIds = taskCompleteDTO.getDdtIdList(); for (Long ddtId : ddtIds) { - DisTasking dsDisTasking = baseMapper.selectById(ddtId); + DisTasking dsDisTasking = this.getById(ddtId); dsDisTasking.setDispatchTime(new Date()); dsDisTasking.setDispatchMan(AuthUtil.getUserId()); dsDisTasking.setRsCode(taskCompleteDTO.getRsCode()); dsDisTasking.setHandleResult(taskCompleteDTO.getHandleResult()); dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED); + this.updateById(dsDisTasking); DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId()); // 通过零件号查询所有工艺变更的单子 if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null) { @@ -141,4 +143,88 @@ public class DisTaskingServiceImpl extends BaseServiceImpl dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class) +// .eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用") +// .between(DsTaskingEntity::getSyncTime, startTime, endTime)); + + List dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class) + .eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用")); + if (CollectionUtils.isEmpty(dsTaskingEntities)) { + return false; + } + + Set partCodes = dsTaskingEntities.stream() + .map(DsTaskingEntity::getPartCode) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (partCodes.isEmpty()) { + return false; + } + + Map> workInProcessMap = workOrderService.getWorkInProcessByPartCode(partCodes); + + List disTaskings = new ArrayList<>(dsTaskingEntities.size() * 2); + List workOrders = new ArrayList<>(); + for (DsTaskingEntity dsTaskingEntity : dsTaskingEntities) { + String partCode = dsTaskingEntity.getPartCode(); + if (partCode == null) { + continue; + } + // 查询在制品订单 + List workInProcessList = workInProcessMap.getOrDefault(partCode, Collections.emptyList()); + for (WorkInProcessVO workInProcessVO : workInProcessList) { + Long woId = workInProcessVO.getWoId(); + Long dispatcher = workInProcessVO.getDispatcher(); + String cardNo = workInProcessVO.getCardNo(); + String batchNo = workInProcessVO.getBatchNo(); + Integer runStatus = workInProcessVO.getRunStatus(); + + if (woId == null) { + continue; + } + + Date disAssignTime = null; + Integer disTaskStatus = DisTasking.TASK_STATUS_WAIT; + String memo = null; + + if (dispatcher != null) { + disAssignTime = new Date(); + disTaskStatus = DisTasking.TASK_STATUS_ALREADY; + memo = "自动分派"; + } + DisTasking disTasking = new DisTasking(); + disTasking.setDtId(dsTaskingEntity.getId()); + disTasking.setCardNo(cardNo); + disTasking.setBatchNo(batchNo); + disTasking.setDisAssignTime(disAssignTime); + disTasking.setDisAssignMan(dispatcher); + disTasking.setDisTaskStatus(disTaskStatus); + disTasking.setMemo(memo); + disTasking.setDisOutFlag("0"); + disTaskings.add(disTasking); + // 订单状态 < 15 → 改为 5(工艺变更) + if (runStatus != null && runStatus < WorkOrder.RUN_STATUS_COMPLETED) { + workOrders.add(woId); + } + } + } + if (CollectionUtils.isEmpty(disTaskings)) { + return false; + } + boolean saveResult = this.saveBatch(disTaskings); + + if (saveResult && !CollectionUtils.isEmpty(workOrders)) { + // 更新工单状态逻辑 + saveResult = workOrderService.update(Wrappers.lambdaUpdate(WorkOrder.class).in(WorkOrder::getId, workOrders).set(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_CRAFT_CHANGE)); + } + return saveResult; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 1777ecd0..1f1434ef 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -883,6 +883,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> getWorkInProcessByPartCode(Set partCodes) { + List workInProcess = baseMapper.getWorkInProcessByPartCode(partCodes); + return workInProcess.stream().collect(Collectors.groupingBy(WorkInProcessVO::getPartCode)); + } + private String cardNextCode() { String codePattern = "RBMES" + getRand("YYMM", 0); int randNum1 = (int) (Math.random() * (1000 - 100 + 1) + 100);