工单暂存和提交接口修改
This commit is contained in:
parent
1181b5de02
commit
fa73c7d21a
|
|
@ -1661,11 +1661,13 @@ public class QmsIssueTicketControllerService {
|
|||
.map(QmsPdiInspectionResults::getId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 收集有效分派的不合格项ID(仅非驳回记录:approvalStatus为null待处理 或 0已通过)
|
||||
// 收集有效分派的不合格项ID(排除处理人/审批人驳回的记录)
|
||||
Set<Long> effectivelyDispatched = new HashSet<>();
|
||||
for (QmsIssueTicketProcess p : processes) {
|
||||
if (StrUtil.isBlank(p.getTaskResultIds())) continue;
|
||||
if (p.getApprovalStatus() != null && p.getApprovalStatus() == 1) continue; // 被驳回的不算有效覆盖
|
||||
// 处理人/审批人驳回的不算有效覆盖,需要创建人重新分派
|
||||
if (p.getApprovalStatus() != null && p.getApprovalStatus() == 1) continue;
|
||||
// 领导驳回不影响分派权限(由处理人重新提交处理)
|
||||
Arrays.stream(p.getTaskResultIds().split(","))
|
||||
.filter(StrUtil::isNotBlank).map(String::trim).map(Long::valueOf)
|
||||
.forEach(effectivelyDispatched::add);
|
||||
|
|
|
|||
|
|
@ -121,14 +121,23 @@ public class QmsIssueTicketProcessControllerService {
|
|||
String currentUserName = UserUtil.getUserName();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
// 1. 查询处理记录
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("工单处理记录不存在");
|
||||
|
||||
// 2. 查询工单获取source_type
|
||||
QmsIssueTicket ticket = issueTicketService.getById(process.getIssueTicketId());
|
||||
// 1. 查询工单(request.getId()现在是工单ID)
|
||||
QmsIssueTicket ticket = issueTicketService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
|
||||
// 2. 通过工单ID + 当前登录人查找处理记录
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcess::getIssueTicketId, request.getId())
|
||||
.and(w -> w
|
||||
.eq(QmsIssueTicketProcess::getHandlerUserId, currentUserId)
|
||||
.or()
|
||||
.eq(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
|
||||
.or()
|
||||
.eq(QmsIssueTicketProcess::getLeaderUserId, currentUserId))
|
||||
.last("LIMIT 1")
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("未找到当前用户的工单处理记录");
|
||||
|
||||
Short sourceType = ticket.getSourceType();
|
||||
Long handlerUserId = process.getHandlerUserId();
|
||||
|
||||
|
|
@ -152,7 +161,7 @@ public class QmsIssueTicketProcessControllerService {
|
|||
|
||||
// 写入审批时间
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, process.getId())
|
||||
.set(QmsIssueTicketProcess::getApprovalTime, now)
|
||||
.update();
|
||||
|
||||
|
|
@ -189,9 +198,11 @@ public class QmsIssueTicketProcessControllerService {
|
|||
VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus()))
|
||||
.throwMessage("提交时审批状态不能为空");
|
||||
|
||||
Long processId = process.getId();
|
||||
|
||||
// 2. 保存数据:前端传入approvalStatus/approvalOpinion,数据库填入leaderApprovalResult/leaderApprovalOpinion
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getApprovalOpinion() != null,
|
||||
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(request.getApprovalStatus() != null,
|
||||
|
|
@ -251,12 +262,14 @@ public class QmsIssueTicketProcessControllerService {
|
|||
VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus()))
|
||||
.throwMessage("提交时审批状态不能为空");
|
||||
|
||||
Long processId = process.getId();
|
||||
|
||||
// 2. 保存数据
|
||||
issueTicketProcessMeasureControllerService.draft(request);
|
||||
|
||||
// 3. 写入审批时间,并重置领导审批结果(允许领导重新审批)
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(QmsIssueTicketProcess::getApprovalTime, now)
|
||||
.set(QmsIssueTicketProcess::getLeaderApprovalResult, null)
|
||||
.set(QmsIssueTicketProcess::getLeaderApprovalOpinion, null)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.nflg.wms.common.util.VUtil;
|
|||
import com.nflg.wms.repository.entity.QmsIssueTicket;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcessMeasure;
|
||||
import com.nflg.wms.repository.service.IDictionaryItemService;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketProcessMeasureService;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketService;
|
||||
|
|
@ -19,6 +20,7 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
|
|
@ -36,45 +38,38 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
@Resource
|
||||
private IQmsIssueTicketService issueTicketService;
|
||||
|
||||
@Resource
|
||||
private IDictionaryItemService dictionaryItemService;
|
||||
|
||||
/**
|
||||
* 暂存工单处理:更新工单处理记录,有措施内容则新增一条措施记录
|
||||
* 暂存工单处理:更新工单处理记录,有措施内容则新增措施记录
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void draft(@Valid QmsIssueTicketProcessDraftQO request) {
|
||||
// 校验工单处理记录存在
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("工单处理记录不存在");
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
|
||||
// 通过工单ID + 当前登录人查找处理记录
|
||||
QmsIssueTicketProcess process = findProcessByTicketAndUser(request.getId(), currentUserId);
|
||||
|
||||
// 校验:领导已同意时不允许修改
|
||||
if (process.getLeaderApprovalResult() != null && process.getLeaderApprovalResult() == 1) {
|
||||
throw new NflgException(STATE.BusinessError, "领导已审批同意,不允许修改");
|
||||
}
|
||||
|
||||
Long processId = process.getId();
|
||||
|
||||
// 更新工单处理记录
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, request.getRootCause())
|
||||
.set(request.getApprovalStatus() != null, QmsIssueTicketProcess::getApprovalStatus, request.getApprovalStatus())
|
||||
.set(request.getApprovalOpinion() != null, QmsIssueTicketProcess::getApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(QmsIssueTicketProcess::getApprovalUserId, UserUtil.getUserId())
|
||||
.set(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
|
||||
.set(QmsIssueTicketProcess::getApprovalUserName, UserUtil.getUserName())
|
||||
.update();
|
||||
|
||||
// 有措施列表则批量新增措施记录
|
||||
if (CollectionUtil.isNotEmpty(request.getMeasures())) {
|
||||
for (QmsIssueTicketProcessDraftQO.MeasureItem item : request.getMeasures()) {
|
||||
if (StrUtil.isBlank(item.getMeasureContent())) continue;
|
||||
QmsIssueTicketProcessMeasure measure = new QmsIssueTicketProcessMeasure()
|
||||
.setIssueTicketProcessId(request.getId())
|
||||
.setMeasureContent(item.getMeasureContent())
|
||||
.setMeasureTypeId(item.getMeasureTypeId())
|
||||
.setChargeUser(UserUtil.getUserName())
|
||||
.setPlanDate(item.getPlanDate())
|
||||
.setConfirmDate(item.getConfirmDate())
|
||||
.setRemark(item.getRemark());
|
||||
issueTicketProcessMeasureService.save(measure);
|
||||
}
|
||||
}
|
||||
// 保存措施记录(临时措施 + 永久措施)
|
||||
saveMeasures(processId, request.getTemporaryMeasures(), request.getPermanentMeasures());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -82,17 +77,21 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void leaderDraft(@Valid QmsIssueTicketProcessDraftQO request) {
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("工单处理记录不存在");
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
|
||||
// 通过工单ID + 当前登录人查找处理记录
|
||||
QmsIssueTicketProcess process = findProcessByTicketAndUser(request.getId(), currentUserId);
|
||||
|
||||
Long processId = process.getId();
|
||||
|
||||
// 前端传入approvalOpinion/approvalStatus,数据库填入leaderApprovalOpinion/leaderApprovalResult
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getApprovalOpinion() != null,
|
||||
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(request.getApprovalStatus() != null,
|
||||
QmsIssueTicketProcess::getLeaderApprovalResult, request.getApprovalStatus())
|
||||
.set(QmsIssueTicketProcess::getLeaderUserId, UserUtil.getUserId())
|
||||
.set(QmsIssueTicketProcess::getLeaderUserId, currentUserId)
|
||||
.set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName())
|
||||
.set(QmsIssueTicketProcess::getLeaderApprovalTime, LocalDateTime.now())
|
||||
.update();
|
||||
|
|
@ -105,12 +104,12 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
public void draftUnified(@Valid QmsIssueTicketProcessDraftQO request) {
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
|
||||
// 1. 查询处理记录
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("工单处理记录不存在");
|
||||
// 1. 通过工单ID + 当前登录人查找处理记录
|
||||
QmsIssueTicketProcess process = findProcessByTicketAndUser(request.getId(), currentUserId);
|
||||
Long processId = process.getId();
|
||||
|
||||
// 2. 查询工单获取source_type
|
||||
QmsIssueTicket ticket = issueTicketService.getById(process.getIssueTicketId());
|
||||
QmsIssueTicket ticket = issueTicketService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
|
||||
Short sourceType = ticket.getSourceType();
|
||||
|
|
@ -133,31 +132,18 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
if (isHandler) {
|
||||
// 处理人处理:只填根本原因和措施,不填审批状态
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, request.getRootCause())
|
||||
.set(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
|
||||
.set(QmsIssueTicketProcess::getApprovalUserName, UserUtil.getUserName())
|
||||
.update();
|
||||
|
||||
// 有措施列表则批量新增
|
||||
if (CollectionUtil.isNotEmpty(request.getMeasures())) {
|
||||
for (QmsIssueTicketProcessDraftQO.MeasureItem item : request.getMeasures()) {
|
||||
if (StrUtil.isBlank(item.getMeasureContent())) continue;
|
||||
QmsIssueTicketProcessMeasure measure = new QmsIssueTicketProcessMeasure()
|
||||
.setIssueTicketProcessId(request.getId())
|
||||
.setMeasureContent(item.getMeasureContent())
|
||||
.setMeasureTypeId(item.getMeasureTypeId())
|
||||
.setChargeUser(UserUtil.getUserName())
|
||||
.setPlanDate(item.getPlanDate())
|
||||
.setConfirmDate(item.getConfirmDate())
|
||||
.setRemark(item.getRemark());
|
||||
issueTicketProcessMeasureService.save(measure);
|
||||
}
|
||||
}
|
||||
// 保存措施记录(临时措施 + 永久措施)
|
||||
saveMeasures(processId, request.getTemporaryMeasures(), request.getPermanentMeasures());
|
||||
} else {
|
||||
// 领导审批:前端传入approvalStatus/approvalOpinion,数据库填入leaderApprovalResult/leaderApprovalOpinion
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getApprovalOpinion() != null,
|
||||
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(request.getApprovalStatus() != null,
|
||||
|
|
@ -171,4 +157,71 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
throw new NflgException(STATE.BusinessError, "不支持的工单类型");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过工单ID + 用户ID查找处理记录
|
||||
*/
|
||||
private QmsIssueTicketProcess findProcessByTicketAndUser(Long ticketId, Long userId) {
|
||||
QmsIssueTicketProcess process = issueTicketProcessService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcess::getIssueTicketId, ticketId)
|
||||
.and(w -> w
|
||||
.eq(QmsIssueTicketProcess::getHandlerUserId, userId)
|
||||
.or()
|
||||
.eq(QmsIssueTicketProcess::getApprovalUserId, userId)
|
||||
.or()
|
||||
.eq(QmsIssueTicketProcess::getLeaderUserId, userId))
|
||||
.last("LIMIT 1")
|
||||
.one();
|
||||
if (process == null) {
|
||||
throw new NflgException(STATE.BusinessError, "未找到当前用户的工单处理记录");
|
||||
}
|
||||
return process;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存措施记录(先删除旧数据,再分别插入临时措施和永久措施)
|
||||
*/
|
||||
private void saveMeasures(Long processId, List<QmsIssueTicketProcessDraftQO.MeasureItem> temporaryMeasures,
|
||||
List<QmsIssueTicketProcessDraftQO.MeasureItem> permanentMeasures) {
|
||||
// 先删除该处理记录下的旧措施
|
||||
issueTicketProcessMeasureService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processId)
|
||||
.remove();
|
||||
|
||||
String currentUserName = UserUtil.getUserName();
|
||||
|
||||
// 保存临时措施
|
||||
if (CollectionUtil.isNotEmpty(temporaryMeasures)) {
|
||||
Long tempTypeId = dictionaryItemService.getIdByCode("MeasureType", "TemporaryCorrectiveMeasures");
|
||||
for (QmsIssueTicketProcessDraftQO.MeasureItem item : temporaryMeasures) {
|
||||
if (StrUtil.isBlank(item.getMeasureContent())) continue;
|
||||
QmsIssueTicketProcessMeasure measure = new QmsIssueTicketProcessMeasure()
|
||||
.setIssueTicketProcessId(processId)
|
||||
.setMeasureTypeId(tempTypeId)
|
||||
.setMeasureContent(item.getMeasureContent())
|
||||
.setChargeUser(currentUserName)
|
||||
.setPlanDate(item.getPlanDate())
|
||||
.setConfirmDate(item.getConfirmDate())
|
||||
.setRemark(item.getRemark());
|
||||
issueTicketProcessMeasureService.save(measure);
|
||||
}
|
||||
}
|
||||
|
||||
// 保存永久措施
|
||||
if (CollectionUtil.isNotEmpty(permanentMeasures)) {
|
||||
Long permTypeId = dictionaryItemService.getIdByCode("MeasureType", "PermanentCorrectiveMeasures");
|
||||
for (QmsIssueTicketProcessDraftQO.MeasureItem item : permanentMeasures) {
|
||||
if (StrUtil.isBlank(item.getMeasureContent())) continue;
|
||||
QmsIssueTicketProcessMeasure measure = new QmsIssueTicketProcessMeasure()
|
||||
.setIssueTicketProcessId(processId)
|
||||
.setMeasureTypeId(permTypeId)
|
||||
.setMeasureContent(item.getMeasureContent())
|
||||
.setChargeUser(currentUserName)
|
||||
.setPlanDate(item.getPlanDate())
|
||||
.setConfirmDate(item.getConfirmDate())
|
||||
.setRemark(item.getRemark());
|
||||
issueTicketProcessMeasureService.save(measure);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ import java.util.List;
|
|||
public class QmsIssueTicketProcessDraftQO {
|
||||
|
||||
/**
|
||||
* 工单处理ID(QmsIssueTicketProcess.ID)
|
||||
* 工单ID(QmsIssueTicket.ID)
|
||||
*/
|
||||
@NotNull(message = "工单处理ID不能为空")
|
||||
@NotNull(message = "工单ID不能为空")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
|
|
@ -34,9 +34,14 @@ public class QmsIssueTicketProcessDraftQO {
|
|||
private String approvalOpinion;
|
||||
|
||||
/**
|
||||
* 措施列表(可选),每项对应一条 QmsIssueTicketProcessMeasure 记录
|
||||
* 临时措施列表(可选),measureTypeId由后端根据字典值TemporaryCorrectiveMeasures自动赋值
|
||||
*/
|
||||
private List<MeasureItem> measures;
|
||||
private List<MeasureItem> temporaryMeasures;
|
||||
|
||||
/**
|
||||
* 永久措施列表(可选),measureTypeId由后端根据字典值PermanentCorrectiveMeasures自动赋值
|
||||
*/
|
||||
private List<MeasureItem> permanentMeasures;
|
||||
|
||||
/**
|
||||
* 措施项
|
||||
|
|
@ -44,11 +49,6 @@ public class QmsIssueTicketProcessDraftQO {
|
|||
@Data
|
||||
public static class MeasureItem {
|
||||
|
||||
/**
|
||||
* 措施类型ID,关联字典项表
|
||||
*/
|
||||
private Long measureTypeId;
|
||||
|
||||
/**
|
||||
* 措施内容
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue