From 3ff71c93a11dc942c4538dc01977f8afaf684ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=B9=BE=E7=BF=94?= Date: Wed, 20 May 2026 17:53:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E7=A8=8B=E8=AE=B0=E5=BD=95=E6=A8=A1?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quality/constant/ProReTemplateConst.java | 50 +++++-- .../controller/ProReTemplateController.java | 17 ++- .../service/IProReTemplateService.java | 7 +- .../impl/ProReTemplateServiceImpl.java | 133 ++++++++++++------ 4 files changed, 146 insertions(+), 61 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java index 95418a359..431fa64f8 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java @@ -2,17 +2,34 @@ package org.springblade.desk.quality.constant; public interface ProReTemplateConst { /** - * 新建 + * 状态-新建 */ - Integer STATUS_NEW = 1; + Integer STATUS_NEW = 0; + + /** + * 状态-待审核(一级审核) + */ + Integer STATUS_PENDING = 1; + + /** + * 状态-审核中(二级审核) + */ + Integer STATUS_AUDITING = 2; + /** - * 正常使用 + * 状态-使用中(审核通过) */ - Integer STATUS_OK = 2; + Integer STATUS_OK = 3; + + /** + * 状态-废弃 + */ + Integer STATUS_NO = 4; + /** - * 废弃 + * 状态-审核不通过 */ - Integer STATUS_NO = 3; + Integer STATUS_REJECTED = 5; Integer APPROVAL_STATUS_1 = 1; @@ -25,27 +42,32 @@ public interface ProReTemplateConst { String DIC = "ProReTemplate-Status"; - // ==================== 审核状态常量 ==================== + // ==================== 审核状态常量(与status保持一致) ==================== + + /** + * 审核状态-新建 + */ + Integer AUDIT_STATUS_NEW = 0; /** - * 审核状态-待审核 + * 审核状态-待审核(一级审核) */ - Integer AUDIT_STATUS_PENDING = 0; + Integer AUDIT_STATUS_PENDING = 1; /** - * 审核状态-审核中 + * 审核状态-审核中(二级审核) */ - Integer AUDIT_STATUS_AUDITING = 1; + Integer AUDIT_STATUS_AUDITING = 2; /** - * 审核状态-审核通过 + * 审核状态-审核通过(使用中) */ - Integer AUDIT_STATUS_APPROVED = 2; + Integer AUDIT_STATUS_APPROVED = 3; /** * 审核状态-审核不通过 */ - Integer AUDIT_STATUS_REJECTED = 3; + Integer AUDIT_STATUS_REJECTED = 5; // ==================== 类型常量 ==================== diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java index c52894a52..9c7519800 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java @@ -33,6 +33,7 @@ import org.springblade.desk.quality.excel.ProReTemplateExcel; import org.springblade.desk.quality.pojo.entity.ProReTemplate; import org.springblade.desk.quality.pojo.request.ProReTemplateAuditRequest; import org.springblade.desk.quality.pojo.vo.ProReTemplateAuditHistoryVO; +import org.springblade.desk.quality.pojo.vo.ProReTemplateTimelineVO; import org.springblade.desk.quality.pojo.vo.ProReTemplateVO; import org.springblade.desk.quality.service.IProReTemplateService; import org.springblade.desk.quality.wrapper.ProReTemplateWrapper; @@ -141,7 +142,7 @@ public class ProReTemplateController extends BladeController { } addOne.setStatus(ProReTemplateConst.STATUS_NEW); - addOne.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态 + addOne.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_NEW); // 设置初始审核状态为新建 // 设置默认类型为线上 if (StrUtil.isEmpty(addOne.getLine())) { addOne.setLine(ProReTemplateConst.LINE_ONLINE); @@ -161,7 +162,7 @@ public class ProReTemplateController extends BladeController { public R saveBat(@Valid @RequestBody List addList) { addList.forEach(one -> { one.setStatus(ProReTemplateConst.STATUS_NEW); - one.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态 + one.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_NEW); // 设置初始审核状态为新建 // 设置默认类型为线上 if (StrUtil.isEmpty(one.getLine())) { one.setLine(ProReTemplateConst.LINE_ONLINE); @@ -341,6 +342,14 @@ public class ProReTemplateController extends BladeController { /** * 审核过程记录模板(一级或二级) + * + * 增加审核流程:工艺组长/工艺室主任一厂长/副厂长级审核,角色下任一人员审核即可 + * 状态增加:待审核、审核中、审核不通过;点击状态显示审批记录一级审批后改为【审核中】, + * 并发送消息通知用中的模板改为【废弃】状态(3)-级任意审核不通过后均改为[审核不通过] + * 增加类型字段:线上(默认值)/线下。查询和列表均需显示 + * 新增原则:作业中心-工序·类型只可有一个使用中的模板 + * + * 审核不通过之后查看审核历史,只有提交人这一条,没有审核数据 */ @PostMapping("/audit") @ApiOperationSupport(order = 36) @@ -356,7 +365,7 @@ public class ProReTemplateController extends BladeController { @GetMapping("/auditHistory/{id}") @ApiOperationSupport(order = 38) @Operation(summary = "查询审核历史", description = "传入模板ID") - public R getAuditHistory(@Parameter(description = "模板ID", required = true) @PathVariable Long id) { - return R.data(service.getAuditHistory(id)); + public R> getAuditHistory(@Parameter(description = "模板ID", required = true) @PathVariable Long id) { + return R.data(service.getAuditTimeline(id)); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java index 38d6c5f3b..1f21b4b42 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java @@ -11,6 +11,7 @@ import org.springblade.desk.quality.excel.ProReTemplateExcel; import org.springblade.desk.quality.pojo.entity.ProReTemplate; import org.springblade.desk.quality.pojo.request.ProReTemplateAuditRequest; import org.springblade.desk.quality.pojo.vo.ProReTemplateAuditHistoryVO; +import org.springblade.desk.quality.pojo.vo.ProReTemplateTimelineVO; import org.springblade.desk.quality.pojo.vo.ProReTemplateVO; import java.math.BigDecimal; @@ -75,12 +76,12 @@ public interface IProReTemplateService extends EnBaseService { R audit(ProReTemplateAuditRequest request); /** - * 查询审核历史 + * 查询审核时间线 * * @param id 模板ID - * @return 审核历史信息 + * @return 审核时间线数据列表 */ - ProReTemplateAuditHistoryVO getAuditHistory(Long id); + List getAuditTimeline(Long id); /** * 检查唯一性(增加line字段) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java index 051d7ccfb..812847f8d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java @@ -4,6 +4,7 @@ package org.springblade.desk.quality.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -18,6 +19,7 @@ import org.apache.commons.lang3.StringUtils; import org.springblade.common.exception.BusinessException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.desk.basic.pojo.entity.WorkCenter; import org.springblade.desk.basic.service.IWorkCenterService; import org.springblade.desk.basic.service.en.impl.EnBaseServiceImpl; @@ -34,6 +36,7 @@ import org.springblade.desk.quality.pojo.request.ProReTemplateAuditRequest; import org.springblade.desk.quality.pojo.vo.ProReTemplateAuditHistoryVO; import org.springblade.desk.quality.pojo.vo.ProReTemplateDetailVO; import org.springblade.desk.quality.pojo.vo.ProReTemplateTankVO; +import org.springblade.desk.quality.pojo.vo.ProReTemplateTimelineVO; import org.springblade.desk.quality.pojo.vo.ProReTemplateVO; import org.springblade.desk.quality.service.IProReTemplateDetailService; import org.springblade.desk.quality.service.IProReTemplateService; @@ -43,6 +46,7 @@ import org.springblade.desk.basic.util.RoleUtil; import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.ISysClient; import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -155,7 +159,7 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl getAuditTimeline(Long id) { ProReTemplate template = getById(id); + if (template == null) { - return null; + return new ArrayList<>(); + } + User user = userClient.userInfoById(template.getCreateUser()).getData(); + + List timelineList = new ArrayList<>(); + + // 1. 添加提交记录(从创建人信息) + ProReTemplateTimelineVO submitNode = new ProReTemplateTimelineVO(); + submitNode.setType("submit"); + submitNode.setLabel("提交人:"); + submitNode.setValue(BeanUtil.isNotEmpty(user) && StrUtil.isNotEmpty(user.getName()) ? user.getName() : "-"); + submitNode.setTime(template.getCreateTime() != null ? DateUtil.format(template.getCreateTime(), "yyyy-MM-dd HH:mm:ss") : ""); + submitNode.setStatus("success"); // 提交总是已完成 + timelineList.add(submitNode); + + // 2. 添加一级审核记录 + if (template.getAuditor1Name() != null) { + ProReTemplateTimelineVO audit1Node = new ProReTemplateTimelineVO(); + audit1Node.setType("audit"); + audit1Node.setLabel("审核人:"); + audit1Node.setValue(template.getAuditor1Name()); + audit1Node.setTime(template.getAuditTime1() != null ? DateUtil.format(template.getAuditTime1(), "yyyy-MM-dd HH:mm:ss") : ""); + audit1Node.setRemark(template.getAuditRemark()); + // 判断一级审核状态 + if (template.getAuditStatus() >= ProReTemplateConst.AUDIT_STATUS_AUDITING && !ProReTemplateConst.AUDIT_STATUS_REJECTED.equals(template.getAuditStatus())) { + audit1Node.setStatus("success"); // 一级审核已完成 + } else { + audit1Node.setStatus("false"); // 一级审核待处理 + } + timelineList.add(audit1Node); + } + + // 3. 添加二级审核记录 + if (template.getAuditor2Name() != null) { + ProReTemplateTimelineVO audit2Node = new ProReTemplateTimelineVO(); + audit2Node.setType("audit"); + audit2Node.setLabel("审核人:"); + audit2Node.setValue(template.getAuditor2Name()); + audit2Node.setTime(template.getAuditTime2() != null ? DateUtil.format(template.getAuditTime2(), "yyyy-MM-dd HH:mm:ss") : ""); + audit2Node.setRemark(template.getAuditRemark()); + // 判断二级审核状态 + if (template.getAuditStatus() >= ProReTemplateConst.AUDIT_STATUS_APPROVED && !ProReTemplateConst.AUDIT_STATUS_REJECTED.equals(template.getAuditStatus())) { + audit2Node.setStatus("success"); // 二级审核已完成 + } else { + audit2Node.setStatus("false"); // 二级审核待处理 + } + timelineList.add(audit2Node); } - ProReTemplateAuditHistoryVO history = new ProReTemplateAuditHistoryVO(); - history.setId(template.getId()); - history.setName(template.getName()); - history.setAuditStatus(template.getAuditStatus()); - history.setAuditStatusName(getAuditStatusName(template.getAuditStatus())); - history.setAuditor1Id(template.getAuditor1Id()); - history.setAuditor1Name(template.getAuditor1Name()); - history.setAuditTime1(template.getAuditTime1()); - history.setAuditor2Id(template.getAuditor2Id()); - history.setAuditor2Name(template.getAuditor2Name()); - history.setAuditTime2(template.getAuditTime2()); - history.setAuditRemark(template.getAuditRemark()); - - return history; + // 按时间倒序排列(最新的在前面) + timelineList.sort((a, b) -> { + if (a.getTime() == null || b.getTime() == null) { + return 0; + } + return b.getTime().compareTo(a.getTime()); + }); + + return timelineList; } /** @@ -343,12 +392,16 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl