Merge branch 'qms/develop' into qms/zhangke
This commit is contained in:
commit
12332aa04f
|
|
@ -652,7 +652,7 @@ public class QmsIssueTicketControllerService {
|
||||||
.setIncidentDescription(incidentDescription)
|
.setIncidentDescription(incidentDescription)
|
||||||
.setRemark(request.getRemark())
|
.setRemark(request.getRemark())
|
||||||
.setUnqualifiedQty(unqualifiedDetails.size())
|
.setUnqualifiedQty(unqualifiedDetails.size())
|
||||||
.setStatus((short) 1)
|
.setStatus((short) 0)
|
||||||
.setCreateUserId(userId)
|
.setCreateUserId(userId)
|
||||||
.setCreateUserName(userName)
|
.setCreateUserName(userName)
|
||||||
.setCreateTime(now)
|
.setCreateTime(now)
|
||||||
|
|
@ -661,6 +661,13 @@ public class QmsIssueTicketControllerService {
|
||||||
.setUpdateTime(now);
|
.setUpdateTime(now);
|
||||||
issueTicketService.save(entity);
|
issueTicketService.save(entity);
|
||||||
|
|
||||||
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
|
.setTicketId(entity.getId())
|
||||||
|
.setHandlerUserId(userId)
|
||||||
|
.setHasProcessed(false)
|
||||||
|
.setIsRead(false);
|
||||||
|
issueTicketToDoService.save(todoItem);
|
||||||
|
|
||||||
Set<Long> fileIds = new HashSet<>();
|
Set<Long> fileIds = new HashSet<>();
|
||||||
Set<Long> itemIds = unqualifiedDetails.stream()
|
Set<Long> itemIds = unqualifiedDetails.stream()
|
||||||
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
|
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -86,12 +87,31 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
Collectors.mapping(QmsIssueTicketProcessAddQO.HandlerItem::getTaskResultId, Collectors.toList())
|
Collectors.mapping(QmsIssueTicketProcessAddQO.HandlerItem::getTaskResultId, Collectors.toList())
|
||||||
));
|
));
|
||||||
|
|
||||||
|
List<Long> handlerUserIds = new ArrayList<>();
|
||||||
|
|
||||||
// 为每个处理人创建处理记录
|
// 为每个处理人创建处理记录
|
||||||
for (Map.Entry<Long, List<Long>> entry : handlerToResultsMap.entrySet()) {
|
for (Map.Entry<Long, List<Long>> entry : handlerToResultsMap.entrySet()) {
|
||||||
doAdd(request.getIssueTicketId(), entry.getKey(), entry.getValue());
|
doAdd(request.getIssueTicketId(), entry.getKey(), entry.getValue());
|
||||||
|
handlerUserIds.add(entry.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Objects.equals(ticket.getSourceType(), (short) 3) && !Objects.equals(ticket.getStatus(), (short) 1)) {
|
if (Objects.equals(ticket.getSourceType(), (short) 3)) {
|
||||||
|
issueTicketToDoService.lambdaUpdate()
|
||||||
|
.eq(QmsIssueTicketToDo::getTicketId, ticket.getId())
|
||||||
|
.eq(QmsIssueTicketToDo::getHasProcessed, false)
|
||||||
|
.set(QmsIssueTicketToDo::getHasProcessed, true)
|
||||||
|
.update();
|
||||||
|
|
||||||
|
for (Long handlerUserId : handlerUserIds) {
|
||||||
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
|
.setTicketId(ticket.getId())
|
||||||
|
.setHandlerUserId(handlerUserId)
|
||||||
|
.setHasProcessed(false)
|
||||||
|
.setIsRead(false);
|
||||||
|
issueTicketToDoService.save(todoItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(ticket.getStatus(), (short) 1)) {
|
||||||
issueTicketService.lambdaUpdate()
|
issueTicketService.lambdaUpdate()
|
||||||
.eq(QmsIssueTicket::getId, ticket.getId())
|
.eq(QmsIssueTicket::getId, ticket.getId())
|
||||||
.set(QmsIssueTicket::getStatus, (short) 1)
|
.set(QmsIssueTicket::getStatus, (short) 1)
|
||||||
|
|
@ -101,6 +121,7 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步新增工单处理并推送待办(供内部服务调用)
|
* 同步新增工单处理并推送待办(供内部服务调用)
|
||||||
|
|
@ -293,43 +314,44 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus()))
|
VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus()))
|
||||||
.throwMessage("提交时审批状态不能为空");
|
.throwMessage("提交时审批状态不能为空");
|
||||||
|
|
||||||
// 2. 驳回时校验:handlers和审批意见不能为空
|
// 2. 驳回时校验:审批意见不能为空
|
||||||
if (request.getApprovalStatus() == 1) {
|
if (request.getApprovalStatus() == 1) {
|
||||||
VUtil.trueThrowBusinessError(request.getHandlers() == null || request.getHandlers().isEmpty())
|
|
||||||
.throwMessage("驳回时处理人列表不能为空");
|
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getApprovalOpinion()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getApprovalOpinion()))
|
||||||
.throwMessage("驳回时审批意见不能为空");
|
.throwMessage("驳回时审批意见不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
Long processId = process.getId();
|
Long processId = process.getId();
|
||||||
|
|
||||||
// 3. 保存数据:前端传入approvalStatus/approvalOpinion,数据库填入leaderApprovalResult/leaderApprovalOpinion
|
|
||||||
issueTicketProcessService.lambdaUpdate()
|
|
||||||
.eq(QmsIssueTicketProcess::getId, processId)
|
|
||||||
.set(request.getApprovalOpinion() != null,
|
|
||||||
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion())
|
|
||||||
.set(request.getApprovalStatus() != null,
|
|
||||||
QmsIssueTicketProcess::getLeaderApprovalResult, request.getApprovalStatus())
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderUserId, currentUserId)
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName())
|
|
||||||
.set(QmsIssueTicketProcess::getLeaderApprovalTime, now)
|
|
||||||
.update();
|
|
||||||
|
|
||||||
issueTicketToDoService.processed(ticket.getId());
|
issueTicketToDoService.processed(ticket.getId());
|
||||||
|
|
||||||
Short leaderApprovalResult = request.getApprovalStatus();
|
Short leaderApprovalResult = request.getApprovalStatus();
|
||||||
|
|
||||||
if (leaderApprovalResult == 1) {
|
if (leaderApprovalResult == 1) {
|
||||||
// 驳回:只驳回传入的handlers对应的处理记录
|
// 驳回:自动驳回当前领导部门下属的待审批处理记录
|
||||||
Long issueTicketId = ticket.getId();
|
Long issueTicketId = ticket.getId();
|
||||||
List<Long> rejectUserIds = request.getHandlers().stream()
|
List<QmsIssueTicketProcess> rejectProcesses = issueTicketProcessService.lambdaQuery()
|
||||||
.map(QmsIssueTicketProcessDraftQO.RejectHandlerItem::getHandlerUserId)
|
.eq(QmsIssueTicketProcess::getIssueTicketId, issueTicketId)
|
||||||
|
.eq(QmsIssueTicketProcess::getApprovalStatus, (short) 0)
|
||||||
|
.isNull(QmsIssueTicketProcess::getLeaderApprovalResult)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.filter(p -> isCurrentUserHeadOfHandlerDept(p.getHandlerUserId(), currentUserId))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
VUtil.trueThrowBusinessError(rejectProcesses.isEmpty())
|
||||||
|
.throwMessage("未找到当前领导可驳回的下属处理记录");
|
||||||
|
|
||||||
|
List<Long> rejectProcessIds = rejectProcesses.stream()
|
||||||
|
.map(QmsIssueTicketProcess::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<Long> rejectUserIds = rejectProcesses.stream()
|
||||||
|
.map(QmsIssueTicketProcess::getHandlerUserId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.distinct()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 更新指定处理人的记录:重置审批状态
|
// 更新指定处理人的记录:重置审批状态
|
||||||
issueTicketProcessService.lambdaUpdate()
|
issueTicketProcessService.lambdaUpdate()
|
||||||
.eq(QmsIssueTicketProcess::getIssueTicketId, issueTicketId)
|
.in(QmsIssueTicketProcess::getId, rejectProcessIds)
|
||||||
.in(QmsIssueTicketProcess::getHandlerUserId, rejectUserIds)
|
|
||||||
.set(QmsIssueTicketProcess::getApprovalStatus, null)
|
.set(QmsIssueTicketProcess::getApprovalStatus, null)
|
||||||
.set(QmsIssueTicketProcess::getApprovalTime, null)
|
.set(QmsIssueTicketProcess::getApprovalTime, null)
|
||||||
.set(QmsIssueTicketProcess::getLeaderApprovalResult, null)
|
.set(QmsIssueTicketProcess::getLeaderApprovalResult, null)
|
||||||
|
|
@ -352,10 +374,23 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
for (Long userId : rejectUserIds) {
|
for (Long userId : rejectUserIds) {
|
||||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setTicketId(issueTicketId)
|
.setTicketId(issueTicketId)
|
||||||
.setHandlerUserId(userId);
|
.setHandlerUserId(userId)
|
||||||
|
.setHasProcessed(false)
|
||||||
|
.setIsRead(false);
|
||||||
issueTicketToDoService.save(todoItem);
|
issueTicketToDoService.save(todoItem);
|
||||||
}
|
}
|
||||||
} else if (leaderApprovalResult == 0) {
|
} else if (leaderApprovalResult == 0) {
|
||||||
|
// 同意:保存领导审批结果
|
||||||
|
issueTicketProcessService.lambdaUpdate()
|
||||||
|
.eq(QmsIssueTicketProcess::getId, processId)
|
||||||
|
.set(request.getApprovalOpinion() != null,
|
||||||
|
QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion())
|
||||||
|
.set(QmsIssueTicketProcess::getLeaderApprovalResult, request.getApprovalStatus())
|
||||||
|
.set(QmsIssueTicketProcess::getLeaderUserId, currentUserId)
|
||||||
|
.set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName())
|
||||||
|
.set(QmsIssueTicketProcess::getLeaderApprovalTime, now)
|
||||||
|
.update();
|
||||||
|
|
||||||
// 同意:检查同一工单下所有处理记录是否都已完成
|
// 同意:检查同一工单下所有处理记录是否都已完成
|
||||||
Long issueTicketId = process.getIssueTicketId();
|
Long issueTicketId = process.getIssueTicketId();
|
||||||
|
|
||||||
|
|
@ -444,6 +479,20 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isCurrentUserHeadOfHandlerDept(Long handlerUserId, Long currentUserId) {
|
||||||
|
if (handlerUserId == null || currentUserId == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
UserInterior handlerInterior = userInteriorService.lambdaQuery()
|
||||||
|
.eq(UserInterior::getUserId, handlerUserId)
|
||||||
|
.one();
|
||||||
|
if (handlerInterior == null || handlerInterior.getDeptId() == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Department department = departmentService.getById(handlerInterior.getDeptId());
|
||||||
|
return department != null && currentUserId.equals(department.getHeadUserId());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PQC工单处理人提交
|
* PQC工单处理人提交
|
||||||
*/
|
*/
|
||||||
|
|
@ -480,9 +529,10 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
public void submitPqcHandler(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket,
|
public void submitPqcHandler(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket,
|
||||||
QmsIssueTicketProcess process, LocalDateTime now,
|
QmsIssueTicketProcess process, LocalDateTime now,
|
||||||
Long currentUserId, String currentUserName) {
|
Long currentUserId, String currentUserName) {
|
||||||
|
QmsIssueTicketProcess latestProcess = issueTicketProcessService.getById(process.getId());
|
||||||
Short approvalStatus = request.getApprovalStatus() != null
|
Short approvalStatus = request.getApprovalStatus() != null
|
||||||
? request.getApprovalStatus()
|
? request.getApprovalStatus()
|
||||||
: process.getApprovalStatus();
|
: latestProcess.getApprovalStatus();
|
||||||
VUtil.trueThrowBusinessError(approvalStatus == null).throwMessage("提交时审批状态不能为空");
|
VUtil.trueThrowBusinessError(approvalStatus == null).throwMessage("提交时审批状态不能为空");
|
||||||
VUtil.trueThrowBusinessError(approvalStatus != 0 && approvalStatus != 1)
|
VUtil.trueThrowBusinessError(approvalStatus != 0 && approvalStatus != 1)
|
||||||
.throwMessage("不支持的审批状态");
|
.throwMessage("不支持的审批状态");
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,18 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
||||||
} else if (sourceType == 3) {
|
} else if (sourceType == 3) {
|
||||||
// PQC工单(无领导审批)
|
// PQC工单(无领导审批)
|
||||||
if (isHandler) {
|
if (isHandler) {
|
||||||
|
if (Objects.equals(request.getApprovalStatus(), (short) 1)) {
|
||||||
|
issueTicketProcessService.lambdaUpdate()
|
||||||
|
.eq(QmsIssueTicketProcess::getId, processId)
|
||||||
|
.set(QmsIssueTicketProcess::getApprovalStatus, request.getApprovalStatus())
|
||||||
|
.set(request.getApprovalOpinion() != null,
|
||||||
|
QmsIssueTicketProcess::getApprovalOpinion, request.getApprovalOpinion())
|
||||||
|
.set(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
|
||||||
|
.set(QmsIssueTicketProcess::getApprovalUserName, UserUtil.getUserName())
|
||||||
|
.update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 处理人处理:保存根本原因、审批状态和措施
|
// 处理人处理:保存根本原因、审批状态和措施
|
||||||
issueTicketProcessService.lambdaUpdate()
|
issueTicketProcessService.lambdaUpdate()
|
||||||
.eq(QmsIssueTicketProcess::getId, processId)
|
.eq(QmsIssueTicketProcess::getId, processId)
|
||||||
|
|
|
||||||
|
|
@ -623,19 +623,6 @@ public class QmsCoaReviewServiceImpl extends ServiceImpl<QmsCoaReviewMapper, Qms
|
||||||
}
|
}
|
||||||
|
|
||||||
// 有已发送的COA任务,才需要检查COA报告
|
// 有已发送的COA任务,才需要检查COA报告
|
||||||
// 判断是否存在COA报告(未删除)
|
|
||||||
boolean hasReport = lambdaQuery()
|
|
||||||
.eq(QmsCoaReview::getSupplierId, supplier.getId())
|
|
||||||
.eq(QmsCoaReview::getMaterialId, material.getId())
|
|
||||||
.eq(QmsCoaReview::getPurchaseNo, qo.getPurchaseNo())
|
|
||||||
.eq(QmsCoaReview::getDeleted, false)
|
|
||||||
.exists();
|
|
||||||
// 没有COA报告,放行
|
|
||||||
if (!hasReport) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 有COA报告时,检查是否存在已审核通过(status=2)且未删除的COA报告
|
|
||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.eq(QmsCoaReview::getSupplierId, supplier.getId())
|
.eq(QmsCoaReview::getSupplierId, supplier.getId())
|
||||||
.eq(QmsCoaReview::getMaterialId, material.getId())
|
.eq(QmsCoaReview::getMaterialId, material.getId())
|
||||||
|
|
|
||||||
|
|
@ -133,13 +133,13 @@
|
||||||
WHERE qi.inspection_type=#{request.inspectionType} AND imi.inspector_id = (
|
WHERE qi.inspection_type=#{request.inspectionType} AND imi.inspector_id = (
|
||||||
SELECT id FROM qms_quality_inspector WHERE user_id = #{userId} LIMIT 1
|
SELECT id FROM qms_quality_inspector WHERE user_id = #{userId} LIMIT 1
|
||||||
)
|
)
|
||||||
<if test="materialNo != null and materialNo != ''">
|
<if test="request.materialNo != null and request.materialNo != ''">
|
||||||
AND m.material_no = #{request.materialNo}
|
AND m.material_no = #{request.materialNo}
|
||||||
</if>
|
</if>
|
||||||
<if test="materialCategoryCode != null and materialCategoryCode != ''">
|
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||||
AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%')
|
AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%')
|
||||||
</if>
|
</if>
|
||||||
<if test="materialDesc != null and materialDesc != ''">
|
<if test="request.materialDesc != null and request.materialDesc != ''">
|
||||||
AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%')
|
AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%')
|
||||||
</if>
|
</if>
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
|
@ -163,13 +163,13 @@
|
||||||
WHERE qi.inspection_type=#{request.inspectionType} AND imci.inspector_id = (
|
WHERE qi.inspection_type=#{request.inspectionType} AND imci.inspector_id = (
|
||||||
SELECT id FROM qms_quality_inspector WHERE user_id = #{userId} LIMIT 1
|
SELECT id FROM qms_quality_inspector WHERE user_id = #{userId} LIMIT 1
|
||||||
)
|
)
|
||||||
<if test="materialNo != null and materialNo != ''">
|
<if test="request.materialNo != null and request.materialNo != ''">
|
||||||
AND m.material_no = #{request.materialNo}
|
AND m.material_no = #{request.materialNo}
|
||||||
</if>
|
</if>
|
||||||
<if test="materialCategoryCode != null and materialCategoryCode != ''">
|
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||||
AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%')
|
AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%')
|
||||||
</if>
|
</if>
|
||||||
<if test="materialDesc != null and materialDesc != ''">
|
<if test="request.materialDesc != null and request.materialDesc != ''">
|
||||||
AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%')
|
AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%')
|
||||||
</if>
|
</if>
|
||||||
ORDER BY material_id ASC
|
ORDER BY material_id ASC
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue