过程记录模版

liweidong
张乾翔 2 weeks ago
parent f850f8c7e4
commit 3ff71c93a1
  1. 50
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/ProReTemplateConst.java
  2. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java
  3. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java
  4. 133
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.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;
// ==================== 类型常量 ====================

@ -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<ProReTemplate> 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<ProReTemplateAuditHistoryVO> getAuditHistory(@Parameter(description = "模板ID", required = true) @PathVariable Long id) {
return R.data(service.getAuditHistory(id));
public R<List<ProReTemplateTimelineVO>> getAuditHistory(@Parameter(description = "模板ID", required = true) @PathVariable Long id) {
return R.data(service.getAuditTimeline(id));
}
}

@ -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<ProReTemplate> {
R audit(ProReTemplateAuditRequest request);
/**
* 查询审核历史
* 查询审核时间线
*
* @param id 模板ID
* @return 审核历史信息
* @return 审核时间线数据列表
*/
ProReTemplateAuditHistoryVO getAuditHistory(Long id);
List<ProReTemplateTimelineVO> getAuditTimeline(Long id);
/**
* 检查唯一性增加line字段

@ -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<ProReTemplateMap
ProReTemplate copy = new ProReTemplate();
BeanUtil.copyProperties(find, copy, true);
copy.setStatus(ProReTemplateConst.STATUS_NEW);
copy.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING); // 设置初始审核状态
copy.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_NEW); // 设置初始审核状态为新建
copy.setApprovalStatus(ProReTemplateConst.APPROVAL_STATUS_1);
copy.setId(null);
return R.status(save(copy));
@ -194,14 +198,15 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
return R.fail("只有新建状态的模板才能发布");
}
// 更新状态为待审核
// 更新状态为待审核(status和auditStatus保持一致)
template.setStatus(ProReTemplateConst.STATUS_PENDING);
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_PENDING);
updateById(template);
// 发送消息通知给一级审核人
sendNotificationToLevel1(template);
return R.success();
return R.success("发布成功,等待一级审核");
}
@Override
@ -226,7 +231,7 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
// 根据当前状态判断是一级还是二级审核
Integer auditStatus = template.getAuditStatus();
if (ProReTemplateConst.AUDIT_STATUS_PENDING.equals(auditStatus)) {
if (ProReTemplateConst.AUDIT_STATUS_PENDING.equals(auditStatus) || ProReTemplateConst.AUDIT_STATUS_REJECTED.equals(auditStatus)) {
// 一级审核
return processLevel1Audit(template, request);
} else if (ProReTemplateConst.AUDIT_STATUS_AUDITING.equals(auditStatus)) {
@ -250,24 +255,27 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
String currentUserName = AuthUtil.getUserName();
Date now = new Date();
template.setAuditor1Id(currentUserId);
template.setAuditor1Name(currentUserName);
template.setAuditTime1(now);
if (request.isPass()) {
// 审核通过
template.setAuditor1Id(currentUserId);
template.setAuditor1Name(currentUserName);
template.setAuditTime1(now);
// 一级审核通过,状态更新为审核中(等待二级审核)
template.setStatus(ProReTemplateConst.STATUS_AUDITING); // 审核中
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_AUDITING);
template.setAuditRemark(null);
// 发送消息通知给二级审核人
sendNotificationToLevel2(template);
updateById(template);
return R.success();
return R.success("一级审核通过,等待二级审核");
} else {
// 审核不通过
// 一级审核不通过
template.setStatus(ProReTemplateConst.STATUS_REJECTED);
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_REJECTED);
template.setAuditRemark(request.getRemark());
updateById(template);
return R.success();
return R.success("一级审核不通过");
}
}
@ -284,51 +292,92 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
String currentUserName = AuthUtil.getUserName();
Date now = new Date();
template.setAuditor2Id(currentUserId);
template.setAuditor2Name(currentUserName);
template.setAuditTime2(now);
if (request.isPass()) {
// 审核通过
template.setAuditor2Id(currentUserId);
template.setAuditor2Name(currentUserName);
template.setAuditTime2(now);
// 二级审核通过,状态更新为使用中
template.setStatus(ProReTemplateConst.STATUS_OK); // 使用中
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.setStatus(ProReTemplateConst.STATUS_REJECTED);
template.setAuditStatus(ProReTemplateConst.AUDIT_STATUS_REJECTED);
template.setAuditRemark(request.getRemark());
updateById(template);
return R.success("二级审核不通过");
}
}
@Override
public ProReTemplateAuditHistoryVO getAuditHistory(Long id) {
public List<ProReTemplateTimelineVO> getAuditTimeline(Long id) {
ProReTemplate template = getById(id);
if (template == null) {
return null;
return new ArrayList<>();
}
User user = userClient.userInfoById(template.getCreateUser()).getData();
List<ProReTemplateTimelineVO> 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<ProReTemplateMap
}
switch (auditStatus) {
case 0:
return "待审核";
return "新建";
case 1:
return "审核";
return "审核";
case 2:
return "审核通过";
return "审核";
case 3:
return "使用中";
case 4:
return "废弃";
case 5:
return "审核不通过";
default:
return "未知";

Loading…
Cancel
Save