Commit 95b09b98c451522e9acb60e79c569bc6314be279

Authored by YunaiV
1 parent 06d79561

review(mes):cal-plan 的实现

Showing 62 changed files with 899 additions and 362 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/plan/MesCalPlanController.java
... ... @@ -9,7 +9,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9 9 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanPageReqVO;
10 10 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanRespVO;
11 11 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanSaveReqVO;
12   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanDO;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanDO;
13 13 import cn.iocoder.yudao.module.mes.service.cal.plan.MesCalPlanService;
14 14 import io.swagger.v3.oas.annotations.Operation;
15 15 import io.swagger.v3.oas.annotations.Parameter;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/plan/MesCalPlanShiftController.java
... ... @@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftPageReqVO;
7 7 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftRespVO;
8 8 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftSaveReqVO;
9   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanShiftDO;
  9 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanShiftDO;
10 10 import cn.iocoder.yudao.module.mes.service.cal.plan.MesCalPlanShiftService;
11 11 import io.swagger.v3.oas.annotations.Operation;
12 12 import io.swagger.v3.oas.annotations.Parameter;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/cal/plan/MesCalPlanTeamController.java
... ... @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 5 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.team.MesCalPlanTeamRespVO;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.team.MesCalPlanTeamSaveReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanTeamDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanTeamDO;
8 8 import cn.iocoder.yudao.module.mes.service.cal.plan.MesCalPlanTeamService;
9 9 import io.swagger.v3.oas.annotations.Operation;
10 10 import io.swagger.v3.oas.annotations.Parameter;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkorderBomController.java
... ... @@ -5,15 +5,15 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
7 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomPageReqVO;
9   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomRespVO;
10   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomSaveReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomPageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomRespVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomSaveReqVO;
11 11 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
12 12 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
13   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderBomDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
14 14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
15 15 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
16   -import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkorderBomService;
  16 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderBomService;
17 17 import io.swagger.v3.oas.annotations.Operation;
18 18 import io.swagger.v3.oas.annotations.Parameter;
19 19 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -32,12 +32,12 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
32 32  
33 33 @Tag(name = "管理后台 - MES 生产工单 BOM")
34 34 @RestController
35   -@RequestMapping("/mes/pro/workorder-bom")
  35 +@RequestMapping("/mes/pro/work-order-bom")
36 36 @Validated
37   -public class MesProWorkorderBomController {
  37 +public class MesProWorkOrderBomController {
38 38  
39 39 @Resource
40   - private MesProWorkorderBomService workorderBomService;
  40 + private MesProWorkOrderBomService workOrderBomService;
41 41  
42 42 @Resource
43 43 private MesMdItemService itemService;
... ... @@ -47,67 +47,64 @@ public class MesProWorkorderBomController {
47 47  
48 48 @PostMapping("/create")
49 49 @Operation(summary = "创建工单 BOM")
50   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
51   - public CommonResult<Long> createWorkorderBom(@Valid @RequestBody MesProWorkorderBomSaveReqVO createReqVO) {
52   - return success(workorderBomService.createWorkorderBom(createReqVO));
  50 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  51 + public CommonResult<Long> createWorkOrderBom(@Valid @RequestBody MesProWorkOrderBomSaveReqVO createReqVO) {
  52 + return success(workOrderBomService.createWorkOrderBom(createReqVO));
53 53 }
54 54  
55 55 @PutMapping("/update")
56 56 @Operation(summary = "更新工单 BOM")
57   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
58   - public CommonResult<Boolean> updateWorkorderBom(@Valid @RequestBody MesProWorkorderBomSaveReqVO updateReqVO) {
59   - workorderBomService.updateWorkorderBom(updateReqVO);
  57 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  58 + public CommonResult<Boolean> updateWorkOrderBom(@Valid @RequestBody MesProWorkOrderBomSaveReqVO updateReqVO) {
  59 + workOrderBomService.updateWorkOrderBom(updateReqVO);
60 60 return success(true);
61 61 }
62 62  
63 63 @DeleteMapping("/delete")
64 64 @Operation(summary = "删除工单 BOM")
65 65 @Parameter(name = "id", description = "编号", required = true)
66   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
67   - public CommonResult<Boolean> deleteWorkorderBom(@RequestParam("id") Long id) {
68   - workorderBomService.deleteWorkorderBom(id);
  66 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  67 + public CommonResult<Boolean> deleteWorkOrderBom(@RequestParam("id") Long id) {
  68 + workOrderBomService.deleteWorkOrderBom(id);
69 69 return success(true);
70 70 }
71 71  
72 72 @GetMapping("/get")
73 73 @Operation(summary = "获得工单 BOM")
74 74 @Parameter(name = "id", description = "编号", required = true, example = "1024")
75   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:query')")
76   - public CommonResult<MesProWorkorderBomRespVO> getWorkorderBom(@RequestParam("id") Long id) {
77   - MesProWorkorderBomDO workorderBom = workorderBomService.getWorkorderBom(id);
78   - if (workorderBom == null) {
  75 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
  76 + public CommonResult<MesProWorkOrderBomRespVO> getWorkOrderBom(@RequestParam("id") Long id) {
  77 + MesProWorkOrderBomDO workOrderBom = workOrderBomService.getWorkOrderBom(id);
  78 + if (workOrderBom == null) {
79 79 return success(null);
80 80 }
81   - return success(buildWorkorderBomRespVOList(List.of(workorderBom)).get(0));
  81 + return success(buildWorkOrderBomRespVOList(List.of(workOrderBom)).get(0));
82 82 }
83 83  
84 84 @GetMapping("/page")
85 85 @Operation(summary = "获得工单 BOM 分页")
86   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:query')")
87   - public CommonResult<PageResult<MesProWorkorderBomRespVO>> getWorkorderBomPage(@Valid MesProWorkorderBomPageReqVO pageReqVO) {
88   - PageResult<MesProWorkorderBomDO> pageResult = workorderBomService.getWorkorderBomPage(pageReqVO);
89   - return success(new PageResult<>(buildWorkorderBomRespVOList(pageResult.getList()), pageResult.getTotal()));
  86 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
  87 + public CommonResult<PageResult<MesProWorkOrderBomRespVO>> getWorkOrderBomPage(@Valid MesProWorkOrderBomPageReqVO pageReqVO) {
  88 + PageResult<MesProWorkOrderBomDO> pageResult = workOrderBomService.getWorkOrderBomPage(pageReqVO);
  89 + return success(new PageResult<>(buildWorkOrderBomRespVOList(pageResult.getList()), pageResult.getTotal()));
90 90 }
91 91  
92 92 // ==================== 拼接 VO ====================
93 93  
94   - private List<MesProWorkorderBomRespVO> buildWorkorderBomRespVOList(List<MesProWorkorderBomDO> list) {
  94 + private List<MesProWorkOrderBomRespVO> buildWorkOrderBomRespVOList(List<MesProWorkOrderBomDO> list) {
95 95 if (CollUtil.isEmpty(list)) {
96 96 return Collections.emptyList();
97 97 }
98 98 // 1. 批量获取关联数据
99 99 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
100   - convertSet(list, MesProWorkorderBomDO::getItemId));
  100 + convertSet(list, MesProWorkOrderBomDO::getItemId));
101 101 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
102   - convertSet(list, MesProWorkorderBomDO::getUnitMeasureId));
  102 + convertSet(list, MesProWorkOrderBomDO::getUnitMeasureId));
103 103 // 2. 拼接 VO
104   - return BeanUtils.toBean(list, MesProWorkorderBomRespVO.class, vo -> {
105   - MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
106   - // TODO @AI:少了 spec 字段?另外,改成链式调用;
107   - vo.setItemName(item.getName());
108   - vo.setItemCode(item.getCode());
109   - vo.setItemSpec(item.getSpec());
110   - });
  104 + return BeanUtils.toBean(list, MesProWorkOrderBomRespVO.class, vo -> {
  105 + MapUtils.findAndThen(itemMap, vo.getItemId(), item ->
  106 + vo.setItemName(item.getName()).setItemCode(item.getCode())
  107 + .setItemSpec(item.getSpecification()));
111 108 MapUtils.findAndThen(unitMeasureMap, vo.getUnitMeasureId(),
112 109 unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName()));
113 110 });
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkorderController.java
... ... @@ -8,19 +8,19 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
9 9 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
10 10 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
11   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderPageReqVO;
12   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderRespVO;
13   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderRespVO;
  13 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderSaveReqVO;
14 14 import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO;
15 15 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
16 16 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
17 17 import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO;
18   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderDO;
  18 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
19 19 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService;
20 20 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
21 21 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
22 22 import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService;
23   -import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkorderService;
  23 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
24 24 import io.swagger.v3.oas.annotations.Operation;
25 25 import io.swagger.v3.oas.annotations.Parameter;
26 26 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -42,12 +42,12 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
42 42  
43 43 @Tag(name = "管理后台 - MES 生产工单")
44 44 @RestController
45   -@RequestMapping("/mes/pro/workorder")
  45 +@RequestMapping("/mes/pro/work-order")
46 46 @Validated
47   -public class MesProWorkorderController {
  47 +public class MesProWorkOrderController {
48 48  
49 49 @Resource
50   - private MesProWorkorderService workorderService;
  50 + private MesProWorkOrderService workOrderService;
51 51  
52 52 @Resource
53 53 private MesMdItemService itemService;
... ... @@ -63,102 +63,98 @@ public class MesProWorkorderController {
63 63  
64 64 @PostMapping("/create")
65 65 @Operation(summary = "创建生产工单")
66   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:create')")
67   - public CommonResult<Long> createWorkorder(@Valid @RequestBody MesProWorkorderSaveReqVO createReqVO) {
68   - return success(workorderService.createWorkorder(createReqVO));
  66 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:create')")
  67 + public CommonResult<Long> createWorkOrder(@Valid @RequestBody MesProWorkOrderSaveReqVO createReqVO) {
  68 + return success(workOrderService.createWorkOrder(createReqVO));
69 69 }
70 70  
71 71 @PutMapping("/update")
72 72 @Operation(summary = "更新生产工单")
73   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
74   - public CommonResult<Boolean> updateWorkorder(@Valid @RequestBody MesProWorkorderSaveReqVO updateReqVO) {
75   - workorderService.updateWorkorder(updateReqVO);
  73 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  74 + public CommonResult<Boolean> updateWorkOrder(@Valid @RequestBody MesProWorkOrderSaveReqVO updateReqVO) {
  75 + workOrderService.updateWorkOrder(updateReqVO);
76 76 return success(true);
77 77 }
78 78  
79 79 @DeleteMapping("/delete")
80 80 @Operation(summary = "删除生产工单")
81 81 @Parameter(name = "id", description = "编号", required = true)
82   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:delete')")
83   - public CommonResult<Boolean> deleteWorkorder(@RequestParam("id") Long id) {
84   - workorderService.deleteWorkorder(id);
  82 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:delete')")
  83 + public CommonResult<Boolean> deleteWorkOrder(@RequestParam("id") Long id) {
  84 + workOrderService.deleteWorkOrder(id);
85 85 return success(true);
86 86 }
87 87  
88 88 @GetMapping("/get")
89 89 @Operation(summary = "获得生产工单")
90 90 @Parameter(name = "id", description = "编号", required = true, example = "1024")
91   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:query')")
92   - public CommonResult<MesProWorkorderRespVO> getWorkorder(@RequestParam("id") Long id) {
93   - MesProWorkorderDO workorder = workorderService.getWorkorder(id);
94   - if (workorder == null) {
  91 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
  92 + public CommonResult<MesProWorkOrderRespVO> getWorkOrder(@RequestParam("id") Long id) {
  93 + MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(id);
  94 + if (workOrder == null) {
95 95 return success(null);
96 96 }
97   - return success(buildWorkorderRespVOList(List.of(workorder)).get(0));
  97 + return success(buildWorkOrderRespVOList(List.of(workOrder)).get(0));
98 98 }
99 99  
100 100 @GetMapping("/page")
101 101 @Operation(summary = "获得生产工单分页")
102   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:query')")
103   - public CommonResult<PageResult<MesProWorkorderRespVO>> getWorkorderPage(@Valid MesProWorkorderPageReqVO pageReqVO) {
104   - PageResult<MesProWorkorderDO> pageResult = workorderService.getWorkorderPage(pageReqVO);
105   - return success(new PageResult<>(buildWorkorderRespVOList(pageResult.getList()), pageResult.getTotal()));
  102 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
  103 + public CommonResult<PageResult<MesProWorkOrderRespVO>> getWorkOrderPage(@Valid MesProWorkOrderPageReqVO pageReqVO) {
  104 + PageResult<MesProWorkOrderDO> pageResult = workOrderService.getWorkOrderPage(pageReqVO);
  105 + return success(new PageResult<>(buildWorkOrderRespVOList(pageResult.getList()), pageResult.getTotal()));
106 106 }
107 107  
108 108 @GetMapping("/export-excel")
109 109 @Operation(summary = "导出生产工单 Excel")
110   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:export')")
  110 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:export')")
111 111 @ApiAccessLog(operateType = EXPORT)
112   - public void exportWorkorderExcel(@Valid MesProWorkorderPageReqVO pageReqVO,
  112 + public void exportWorkOrderExcel(@Valid MesProWorkOrderPageReqVO pageReqVO,
113 113 HttpServletResponse response) throws IOException {
114 114 pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
115   - List<MesProWorkorderDO> list = workorderService.getWorkorderPage(pageReqVO).getList();
116   - List<MesProWorkorderRespVO> voList = buildWorkorderRespVOList(list);
117   - ExcelUtils.write(response, "生产工单.xls", "数据", MesProWorkorderRespVO.class, voList);
  115 + List<MesProWorkOrderDO> list = workOrderService.getWorkOrderPage(pageReqVO).getList();
  116 + List<MesProWorkOrderRespVO> voList = buildWorkOrderRespVOList(list);
  117 + ExcelUtils.write(response, "生产工单.xls", "数据", MesProWorkOrderRespVO.class, voList);
118 118 }
119 119  
120 120 @PutMapping("/finish")
121 121 @Operation(summary = "完成工单")
122 122 @Parameter(name = "id", description = "编号", required = true)
123   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
124   - public CommonResult<Boolean> finishWorkorder(@RequestParam("id") Long id) {
125   - workorderService.finishWorkorder(id);
  123 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  124 + public CommonResult<Boolean> finishWorkOrder(@RequestParam("id") Long id) {
  125 + workOrderService.finishWorkOrder(id);
126 126 return success(true);
127 127 }
128 128  
129 129 @PutMapping("/cancel")
130 130 @Operation(summary = "取消工单")
131 131 @Parameter(name = "id", description = "编号", required = true)
132   - @PreAuthorize("@ss.hasPermission('mes:pro-workorder:update')")
133   - public CommonResult<Boolean> cancelWorkorder(@RequestParam("id") Long id) {
134   - workorderService.cancelWorkorder(id);
  132 + @PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
  133 + public CommonResult<Boolean> cancelWorkOrder(@RequestParam("id") Long id) {
  134 + workOrderService.cancelWorkOrder(id);
135 135 return success(true);
136 136 }
137 137  
138 138 // ==================== 拼接 VO ====================
139 139  
140   - @SuppressWarnings("CodeBlock2Expr")
141   - private List<MesProWorkorderRespVO> buildWorkorderRespVOList(List<MesProWorkorderDO> list) {
  140 + private List<MesProWorkOrderRespVO> buildWorkOrderRespVOList(List<MesProWorkOrderDO> list) {
142 141 if (CollUtil.isEmpty(list)) {
143 142 return Collections.emptyList();
144 143 }
145 144 // 1. 批量获取关联数据
146 145 Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
147   - convertSet(list, MesProWorkorderDO::getProductId));
  146 + convertSet(list, MesProWorkOrderDO::getProductId));
148 147 Map<Long, MesMdClientDO> clientMap = clientService.getClientMap(
149   - convertSet(list, MesProWorkorderDO::getClientId));
  148 + convertSet(list, MesProWorkOrderDO::getClientId));
150 149 Map<Long, MesMdVendorDO> vendorMap = vendorService.getVendorMap(
151   - convertSet(list, MesProWorkorderDO::getVendorId));
  150 + convertSet(list, MesProWorkOrderDO::getVendorId));
152 151 Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
153   - convertSet(list, MesProWorkorderDO::getUnitMeasureId));
  152 + convertSet(list, MesProWorkOrderDO::getUnitMeasureId));
154 153 // 2. 拼接 VO
155   - return BeanUtils.toBean(list, MesProWorkorderRespVO.class, vo -> {
156   - MapUtils.findAndThen(itemMap, vo.getProductId(), item -> {
157   - // TODO @AI:少了 spec 字段?另外,改成链式调用;
158   - vo.setProductName(item.getName());
159   - vo.setProductCode(item.getCode());
160   - vo.setProductSpec(item.getSpec());
161   - });
  154 + return BeanUtils.toBean(list, MesProWorkOrderRespVO.class, vo -> {
  155 + MapUtils.findAndThen(itemMap, vo.getProductId(), item ->
  156 + vo.setProductName(item.getName()).setProductCode(item.getCode())
  157 + .setProductSpec(item.getSpecification()));
162 158 MapUtils.findAndThen(clientMap, vo.getClientId(),
163 159 client -> vo.setClientName(client.getName()));
164 160 MapUtils.findAndThen(vendorMap, vo.getVendorId(),
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java
... ... @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
15 15 @Data
16 16 @EqualsAndHashCode(callSuper = true)
17 17 @ToString(callSuper = true)
18   -public class MesProWorkorderPageReqVO extends PageParam {
  18 +public class MesProWorkOrderPageReqVO extends PageParam {
19 19  
20 20 @Schema(description = "工单编码", example = "WO-001")
21 21 private String code;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderRespVO.java
... ... @@ -14,7 +14,7 @@ import java.time.LocalDateTime;
14 14 @Schema(description = "管理后台 - MES 生产工单 Response VO")
15 15 @Data
16 16 @ExcelIgnoreUnannotated
17   -public class MesProWorkorderRespVO {
  17 +public class MesProWorkOrderRespVO {
18 18  
19 19 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
20 20 @ExcelProperty("编号")
... ... @@ -30,12 +30,12 @@ public class MesProWorkorderRespVO {
30 30  
31 31 @Schema(description = "工单类型", example = "1")
32 32 @ExcelProperty(value = "工单类型", converter = DictConvert.class)
33   - @DictFormat(DictTypeConstants.MES_PRO_WORKORDER_TYPE)
  33 + @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_TYPE)
34 34 private Integer type;
35 35  
36 36 @Schema(description = "来源类型", example = "1")
37 37 @ExcelProperty(value = "来源类型", converter = DictConvert.class)
38   - @DictFormat(DictTypeConstants.MES_PRO_WORKORDER_SOURCE_TYPE)
  38 + @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_SOURCE_TYPE)
39 39 private Integer orderSourceType;
40 40  
41 41 @Schema(description = "来源单据编号", example = "SO-001")
... ... @@ -105,9 +105,6 @@ public class MesProWorkorderRespVO {
105 105 @Schema(description = "父工单编号", example = "0")
106 106 private Long parentId;
107 107  
108   - @Schema(description = "所有父节点编号", example = "0")
109   - private String ancestors;
110   -
111 108 @Schema(description = "完成时间")
112 109 @ExcelProperty("完成时间")
113 110 private LocalDateTime finishDate;
... ... @@ -118,7 +115,7 @@ public class MesProWorkorderRespVO {
118 115  
119 116 @Schema(description = "工单状态", example = "0")
120 117 @ExcelProperty(value = "工单状态", converter = DictConvert.class)
121   - @DictFormat(DictTypeConstants.MES_PRO_WORKORDER_STATUS)
  118 + @DictFormat(DictTypeConstants.MES_PRO_WORK_ORDER_STATUS)
122 119 private Integer status;
123 120  
124 121 @Schema(description = "备注", example = "备注")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderSaveReqVO.java
... ... @@ -10,7 +10,7 @@ import java.time.LocalDateTime;
10 10  
11 11 @Schema(description = "管理后台 - MES 生产工单新增/修改 Request VO")
12 12 @Data
13   -public class MesProWorkorderSaveReqVO {
  13 +public class MesProWorkOrderSaveReqVO {
14 14  
15 15 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
16 16 private Long id;
... ... @@ -71,9 +71,6 @@ public class MesProWorkorderSaveReqVO {
71 71 @Schema(description = "父工单编号", example = "0")
72 72 private Long parentId;
73 73  
74   - @Schema(description = "所有父节点编号", example = "0")
75   - private String ancestors;
76   -
77 74 @Schema(description = "备注", example = "备注")
78 75 private String remark;
79 76  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/bom/MesProWorkorderBomPageReqVO.java
... ... @@ -11,10 +11,10 @@ import lombok.ToString;
11 11 @Data
12 12 @EqualsAndHashCode(callSuper = true)
13 13 @ToString(callSuper = true)
14   -public class MesProWorkorderBomPageReqVO extends PageParam {
  14 +public class MesProWorkOrderBomPageReqVO extends PageParam {
15 15  
16 16 @Schema(description = "生产工单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
17 17 @NotNull(message = "生产工单编号不能为空")
18   - private Long workorderId;
  18 + private Long workOrderId;
19 19  
20 20 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/bom/MesProWorkorderBomRespVO.java
... ... @@ -11,14 +11,14 @@ import java.time.LocalDateTime;
11 11 @Schema(description = "管理后台 - MES 生产工单 BOM Response VO")
12 12 @Data
13 13 @ExcelIgnoreUnannotated
14   -public class MesProWorkorderBomRespVO {
  14 +public class MesProWorkOrderBomRespVO {
15 15  
16 16 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
17 17 @ExcelProperty("编号")
18 18 private Long id;
19 19  
20 20 @Schema(description = "生产工单编号", example = "100")
21   - private Long workorderId;
  21 + private Long workOrderId;
22 22  
23 23 @Schema(description = "BOM 物料编号", example = "200")
24 24 private Long itemId;
... ... @@ -42,10 +42,6 @@ public class MesProWorkorderBomRespVO {
42 42 @ExcelProperty("单位")
43 43 private String unitMeasureName;
44 44  
45   - @Schema(description = "物料产品标识", example = "ITEM")
46   - @ExcelProperty("物料产品标识")
47   - private String itemOrProduct;
48   -
49 45 @Schema(description = "预计使用量", example = "10.00")
50 46 @ExcelProperty("预计使用量")
51 47 private BigDecimal quantity;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/bom/MesProWorkorderBomSaveReqVO.java
1 1 package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
4   -import jakarta.validation.constraints.NotEmpty;
5 4 import jakarta.validation.constraints.NotNull;
6 5 import lombok.Data;
7 6  
... ... @@ -9,14 +8,14 @@ import java.math.BigDecimal;
9 8  
10 9 @Schema(description = "管理后台 - MES 生产工单 BOM 新增/修改 Request VO")
11 10 @Data
12   -public class MesProWorkorderBomSaveReqVO {
  11 +public class MesProWorkOrderBomSaveReqVO {
13 12  
14 13 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
15 14 private Long id;
16 15  
17 16 @Schema(description = "生产工单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
18 17 @NotNull(message = "生产工单编号不能为空")
19   - private Long workorderId;
  18 + private Long workOrderId;
20 19  
21 20 @Schema(description = "BOM 物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "200")
22 21 @NotNull(message = "BOM 物料不能为空")
... ... @@ -26,10 +25,6 @@ public class MesProWorkorderBomSaveReqVO {
26 25 @NotNull(message = "单位不能为空")
27 26 private Long unitMeasureId;
28 27  
29   - @Schema(description = "物料产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "ITEM")
30   - @NotEmpty(message = "物料产品标识不能为空")
31   - private String itemOrProduct;
32   -
33 28 @Schema(description = "预计使用量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.00")
34 29 @NotNull(message = "预计使用量不能为空")
35 30 private BigDecimal quantity;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/MesQcDefectController.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/defect/MesQcDefectController.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.defect;
2 2  
3 3 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
... ... @@ -6,9 +6,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 8 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectPageReqVO;
10   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectRespVO;
11   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectSaveReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectSaveReqVO;
12 12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcDefectDO;
13 13 import cn.iocoder.yudao.module.mes.service.qc.MesQcDefectService;
14 14 import io.swagger.v3.oas.annotations.Operation;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcDefectPageReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/defect/vo/MesQcDefectPageReqVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcDefectRespVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/defect/vo/MesQcDefectRespVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcDefectSaveReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/defect/vo/MesQcDefectSaveReqVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
4 4 import jakarta.validation.constraints.NotEmpty;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/MesQcIndicatorController.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicator/MesQcIndicatorController.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.indicator;
2 2  
3 3 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
... ... @@ -6,9 +6,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 8 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorPageReqVO;
10   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorRespVO;
11   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorSaveReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorPageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorSaveReqVO;
12 12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
13 13 import cn.iocoder.yudao.module.mes.service.qc.MesQcIndicatorService;
14 14 import io.swagger.v3.oas.annotations.Operation;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcIndicatorPageReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicator/vo/MesQcIndicatorPageReqVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcIndicatorRespVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicator/vo/MesQcIndicatorRespVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo;
2 2  
3 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/vo/MesQcIndicatorSaveReqVO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/indicator/vo/MesQcIndicatorSaveReqVO.java
1   -package cn.iocoder.yudao.module.mes.controller.admin.qc.vo;
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
4 4 import jakarta.validation.constraints.NotEmpty;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template;
  2 +
  3 +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
  10 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateRespVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  13 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorRespVO;
  14 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
  15 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  16 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemRespVO;
  17 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
  18 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
  19 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
  20 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
  21 +import cn.iocoder.yudao.module.mes.service.qc.MesQcTemplateService;
  22 +import io.swagger.v3.oas.annotations.Operation;
  23 +import io.swagger.v3.oas.annotations.Parameter;
  24 +import io.swagger.v3.oas.annotations.tags.Tag;
  25 +import jakarta.annotation.Resource;
  26 +import jakarta.servlet.http.HttpServletResponse;
  27 +import jakarta.validation.Valid;
  28 +import org.springframework.security.access.prepost.PreAuthorize;
  29 +import org.springframework.validation.annotation.Validated;
  30 +import org.springframework.web.bind.annotation.*;
  31 +
  32 +import java.io.IOException;
  33 +import java.util.List;
  34 +
  35 +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  36 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  37 +
  38 +@Tag(name = "管理后台 - MES 质检方案")
  39 +@RestController
  40 +@RequestMapping("/mes/qc/template")
  41 +@Validated
  42 +public class MesQcTemplateController {
  43 +
  44 + @Resource
  45 + private MesQcTemplateService templateService;
  46 +
  47 + // ========== 质检方案主表 ==========
  48 +
  49 + @PostMapping("/create")
  50 + @Operation(summary = "创建质检方案")
  51 + @PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
  52 + public CommonResult<Long> createTemplate(@Valid @RequestBody MesQcTemplateSaveReqVO createReqVO) {
  53 + return success(templateService.createTemplate(createReqVO));
  54 + }
  55 +
  56 + @PutMapping("/update")
  57 + @Operation(summary = "更新质检方案")
  58 + @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
  59 + public CommonResult<Boolean> updateTemplate(@Valid @RequestBody MesQcTemplateSaveReqVO updateReqVO) {
  60 + templateService.updateTemplate(updateReqVO);
  61 + return success(true);
  62 + }
  63 +
  64 + @DeleteMapping("/delete")
  65 + @Operation(summary = "删除质检方案")
  66 + @Parameter(name = "id", description = "编号", required = true)
  67 + @PreAuthorize("@ss.hasPermission('mes:qc-template:delete')")
  68 + public CommonResult<Boolean> deleteTemplate(@RequestParam("id") Long id) {
  69 + templateService.deleteTemplate(id);
  70 + return success(true);
  71 + }
  72 +
  73 + @GetMapping("/get")
  74 + @Operation(summary = "获得质检方案")
  75 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  76 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  77 + public CommonResult<MesQcTemplateRespVO> getTemplate(@RequestParam("id") Long id) {
  78 + MesQcTemplateDO template = templateService.getTemplate(id);
  79 + return success(BeanUtils.toBean(template, MesQcTemplateRespVO.class));
  80 + }
  81 +
  82 + @GetMapping("/page")
  83 + @Operation(summary = "获得质检方案分页")
  84 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  85 + public CommonResult<PageResult<MesQcTemplateRespVO>> getTemplatePage(@Valid MesQcTemplatePageReqVO pageReqVO) {
  86 + PageResult<MesQcTemplateDO> pageResult = templateService.getTemplatePage(pageReqVO);
  87 + return success(BeanUtils.toBean(pageResult, MesQcTemplateRespVO.class));
  88 + }
  89 +
  90 + @GetMapping("/simple-list")
  91 + @Operation(summary = "获得质检方案精简列表", description = "主要用于前端的下拉选项")
  92 + public CommonResult<List<MesQcTemplateRespVO>> getTemplateSimpleList() {
  93 + List<MesQcTemplateDO> list = templateService.getTemplateList();
  94 + return success(BeanUtils.toBean(list, MesQcTemplateRespVO.class));
  95 + }
  96 +
  97 + @GetMapping("/export-excel")
  98 + @Operation(summary = "导出质检方案 Excel")
  99 + @PreAuthorize("@ss.hasPermission('mes:qc-template:export')")
  100 + @ApiAccessLog(operateType = EXPORT)
  101 + public void exportTemplateExcel(@Valid MesQcTemplatePageReqVO pageReqVO,
  102 + HttpServletResponse response) throws IOException {
  103 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  104 + List<MesQcTemplateDO> list = templateService.getTemplatePage(pageReqVO).getList();
  105 + ExcelUtils.write(response, "质检方案.xls", "数据", MesQcTemplateRespVO.class,
  106 + BeanUtils.toBean(list, MesQcTemplateRespVO.class));
  107 + }
  108 +
  109 + // ========== 质检方案-检测指标项 ==========
  110 +
  111 + // TODO @AI:是不是拆分成独立的 controller;类似别的模块
  112 +
  113 + @PostMapping("/indicator/create")
  114 + @Operation(summary = "创建质检方案-检测指标项")
  115 + @PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
  116 + public CommonResult<Long> createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) {
  117 + return success(templateService.createTemplateIndicator(createReqVO));
  118 + }
  119 +
  120 + @PutMapping("/indicator/update")
  121 + @Operation(summary = "更新质检方案-检测指标项")
  122 + @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
  123 + public CommonResult<Boolean> updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) {
  124 + templateService.updateTemplateIndicator(updateReqVO);
  125 + return success(true);
  126 + }
  127 +
  128 + @DeleteMapping("/indicator/delete")
  129 + @Operation(summary = "删除质检方案-检测指标项")
  130 + @Parameter(name = "id", description = "编号", required = true)
  131 + @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
  132 + public CommonResult<Boolean> deleteTemplateIndicator(@RequestParam("id") Long id) {
  133 + templateService.deleteTemplateIndicator(id);
  134 + return success(true);
  135 + }
  136 +
  137 + @GetMapping("/indicator/get")
  138 + @Operation(summary = "获得质检方案-检测指标项")
  139 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  140 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  141 + public CommonResult<MesQcTemplateIndicatorRespVO> getTemplateIndicator(@RequestParam("id") Long id) {
  142 + MesQcTemplateIndicatorDO indicator = templateService.getTemplateIndicator(id);
  143 + return success(BeanUtils.toBean(indicator, MesQcTemplateIndicatorRespVO.class));
  144 + }
  145 +
  146 + @GetMapping("/indicator/page")
  147 + @Operation(summary = "获得质检方案-检测指标项分页")
  148 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  149 + public CommonResult<PageResult<MesQcTemplateIndicatorRespVO>> getTemplateIndicatorPage(
  150 + @Valid MesQcTemplateIndicatorPageReqVO pageReqVO) {
  151 + PageResult<MesQcTemplateIndicatorDO> pageResult = templateService.getTemplateIndicatorPage(pageReqVO);
  152 + return success(BeanUtils.toBean(pageResult, MesQcTemplateIndicatorRespVO.class));
  153 + }
  154 +
  155 + // ========== 质检方案-产品关联 ==========
  156 +
  157 + // TODO @AI:是不是拆分成独立的 controller;类似别的模块
  158 +
  159 + @PostMapping("/item/create")
  160 + @Operation(summary = "创建质检方案-产品关联")
  161 + @PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
  162 + public CommonResult<Long> createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) {
  163 + return success(templateService.createTemplateItem(createReqVO));
  164 + }
  165 +
  166 + @PutMapping("/item/update")
  167 + @Operation(summary = "更新质检方案-产品关联")
  168 + @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
  169 + public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) {
  170 + templateService.updateTemplateItem(updateReqVO);
  171 + return success(true);
  172 + }
  173 +
  174 + @DeleteMapping("/item/delete")
  175 + @Operation(summary = "删除质检方案-产品关联")
  176 + @Parameter(name = "id", description = "编号", required = true)
  177 + @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
  178 + public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) {
  179 + templateService.deleteTemplateItem(id);
  180 + return success(true);
  181 + }
  182 +
  183 + @GetMapping("/item/get")
  184 + @Operation(summary = "获得质检方案-产品关联")
  185 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  186 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  187 + public CommonResult<MesQcTemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) {
  188 + MesQcTemplateItemDO item = templateService.getTemplateItem(id);
  189 + return success(BeanUtils.toBean(item, MesQcTemplateItemRespVO.class));
  190 + }
  191 +
  192 + @GetMapping("/item/page")
  193 + @Operation(summary = "获得质检方案-产品关联分页")
  194 + @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
  195 + public CommonResult<PageResult<MesQcTemplateItemRespVO>> getTemplateItemPage(
  196 + @Valid MesQcTemplateItemPageReqVO pageReqVO) {
  197 + PageResult<MesQcTemplateItemDO> pageResult = templateService.getTemplateItemPage(pageReqVO);
  198 + return success(BeanUtils.toBean(pageResult, MesQcTemplateItemRespVO.class));
  199 + }
  200 +
  201 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplatePageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +@Schema(description = "管理后台 - MES 质检方案分页 Request VO")
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +@ToString(callSuper = true)
  13 +public class MesQcTemplatePageReqVO extends PageParam {
  14 +
  15 + @Schema(description = "方案编号", example = "QCT001")
  16 + private String code;
  17 +
  18 + @Schema(description = "方案名称", example = "出货检验")
  19 + private String name;
  20 +
  21 + // TODO @AI:会用 List<String>
  22 + @Schema(description = "检测种类(模糊匹配)", example = "IQC")
  23 + private String types;
  24 +
  25 + // TODO @AI:使用 Boolean;
  26 + @Schema(description = "是否启用(Y/N)", example = "Y")
  27 + private String enableFlag;
  28 +
  29 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo;
  2 +
  3 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  4 +import cn.idev.excel.annotation.ExcelProperty;
  5 +import io.swagger.v3.oas.annotations.media.Schema;
  6 +import lombok.Data;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +@Schema(description = "管理后台 - MES 质检方案 Response VO")
  11 +@Data
  12 +@ExcelIgnoreUnannotated
  13 +public class MesQcTemplateRespVO {
  14 +
  15 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  16 + @ExcelProperty("编号")
  17 + private Long id;
  18 +
  19 + @Schema(description = "方案编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "QCT001")
  20 + @ExcelProperty("方案编号")
  21 + private String code;
  22 +
  23 + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "成品出货检验方案")
  24 + @ExcelProperty("方案名称")
  25 + private String name;
  26 +
  27 + // TODO @AI:会用 List<String>;这里不用 (逗号分隔:IQC,IPQC,OQC,RQC) 注释;
  28 + @Schema(description = "检测种类(逗号分隔:IQC,IPQC,OQC,RQC)", requiredMode = Schema.RequiredMode.REQUIRED, example = "IQC,OQC")
  29 + @ExcelProperty("检测种类")
  30 + private String types;
  31 +
  32 + // TODO @AI:Boolean;
  33 + @Schema(description = "是否启用(Y/N)", requiredMode = Schema.RequiredMode.REQUIRED, example = "Y")
  34 + @ExcelProperty("是否启用")
  35 + private String enableFlag;
  36 +
  37 + @Schema(description = "备注", example = "备注")
  38 + @ExcelProperty("备注")
  39 + private String remark;
  40 +
  41 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  42 + @ExcelProperty("创建时间")
  43 + private LocalDateTime createTime;
  44 +
  45 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import lombok.Data;
  6 +
  7 +@Schema(description = "管理后台 - MES 质检方案新增/修改 Request VO")
  8 +@Data
  9 +public class MesQcTemplateSaveReqVO {
  10 +
  11 + @Schema(description = "编号", example = "1024")
  12 + private Long id;
  13 +
  14 + @Schema(description = "方案编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "QCT001")
  15 + @NotEmpty(message = "方案编号不能为空")
  16 + private String code;
  17 +
  18 + @Schema(description = "方案名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "成品出货检验方案")
  19 + @NotEmpty(message = "方案名称不能为空")
  20 + private String name;
  21 +
  22 + // TODO @AI:会用 List<String>;这里不用 (逗号分隔:IQC,IPQC,OQC,RQC) 注释;
  23 + @Schema(description = "检测种类(逗号分隔:IQC,IPQC,OQC,RQC)", requiredMode = Schema.RequiredMode.REQUIRED, example = "IQC,OQC")
  24 + @NotEmpty(message = "检测种类不能为空")
  25 + private String types;
  26 +
  27 + // TODO @AI:Boolean;
  28 + @Schema(description = "是否启用(Y/N)", requiredMode = Schema.RequiredMode.REQUIRED, example = "Y")
  29 + @NotEmpty(message = "是否启用不能为空")
  30 + private String enableFlag;
  31 +
  32 + @Schema(description = "备注", example = "备注")
  33 + private String remark;
  34 +
  35 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.ToString;
  9 +
  10 +@Schema(description = "管理后台 - MES 质检方案-检测指标项分页 Request VO")
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@ToString(callSuper = true)
  14 +public class MesQcTemplateIndicatorPageReqVO extends PageParam {
  15 +
  16 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "质检方案ID不能为空")
  18 + private Long templateId;
  19 +
  20 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator;
  2 +
  3 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  4 +import cn.idev.excel.annotation.ExcelProperty;
  5 +import io.swagger.v3.oas.annotations.media.Schema;
  6 +import lombok.Data;
  7 +
  8 +import java.math.BigDecimal;
  9 +import java.time.LocalDateTime;
  10 +
  11 +@Schema(description = "管理后台 - MES 质检方案-检测指标项 Response VO")
  12 +@Data
  13 +@ExcelIgnoreUnannotated
  14 +public class MesQcTemplateIndicatorRespVO {
  15 +
  16 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  17 + @ExcelProperty("编号")
  18 + private Long id;
  19 +
  20 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  21 + private Long templateId;
  22 +
  23 + @Schema(description = "质检指标ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  24 + @ExcelProperty("质检指标ID")
  25 + private Long indicatorId;
  26 +
  27 + @Schema(description = "检测方法/检测要求", example = "目视检查外观")
  28 + @ExcelProperty("检测方法")
  29 + private String checkMethod;
  30 +
  31 + @Schema(description = "标准值", example = "10.0000")
  32 + @ExcelProperty("标准值")
  33 + private BigDecimal standardValue;
  34 +
  35 + @Schema(description = "单位", example = "mm")
  36 + @ExcelProperty("单位")
  37 + private String unit;
  38 +
  39 + @Schema(description = "误差上限", example = "10.5000")
  40 + @ExcelProperty("误差上限")
  41 + private BigDecimal thresholdMax;
  42 +
  43 + @Schema(description = "误差下限", example = "9.5000")
  44 + @ExcelProperty("误差下限")
  45 + private BigDecimal thresholdMin;
  46 +
  47 + @Schema(description = "说明图URL", example = "https://example.com/doc.png")
  48 + private String docUrl;
  49 +
  50 + @Schema(description = "备注", example = "备注")
  51 + @ExcelProperty("备注")
  52 + private String remark;
  53 +
  54 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  55 + @ExcelProperty("创建时间")
  56 + private LocalDateTime createTime;
  57 +
  58 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Data;
  6 +
  7 +import java.math.BigDecimal;
  8 +
  9 +@Schema(description = "管理后台 - MES 质检方案-检测指标项新增/修改 Request VO")
  10 +@Data
  11 +public class MesQcTemplateIndicatorSaveReqVO {
  12 +
  13 + @Schema(description = "编号", example = "1024")
  14 + private Long id;
  15 +
  16 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "质检方案ID不能为空")
  18 + private Long templateId;
  19 +
  20 + /**
  21 + * TODO @芋艿:等 qc_indicator 完成后,改为选择器,此处改为 @NotNull 强校验
  22 + */
  23 + @Schema(description = "质检指标ID(关联 mes_qc_indicator)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  24 + @NotNull(message = "质检指标ID不能为空")
  25 + private Long indicatorId;
  26 +
  27 + @Schema(description = "检测方法/检测要求", example = "目视检查外观")
  28 + private String checkMethod;
  29 +
  30 + @Schema(description = "标准值", example = "10.0000")
  31 + private BigDecimal standardValue;
  32 +
  33 + @Schema(description = "单位", example = "mm")
  34 + private String unit;
  35 +
  36 + @Schema(description = "误差上限", example = "10.5000")
  37 + private BigDecimal thresholdMax;
  38 +
  39 + @Schema(description = "误差下限", example = "9.5000")
  40 + private BigDecimal thresholdMin;
  41 +
  42 + @Schema(description = "说明图URL", example = "https://example.com/doc.png")
  43 + private String docUrl;
  44 +
  45 + @Schema(description = "备注", example = "备注")
  46 + private String remark;
  47 +
  48 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.ToString;
  9 +
  10 +@Schema(description = "管理后台 - MES 质检方案-产品关联分页 Request VO")
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@ToString(callSuper = true)
  14 +public class MesQcTemplateItemPageReqVO extends PageParam {
  15 +
  16 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "质检方案ID不能为空")
  18 + private Long templateId;
  19 +
  20 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item;
  2 +
  3 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  4 +import cn.idev.excel.annotation.ExcelProperty;
  5 +import io.swagger.v3.oas.annotations.media.Schema;
  6 +import lombok.Data;
  7 +
  8 +import java.math.BigDecimal;
  9 +import java.time.LocalDateTime;
  10 +
  11 +@Schema(description = "管理后台 - MES 质检方案-产品关联 Response VO")
  12 +@Data
  13 +@ExcelIgnoreUnannotated
  14 +public class MesQcTemplateItemRespVO {
  15 +
  16 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  17 + @ExcelProperty("编号")
  18 + private Long id;
  19 +
  20 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  21 + private Long templateId;
  22 +
  23 + @Schema(description = "产品物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  24 + @ExcelProperty("产品物料ID")
  25 + private Long itemId;
  26 +
  27 + @Schema(description = "最低检测数", example = "5")
  28 + @ExcelProperty("最低检测数")
  29 + private Integer quantityCheck;
  30 +
  31 + // TODO @AI:VO 里,(0=不启用) 去掉
  32 + @Schema(description = "最大不合格数(0=不启用)", example = "0")
  33 + @ExcelProperty("最大不合格数")
  34 + private Integer quantityUnqualified;
  35 +
  36 + // TODO @AI:VO 里,(0=不允许) 去掉
  37 + @Schema(description = "最大致命缺陷率(%,0=不允许)", example = "0")
  38 + @ExcelProperty("致命缺陷率%")
  39 + private BigDecimal criticalRate;
  40 +
  41 + // TODO @AI:VO 里,(0=不允许) 去掉
  42 + @Schema(description = "最大严重缺陷率(%,0=不允许)", example = "0")
  43 + @ExcelProperty("严重缺陷率%")
  44 + private BigDecimal majorRate;
  45 +
  46 + @Schema(description = "最大轻微缺陷率(%)", example = "100")
  47 + @ExcelProperty("轻微缺陷率%")
  48 + private BigDecimal minorRate;
  49 +
  50 + @Schema(description = "备注", example = "备注")
  51 + @ExcelProperty("备注")
  52 + private String remark;
  53 +
  54 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  55 + @ExcelProperty("创建时间")
  56 + private LocalDateTime createTime;
  57 +
  58 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemSaveReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Data;
  6 +
  7 +import java.math.BigDecimal;
  8 +
  9 +@Schema(description = "管理后台 - MES 质检方案-产品关联新增/修改 Request VO")
  10 +@Data
  11 +public class MesQcTemplateItemSaveReqVO {
  12 +
  13 + @Schema(description = "编号", example = "1024")
  14 + private Long id;
  15 +
  16 + @Schema(description = "质检方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  17 + @NotNull(message = "质检方案ID不能为空")
  18 + private Long templateId;
  19 +
  20 + @Schema(description = "产品物料ID(关联 mes_md_item)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  21 + @NotNull(message = "产品物料ID不能为空")
  22 + private Long itemId;
  23 +
  24 + @Schema(description = "最低检测数", example = "5")
  25 + private Integer quantityCheck;
  26 +
  27 + // TODO @AI:VO 里,(0=不启用) 去掉
  28 + @Schema(description = "最大不合格数(0=不启用)", example = "0")
  29 + private Integer quantityUnqualified;
  30 +
  31 + // TODO @AI:VO 里,(0=不允许) 去掉
  32 + @Schema(description = "最大致命缺陷率(%,0=不允许)", example = "0")
  33 + private BigDecimal criticalRate;
  34 +
  35 + // TODO @AI:VO 里,(0=不允许) 去掉
  36 + @Schema(description = "最大严重缺陷率(%,0=不允许)", example = "0")
  37 + private BigDecimal majorRate;
  38 +
  39 + @Schema(description = "最大轻微缺陷率(%)", example = "100")
  40 + private BigDecimal minorRate;
  41 +
  42 + @Schema(description = "备注", example = "备注")
  43 + private String remark;
  44 +
  45 +}
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/MesCalPlanDO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/plan/MesCalPlanDO.java
1   -package cn.iocoder.yudao.module.mes.dal.dataobject.cal;
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.mes.enums.cal.MesCalCalendarTypeEnum;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/MesCalPlanShiftDO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/plan/MesCalPlanShiftDO.java
1   -package cn.iocoder.yudao.module.mes.dal.dataobject.cal;
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import com.baomidou.mybatisplus.annotation.KeySequence;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/MesCalPlanTeamDO.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/cal/plan/MesCalPlanTeamDO.java
1   -package cn.iocoder.yudao.module.mes.dal.dataobject.cal;
  1 +package cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import com.baomidou.mybatisplus.annotation.KeySequence;
... ... @@ -35,7 +35,7 @@ public class MesCalPlanTeamDO extends BaseDO {
35 35 /**
36 36 * 班组编号
37 37 *
38   - * TODO @芋艿:关联 cal_team 表,等 cal_team 迁移后补充
  38 + * TODO @AI:关联 cal_team 表,等 cal_team 迁移后补充
39 39 */
40 40 private Long teamId;
41 41 /**
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/workorder/MesProWorkorderBomDO.java
... ... @@ -15,15 +15,15 @@ import java.math.BigDecimal;
15 15 *
16 16 * @author 芋道源码
17 17 */
18   -@TableName("mes_pro_workorder_bom")
19   -@KeySequence("mes_pro_workorder_bom_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  18 +@TableName("mes_pro_work_order_bom")
  19 +@KeySequence("mes_pro_work_order_bom_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
20 20 @Data
21 21 @EqualsAndHashCode(callSuper = true)
22 22 @ToString(callSuper = true)
23 23 @Builder
24 24 @NoArgsConstructor
25 25 @AllArgsConstructor
26   -public class MesProWorkorderBomDO extends BaseDO {
  26 +public class MesProWorkOrderBomDO extends BaseDO {
27 27  
28 28 /**
29 29 * 编号
... ... @@ -33,9 +33,9 @@ public class MesProWorkorderBomDO extends BaseDO {
33 33 /**
34 34 * 生产工单编号
35 35 *
36   - * 关联 {@link MesProWorkorderDO#getId()}
  36 + * 关联 {@link MesProWorkOrderDO#getId()}
37 37 */
38   - private Long workorderId;
  38 + private Long workOrderId;
39 39 /**
40 40 * BOM 物料编号
41 41 *
... ... @@ -48,11 +48,6 @@ public class MesProWorkorderBomDO extends BaseDO {
48 48 * 关联 {@link MesMdUnitMeasureDO#getId()}
49 49 */
50 50 private Long unitMeasureId;
51   - // TODO @AI:需要存储么?还是使用 itemId 的冗余?
52   - /**
53   - * 物料产品标识
54   - */
55   - private String itemOrProduct;
56 51 /**
57 52 * 预计使用量
58 53 */
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/workorder/MesProWorkorderDO.java
... ... @@ -5,9 +5,9 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO;
5 5 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
6 6 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
7 7 import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO;
8   -import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkorderSourceTypeEnum;
9   -import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkorderStatusEnum;
10   -import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkorderTypeEnum;
  8 +import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderSourceTypeEnum;
  9 +import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderStatusEnum;
  10 +import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderTypeEnum;
11 11 import com.baomidou.mybatisplus.annotation.KeySequence;
12 12 import com.baomidou.mybatisplus.annotation.TableId;
13 13 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -21,15 +21,15 @@ import java.time.LocalDateTime;
21 21 *
22 22 * @author 芋道源码
23 23 */
24   -@TableName("mes_pro_workorder")
25   -@KeySequence("mes_pro_workorder_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  24 +@TableName("mes_pro_work_order")
  25 +@KeySequence("mes_pro_work_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
26 26 @Data
27 27 @EqualsAndHashCode(callSuper = true)
28 28 @ToString(callSuper = true)
29 29 @Builder
30 30 @NoArgsConstructor
31 31 @AllArgsConstructor
32   -public class MesProWorkorderDO extends BaseDO {
  32 +public class MesProWorkOrderDO extends BaseDO {
33 33  
34 34 /**
35 35 * 编号
... ... @@ -47,13 +47,13 @@ public class MesProWorkorderDO extends BaseDO {
47 47 /**
48 48 * 工单类型
49 49 *
50   - * 枚举 {@link MesProWorkorderTypeEnum}
  50 + * 枚举 {@link MesProWorkOrderTypeEnum}
51 51 */
52 52 private Integer type;
53 53 /**
54 54 * 来源类型
55 55 *
56   - * 枚举 {@link MesProWorkorderSourceTypeEnum}
  56 + * 枚举 {@link MesProWorkOrderSourceTypeEnum}
57 57 */
58 58 private Integer orderSourceType;
59 59 /**
... ... @@ -111,14 +111,9 @@ public class MesProWorkorderDO extends BaseDO {
111 111 /**
112 112 * 父工单编号
113 113 *
114   - * 关联 {@link MesProWorkorderDO#getId()}
  114 + * 关联 {@link MesProWorkOrderDO#getId()}
115 115 */
116 116 private Long parentId;
117   - // TODO @AI:panrentId?不用父节点编号;
118   - /**
119   - * 所有父节点编号
120   - */
121   - private String ancestors;
122 117 /**
123 118 * 完成时间
124 119 */
... ... @@ -130,7 +125,7 @@ public class MesProWorkorderDO extends BaseDO {
130 125 /**
131 126 * 工单状态
132 127 *
133   - * 枚举 {@link MesProWorkorderStatusEnum}
  128 + * 枚举 {@link MesProWorkOrderStatusEnum}
134 129 */
135 130 private Integer status;
136 131 /**
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/cal/plan/MesCalPlanMapper.java
... ... @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanPageReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 /**
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/cal/plan/MesCalPlanShiftMapper.java
... ... @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftPageReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanShiftDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanShiftDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 import java.util.List;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/cal/plan/MesCalPlanTeamMapper.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.mes.dal.mysql.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 4 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
5   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanTeamDO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanTeamDO;
6 6 import org.apache.ibatis.annotations.Mapper;
7 7  
8 8 import java.util.List;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderBomMapper.java
... ... @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomPageReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderBomDO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 import java.util.List;
... ... @@ -15,20 +15,20 @@ import java.util.List;
15 15 * @author 芋道源码
16 16 */
17 17 @Mapper
18   -public interface MesProWorkorderBomMapper extends BaseMapperX<MesProWorkorderBomDO> {
  18 +public interface MesProWorkOrderBomMapper extends BaseMapperX<MesProWorkOrderBomDO> {
19 19  
20   - default PageResult<MesProWorkorderBomDO> selectPage(MesProWorkorderBomPageReqVO reqVO) {
21   - return selectPage(reqVO, new LambdaQueryWrapperX<MesProWorkorderBomDO>()
22   - .eqIfPresent(MesProWorkorderBomDO::getWorkorderId, reqVO.getWorkorderId())
23   - .orderByDesc(MesProWorkorderBomDO::getId));
  20 + default PageResult<MesProWorkOrderBomDO> selectPage(MesProWorkOrderBomPageReqVO reqVO) {
  21 + return selectPage(reqVO, new LambdaQueryWrapperX<MesProWorkOrderBomDO>()
  22 + .eqIfPresent(MesProWorkOrderBomDO::getWorkOrderId, reqVO.getWorkOrderId())
  23 + .orderByDesc(MesProWorkOrderBomDO::getId));
24 24 }
25 25  
26   - default List<MesProWorkorderBomDO> selectListByWorkorderId(Long workorderId) {
27   - return selectList(MesProWorkorderBomDO::getWorkorderId, workorderId);
  26 + default List<MesProWorkOrderBomDO> selectListByWorkOrderId(Long workOrderId) {
  27 + return selectList(MesProWorkOrderBomDO::getWorkOrderId, workOrderId);
28 28 }
29 29  
30   - default void deleteByWorkorderId(Long workorderId) {
31   - delete(MesProWorkorderBomDO::getWorkorderId, workorderId);
  30 + default void deleteByWorkOrderId(Long workOrderId) {
  31 + delete(MesProWorkOrderBomDO::getWorkOrderId, workOrderId);
32 32 }
33 33  
34 34 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java
... ... @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderPageReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderDO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 /**
... ... @@ -13,23 +13,23 @@ import org.apache.ibatis.annotations.Mapper;
13 13 * @author 芋道源码
14 14 */
15 15 @Mapper
16   -public interface MesProWorkorderMapper extends BaseMapperX<MesProWorkorderDO> {
  16 +public interface MesProWorkOrderMapper extends BaseMapperX<MesProWorkOrderDO> {
17 17  
18   - default PageResult<MesProWorkorderDO> selectPage(MesProWorkorderPageReqVO reqVO) {
19   - return selectPage(reqVO, new LambdaQueryWrapperX<MesProWorkorderDO>()
20   - .likeIfPresent(MesProWorkorderDO::getCode, reqVO.getCode())
21   - .likeIfPresent(MesProWorkorderDO::getName, reqVO.getName())
22   - .eqIfPresent(MesProWorkorderDO::getType, reqVO.getType())
23   - .eqIfPresent(MesProWorkorderDO::getOrderSourceType, reqVO.getOrderSourceType())
24   - .eqIfPresent(MesProWorkorderDO::getProductId, reqVO.getProductId())
25   - .eqIfPresent(MesProWorkorderDO::getClientId, reqVO.getClientId())
26   - .eqIfPresent(MesProWorkorderDO::getStatus, reqVO.getStatus())
27   - .betweenIfPresent(MesProWorkorderDO::getRequestDate, reqVO.getRequestDate())
28   - .orderByDesc(MesProWorkorderDO::getId));
  18 + default PageResult<MesProWorkOrderDO> selectPage(MesProWorkOrderPageReqVO reqVO) {
  19 + return selectPage(reqVO, new LambdaQueryWrapperX<MesProWorkOrderDO>()
  20 + .likeIfPresent(MesProWorkOrderDO::getCode, reqVO.getCode())
  21 + .likeIfPresent(MesProWorkOrderDO::getName, reqVO.getName())
  22 + .eqIfPresent(MesProWorkOrderDO::getType, reqVO.getType())
  23 + .eqIfPresent(MesProWorkOrderDO::getOrderSourceType, reqVO.getOrderSourceType())
  24 + .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
  25 + .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
  26 + .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
  27 + .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
  28 + .orderByDesc(MesProWorkOrderDO::getId));
29 29 }
30 30  
31   - default MesProWorkorderDO selectByCode(String code) {
32   - return selectOne(MesProWorkorderDO::getCode, code);
  31 + default MesProWorkOrderDO selectByCode(String code) {
  32 + return selectOne(MesProWorkOrderDO::getCode, code);
33 33 }
34 34  
35 35 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcDefectMapper.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mes.dal.mysql.qc;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectPageReqVO;
7 7 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcDefectDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcIndicatorMapper.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mes.dal.mysql.qc;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorPageReqVO;
7 7 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java
... ... @@ -23,5 +23,6 @@ public interface DictTypeConstants {
23 23 String MES_PRO_WORKORDER_STATUS = "mes_pro_workorder_status"; // MES 生产工单状态
24 24 String MES_PRO_WORKORDER_SOURCE_TYPE = "mes_pro_workorder_source_type"; // MES 工单来源类型
25 25 String MES_PRO_WORKORDER_TYPE = "mes_pro_workorder_type"; // MES 工单类型
  26 + String MES_QC_TYPE = "mes_qc_type"; // MES 检测种类(IQC/IPQC/OQC/RQC)
26 27  
27 28 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -145,8 +145,14 @@ public interface ErrorCodeConstants {
145 145 // ========== MES 生产管理-生产任务(1-040-503-000) ==========
146 146 ErrorCode PRO_TASK_NOT_EXISTS = new ErrorCode(1_040_503_000, "生产任务不存在");
147 147  
148   - // ========== MES 质量管理-检验模板(1-040-600-000) ==========
149   - ErrorCode QC_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_600_000, "检验模板不存在");
  148 + // ========== MES 质量管理-质检方案(1-040-600-000) ==========
  149 + ErrorCode QC_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_600_000, "质检方案不存在");
  150 + ErrorCode QC_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_040_600_001, "质检方案编号已存在");
  151 + // ========== MES 质量管理-质检方案检测指标项(1-040-600-100) ==========
  152 + ErrorCode QC_TEMPLATE_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_600_100, "质检方案检测指标项不存在");
  153 + // ========== MES 质量管理-质检方案产品关联(1-040-600-200) ==========
  154 + ErrorCode QC_TEMPLATE_ITEM_NOT_EXISTS = new ErrorCode(1_040_600_200, "质检方案产品关联不存在");
  155 + ErrorCode QC_TEMPLATE_ITEM_DUPLICATE = new ErrorCode(1_040_600_201, "该产品已关联此质检方案");
150 156  
151 157 // ========== MES 质量管理-质检指标(1-040-601-000) ==========
152 158 ErrorCode QC_INDICATOR_NOT_EXISTS = new ErrorCode(1_040_601_000, "质检指标不存在");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProWorkorderSourceTypeEnum.java
... ... @@ -13,12 +13,12 @@ import java.util.Arrays;
13 13 */
14 14 @Getter
15 15 @AllArgsConstructor
16   -public enum MesProWorkorderSourceTypeEnum implements ArrayValuable<Integer> {
  16 +public enum MesProWorkOrderSourceTypeEnum implements ArrayValuable<Integer> {
17 17  
18 18 ORDER(1, "客户订单"),
19 19 STORE(2, "库存备货");
20 20  
21   - public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkorderSourceTypeEnum::getType).toArray(Integer[]::new);
  21 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkOrderSourceTypeEnum::getType).toArray(Integer[]::new);
22 22  
23 23 /**
24 24 * 类型值
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProWorkorderStatusEnum.java
... ... @@ -13,14 +13,14 @@ import java.util.Arrays;
13 13 */
14 14 @Getter
15 15 @AllArgsConstructor
16   -public enum MesProWorkorderStatusEnum implements ArrayValuable<Integer> {
  16 +public enum MesProWorkOrderStatusEnum implements ArrayValuable<Integer> {
17 17  
18 18 PREPARE(0, "草稿"),
19 19 CONFIRMED(1, "已确认"),
20 20 FINISHED(2, "已完成"),
21 21 CANCELED(3, "已取消");
22 22  
23   - public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkorderStatusEnum::getStatus).toArray(Integer[]::new);
  23 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkOrderStatusEnum::getStatus).toArray(Integer[]::new);
24 24  
25 25 /**
26 26 * 状态值
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/pro/MesProWorkorderTypeEnum.java
... ... @@ -13,13 +13,13 @@ import java.util.Arrays;
13 13 */
14 14 @Getter
15 15 @AllArgsConstructor
16   -public enum MesProWorkorderTypeEnum implements ArrayValuable<Integer> {
  16 +public enum MesProWorkOrderTypeEnum implements ArrayValuable<Integer> {
17 17  
18 18 SELF(1, "自行生产"),
19 19 OUTSOURCE(2, "代工"),
20 20 PURCHASE(3, "采购");
21 21  
22   - public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkorderTypeEnum::getType).toArray(Integer[]::new);
  22 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesProWorkOrderTypeEnum::getType).toArray(Integer[]::new);
23 23  
24 24 /**
25 25 * 类型值
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanService.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mes.service.cal.plan;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanPageReqVO;
5 5 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanSaveReqVO;
6   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanDO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanDO;
7 7 import jakarta.validation.Valid;
8 8  
9 9 /**
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanServiceImpl.java
... ... @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 5 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanPageReqVO;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.MesCalPlanSaveReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanDO;
8 8 import cn.iocoder.yudao.module.mes.dal.mysql.cal.plan.MesCalPlanMapper;
9 9 import cn.iocoder.yudao.module.mes.enums.cal.MesCalPlanStatusEnum;
10 10 import cn.iocoder.yudao.module.mes.enums.cal.MesCalShiftTypeEnum;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanShiftService.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mes.service.cal.plan;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftPageReqVO;
5 5 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftSaveReqVO;
6   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanShiftDO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanShiftDO;
7 7 import jakarta.validation.Valid;
8 8  
9 9 import java.util.List;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanShiftServiceImpl.java
... ... @@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 6 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftPageReqVO;
7 7 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.shift.MesCalPlanShiftSaveReqVO;
8   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanDO;
9   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanShiftDO;
  8 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanDO;
  9 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanShiftDO;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.cal.plan.MesCalPlanMapper;
11 11 import cn.iocoder.yudao.module.mes.dal.mysql.cal.plan.MesCalPlanShiftMapper;
12 12 import cn.iocoder.yudao.module.mes.enums.cal.MesCalShiftTypeEnum;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanTeamService.java
1 1 package cn.iocoder.yudao.module.mes.service.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.team.MesCalPlanTeamSaveReqVO;
4   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanTeamDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanTeamDO;
5 5 import jakarta.validation.Valid;
6 6  
7 7 import java.util.List;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanTeamServiceImpl.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.mes.service.cal.plan;
2 2  
3 3 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
4 4 import cn.iocoder.yudao.module.mes.controller.admin.cal.plan.vo.team.MesCalPlanTeamSaveReqVO;
5   -import cn.iocoder.yudao.module.mes.dal.dataobject.cal.MesCalPlanTeamDO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.cal.plan.MesCalPlanTeamDO;
6 6 import cn.iocoder.yudao.module.mes.dal.mysql.cal.plan.MesCalPlanTeamMapper;
7 7 import jakarta.annotation.Resource;
8 8 import org.springframework.context.annotation.Lazy;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemService.java
... ... @@ -52,6 +52,14 @@ public interface MesMdItemService {
52 52 MesMdItemDO getItem(Long id);
53 53  
54 54 /**
  55 + * 校验物料产品存在
  56 + *
  57 + * @param id 编号
  58 + * @return 物料产品
  59 + */
  60 + MesMdItemDO validateItemExists(Long id);
  61 +
  62 + /**
55 63 * 获得物料产品分页
56 64 *
57 65 * @param pageReqVO 分页查询
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
... ... @@ -112,10 +112,13 @@ public class MesMdItemServiceImpl implements MesMdItemService {
112 112 itemMapper.deleteById(id);
113 113 }
114 114  
115   - private void validateItemExists(Long id) {
116   - if (itemMapper.selectById(id) == null) {
  115 + @Override
  116 + public MesMdItemDO validateItemExists(Long id) {
  117 + MesMdItemDO item = itemMapper.selectById(id);
  118 + if (item == null) {
117 119 throw exception(MD_ITEM_NOT_EXISTS);
118 120 }
  121 + return item;
119 122 }
120 123  
121 124 private void validateItemCodeUnique(Long id, String code) {
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderBomService.java
1 1 package cn.iocoder.yudao.module.mes.service.pro.workorder;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomPageReqVO;
5   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomSaveReqVO;
6   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderBomDO;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
7 7 import jakarta.validation.Valid;
8 8  
9 9 import java.util.List;
... ... @@ -13,7 +13,7 @@ import java.util.List;
13 13 *
14 14 * @author 芋道源码
15 15 */
16   -public interface MesProWorkorderBomService {
  16 +public interface MesProWorkOrderBomService {
17 17  
18 18 /**
19 19 * 创建工单 BOM
... ... @@ -21,21 +21,21 @@ public interface MesProWorkorderBomService {
21 21 * @param createReqVO 创建信息
22 22 * @return 编号
23 23 */
24   - Long createWorkorderBom(@Valid MesProWorkorderBomSaveReqVO createReqVO);
  24 + Long createWorkOrderBom(@Valid MesProWorkOrderBomSaveReqVO createReqVO);
25 25  
26 26 /**
27 27 * 更新工单 BOM
28 28 *
29 29 * @param updateReqVO 更新信息
30 30 */
31   - void updateWorkorderBom(@Valid MesProWorkorderBomSaveReqVO updateReqVO);
  31 + void updateWorkOrderBom(@Valid MesProWorkOrderBomSaveReqVO updateReqVO);
32 32  
33 33 /**
34 34 * 删除工单 BOM
35 35 *
36 36 * @param id 编号
37 37 */
38   - void deleteWorkorderBom(Long id);
  38 + void deleteWorkOrderBom(Long id);
39 39  
40 40 /**
41 41 * 获得工单 BOM
... ... @@ -43,7 +43,7 @@ public interface MesProWorkorderBomService {
43 43 * @param id 编号
44 44 * @return 工单 BOM
45 45 */
46   - MesProWorkorderBomDO getWorkorderBom(Long id);
  46 + MesProWorkOrderBomDO getWorkOrderBom(Long id);
47 47  
48 48 /**
49 49 * 获得工单 BOM 分页
... ... @@ -51,21 +51,21 @@ public interface MesProWorkorderBomService {
51 51 * @param pageReqVO 分页查询
52 52 * @return 工单 BOM 分页
53 53 */
54   - PageResult<MesProWorkorderBomDO> getWorkorderBomPage(MesProWorkorderBomPageReqVO pageReqVO);
  54 + PageResult<MesProWorkOrderBomDO> getWorkOrderBomPage(MesProWorkOrderBomPageReqVO pageReqVO);
55 55  
56 56 /**
57 57 * 根据工单编号获得 BOM 列表
58 58 *
59   - * @param workorderId 工单编号
  59 + * @param workOrderId 工单编号
60 60 * @return BOM 列表
61 61 */
62   - List<MesProWorkorderBomDO> getWorkorderBomListByWorkorderId(Long workorderId);
  62 + List<MesProWorkOrderBomDO> getWorkOrderBomListByWorkOrderId(Long workOrderId);
63 63  
64 64 /**
65 65 * 根据工单编号删除 BOM
66 66 *
67   - * @param workorderId 工单编号
  67 + * @param workOrderId 工单编号
68 68 */
69   - void deleteWorkorderBomByWorkorderId(Long workorderId);
  69 + void deleteWorkOrderBomByWorkOrderId(Long workOrderId);
70 70  
71 71 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderBomServiceImpl.java
... ... @@ -2,18 +2,19 @@ package cn.iocoder.yudao.module.mes.service.pro.workorder;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomPageReqVO;
6   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkorderBomSaveReqVO;
7   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderBomDO;
8   -import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkorderBomMapper;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomPageReqVO;
  6 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.bom.MesProWorkOrderBomSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
  8 +import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderBomMapper;
9 9 import jakarta.annotation.Resource;
  10 +import org.springframework.context.annotation.Lazy;
10 11 import org.springframework.stereotype.Service;
11 12 import org.springframework.validation.annotation.Validated;
12 13  
13 14 import java.util.List;
14 15  
15 16 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
16   -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_WORKORDER_BOM_NOT_EXISTS;
  17 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_WORK_ORDER_BOM_NOT_EXISTS;
17 18  
18 19 /**
19 20 * MES 生产工单 BOM Service 实现类
... ... @@ -22,60 +23,65 @@ import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_WORKORDER
22 23 */
23 24 @Service
24 25 @Validated
25   -public class MesProWorkorderBomServiceImpl implements MesProWorkorderBomService {
  26 +public class MesProWorkOrderBomServiceImpl implements MesProWorkOrderBomService {
26 27  
27 28 @Resource
28   - private MesProWorkorderBomMapper workorderBomMapper;
  29 + private MesProWorkOrderBomMapper workOrderBomMapper;
  30 +
  31 + @Resource
  32 + @Lazy // 延迟加载,避免循环依赖
  33 + private MesProWorkOrderService workOrderService;
29 34  
30 35 @Override
31   - public Long createWorkorderBom(MesProWorkorderBomSaveReqVO createReqVO) {
32   - // TODO @AI:是不是要校验 workorder 存在?另外,大小写应该是 workOrder?
33   - MesProWorkorderBomDO workorderBom = BeanUtils.toBean(createReqVO, MesProWorkorderBomDO.class);
34   - workorderBomMapper.insert(workorderBom);
35   - return workorderBom.getId();
  36 + public Long createWorkOrderBom(MesProWorkOrderBomSaveReqVO createReqVO) {
  37 + // 校验工单存在
  38 + workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
  39 + MesProWorkOrderBomDO workOrderBom = BeanUtils.toBean(createReqVO, MesProWorkOrderBomDO.class);
  40 + workOrderBomMapper.insert(workOrderBom);
  41 + return workOrderBom.getId();
36 42 }
37 43  
38 44 @Override
39   - public void updateWorkorderBom(MesProWorkorderBomSaveReqVO updateReqVO) {
  45 + public void updateWorkOrderBom(MesProWorkOrderBomSaveReqVO updateReqVO) {
40 46 // 校验存在
41   - validateWorkorderBomExists(updateReqVO.getId());
  47 + validateWorkOrderBomExists(updateReqVO.getId());
42 48 // 更新
43   - MesProWorkorderBomDO updateObj = BeanUtils.toBean(updateReqVO, MesProWorkorderBomDO.class);
44   - workorderBomMapper.updateById(updateObj);
  49 + MesProWorkOrderBomDO updateObj = BeanUtils.toBean(updateReqVO, MesProWorkOrderBomDO.class);
  50 + workOrderBomMapper.updateById(updateObj);
45 51 }
46 52  
47 53 @Override
48   - public void deleteWorkorderBom(Long id) {
  54 + public void deleteWorkOrderBom(Long id) {
49 55 // 校验存在
50   - validateWorkorderBomExists(id);
  56 + validateWorkOrderBomExists(id);
51 57 // 删除
52   - workorderBomMapper.deleteById(id);
  58 + workOrderBomMapper.deleteById(id);
53 59 }
54 60  
55   - private void validateWorkorderBomExists(Long id) {
56   - if (workorderBomMapper.selectById(id) == null) {
57   - throw exception(PRO_WORKORDER_BOM_NOT_EXISTS);
  61 + private void validateWorkOrderBomExists(Long id) {
  62 + if (workOrderBomMapper.selectById(id) == null) {
  63 + throw exception(PRO_WORK_ORDER_BOM_NOT_EXISTS);
58 64 }
59 65 }
60 66  
61 67 @Override
62   - public MesProWorkorderBomDO getWorkorderBom(Long id) {
63   - return workorderBomMapper.selectById(id);
  68 + public MesProWorkOrderBomDO getWorkOrderBom(Long id) {
  69 + return workOrderBomMapper.selectById(id);
64 70 }
65 71  
66 72 @Override
67   - public PageResult<MesProWorkorderBomDO> getWorkorderBomPage(MesProWorkorderBomPageReqVO pageReqVO) {
68   - return workorderBomMapper.selectPage(pageReqVO);
  73 + public PageResult<MesProWorkOrderBomDO> getWorkOrderBomPage(MesProWorkOrderBomPageReqVO pageReqVO) {
  74 + return workOrderBomMapper.selectPage(pageReqVO);
69 75 }
70 76  
71 77 @Override
72   - public List<MesProWorkorderBomDO> getWorkorderBomListByWorkorderId(Long workorderId) {
73   - return workorderBomMapper.selectListByWorkorderId(workorderId);
  78 + public List<MesProWorkOrderBomDO> getWorkOrderBomListByWorkOrderId(Long workOrderId) {
  79 + return workOrderBomMapper.selectListByWorkOrderId(workOrderId);
74 80 }
75 81  
76 82 @Override
77   - public void deleteWorkorderBomByWorkorderId(Long workorderId) {
78   - workorderBomMapper.deleteByWorkorderId(workorderId);
  83 + public void deleteWorkOrderBomByWorkOrderId(Long workOrderId) {
  84 + workOrderBomMapper.deleteByWorkOrderId(workOrderId);
79 85 }
80 86  
81 87 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderService.java
1 1 package cn.iocoder.yudao.module.mes.service.pro.workorder;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderPageReqVO;
5   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderSaveReqVO;
6   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderDO;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
7 7 import jakarta.validation.Valid;
8 8  
9 9 /**
... ... @@ -11,7 +11,7 @@ import jakarta.validation.Valid;
11 11 *
12 12 * @author 芋道源码
13 13 */
14   -public interface MesProWorkorderService {
  14 +public interface MesProWorkOrderService {
15 15  
16 16 /**
17 17 * 创建生产工单
... ... @@ -19,21 +19,29 @@ public interface MesProWorkorderService {
19 19 * @param createReqVO 创建信息
20 20 * @return 编号
21 21 */
22   - Long createWorkorder(@Valid MesProWorkorderSaveReqVO createReqVO);
  22 + Long createWorkOrder(@Valid MesProWorkOrderSaveReqVO createReqVO);
23 23  
24 24 /**
25 25 * 更新生产工单
26 26 *
27 27 * @param updateReqVO 更新信息
28 28 */
29   - void updateWorkorder(@Valid MesProWorkorderSaveReqVO updateReqVO);
  29 + void updateWorkOrder(@Valid MesProWorkOrderSaveReqVO updateReqVO);
30 30  
31 31 /**
32 32 * 删除生产工单
33 33 *
34 34 * @param id 编号
35 35 */
36   - void deleteWorkorder(Long id);
  36 + void deleteWorkOrder(Long id);
  37 +
  38 + /**
  39 + * 校验生产工单存在
  40 + *
  41 + * @param id 编号
  42 + * @return 生产工单
  43 + */
  44 + MesProWorkOrderDO validateWorkOrderExists(Long id);
37 45  
38 46 /**
39 47 * 获得生产工单
... ... @@ -41,7 +49,7 @@ public interface MesProWorkorderService {
41 49 * @param id 编号
42 50 * @return 生产工单
43 51 */
44   - MesProWorkorderDO getWorkorder(Long id);
  52 + MesProWorkOrderDO getWorkOrder(Long id);
45 53  
46 54 /**
47 55 * 获得生产工单分页
... ... @@ -49,20 +57,20 @@ public interface MesProWorkorderService {
49 57 * @param pageReqVO 分页查询
50 58 * @return 生产工单分页
51 59 */
52   - PageResult<MesProWorkorderDO> getWorkorderPage(MesProWorkorderPageReqVO pageReqVO);
  60 + PageResult<MesProWorkOrderDO> getWorkOrderPage(MesProWorkOrderPageReqVO pageReqVO);
53 61  
54 62 /**
55 63 * 完成工单
56 64 *
57 65 * @param id 编号
58 66 */
59   - void finishWorkorder(Long id);
  67 + void finishWorkOrder(Long id);
60 68  
61 69 /**
62 70 * 取消工单
63 71 *
64 72 * @param id 编号
65 73 */
66   - void cancelWorkorder(Long id);
  74 + void cancelWorkOrder(Long id);
67 75  
68 76 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java
... ... @@ -4,16 +4,16 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderSaveReqVO;
8   -import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkorderPageReqVO;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemBatchConfigDO;
10 10 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
11 11 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdProductBomDO;
12   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderBomDO;
13   -import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkorderDO;
14   -import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkorderBomMapper;
15   -import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkorderMapper;
16   -import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkorderStatusEnum;
  12 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
  14 +import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderBomMapper;
  15 +import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderMapper;
  16 +import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderStatusEnum;
17 17 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemBatchConfigService;
18 18 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
19 19 import cn.iocoder.yudao.module.mes.service.md.item.MesMdProductBomService;
... ... @@ -25,7 +25,6 @@ import org.springframework.validation.annotation.Validated;
25 25 import java.math.BigDecimal;
26 26 import java.time.LocalDateTime;
27 27 import java.util.List;
28   -import java.util.Objects;
29 28  
30 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
31 30 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
... ... @@ -37,13 +36,13 @@ import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
37 36 */
38 37 @Service
39 38 @Validated
40   -public class MesProWorkorderServiceImpl implements MesProWorkorderService {
  39 +public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
41 40  
42 41 @Resource
43   - private MesProWorkorderMapper workorderMapper;
  42 + private MesProWorkOrderMapper workOrderMapper;
44 43  
45 44 @Resource
46   - private MesProWorkorderBomMapper workorderBomMapper;
  45 + private MesProWorkOrderBomMapper workOrderBomMapper;
47 46  
48 47 @Resource
49 48 private MesMdItemService itemService;
... ... @@ -56,15 +55,11 @@ public class MesProWorkorderServiceImpl implements MesProWorkorderService {
56 55  
57 56 @Override
58 57 @Transactional(rollbackFor = Exception.class)
59   - public Long createWorkorder(MesProWorkorderSaveReqVO createReqVO) {
  58 + public Long createWorkOrder(MesProWorkOrderSaveReqVO createReqVO) {
60 59 // 1.1 校验编码唯一
61   - validateWorkorderCodeUnique(null, createReqVO.getCode());
  60 + validateWorkOrderCodeUnique(null, createReqVO.getCode());
62 61 // 1.2 校验产品存在
63   - // TODO @AI:getItem 里面要有个校验方法,不然每次都要写 if (item == null) throw exception(MD_ITEM_NOT_EXISTS);
64   - MesMdItemDO product = itemService.getItem(createReqVO.getProductId());
65   - if (product == null) {
66   - throw exception(MD_ITEM_NOT_EXISTS);
67   - }
  62 + itemService.validateItemExists(createReqVO.getProductId());
68 63 // 1.3 校验批次配置:如果产品有 clientFlag=true,则 clientId 必填
69 64 validateBatchConfig(createReqVO.getProductId(), createReqVO.getClientId());
70 65  
... ... @@ -72,121 +67,112 @@ public class MesProWorkorderServiceImpl implements MesProWorkorderService {
72 67 if (createReqVO.getParentId() == null) {
73 68 createReqVO.setParentId(0L);
74 69 }
75   - if (createReqVO.getAncestors() == null) {
76   - createReqVO.setAncestors("0");
77   - }
78 70 // 2.2 插入工单
79   - MesProWorkorderDO workorder = BeanUtils.toBean(createReqVO, MesProWorkorderDO.class);
80   - if (workorder.getStatus() == null) {
81   - workorder.setStatus(MesProWorkorderStatusEnum.PREPARE.getStatus());
  71 + MesProWorkOrderDO workOrder = BeanUtils.toBean(createReqVO, MesProWorkOrderDO.class);
  72 + if (workOrder.getStatus() == null) {
  73 + workOrder.setStatus(MesProWorkOrderStatusEnum.PREPARE.getStatus());
82 74 }
83   - workorderMapper.insert(workorder);
  75 + workOrderMapper.insert(workOrder);
84 76  
85 77 // 3. 自动生成 BOM:根据产品 BOM 生成工单 BOM
86   - generateWorkorderBom(workorder.getId(), createReqVO.getProductId(), createReqVO.getQuantity());
87   - return workorder.getId();
  78 + generateWorkOrderBom(workOrder.getId(), createReqVO.getProductId(), createReqVO.getQuantity());
  79 + return workOrder.getId();
88 80 }
89 81  
90 82 @Override
91 83 @Transactional(rollbackFor = Exception.class)
92   - public void updateWorkorder(MesProWorkorderSaveReqVO updateReqVO) {
  84 + public void updateWorkOrder(MesProWorkOrderSaveReqVO updateReqVO) {
93 85 // 1.1 校验存在
94   - MesProWorkorderDO oldWorkorder = validateWorkorderExists(updateReqVO.getId());
  86 + MesProWorkOrderDO oldWorkOrder = validateWorkOrderExists(updateReqVO.getId());
95 87 // 1.2 校验编码唯一
96   - validateWorkorderCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
  88 + validateWorkOrderCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
97 89 // 1.3 校验批次配置
98 90 validateBatchConfig(updateReqVO.getProductId(), updateReqVO.getClientId());
99 91  
100 92 // 2. 判断产品或数量是否变更,如果变更则重新生成 BOM
101   - boolean productChanged = !Objects.equals(oldWorkorder.getProductId(), updateReqVO.getProductId());
102   - boolean quantityChanged = oldWorkorder.getQuantity().compareTo(updateReqVO.getQuantity()) != 0;
  93 + boolean productChanged = ObjUtil.notEqual(oldWorkOrder.getProductId(), updateReqVO.getProductId());
  94 + boolean quantityChanged = oldWorkOrder.getQuantity().compareTo(updateReqVO.getQuantity()) != 0;
103 95 if (productChanged || quantityChanged) {
104 96 // 删除旧 BOM 并重新生成
105   - workorderBomMapper.deleteByWorkorderId(updateReqVO.getId());
106   - generateWorkorderBom(updateReqVO.getId(), updateReqVO.getProductId(), updateReqVO.getQuantity());
  97 + workOrderBomMapper.deleteByWorkOrderId(updateReqVO.getId());
  98 + generateWorkOrderBom(updateReqVO.getId(), updateReqVO.getProductId(), updateReqVO.getQuantity());
107 99 }
108 100  
109 101 // 3. 更新
110   - MesProWorkorderDO updateObj = BeanUtils.toBean(updateReqVO, MesProWorkorderDO.class);
111   - workorderMapper.updateById(updateObj);
  102 + MesProWorkOrderDO updateObj = BeanUtils.toBean(updateReqVO, MesProWorkOrderDO.class);
  103 + workOrderMapper.updateById(updateObj);
112 104 }
113 105  
114 106 @Override
115 107 @Transactional(rollbackFor = Exception.class)
116   - public void deleteWorkorder(Long id) {
  108 + public void deleteWorkOrder(Long id) {
117 109 // 1.1 校验存在
118   - MesProWorkorderDO workorder = validateWorkorderExists(id);
  110 + MesProWorkOrderDO workOrder = validateWorkOrderExists(id);
119 111 // 1.2 只能删除草稿状态的工单
120   - // TODO @AI:notEquals;ObjUtil
121   - if (!Objects.equals(workorder.getStatus(), MesProWorkorderStatusEnum.PREPARE.getStatus())) {
122   - throw exception(PRO_WORKORDER_NOT_PREPARE);
  112 + if (ObjUtil.notEqual(workOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) {
  113 + throw exception(PRO_WORK_ORDER_NOT_PREPARE);
123 114 }
124 115  
125 116 // 2. 删除工单 + BOM
126   - workorderMapper.deleteById(id);
127   - workorderBomMapper.deleteByWorkorderId(id);
  117 + workOrderMapper.deleteById(id);
  118 + workOrderBomMapper.deleteByWorkOrderId(id);
128 119 }
129 120  
130 121 @Override
131   - public MesProWorkorderDO getWorkorder(Long id) {
132   - return workorderMapper.selectById(id);
  122 + public MesProWorkOrderDO validateWorkOrderExists(Long id) {
  123 + MesProWorkOrderDO workOrder = workOrderMapper.selectById(id);
  124 + if (workOrder == null) {
  125 + throw exception(PRO_WORK_ORDER_NOT_EXISTS);
  126 + }
  127 + return workOrder;
133 128 }
134 129  
135 130 @Override
136   - public PageResult<MesProWorkorderDO> getWorkorderPage(MesProWorkorderPageReqVO pageReqVO) {
137   - return workorderMapper.selectPage(pageReqVO);
  131 + public MesProWorkOrderDO getWorkOrder(Long id) {
  132 + return workOrderMapper.selectById(id);
138 133 }
139 134  
140 135 @Override
141   - public void finishWorkorder(Long id) {
  136 + public PageResult<MesProWorkOrderDO> getWorkOrderPage(MesProWorkOrderPageReqVO pageReqVO) {
  137 + return workOrderMapper.selectPage(pageReqVO);
  138 + }
  139 +
  140 + @Override
  141 + public void finishWorkOrder(Long id) {
142 142 // 1. 校验存在
143   - validateWorkorderExists(id);
  143 + validateWorkOrderExists(id);
144 144  
145 145 // 2. 更新状态为已完成
146   - // TODO @AI:链式调用,不用逐个设置;
147   - MesProWorkorderDO updateObj = new MesProWorkorderDO();
148   - updateObj.setId(id);
149   - updateObj.setStatus(MesProWorkorderStatusEnum.FINISHED.getStatus());
150   - updateObj.setFinishDate(LocalDateTime.now());
151   - workorderMapper.updateById(updateObj);
  146 + workOrderMapper.updateById(new MesProWorkOrderDO().setId(id)
  147 + .setStatus(MesProWorkOrderStatusEnum.FINISHED.getStatus())
  148 + .setFinishDate(LocalDateTime.now()));
152 149 // TODO @芋艿:pro_task 未迁移,暂不级联更新任务状态
153 150 }
154 151  
155 152 @Override
156   - public void cancelWorkorder(Long id) {
  153 + public void cancelWorkOrder(Long id) {
157 154 // 1. 校验存在
158   - validateWorkorderExists(id);
  155 + validateWorkOrderExists(id);
159 156  
160 157 // 2. 更新状态为已取消
161   - // TODO @AI:链式调用,不用逐个设置;
162   - MesProWorkorderDO updateObj = new MesProWorkorderDO();
163   - updateObj.setId(id);
164   - updateObj.setStatus(MesProWorkorderStatusEnum.CANCELED.getStatus());
165   - updateObj.setCancelDate(LocalDateTime.now());
166   - workorderMapper.updateById(updateObj);
  158 + workOrderMapper.updateById(new MesProWorkOrderDO().setId(id)
  159 + .setStatus(MesProWorkOrderStatusEnum.CANCELED.getStatus())
  160 + .setCancelDate(LocalDateTime.now()));
167 161 // TODO @芋艿:pro_task 未迁移,暂不级联更新任务状态
168 162 }
169 163  
170 164 // ==================== 校验方法 ====================
171 165  
172   - private MesProWorkorderDO validateWorkorderExists(Long id) {
173   - MesProWorkorderDO workorder = workorderMapper.selectById(id);
174   - if (workorder == null) {
175   - throw exception(PRO_WORKORDER_NOT_EXISTS);
176   - }
177   - return workorder;
178   - }
179   -
180   - private void validateWorkorderCodeUnique(Long id, String code) {
  166 + private void validateWorkOrderCodeUnique(Long id, String code) {
181 167 if (code == null) {
182 168 return;
183 169 }
184   - MesProWorkorderDO workorder = workorderMapper.selectByCode(code);
185   - if (workorder == null) {
  170 + MesProWorkOrderDO workOrder = workOrderMapper.selectByCode(code);
  171 + if (workOrder == null) {
186 172 return;
187 173 }
188   - if (ObjUtil.notEqual(workorder.getId(), id)) {
189   - throw exception(PRO_WORKORDER_CODE_DUPLICATE);
  174 + if (ObjUtil.notEqual(workOrder.getId(), id)) {
  175 + throw exception(PRO_WORK_ORDER_CODE_DUPLICATE);
190 176 }
191 177 }
192 178  
... ... @@ -203,30 +189,22 @@ public class MesProWorkorderServiceImpl implements MesProWorkorderService {
203 189 /**
204 190 * 根据产品 BOM 自动生成工单 BOM 行
205 191 *
206   - * @param workorderId 工单编号
  192 + * @param workOrderId 工单编号
207 193 * @param productId 产品编号
208 194 * @param quantity 工单生产数量
209 195 */
210   - private void generateWorkorderBom(Long workorderId, Long productId, BigDecimal quantity) {
  196 + private void generateWorkOrderBom(Long workOrderId, Long productId, BigDecimal quantity) {
211 197 List<MesMdProductBomDO> productBomList = productBomService.getProductBomListByItemId(productId);
212 198 if (CollUtil.isEmpty(productBomList)) {
213 199 return;
214 200 }
215 201 for (MesMdProductBomDO productBom : productBomList) {
216   - MesMdItemDO bomItem = itemService.getItem(productBom.getBomItemId());
217   - // TODO @AI:bomItem 校验必须非空吧?!
218   - // TODO @AI:联会调用;
219   - MesProWorkorderBomDO workorderBom = new MesProWorkorderBomDO();
220   - workorderBom.setWorkorderId(workorderId);
221   - workorderBom.setItemId(productBom.getBomItemId());
222   - workorderBom.setItemOrProduct("ITEM");
223   - // 预计使用量 = 工单数量 × BOM 用量
224   - workorderBom.setQuantity(quantity.multiply(productBom.getQuantity()));
225   - // 设置单位:使用物料自身的单位
226   - if (bomItem != null) {
227   - workorderBom.setUnitMeasureId(bomItem.getUnitMeasureId());
228   - }
229   - workorderBomMapper.insert(workorderBom);
  202 + MesMdItemDO bomItem = itemService.validateItemExists(productBom.getBomItemId());
  203 + workOrderBomMapper.insert(new MesProWorkOrderBomDO()
  204 + .setWorkOrderId(workOrderId)
  205 + .setItemId(productBom.getBomItemId())
  206 + .setQuantity(quantity.multiply(productBom.getQuantity()))
  207 + .setUnitMeasureId(bomItem.getUnitMeasureId()));
230 208 }
231 209 }
232 210  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcDefectService.java
1 1 package cn.iocoder.yudao.module.mes.service.qc;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectPageReqVO;
5   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectSaveReqVO;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectSaveReqVO;
6 6 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcDefectDO;
7 7 import jakarta.validation.Valid;
8 8  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcDefectServiceImpl.java
... ... @@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectPageReqVO;
8   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcDefectSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectPageReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcDefectDO;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcDefectMapper;
11 11 import jakarta.annotation.Resource;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcIndicatorService.java
1 1 package cn.iocoder.yudao.module.mes.service.qc;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorPageReqVO;
5   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorSaveReqVO;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorSaveReqVO;
6 6 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
7 7 import jakarta.validation.Valid;
8 8  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcIndicatorServiceImpl.java
... ... @@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorPageReqVO;
8   -import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcIndicatorSaveReqVO;
  7 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorPageReqVO;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.qc.indicator.vo.MesQcIndicatorSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
10 10 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcIndicatorMapper;
11 11 import jakarta.annotation.Resource;
... ...