feat(issue-ticket): 优化PDI工单创建及查询逻辑
- 只创建工单主表,不创建处理明细,避免重复插入 - 查询任务记录及检测规则,校验数据完整性 - 判断是否已存在工单,避免重复创建并抛出异常提示 - 根据检测类型生成工单标题,提升信息准确性 - 汇总所有不合格项生成事件描述,便于问题追踪 - 统计不合格项数量赋值工单主表字段 - 调用编号生成服务生成唯一工单编号 - 异步新增工单处理记录并推送待办任务 - 返回工单ID、工单编号及不合格检测项列表
This commit is contained in:
parent
c9b7b45653
commit
ace2827b6a
|
|
@ -88,46 +88,106 @@ public class QmsIssueTicketControllerService {
|
|||
|
||||
/**
|
||||
* PDI新建工单并返回不合格检测项
|
||||
* 1. 创建工单
|
||||
* 1. 创建工单(只创建工单主表,不创建处理明细)
|
||||
* 2. 查询任务的不合格检测项
|
||||
* 3. 返回工单ID和不合格检测项列表
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public QmsPdiCreateTicketResultVO createAndQueryPdiTicket(@Valid QmsPdiCreateAndQueryTicketQO request) {
|
||||
// 1. 创建工单
|
||||
QmsIssueTicketPdiAddQO addQO = new QmsIssueTicketPdiAddQO();
|
||||
addQO.setTaskRecordId(request.getTaskRecordId());
|
||||
addQO.setIncidentType(request.getIncidentType());
|
||||
Long userId = UserUtil.getUserId();
|
||||
String userName = UserUtil.getUserName();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
List<QmsIssueTicketPdiAddQO.HandlerItem> handlerItems = request.getHandlers().stream()
|
||||
.map(h -> {
|
||||
QmsIssueTicketPdiAddQO.HandlerItem item = new QmsIssueTicketPdiAddQO.HandlerItem();
|
||||
item.setTaskResultId(h.getTaskResultId());
|
||||
item.setHandlerUserId(h.getHandlerUserId());
|
||||
return item;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
addQO.setHandlers(handlerItems);
|
||||
// 1. 查询任务记录
|
||||
QmsPdiTaskRecord taskRecord = pdiTaskRecordService.getById(request.getTaskRecordId());
|
||||
if (Objects.isNull(taskRecord)) {
|
||||
throw new NflgException(STATE.BusinessError, "PDI检测任务记录不存在");
|
||||
}
|
||||
|
||||
addPdiTicket(addQO);
|
||||
|
||||
// 2. 查询该任务的不合格检测项
|
||||
List<QmsPdiInspectionResultVO> unqualifiedItems = initiatePdiTicket(request.getTaskRecordId());
|
||||
|
||||
// 3. 查询刚创建的工单
|
||||
QmsIssueTicket ticket = issueTicketService.lambdaQuery()
|
||||
// 2. 校验是否已存在工单
|
||||
QmsIssueTicket existingTicket = issueTicketService.lambdaQuery()
|
||||
.eq(QmsIssueTicket::getSourceType, (short) 1)
|
||||
.eq(QmsIssueTicket::getSourceId, request.getTaskRecordId())
|
||||
.orderByDesc(QmsIssueTicket::getCreateTime)
|
||||
.last("LIMIT 1")
|
||||
.one();
|
||||
|
||||
// 4. 构建返回结果
|
||||
QmsPdiCreateTicketResultVO result = new QmsPdiCreateTicketResultVO();
|
||||
if (ticket != null) {
|
||||
result.setTicketId(ticket.getId());
|
||||
result.setTicketNo(ticket.getTicketNo());
|
||||
if (existingTicket != null) {
|
||||
throw new NflgException(STATE.BusinessError, "该任务已存在工单(工单编号:" + existingTicket.getTicketNo() + "),请使用追加处理记录接口");
|
||||
}
|
||||
|
||||
// 3. 查询检测规则
|
||||
QmsPdiDetectionRules rules = pdiDetectionRulesService.getById(taskRecord.getDetectionRulesId());
|
||||
if (Objects.isNull(rules)) {
|
||||
throw new NflgException(STATE.BusinessError, "PDI检测规则不存在");
|
||||
}
|
||||
|
||||
// 4. 生成工单标题
|
||||
String ticketTitle;
|
||||
if (Objects.equals(rules.getInspectionType(), 0)) {
|
||||
ticketTitle = StrUtil.join("-", rules.getMachineNo(), taskRecord.getDeviceNo(),
|
||||
taskRecord.getOrderNo(), "出厂检验", rules.getInspectionVersion());
|
||||
} else {
|
||||
ticketTitle = StrUtil.join("-", rules.getMachineNo(),
|
||||
taskRecord.getOrderNo(), "库存检验", rules.getInspectionVersion());
|
||||
}
|
||||
|
||||
// 5. 查询所有不合格项,汇总生成incidentDescription
|
||||
String incidentDescription = "";
|
||||
List<QmsPdiInspectionResults> allUnqualifiedResults = pdiInspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, request.getTaskRecordId())
|
||||
.eq(QmsPdiInspectionResults::getInspectionItemResults, false)
|
||||
.list();
|
||||
|
||||
if (CollectionUtil.isNotEmpty(allUnqualifiedResults)) {
|
||||
StringBuilder descBuilder = new StringBuilder();
|
||||
int index = 1;
|
||||
for (QmsPdiInspectionResults result : allUnqualifiedResults) {
|
||||
if (index > 1) {
|
||||
descBuilder.append(";");
|
||||
}
|
||||
descBuilder.append(index).append(". ");
|
||||
descBuilder.append(result.getRemark() != null ? result.getRemark() : "");
|
||||
index++;
|
||||
}
|
||||
incidentDescription = descBuilder.toString();
|
||||
}
|
||||
|
||||
// 6. 统计不合格检测项数量
|
||||
long unqualifiedCount = pdiInspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, request.getTaskRecordId())
|
||||
.eq(QmsPdiInspectionResults::getInspectionItemResults, false)
|
||||
.count();
|
||||
|
||||
// 7. 生成工单编号
|
||||
String ticketNo = basdeSerialNumberControllerService.generateSerialNumber(38);
|
||||
|
||||
// 8. 创建工单主表
|
||||
QmsIssueTicket entity = new QmsIssueTicket()
|
||||
.setSourceType((short) 1)
|
||||
.setSourceId(request.getTaskRecordId())
|
||||
.setTicketNo(ticketNo)
|
||||
.setTicketTitle(ticketTitle)
|
||||
.setProjectNo(taskRecord.getTaskNo())
|
||||
.setIncidentType(request.getIncidentType())
|
||||
.setIncidentDescription(incidentDescription)
|
||||
.setUnqualifiedQty((int) unqualifiedCount)
|
||||
.setApprovalStatus((short) 0)
|
||||
.setStatus((short) 0)
|
||||
.setCreateUserId(userId)
|
||||
.setCreateUserName(userName)
|
||||
.setCreateTime(now)
|
||||
.setUpdateUserId(userId)
|
||||
.setUpdateUserName(userName)
|
||||
.setUpdateTime(now);
|
||||
|
||||
issueTicketService.save(entity);
|
||||
|
||||
// 9. 查询该任务的不合格检测项
|
||||
List<QmsPdiInspectionResultVO> unqualifiedItems = initiatePdiTicket(request.getTaskRecordId());
|
||||
|
||||
// 10. 构建返回结果
|
||||
QmsPdiCreateTicketResultVO result = new QmsPdiCreateTicketResultVO();
|
||||
result.setTicketId(entity.getId());
|
||||
result.setTicketNo(ticketNo);
|
||||
result.setUnqualifiedItems(unqualifiedItems != null ? unqualifiedItems : List.of());
|
||||
|
||||
return result;
|
||||
|
|
@ -385,6 +445,22 @@ public class QmsIssueTicketControllerService {
|
|||
.setUpdateTime(now);
|
||||
|
||||
issueTicketService.save(entity);
|
||||
|
||||
// 按处理人分组,异步新增工单处理记录并推送待办
|
||||
Map<Long, List<Long>> handlerToResultsMap = request.getHandlers().stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
QmsIssueTicketPdiAddQO.HandlerItem::getHandlerUserId,
|
||||
Collectors.mapping(QmsIssueTicketPdiAddQO.HandlerItem::getTaskResultId, Collectors.toList())
|
||||
));
|
||||
|
||||
for (Map.Entry<Long, List<Long>> entry : handlerToResultsMap.entrySet()) {
|
||||
issueTicketProcessControllerService.addAsync(
|
||||
entity.getId(),
|
||||
entry.getKey(),
|
||||
entry.getValue(),
|
||||
ticketNo
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue