From e1590017b716d77f88f075364c55cfbdb480286f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 10:27:26 +0800
Subject: [PATCH] 诚发五金:生产链路支持无工序/无工艺路线单工序模式
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
index 4093e34..1aa9a97 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkOrderController.java
@@ -12,22 +12,29 @@
import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.*;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.factory.MesMdFactoryDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
+import cn.iocoder.yudao.module.mes.service.md.factory.MesMdFactoryService;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
+import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkshopService;
import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@@ -67,6 +74,12 @@
private MesProTaskService taskService;
@Resource
private MesProProcessService processService;
+ @Resource
+ private AdminUserApi adminUserApi;
+ @Resource
+ private MesMdFactoryService factoryService;
+ @Resource
+ private MesMdWorkshopService workshopService;
@PostMapping("/create")
@Operation(summary = "鍒涘缓鐢熶骇宸ュ崟")
@@ -95,7 +108,6 @@
@GetMapping("/get")
@Operation(summary = "鑾峰緱鐢熶骇宸ュ崟")
@Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
public CommonResult<MesProWorkOrderRespVO> getWorkOrder(@RequestParam("id") Long id) {
MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(id);
if (workOrder == null) {
@@ -106,7 +118,6 @@
@GetMapping("/page")
@Operation(summary = "鑾峰緱鐢熶骇宸ュ崟鍒嗛〉")
- @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
public CommonResult<PageResult<MesProWorkOrderRespVO>> getWorkOrderPage(@Valid MesProWorkOrderPageReqVO pageReqVO) {
PageResult<MesProWorkOrderDO> pageResult = workOrderService.getWorkOrderPage(pageReqVO);
return success(new PageResult<>(buildWorkOrderRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -114,14 +125,12 @@
@GetMapping("/approve-process-list")
@Operation(summary = "鑾峰彇瀹℃壒鎶ュ伐鐨勬祦绋嬪畾涔夊垪琛�")
- @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
public CommonResult<List<Map<String, Object>>> getWorkOrderApproveProcessDefinitionList() {
return success(workOrderService.getWorkOrderApproveProcessDefinitionList());
}
@GetMapping("/schedule-page")
@Operation(summary = "鑾峰緱鐢熶骇宸ュ崟璋冨害鐘舵�佸垎椤�")
- @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
public CommonResult<PageResult<MesProWorkOrderRespVO>> getWorkOrderSchedulePage(@Valid MesProWorkOrderPageReqVO pageReqVO) {
PageResult<MesProWorkOrderDO> pageResult = workOrderService.getWorkOrderSchedulePage(pageReqVO);
return success(new PageResult<>(buildWorkOrderRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -148,6 +157,28 @@
return success(true);
}
+ @PutMapping("/update-batch")
+ @Operation(summary = "鏇存柊宸ュ崟鐢熶骇鎵规", description = "鏈畬宸ョ殑宸ュ崟锛堝惈鐢熶骇涓級閮藉彲浠ョ淮鎶ゆ壒娆″彿")
+ @Parameters({
+ @Parameter(name = "id", description = "缂栧彿", required = true),
+ @Parameter(name = "batchCode", description = "鎵规鍙�", required = true)
+ })
+ @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
+ public CommonResult<Boolean> updateWorkOrderBatch(@RequestParam("id") Long id,
+ @RequestParam("batchCode") String batchCode) {
+ workOrderService.updateWorkOrderBatch(id, batchCode);
+ return success(true);
+ }
+
+ @PutMapping("/start")
+ @Operation(summary = "鍚姩鐢熶骇", description = "宸茬‘璁ゅ伐鍗曞紑宸ワ紝鍐欏叆瀹為檯寮�宸ユ椂闂达紝宸ュ崟杩涘叆鐢熶骇涓�")
+ @Parameter(name = "id", description = "缂栧彿", required = true)
+ @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
+ public CommonResult<Boolean> startWorkOrder(@RequestParam("id") Long id) {
+ workOrderService.startWorkOrder(id);
+ return success(true);
+ }
+
@PutMapping("/finish")
@Operation(summary = "瀹屾垚宸ュ崟")
@Parameter(name = "id", description = "缂栧彿", required = true)
@@ -169,7 +200,6 @@
@GetMapping("/progress/{id}")
@Operation(summary = "鑾峰彇宸ュ崟杩涘害璇︽儏")
@Parameter(name = "id", description = "缂栧彿", required = true)
- @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
public CommonResult<MesProWorkOrderProgressRespVO> getWorkOrderProgress(@PathVariable("id") Long id) {
return success(workOrderService.getWorkOrderProgress(id));
}
@@ -202,6 +232,12 @@
convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
Map<Long, MesProWorkOrderDO> parentMap = workOrderService.getWorkOrderMap(
convertSet(list, MesProWorkOrderDO::getParentId));
+ Map<Long, MesMdFactoryDO> factoryMap = factoryService.getFactoryMap(
+ convertSet(list, MesProWorkOrderDO::getFactoryId));
+ Map<Long, MesMdWorkshopDO> workshopMap = workshopService.getWorkshopMap(
+ convertSet(list, MesProWorkOrderDO::getWorkshopId));
+ Map<Long, AdminUserRespDTO> startUserMap = adminUserApi.getUserMap(
+ convertSet(list, MesProWorkOrderDO::getStartUserId));
// 鑾峰彇鎵�鏈夊叧鑱旂殑宸ュ崟宸ュ簭鍜屼换鍔�
List<MesProWorkOrderProcessDO> allProcesses = workOrderProcessService.getWorkOrderProcessListByWorkOrderIds(workOrderIds);
@@ -227,6 +263,13 @@
supplier -> vo.setVendorName(supplier.getName()));
MapUtils.findAndThen(parentMap, vo.getParentId(),
parent -> vo.setParentCode(parent.getCode()));
+ MapUtils.findAndThen(factoryMap, vo.getFactoryId(),
+ factory -> vo.setFactoryName(factory.getName()));
+ MapUtils.findAndThen(workshopMap, vo.getWorkshopId(),
+ workshop -> vo.setWorkshopName(workshop.getName()));
+ MapUtils.findAndThen(startUserMap, vo.getStartUserId(),
+ user -> vo.setStartUserName(user.getNickname()));
+ vo.setStarted(vo.getActualStartTime() != null);
// 璁$畻瀹屽伐杩涘害 (quantityProduced / quantity * 100)
BigDecimal produced = vo.getQuantityProduced() != null ? vo.getQuantityProduced() : BigDecimal.ZERO;
@@ -242,7 +285,10 @@
List<MesProWorkOrderProcessProgressVO> progressList = new ArrayList<>();
- Map<Long, List<MesProTaskDO>> processTaskMap = convertMultiMap(tasks, MesProTaskDO::getProcessId);
+ // 鏈厤缃伐搴忕殑鍗曞伐搴忎换鍔� processId 涓虹┖锛屽垎缁勫墠鍏堣繃婊わ紝閬垮厤 null key 鎶� NPE
+ Map<Long, List<MesProTaskDO>> processTaskMap = convertMultiMap(
+ tasks.stream().filter(task -> task.getProcessId() != null).toList(),
+ MesProTaskDO::getProcessId);
for (MesProWorkOrderProcessDO process : processes) {
List<MesProTaskDO> pTasks = processTaskMap.getOrDefault(process.getProcessId(), Collections.emptyList());
--
Gitblit v1.9.3