过程记录模板审核

liweidong
张乾翔 2 weeks ago
parent 0f31e605d0
commit 68b24c4d7d
  1. 34
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java
  2. 73
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/enums/AuditResultEnum.java
  3. 48
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ProReTemplate.java
  4. 50
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/ProReTemplateAuditRequest.java
  5. 86
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ProReTemplateAuditHistoryVO.java
  6. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ProReTemplateVO.java
  7. 49
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java
  8. 38
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java
  9. 335
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java

@ -24,4 +24,38 @@ public interface ProReTemplateConst {
Integer OFFLINE = 0;
String DIC = "ProReTemplate-Status";
// ==================== 审核状态常量 ====================
/**
* 审核状态-待审核
*/
Integer AUDIT_STATUS_PENDING = 0;
/**
* 审核状态-审核中
*/
Integer AUDIT_STATUS_AUDITING = 1;
/**
* 审核状态-审核通过
*/
Integer AUDIT_STATUS_APPROVED = 2;
/**
* 审核状态-审核不通过
*/
Integer AUDIT_STATUS_REJECTED = 3;
// ==================== 类型常量 ====================
/**
* 类型-线下
*/
String LINE_OFFLINE = "0";
/**
* 类型-线上
*/
String LINE_ONLINE = "1";
}

@ -0,0 +1,73 @@
package org.springblade.desk.quality.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 审核结果枚举
*
* @author qyl
* @since 2026-05-13
*/
@Getter
@AllArgsConstructor
public enum AuditResultEnum {
/**
* 通过
*/
PASS(1, "通过"),
/**
* 不通过
*/
REJECT(2, "不通过");
/**
* 结果代码
*/
private final Integer code;
/**
* 结果描述
*/
private final String description;
/**
* 根据代码获取枚举
*
* @param code 结果代码
* @return 枚举值
*/
public static AuditResultEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (AuditResultEnum result : values()) {
if (result.getCode().equals(code)) {
return result;
}
}
return null;
}
/**
* 判断是否通过
*
* @param code 结果代码
* @return true-通过false-不通过
*/
public static boolean isPass(Integer code) {
return PASS.getCode().equals(code);
}
/**
* 判断是否不通过
*
* @param code 结果代码
* @return true-不通过false-通过
*/
public static boolean isReject(Integer code) {
return REJECT.getCode().equals(code);
}
}

@ -100,4 +100,52 @@ public class ProReTemplate extends BaseEntity {
*/
@Schema(description = "备注")
private String remark;
/**
* 审核状态: 0-待审核, 1-审核中, 2-审核通过, 3-审核不通过
*/
@Schema(description = "审核状态: 0-待审核, 1-审核中, 2-审核通过, 3-审核不通过")
private Integer auditStatus;
/**
* 一级审核人ID
*/
@Schema(description = "一级审核人ID")
private Long auditor1Id;
/**
* 一级审核人姓名
*/
@Schema(description = "一级审核人姓名")
private String auditor1Name;
/**
* 一级审核时间
*/
@Schema(description = "一级审核时间")
private java.util.Date auditTime1;
/**
* 二级审核人ID
*/
@Schema(description = "二级审核人ID")
private Long auditor2Id;
/**
* 二级审核人姓名
*/
@Schema(description = "二级审核人姓名")
private String auditor2Name;
/**
* 二级审核时间
*/
@Schema(description = "二级审核时间")
private java.util.Date auditTime2;
/**
* 审核意见
*/
@Schema(description = "审核意见")
private String auditRemark;
}

@ -0,0 +1,50 @@
package org.springblade.desk.quality.pojo.request;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.quality.enums.AuditResultEnum;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 审核请求DTO
*
* @author qyl
* @since 2026-05-13
*/
@Data
@Schema(description = "审核请求DTO")
public class ProReTemplateAuditRequest implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "模板ID不能为空")
@Schema(description = "模板ID")
private Long id;
@NotNull(message = "审核结果不能为空")
@Schema(description = "审核结果: 1-通过, 2-不通过", allowableValues = {"1", "2"})
private Integer result;
@Schema(description = "审核意见(不通过时必填)")
private String remark;
/**
* 判断是否通过
*
* @return true-通过false-不通过
*/
public boolean isPass() {
return AuditResultEnum.isPass(this.result);
}
/**
* 判断是否不通过
*
* @return true-不通过false-通过
*/
public boolean isReject() {
return AuditResultEnum.isReject(this.result);
}
}

@ -0,0 +1,86 @@
package org.springblade.desk.quality.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 过程记录模板审核历史VO
*
* @author qyl
* @since 2026-05-13
*/
@Data
@Schema(description = "过程记录模板审核历史VO")
public class ProReTemplateAuditHistoryVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 模板ID
*/
@Schema(description = "模板ID")
private Long id;
/**
* 模板名称
*/
@Schema(description = "模板名称")
private String name;
/**
* 审核状态: 0-待审核, 1-审核中, 2-审核通过, 3-审核不通过
*/
@Schema(description = "审核状态: 0-待审核, 1-审核中, 2-审核通过, 3-审核不通过")
private Integer auditStatus;
/**
* 审核状态名称
*/
@Schema(description = "审核状态名称")
private String auditStatusName;
/**
* 一级审核人ID
*/
@Schema(description = "一级审核人ID")
private Long auditor1Id;
/**
* 一级审核人姓名
*/
@Schema(description = "一级审核人姓名")
private String auditor1Name;
/**
* 一级审核时间
*/
@Schema(description = "一级审核时间")
private Date auditTime1;
/**
* 二级审核人ID
*/
@Schema(description = "二级审核人ID")
private Long auditor2Id;
/**
* 二级审核人姓名
*/
@Schema(description = "二级审核人姓名")
private String auditor2Name;
/**
* 二级审核时间
*/
@Schema(description = "二级审核时间")
private Date auditTime2;
/**
* 审核意见
*/
@Schema(description = "审核意见")
private String auditRemark;
}

@ -34,4 +34,10 @@ public class ProReTemplateVO extends ProReTemplate {
private String approvalStatusName;
@Schema(description = "tank 槽明细")
private List<ProReTemplateTankVO> preserveSlotList;
@Schema(description = "审核状态名称")
private String auditStatusName;
@Schema(description = "类型名称")
private String lineName;
}

@ -3,6 +3,7 @@
*/
package org.springblade.desk.quality.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@ -30,6 +31,8 @@ import org.springblade.desk.quality.constant.ProReTemplateConst;
import org.springblade.desk.quality.constant.QAModuleConst;
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.ProReTemplateVO;
import org.springblade.desk.quality.service.IProReTemplateService;
import org.springblade.desk.quality.wrapper.ProReTemplateWrapper;
@ -138,6 +141,11 @@ public class ProReTemplateController extends BladeController {
}
addOne.setStatus(ProReTemplateConst.STATUS_NEW);
addOne.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态
// 设置默认类型为线上
if (StrUtil.isEmpty(addOne.getLine())) {
addOne.setLine(ProReTemplateConst.LINE_ONLINE);
}
// addOne.setApprovalStatus(ProReTemplateConst.APPROVAL_STATUS_1);
addOne.setId(null);
return R.status(service.save(addOne));
@ -153,6 +161,11 @@ public class ProReTemplateController extends BladeController {
public R saveBat(@Valid @RequestBody List<ProReTemplate> addList) {
addList.forEach(one -> {
one.setStatus(ProReTemplateConst.STATUS_NEW);
one.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态
// 设置默认类型为线上
if (StrUtil.isEmpty(one.getLine())) {
one.setLine(ProReTemplateConst.LINE_ONLINE);
}
one.setApprovalStatus(ProReTemplateConst.APPROVAL_STATUS_1);
one.setId(null);
});
@ -168,6 +181,10 @@ public class ProReTemplateController extends BladeController {
@Operation(summary = "修改一条", description = "传入ProReTemplate Obj")
public R update(@Valid @RequestBody ProReTemplate updateOne) {
// 检查唯一性(增加line字段)
//if (!service.checkUnique(updateOne.getWcId(), updateOne.getPpsId(), updateOne.getLine(), updateOne.getId())) {
// return R.fail("存在对应作业中心-工序-类型的已启用模板");
//}
QueryWrapper<ProReTemplate> qw = new QueryWrapper<>();
qw.eq("WC_ID",updateOne.getWcId());
@ -310,4 +327,36 @@ public class ProReTemplateController extends BladeController {
public R copy(@Parameter(description = "主键", required = true) @RequestParam Long id) {
return service.copy(id);
}
/**
* 发布过程记录模板
*/
@PostMapping("/publish")
@ApiOperationSupport(order = 35)
@ApiLog("发布过程记录模板")
@Operation(summary = "发布模板", description = "发布模板提交审核")
public R publish(@Parameter(description = "模板ID", required = true) @RequestParam Long id) {
return service.publish(id);
}
/**
* 审核过程记录模板一级或二级
*/
@PostMapping("/audit")
@ApiOperationSupport(order = 36)
@ApiLog("审核过程记录模板")
@Operation(summary = "审核模板", description = "审核")
public R audit(@Valid @RequestBody ProReTemplateAuditRequest request) {
return service.audit(request);
}
/**
* 查询审核历史
*/
@GetMapping("/auditHistory/{id}")
@ApiOperationSupport(order = 38)
@Operation(summary = "查询审核历史", description = "传入模板ID")
public R<ProReTemplateAuditHistoryVO> getAuditHistory(@Parameter(description = "模板ID", required = true) @PathVariable Long id) {
return R.data(service.getAuditHistory(id));
}
}

@ -9,10 +9,13 @@ import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.service.en.EnBaseService;
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.ProReTemplateVO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* [过程记录模板] 服务类
@ -54,4 +57,39 @@ public interface IProReTemplateService extends EnBaseService<ProReTemplate> {
R removeFromDetail(Long tankId);
List<ProReTemplate> getDataByWcIdAndPpsId(Long wcId, Long ppsId, Boolean aTrue);
/**
* 发布模板启动审核流程
*
* @param id 模板ID
* @return R
*/
R publish(Long id);
/**
* 审核模板自动判断一级或二级
*
* @param request 审核请求
* @return R
*/
R audit(ProReTemplateAuditRequest request);
/**
* 查询审核历史
*
* @param id 模板ID
* @return 审核历史信息
*/
ProReTemplateAuditHistoryVO getAuditHistory(Long id);
/**
* 检查唯一性增加line字段
*
* @param wcId 作业中心ID
* @param ppsId 工序ID
* @param line 类型
* @param excludeId 排除的ID
* @return true-唯一false-不唯一
*/
boolean checkUnique(Long wcId, Long ppsId, String line, Long excludeId);
}

@ -6,6 +6,7 @@ package org.springblade.desk.quality.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
@ -13,16 +14,24 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
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.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.basic.service.en.impl.EnBaseServiceImpl;
import org.springblade.desk.common.feign.IMesNotifyMessageClient;
import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.quality.constant.ProReTemplateConst;
import org.springblade.desk.quality.enums.AuditResultEnum;
import org.springblade.desk.quality.excel.ProReTemplateExcel;
import org.springblade.desk.quality.mapper.ProReTemplateMapper;
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.ProReTemplateDetailVO;
import org.springblade.desk.quality.pojo.vo.ProReTemplateTankVO;
import org.springblade.desk.quality.pojo.vo.ProReTemplateVO;
@ -30,13 +39,16 @@ import org.springblade.desk.quality.service.IProReTemplateDetailService;
import org.springblade.desk.quality.service.IProReTemplateService;
import org.springblade.desk.quality.service.IProReTemplateTankService;
import org.springblade.desk.basic.util.IdUtil;
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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Stream;
/**
* [过程记录模板] 服务实现类
@ -66,6 +78,8 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
private IWorkCenterService workCenterService;
@Resource
private IBsProcessSetService bsProcessSetService;
@Resource
private IMesNotifyMessageClient mesNotifyMessageClient;
@Override
public IPage<ProReTemplateVO> selectProReTemplatePage(IPage<ProReTemplateVO> page, ProReTemplateVO proReTemplate) {
@ -141,6 +155,7 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
ProReTemplate copy = new ProReTemplate();
BeanUtil.copyProperties(find, copy, true);
copy.setStatus(ProReTemplateConst.STATUS_NEW);
copy.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态
copy.setApprovalStatus(ProReTemplateConst.APPROVAL_STATUS_1);
copy.setId(null);
return R.status(save(copy));
@ -161,8 +176,324 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
LambdaQueryWrapper<ProReTemplate> queryWrapper = Wrappers.lambdaQuery(ProReTemplate.class);
queryWrapper.eq(wcId != null, ProReTemplate::getWcId, wcId);
queryWrapper.eq(ProReTemplate::getPpsId, ppsId);
queryWrapper.eq(ProReTemplate::getLine, aTrue ? "1" : "0");
queryWrapper.eq(ProReTemplate::getStatus, 2);
queryWrapper.eq(ProReTemplate::getLine, aTrue ? ProReTemplateConst.LINE_ONLINE : ProReTemplateConst.LINE_OFFLINE);
queryWrapper.eq(ProReTemplate::getStatus, ProReTemplateConst.STATUS_OK);
return this.list(queryWrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public R publish(Long id) {
ProReTemplate template = getById(id);
if (template == null) {
return R.fail("模板不存在");
}
// 只有新建状态才能发布
if (!ProReTemplateConst.STATUS_NEW.equals(template.getStatus())) {
return R.fail("只有新建状态的模板才能发布");
}
// 更新状态为待审核
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING);
updateById(template);
// 发送消息通知给一级审核人
sendNotificationToLevel1(template);
return R.success();
}
@Override
@Transactional(rollbackFor = Exception.class)
public R audit(ProReTemplateAuditRequest request) {
// 查询模板
ProReTemplate template = getById(request.getId());
if (template == null) {
throw new RuntimeException("模板不存在");
}
// 校验审核结果
if (request.getResult() == null || AuditResultEnum.getByCode(request.getResult()) == null) {
throw new RuntimeException("审核结果错误,1-通过,2-不通过");
}
// 审核不通过时,意见必填
if (request.isReject() && StringUtils.isBlank(request.getRemark())) {
return R.fail("审核不通过时,必须填写审核意见");
}
// 根据当前状态判断是一级还是二级审核
Integer auditStatus = template.getAuditStatus();
if (ProReTemplateConst.AUDIT_STATUS_PENDING.equals(auditStatus)) {
// 一级审核
return processLevel1Audit(template, request);
} else if (ProReTemplateConst.AUDIT_STATUS_AUDITING.equals(auditStatus)) {
// 二级审核
return processLevel2Audit(template, request);
} else {
throw new RuntimeException("当前状态不允许审核");
}
}
/**
* 处理一级审核
*/
private R processLevel1Audit(ProReTemplate template, ProReTemplateAuditRequest request) {
// 校验权限
if (!hasAuditRoleLevel1()) {
return R.fail("您没有一级审核权限");
}
Long currentUserId = AuthUtil.getUserId();
String currentUserName = AuthUtil.getUserName();
Date now = new Date();
if (request.isPass()) {
// 审核通过
template.setAuditor1Id(currentUserId);
template.setAuditor1Name(currentUserName);
template.setAuditTime1(now);
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_AUDITING);
template.setAuditRemark(null);
// 发送消息通知给二级审核人
sendNotificationToLevel2(template);
updateById(template);
return R.success();
} else {
// 审核不通过
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_REJECTED);
template.setAuditRemark(request.getRemark());
updateById(template);
return R.success();
}
}
/**
* 处理二级审核
*/
private R processLevel2Audit(ProReTemplate template, ProReTemplateAuditRequest request) {
// 校验权限
if (!hasAuditRoleLevel2()) {
return R.fail("您没有二级审核权限");
}
Long currentUserId = AuthUtil.getUserId();
String currentUserName = AuthUtil.getUserName();
Date now = new Date();
if (request.isPass()) {
// 审核通过
template.setAuditor2Id(currentUserId);
template.setAuditor2Name(currentUserName);
template.setAuditTime2(now);
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_APPROVED);
// 将同一作业中心-工序-类型的其他模板改为废弃
disableOtherTemplates(template.getWcId(), template.getPpsId(), template.getLine(), template.getId());
// 更新当前模板为使用中
template.setStatus(ProReTemplateConst.STATUS_OK);
template.setAuditRemark(null);
updateById(template);
return R.success("二级审核通过,模板已生效");
} else {
// 审核不通过
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_REJECTED);
template.setAuditRemark(request.getRemark());
updateById(template);
return R.success("二级审核不通过");
}
}
@Override
public ProReTemplateAuditHistoryVO getAuditHistory(Long id) {
ProReTemplate template = getById(id);
if (template == null) {
return null;
}
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;
}
/**
* 获取审核状态名称
*
* @param auditStatus 审核状态
* @return 状态名称
*/
private String getAuditStatusName(Integer auditStatus) {
if (auditStatus == null) {
return "未知";
}
switch (auditStatus) {
case 0:
return "待审核";
case 1:
return "审核中";
case 2:
return "审核通过";
case 3:
return "审核不通过";
default:
return "未知";
}
}
@Override
public boolean checkUnique(Long wcId, Long ppsId, String line, Long excludeId) {
LambdaQueryWrapper<ProReTemplate> queryWrapper = Wrappers.lambdaQuery(ProReTemplate.class);
queryWrapper.eq(ProReTemplate::getWcId, wcId);
queryWrapper.eq(ProReTemplate::getPpsId, ppsId);
queryWrapper.eq(ProReTemplate::getLine, line);
queryWrapper.eq(ProReTemplate::getStatus, ProReTemplateConst.STATUS_OK);
if (excludeId != null) {
queryWrapper.ne(ProReTemplate::getId, excludeId);
}
return count(queryWrapper) == 0;
}
/**
* 检查一级审核权限
*/
private boolean hasAuditRoleLevel1() {
// 工艺组长/工艺室主任
return RoleUtil.hasAnyRole("process_manager","热表-工艺组长");
}
/**
* 检查二级审核权限
*/
private boolean hasAuditRoleLevel2() {
// 厂长/副厂长
return RoleUtil.hasAnyRole("plant_manager","deputy_plant_manager");
}
/**
* 发送消息通知给二级审核人
*/
private void sendNotificationToLevel2(ProReTemplate template) {
try {
Map<Long,String> roleIdNameMap = new HashMap<>(2){{
put(2049025452882501633L, "厂长");
put(2049026003313598466L, "副厂长");
}};
roleIdNameMap.entrySet().stream().forEach(entry -> {
Long level2RoleId = entry.getKey();
String roleName = entry.getValue();
String title = String.format("过程记录模板审核提醒 - %s", template.getName());
String content = String.format(
"过程记录模板审核详情:\n" +
"- 模板名称:%s\n" +
"- 作业中心ID:%s\n" +
"- 工序ID:%s\n" +
"- 类型:%s\n" +
"- 一级审核人:%s\n" +
"- 一级审核时间:%s\n" +
"- 状态:一级审核通过,等待二级审核",
template.getName(),
template.getWcId(),
template.getPpsId(),
ProReTemplateConst.LINE_ONLINE.equals(template.getLine()) ? "线上" : "线下",
template.getAuditor1Name(),
template.getAuditTime1()
);
MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder()
.title(title)
.content(content)
.receiveRoleId(level2RoleId)
.receiveRoleName(roleName)
.receiveUserId(AuthUtil.getUserId())
.build();
R result = mesNotifyMessageClient.save(notifyMessage);
if (result != null && result.isSuccess()) {
log.info("成功发送二级审核提醒,模板ID: {}", template.getId());
}
});
} catch (Exception e) {
log.error("发送二级审核提醒时发生异常,模板ID: {}", template.getId(), e);
}
}
/**
* 发送消息通知给一级审核人
*/
private void sendNotificationToLevel1(ProReTemplate template) {
try {
Map<Long,String> roleMap = new HashMap<>(2){{
put(2038575519089082370L,"工艺组长");
put(2032370955230949378L,"工艺室主任");
}};
// 工艺组长/工艺室主任
roleMap.forEach((level1RoleId, roleName) -> {
String title = String.format("过程记录模板发布提醒 - %s", template.getName());
String content = String.format(
"过程记录模板已发布,等待审核:\n" +
"- 模板名称:%s\n" +
"- 作业中心ID:%s\n" +
"- 工序ID:%s\n" +
"- 类型:%s\n" +
"- 状态:待一级审核",
template.getName(),
template.getWcId(),
template.getPpsId(),
ProReTemplateConst.LINE_ONLINE.equals(template.getLine()) ? "线上" : "线下"
);
MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder()
.title(title)
.content(content)
.receiveRoleId(level1RoleId)
.receiveRoleName(roleName)
.receiveUserId(AuthUtil.getUserId())
.build();
R result = mesNotifyMessageClient.save(notifyMessage);
if (result != null && result.isSuccess()) {
log.info("成功发送一级审核提醒,模板ID: {}", template.getId());
}
});
} catch (Exception e) {
log.error("发送一级审核提醒时发生异常,模板ID: {}", template.getId(), e);
}
}
/**
* 将其他模板改为废弃
*/
private void disableOtherTemplates(Long wcId, Long ppsId, String line, Long excludeId) {
LambdaUpdateWrapper<ProReTemplate> updateWrapper = Wrappers.lambdaUpdate(ProReTemplate.class)
.eq(ProReTemplate::getWcId, wcId)
.eq(ProReTemplate::getPpsId, ppsId)
.eq(ProReTemplate::getLine, line)
.eq(ProReTemplate::getStatus, ProReTemplateConst.STATUS_OK)
.ne(ProReTemplate::getId, excludeId)
.set(ProReTemplate::getStatus, ProReTemplateConst.STATUS_NO);
update(updateWrapper);
}
}

Loading…
Cancel
Save