Compare commits
No commits in common. "95427511471d263b31deb52e299df451a0b89f9c" and "049ff61c245511ce321460194f5f17ef9f391809" have entirely different histories.
9542751147
...
049ff61c24
|
|
@ -5,7 +5,6 @@ import com.nflg.qms.admin.service.QmsIssueTicketProcessMeasureControllerService;
|
||||||
import com.nflg.wms.common.pojo.ApiResult;
|
import com.nflg.wms.common.pojo.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessLeaderDraftQO;
|
|
||||||
import com.nflg.wms.starter.BaseController;
|
import com.nflg.wms.starter.BaseController;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
@ -53,22 +52,4 @@ public class QmsIssueTicketProcessController extends BaseController {
|
||||||
issueTicketProcessControllerService.submit(request);
|
issueTicketProcessControllerService.submit(request);
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导暂存工单处理
|
|
||||||
*/
|
|
||||||
@PostMapping("leaderDraft")
|
|
||||||
public ApiResult<Void> leaderDraft(@Valid @RequestBody QmsIssueTicketProcessLeaderDraftQO request) {
|
|
||||||
issueTicketProcessMeasureControllerService.leaderDraft(request);
|
|
||||||
return ApiResult.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导提交工单处理
|
|
||||||
*/
|
|
||||||
@PostMapping("leaderSubmit")
|
|
||||||
public ApiResult<Void> leaderSubmit(@Valid @RequestBody QmsIssueTicketProcessLeaderDraftQO request) {
|
|
||||||
issueTicketProcessControllerService.leaderSubmit(request);
|
|
||||||
return ApiResult.success();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -208,13 +208,26 @@ public class QmsIssueTicketControllerService {
|
||||||
|
|
||||||
issueTicketService.save(entity);
|
issueTicketService.save(entity);
|
||||||
|
|
||||||
// 异步新增工单处理记录并推送待办
|
// 异步新增工单处理记录
|
||||||
issueTicketProcessControllerService.addAsync(
|
issueTicketProcessControllerService.addAsync(
|
||||||
entity.getId(),
|
entity.getId(),
|
||||||
request.getHandlerUserId(),
|
request.getHandlerUserId(),
|
||||||
request.getInspectionResultIds(),
|
request.getInspectionResultIds()
|
||||||
ticketNo
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 推送待办消息
|
||||||
|
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "PDIDefectiveProductHandling");
|
||||||
|
VUtil.trueThrowBusinessError(Objects.isNull(sourceTypeId)).throwMessage("消息类型不存在");
|
||||||
|
User handlerUser = userService.getById(request.getHandlerUserId());
|
||||||
|
QmsTodoItem todoItem = new QmsTodoItem()
|
||||||
|
.setCode(ticketNo)
|
||||||
|
.setIsRead(false)
|
||||||
|
.setSourceTypeId(sourceTypeId)
|
||||||
|
.setSourceId(entity.getId())
|
||||||
|
.setCreateUserId(request.getHandlerUserId())
|
||||||
|
.setCreateUserName(handlerUser != null ? handlerUser.getUserName() : userName)
|
||||||
|
.setCreateTime(now);
|
||||||
|
todoItemService.save(todoItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,9 @@ import com.nflg.wms.common.constant.STATE;
|
||||||
import com.nflg.wms.common.exception.NflgException;
|
import com.nflg.wms.common.exception.NflgException;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessLeaderDraftQO;
|
|
||||||
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.QmsIssueTicketProcess;
|
||||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
|
||||||
import com.nflg.wms.repository.entity.User;
|
import com.nflg.wms.repository.entity.User;
|
||||||
import com.nflg.wms.repository.service.IDictionaryItemService;
|
|
||||||
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
|
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
|
||||||
import com.nflg.wms.repository.service.IQmsIssueTicketService;
|
|
||||||
import com.nflg.wms.repository.service.IQmsTodoItemService;
|
|
||||||
import com.nflg.wms.repository.service.IUserService;
|
import com.nflg.wms.repository.service.IUserService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
@ -21,9 +14,7 @@ import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -41,15 +32,6 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
@Resource
|
@Resource
|
||||||
private QmsIssueTicketProcessMeasureControllerService issueTicketProcessMeasureControllerService;
|
private QmsIssueTicketProcessMeasureControllerService issueTicketProcessMeasureControllerService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IQmsIssueTicketService issueTicketService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IQmsTodoItemService todoItemService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IDictionaryItemService dictionaryItemService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增工单处理(同步,供 Controller 直接调用)
|
* 新增工单处理(同步,供 Controller 直接调用)
|
||||||
*/
|
*/
|
||||||
|
|
@ -58,27 +40,14 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步新增工单处理并推送待办(供内部服务调用)
|
* 异步新增工单处理(供内部服务调用)
|
||||||
*/
|
*/
|
||||||
@Async("ticketTaskExecutor")
|
@Async("ticketTaskExecutor")
|
||||||
public void addAsync(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds, String ticketNo) {
|
public void addAsync(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds) {
|
||||||
Long processId = doAdd(issueTicketId, handlerUserId, taskResultIds);
|
doAdd(issueTicketId, handlerUserId, taskResultIds);
|
||||||
|
|
||||||
// 推送待办消息
|
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "PDIDefectiveProductHandling");
|
|
||||||
User handlerUser = userService.getById(handlerUserId);
|
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
|
||||||
.setCode(ticketNo)
|
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(sourceTypeId)
|
|
||||||
.setSourceId(processId)
|
|
||||||
.setCreateUserId(handlerUserId)
|
|
||||||
.setCreateUserName(handlerUser != null ? handlerUser.getUserName() : null)
|
|
||||||
.setCreateTime(LocalDateTime.now());
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long doAdd(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds) {
|
private void doAdd(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds) {
|
||||||
User user = userService.getById(handlerUserId);
|
User user = userService.getById(handlerUserId);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new NflgException(STATE.BusinessError, "处理人用户不存在");
|
throw new NflgException(STATE.BusinessError, "处理人用户不存在");
|
||||||
|
|
@ -93,120 +62,14 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
.collect(Collectors.joining(",")));
|
.collect(Collectors.joining(",")));
|
||||||
|
|
||||||
issueTicketProcessService.save(entity);
|
issueTicketProcessService.save(entity);
|
||||||
return entity.getId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交工单处理:
|
* 提交工单处理:更新工单处理记录,有措施内容则新增一条措施记录
|
||||||
* 1. 校验 approvalStatus 必传
|
* TODO: 后续补充推送到下一级的逻辑
|
||||||
* 2. 执行保存逻辑(复用 draft)
|
|
||||||
* 3. approvalStatus=1(驳回):推送待办给工单创建人
|
|
||||||
* 4. approvalStatus=0(通过):推送给当前用户所在部门负责人(TODO: 部门负责人字段暂无,后续补充)
|
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void submit(@Valid QmsIssueTicketProcessDraftQO request) {
|
public void submit(@Valid QmsIssueTicketProcessDraftQO request) {
|
||||||
// 1. 校验审批状态必传
|
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus()))
|
|
||||||
.throwMessage("提交时审批状态不能为空");
|
|
||||||
|
|
||||||
// 2. 保存数据
|
|
||||||
issueTicketProcessMeasureControllerService.draft(request);
|
issueTicketProcessMeasureControllerService.draft(request);
|
||||||
|
|
||||||
// 3. 查询工单处理记录,获取关联的工单
|
|
||||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
|
||||||
QmsIssueTicket ticket = issueTicketService.getById(process.getIssueTicketId());
|
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("关联的质量问题工单不存在");
|
|
||||||
|
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "RejectedPDIDefectiveProductHandling");
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
|
||||||
|
|
||||||
if (request.getApprovalStatus() == 1) {
|
|
||||||
// 驳回:推送待办给工单创建人(分配任务的user)
|
|
||||||
User creator = userService.getById(ticket.getCreateUserId());
|
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
|
||||||
.setCode(ticket.getTicketNo())
|
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(sourceTypeId)
|
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(ticket.getCreateUserId())
|
|
||||||
.setCreateUserName(creator != null ? creator.getUserName() : null)
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
} else if (request.getApprovalStatus() == 0) {
|
|
||||||
// 通过:推送给当前用户所在部门负责人
|
|
||||||
// TODO: Department 表暂无负责人字段,后续补充
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导提交工单处理:
|
|
||||||
* 1. 校验 leaderApprovalResult 必传
|
|
||||||
* 2. 执行保存逻辑(复用 leaderDraft)+ 写入审批时间
|
|
||||||
* 3. leaderApprovalResult=0(驳回):推送待办给处理人
|
|
||||||
* 4. leaderApprovalResult=1(同意):结束流程
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public void leaderSubmit(@Valid QmsIssueTicketProcessLeaderDraftQO request) {
|
|
||||||
// 1. 校验领导审批结果必传
|
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(request.getLeaderApprovalResult()))
|
|
||||||
.throwMessage("提交时领导审批结果不能为空");
|
|
||||||
|
|
||||||
// 2. 保存数据
|
|
||||||
issueTicketProcessMeasureControllerService.leaderDraft(request);
|
|
||||||
|
|
||||||
// 3. 写入领导审批时间
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
|
||||||
issueTicketProcessService.lambdaUpdate()
|
|
||||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderApprovalTime, now)
|
|
||||||
.update();
|
|
||||||
|
|
||||||
if (request.getLeaderApprovalResult() == 0) {
|
|
||||||
// 驳回:推送待办给处理人
|
|
||||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
|
||||||
QmsIssueTicket ticket = issueTicketService.getById(process.getIssueTicketId());
|
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("关联的质量问题工单不存在");
|
|
||||||
|
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "RejectedPDIDefectiveProductHandling");
|
|
||||||
User handler = userService.getById(process.getHandlerUserId());
|
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
|
||||||
.setCode(ticket.getTicketNo())
|
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(sourceTypeId)
|
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(process.getHandlerUserId())
|
|
||||||
.setCreateUserName(handler != null ? handler.getUserName() : null)
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
} else if (request.getLeaderApprovalResult() == 1) {
|
|
||||||
// 同意:检查同一工单下所有处理记录是否都已完成
|
|
||||||
QmsIssueTicketProcess current = issueTicketProcessService.getById(request.getId());
|
|
||||||
Long issueTicketId = current.getIssueTicketId();
|
|
||||||
|
|
||||||
// 查询同一工单下是否存在未完成的记录
|
|
||||||
// 完成条件:leaderApprovalResult=1 或(leaderApprovalResult为空 且 approvalStatus=1)
|
|
||||||
// 未完成:不满足以上任一条件的记录
|
|
||||||
long notCompleted = issueTicketProcessService.lambdaQuery()
|
|
||||||
.eq(QmsIssueTicketProcess::getIssueTicketId, issueTicketId)
|
|
||||||
.and(w -> w
|
|
||||||
// 排除 leaderApprovalResult=1 的(已完成)
|
|
||||||
.ne(true, QmsIssueTicketProcess::getLeaderApprovalResult, (short) 1)
|
|
||||||
.or()
|
|
||||||
.isNull(QmsIssueTicketProcess::getLeaderApprovalResult))
|
|
||||||
// 在 leaderApprovalResult 不为1的记录中,排除 approvalStatus=1 的(处理人驳回,也算完成)
|
|
||||||
.and(w -> w
|
|
||||||
.ne(true, QmsIssueTicketProcess::getApprovalStatus, (short) 1)
|
|
||||||
.or()
|
|
||||||
.isNull(QmsIssueTicketProcess::getApprovalStatus))
|
|
||||||
.count();
|
|
||||||
|
|
||||||
if (notCompleted == 0) {
|
|
||||||
// 所有处理记录都已完成,更新工单状态为已完成(2)
|
|
||||||
issueTicketService.lambdaUpdate()
|
|
||||||
.eq(QmsIssueTicket::getId, issueTicketId)
|
|
||||||
.set(QmsIssueTicket::getStatus, (short) 2)
|
|
||||||
.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ package com.nflg.qms.admin.service;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessLeaderDraftQO;
|
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
|
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
|
||||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcessMeasure;
|
import com.nflg.wms.repository.entity.QmsIssueTicketProcessMeasure;
|
||||||
|
|
@ -53,23 +51,4 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
||||||
issueTicketProcessMeasureService.save(measure);
|
issueTicketProcessMeasureService.save(measure);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导暂存:更新领导审批意见、审批结果,写入领导信息
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public void leaderDraft(@Valid QmsIssueTicketProcessLeaderDraftQO request) {
|
|
||||||
QmsIssueTicketProcess process = issueTicketProcessService.getById(request.getId());
|
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(process)).throwMessage("工单处理记录不存在");
|
|
||||||
|
|
||||||
issueTicketProcessService.lambdaUpdate()
|
|
||||||
.eq(QmsIssueTicketProcess::getId, request.getId())
|
|
||||||
.set(request.getLeaderApprovalOpinion() != null,
|
|
||||||
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getLeaderApprovalOpinion())
|
|
||||||
.set(request.getLeaderApprovalResult() != null,
|
|
||||||
QmsIssueTicketProcess::getLeaderApprovalResult, request.getLeaderApprovalResult())
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderUserId, UserUtil.getUserId())
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName())
|
|
||||||
.update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -192,13 +192,10 @@ public class QmsPdiInspectionResultsControllerService {
|
||||||
request.getOverallResult() != null && request.getOverallResult())
|
request.getOverallResult() != null && request.getOverallResult())
|
||||||
.update();
|
.update();
|
||||||
|
|
||||||
// 5. 设置检测完成时间、是否延期、状态改为已完成
|
// 5. 设置检测完成时间,状态改为已完成
|
||||||
boolean overdue = taskRecord.getRequiredCompletionTime() != null
|
|
||||||
&& now.isAfter(taskRecord.getRequiredCompletionTime());
|
|
||||||
taskRecordService.lambdaUpdate()
|
taskRecordService.lambdaUpdate()
|
||||||
.eq(QmsPdiTaskRecord::getId, taskRecord.getId())
|
.eq(QmsPdiTaskRecord::getId, taskRecord.getId())
|
||||||
.set(QmsPdiTaskRecord::getDetectionCompletionTime, now)
|
.set(QmsPdiTaskRecord::getDetectionCompletionTime, now)
|
||||||
.set(QmsPdiTaskRecord::getOverdue, overdue)
|
|
||||||
.set(QmsPdiTaskRecord::getInspectionEnable, 2)
|
.set(QmsPdiTaskRecord::getInspectionEnable, 2)
|
||||||
.update();
|
.update();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
package com.nflg.wms.common.pojo.qo;
|
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 质量问题工单处理 领导暂存/提交参数
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class QmsIssueTicketProcessLeaderDraftQO {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 工单处理ID(QmsIssueTicketProcess.ID)
|
|
||||||
*/
|
|
||||||
@NotNull(message = "工单处理ID不能为空")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导审批意见(可选)
|
|
||||||
*/
|
|
||||||
private String leaderApprovalOpinion;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 领导审批结果(可选):0=驳回,1=同意
|
|
||||||
*/
|
|
||||||
private Short leaderApprovalResult;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue