From 8c65f898ed6e5b0c7a94c792c4562f6ec831dccd Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 07 十一月 2026 08:50:53 +0800
Subject: [PATCH] feat: 完善质检、生产、销售、财务与人事模块并接入审批流程
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java | 72 ++++++++++++++++++++++++++++++++++-
1 files changed, 69 insertions(+), 3 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
index 1113942..6c3c3ff 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
@@ -9,9 +9,14 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcImportExcelVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcTemplateProcessRespVO;
+import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcWageFieldRespVO;
+import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcWageFieldSaveReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcImportRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
@@ -26,6 +31,7 @@
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcLineMapper;
import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
+import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
@@ -34,6 +40,8 @@
import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
+import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcWageFieldService;
+import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateProcessService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
@@ -45,8 +53,10 @@
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -85,6 +95,10 @@
private MesQcIndicatorService indicatorService;
@Resource
private MesQcIpqcLineMapper ipqcLineMapper;
+ @Resource
+ private MesQcTemplateProcessService templateProcessService;
+ @Resource
+ private MesQcIpqcWageFieldService ipqcWageFieldService;
@Resource
private AdminUserApi adminUserApi;
@@ -122,10 +136,38 @@
return success(true);
}
+ @GetMapping("/template-by-process")
+ @Operation(summary = "鎸夊伐搴忚幏鍙栭粯璁よ川妫�鏂规鍙婃娴嬫寚鏍囧瓧娈�")
+ @Parameter(name = "processId", description = "宸ュ簭缂栧彿", required = true)
+ @Parameter(name = "type", description = "璐ㄦ绉嶇被锛岄粯璁� 2-杩囩▼妫�楠�", example = "2")
+ public CommonResult<MesQcIpqcTemplateProcessRespVO> getTemplateByProcess(
+ @RequestParam("processId") Long processId,
+ @RequestParam(value = "type", required = false) Integer type) {
+ return success(templateProcessService.resolveTemplate(processId,
+ type != null ? type : MesQcTypeEnum.IPQC.getType()));
+ }
+
+ @GetMapping("/wage-field/list")
+ @Operation(summary = "鎸夊伐搴忚幏鍙栬繃绋嬫楠屽崟宸ヨ祫瀛楁锛堝伐搴忚嚜瀹氫箟瀛楁锛岃川妫�濉啓锛�")
+ @Parameter(name = "processId", description = "宸ュ簭缂栧彿锛涚┖鏃舵寜 ipqcId 瑙f瀽")
+ @Parameter(name = "ipqcId", description = "杩囩▼妫�楠屽崟缂栧彿锛涙柊寤烘椂涓嶄紶锛岀敤浜庡姞杞藉凡濉啓鐨勫��")
+ public CommonResult<List<MesQcIpqcWageFieldRespVO>> getWageFieldList(
+ @RequestParam(value = "processId", required = false) Long processId,
+ @RequestParam(value = "ipqcId", required = false) Long ipqcId) {
+ return success(ipqcWageFieldService.getFieldList(processId, ipqcId));
+ }
+
+ @PostMapping("/wage-field/save")
+ @Operation(summary = "淇濆瓨杩囩▼妫�楠屽崟宸ヨ祫瀛楁鍊�")
+ @PreAuthorize("@ss.hasAnyPermissions('mes:qc-ipqc:create', 'mes:qc-ipqc:update')")
+ public CommonResult<Boolean> saveWageFieldValues(@Valid @RequestBody MesQcIpqcWageFieldSaveReqVO reqVO) {
+ ipqcWageFieldService.saveValues(reqVO);
+ return success(true);
+ }
+
@GetMapping("/get")
@Operation(summary = "鑾峰緱杩囩▼妫�楠屽崟")
@Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:query')")
public CommonResult<MesQcIpqcRespVO> getIpqc(@RequestParam("id") Long id) {
MesQcIpqcDO ipqc = ipqcService.getIpqc(id);
return success(buildIpqcRespVOList(Collections.singletonList(ipqc)).get(0));
@@ -133,7 +175,6 @@
@GetMapping("/page")
@Operation(summary = "鑾峰緱杩囩▼妫�楠屽崟鍒嗛〉")
- @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:query')")
public CommonResult<PageResult<MesQcIpqcRespVO>> getIpqcPage(@Valid MesQcIpqcPageReqVO pageReqVO) {
PageResult<MesQcIpqcDO> pageResult = ipqcService.getIpqcPage(pageReqVO);
return success(new PageResult<>(buildIpqcRespVOList(pageResult.getList()), pageResult.getTotal()));
@@ -149,6 +190,31 @@
List<MesQcIpqcDO> list = ipqcService.getIpqcPage(pageReqVO).getList();
List<MesQcQualityExportVO> exportList = buildIpqcQualityExportList(list);
ExcelUtils.write(response, "杩囩▼妫�楠屽崟.xls", "鏁版嵁", MesQcQualityExportVO.class, exportList);
+ }
+
+ @GetMapping("/get-import-template")
+ @Operation(summary = "鑾峰緱瀵煎叆杩囩▼妫�楠屽崟妯℃澘")
+ @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:import')")
+ public void importTemplate(HttpServletResponse response) throws IOException {
+ List<MesQcIpqcImportExcelVO> list = Collections.singletonList(
+ MesQcIpqcImportExcelVO.builder()
+ .name("绀轰緥-XX宸ュ崟杩囩▼妫�楠�").type("棣栨").workOrderCode("MO20260101000001")
+ .workstationName("绀轰緥宸ヤ綅").templateName("")
+ .checkQuantity(new BigDecimal("100")).qualifiedQuantity(new BigDecimal("95"))
+ .unqualifiedQuantity(new BigDecimal("5")).laborScrapQuantity(new BigDecimal("2"))
+ .materialScrapQuantity(new BigDecimal("2")).otherScrapQuantity(new BigDecimal("1"))
+ .checkResult("鏍¢獙閫氳繃").inspectorName("").inspectDate("2026-01-01 10:00:00")
+ .remark("绀轰緥鏁版嵁锛屽鍏ュ墠璇锋浛鎹�")
+ .build());
+ ExcelUtils.write(response, "杩囩▼妫�楠屽崟瀵煎叆妯℃澘.xls", "杩囩▼妫�楠�", MesQcIpqcImportExcelVO.class, list);
+ }
+
+ @PostMapping("/import")
+ @Operation(summary = "瀵煎叆杩囩▼妫�楠屽崟")
+ @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:import')")
+ public CommonResult<MesQcImportRespVO> importIpqcExcel(@RequestParam("file") MultipartFile file) throws Exception {
+ List<MesQcIpqcImportExcelVO> list = ExcelUtils.read(file, MesQcIpqcImportExcelVO.class);
+ return success(ipqcService.importIpqcList(list));
}
// ==================== 鎷兼帴 VO ====================
@@ -240,7 +306,7 @@
String value = detail.getValue();
String remark = detail.getRemark();
// 鏍煎紡鍖栦负 "鎸囨爣鍚嶇О:鍊�" 鎴� "鎸囨爣鍚嶇О:鍊�(澶囨敞)"
- String indicatorStr = indicatorName + ":" + value;
+ String indicatorStr = indicatorName + ":" + (StrUtil.isBlank(value) ? "鏈~鍐�" : value);
if (StrUtil.isNotBlank(remark)) {
indicatorStr += "(" + remark + ")";
}
--
Gitblit v1.9.3