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/pd/project/MesPdProjectController.java | 66 +++++++++++++++++++++++++++++++++
1 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
index 6ea3048..046ab2a 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
@@ -12,6 +12,9 @@
import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.project.MesPdProjectDO;
+import cn.iocoder.yudao.module.mes.enums.pd.MesPdProjectStatusEnum;
+import cn.iocoder.yudao.module.mes.service.wm.document.MesWmDocumentRenderer;
+import cn.iocoder.yudao.module.system.service.companyconfig.SystemCompanyConfigService;
import cn.iocoder.yudao.module.mes.service.pd.project.MesPdProjectService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@@ -26,16 +29,22 @@
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.time.format.DateTimeFormatter;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_PROJECT_NOT_EXISTS;
@Tag(name = "绠$悊鍚庡彴 - MES 璁捐椤圭洰")
@RestController
@@ -48,6 +57,8 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private SystemCompanyConfigService companyConfigService;
@PostMapping("/create")
@Operation(summary = "鍒涘缓璁捐椤圭洰")
@@ -104,6 +115,61 @@
buildProjectRespVOList(list));
}
+ @GetMapping("/export-word")
+ @Operation(summary = "瀵煎嚭椤圭洰璺熻釜琛� Word锛堣〃澶磋嚜鍔ㄥ~鍏咃紝璺熻釜璁板綍鐣欑┖鍙墜濉級")
+ @Parameter(name = "id", description = "璁捐椤圭洰缂栧彿", required = true)
+ @PreAuthorize("@ss.hasPermission('mes:pd-project:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportProjectTrackingWord(@RequestParam("id") Long id,
+ HttpServletResponse response) throws IOException {
+ MesPdProjectDO project = projectService.getProject(id);
+ if (project == null) {
+ throw exception(PD_PROJECT_NOT_EXISTS);
+ }
+ Map<String, String> fields = new LinkedHashMap<>();
+ fields.put("taskCode", project.getTaskCode());
+ fields.put("taskName", project.getTaskName());
+ fields.put("productCode", project.getProductCode());
+ fields.put("productName", project.getProductName());
+ fields.put("version", project.getVersion());
+ fields.put("status", resolveStatusName(project.getStatus()));
+ fields.put("chiefDesigner", resolveUserName(project.getChiefDesigner()));
+ fields.put("reviewer", resolveUserName(project.getReviewer()));
+ fields.put("planFinishTime", project.getPlanFinishTime() == null ? null
+ : project.getPlanFinishTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
+ fields.put("printDate", java.time.LocalDate.now().toString());
+ fields.put("remark", project.getRemark());
+
+ var companyConfig = companyConfigService.getCompanyConfig();
+ byte[] content = MesWmDocumentRenderer.renderProjectTracking(fields,
+ companyConfig != null ? companyConfig.getCompanyName() : null);
+ String filename = "椤圭洰璺熻釜琛�-" + project.getTaskCode() + ".docx";
+ String encoded = URLEncoder.encode(filename, StandardCharsets.UTF_8).replace("+", "%20");
+ response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+ response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + encoded);
+ response.getOutputStream().write(content);
+ }
+
+ private String resolveStatusName(Integer status) {
+ if (status == null) {
+ return null;
+ }
+ for (MesPdProjectStatusEnum item : MesPdProjectStatusEnum.values()) {
+ if (item.getStatus().equals(status)) {
+ return item.getName();
+ }
+ }
+ return "鏈煡鐘舵��(" + status + ")";
+ }
+
+ private String resolveUserName(Long userId) {
+ if (userId == null) {
+ return null;
+ }
+ AdminUserRespDTO user = adminUserApi.getUser(userId);
+ return user != null ? user.getNickname() : "ID=" + userId;
+ }
+
@PutMapping("/publish")
@Operation(summary = "鍙戝竷璁捐椤圭洰锛堝緟鍙戝竷鈫掑緟涓婁紶锛�")
@Parameter(name = "id", description = "缂栧彿", required = true)
--
Gitblit v1.9.3