Compare commits

..

No commits in common. "e8a38ae171405f90b3ec924aacc04ebe7529689a" and "19862342f10f6457cf143491291a346d91e60d03" have entirely different histories.

6 changed files with 31 additions and 177 deletions

View File

@ -81,13 +81,4 @@ public class QmsPdiTaskRecordController extends BaseController {
@NotNull(message = "检测记录ID不能为空") @RequestParam Long id) { @NotNull(message = "检测记录ID不能为空") @RequestParam Long id) {
return ApiResult.success(taskRecordControllerService.getInspectionImages(id)); return ApiResult.success(taskRecordControllerService.getInspectionImages(id));
} }
/**
* 查询任务详情
*/
@GetMapping("detail")
public ApiResult<QmsPdiTaskRecordDetailVO.TaskInfoVO> detail(
@NotNull(message = "任务记录ID不能为空") @RequestParam Long id) {
return ApiResult.success(taskRecordControllerService.detail(id));
}
} }

View File

@ -1646,39 +1646,36 @@ public class QmsIssueTicketControllerService {
Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> signatures = buildSignatures(processes); Map<String, QmsPdiTicketMyDetailVO.SignatureInfo> signatures = buildSignatures(processes);
vo.setSignatures(signatures); vo.setSignatures(signatures);
// === 权限判断isReview / isDispatch / isEdit === // === 权限判断isReview / isDispatch ===
if (isCreator) { if (isCreator) {
// 创建人isReview=falseisEdit=false // 创建人isReview = falseisDispatch = 是否有未分派/被驳回的不合格项
vo.setIsReview(false); vo.setIsReview(false);
vo.setIsEdit(false);
// isDispatch查询全部不合格项判断是否都已被有效分派 // 获取该工单全部处理记录创建人场景下 processes 已经是全量
List<QmsPdiInspectionResults> allUnqualified = pdiInspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, ticket.getSourceId())
.eq(QmsPdiInspectionResults::getInspectionItemResults, false)
.list();
Set<Long> allUnqualifiedIds = allUnqualified.stream()
.map(QmsPdiInspectionResults::getId)
.collect(Collectors.toSet());
// 收集有效分派的不合格项ID仅非驳回记录approvalStatus为null待处理 0已通过
Set<Long> effectivelyDispatched = new HashSet<>(); Set<Long> effectivelyDispatched = new HashSet<>();
Set<Long> rejectedResultIds = new HashSet<>();
for (QmsIssueTicketProcess p : processes) { for (QmsIssueTicketProcess p : processes) {
if (StrUtil.isBlank(p.getTaskResultIds())) continue; if (StrUtil.isBlank(p.getTaskResultIds())) continue;
if (p.getApprovalStatus() != null && p.getApprovalStatus() == 1) continue; // 被驳回的不算有效覆盖 List<Long> ids = Arrays.stream(p.getTaskResultIds().split(","))
Arrays.stream(p.getTaskResultIds().split(","))
.filter(StrUtil::isNotBlank).map(String::trim).map(Long::valueOf) .filter(StrUtil::isNotBlank).map(String::trim).map(Long::valueOf)
.forEach(effectivelyDispatched::add); .collect(Collectors.toList());
if (p.getApprovalStatus() != null && p.getApprovalStatus() == 1) {
// 被驳回的记录其中的不合格项视为未分派
rejectedResultIds.addAll(ids);
} else {
// 有效分派pending 或已通过
effectivelyDispatched.addAll(ids);
}
} }
// 被驳回且未被重新分派的项
// 全部不合格项都在有效分派集合中 isDispatch=false rejectedResultIds.removeAll(effectivelyDispatched);
// 有未覆盖的从未分派 被驳回后未重新分派 isDispatch=true // 没有任何处理记录 存在被驳回未重新分派的项 isDispatch = true
vo.setIsDispatch(!allUnqualifiedIds.isEmpty() && !effectivelyDispatched.containsAll(allUnqualifiedIds)); vo.setIsDispatch(processes.isEmpty() || !rejectedResultIds.isEmpty());
} else { } else {
// 非创建人isDispatch=false // 非创建人isDispatch = false
vo.setIsDispatch(false); vo.setIsDispatch(false);
// 获取全部处理记录判断角色 // 判断是否为上级领导
List<QmsIssueTicketProcess> allProcesses = issueTicketProcessService.lambdaQuery() List<QmsIssueTicketProcess> allProcesses = issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, id) .eq(QmsIssueTicketProcess::getIssueTicketId, id)
.list(); .list();
@ -1686,21 +1683,14 @@ public class QmsIssueTicketControllerService {
.anyMatch(p -> currentUserId.equals(p.getLeaderUserId())); .anyMatch(p -> currentUserId.equals(p.getLeaderUserId()));
if (isLeader) { if (isLeader) {
// 领导isReview=true // 上级领导isReview = true
vo.setIsReview(true); vo.setIsReview(true);
// isEdit领导未提交审批leaderApprovalResult为null时有编辑权限
boolean leaderNotSubmitted = allProcesses.stream()
.filter(p -> currentUserId.equals(p.getLeaderUserId()))
.anyMatch(p -> p.getLeaderApprovalResult() == null);
vo.setIsEdit(leaderNotSubmitted);
} else { } else {
// 处理人/审批人 // 处理人/审批人检查是否有未审批的处理记录
boolean hasUnapproved = allProcesses.stream() boolean hasUnapproved = allProcesses.stream()
.filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId())) .filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId()))
.anyMatch(p -> p.getApprovalStatus() == null); .anyMatch(p -> p.getApprovalStatus() == null);
vo.setIsReview(hasUnapproved); vo.setIsReview(hasUnapproved);
// isEdit处理人未提交approvalStatus为null时有编辑权限
vo.setIsEdit(hasUnapproved);
} }
} }
@ -1990,28 +1980,24 @@ public class QmsIssueTicketControllerService {
.eq(QmsIssueTicketProcess::getIssueTicketId, id) .eq(QmsIssueTicketProcess::getIssueTicketId, id)
.list(); .list();
// isEdit处理人或领导为true // isEdit仅当前登录人是处理人时为true
boolean isHandler = allProcesses.stream() boolean isHandler = allProcesses.stream()
.anyMatch(p -> currentUserId.equals(p.getHandlerUserId())); .anyMatch(p -> currentUserId.equals(p.getHandlerUserId()));
boolean isLeader = allProcesses.stream() vo.setIsEdit(isHandler);
.anyMatch(p -> currentUserId.equals(p.getLeaderUserId()));
vo.setIsEdit(isHandler || isLeader);
Short status = ticket.getStatus(); if (currentUserId.equals(ticket.getCreateUserId()) || currentUserId.equals(ticket.getApprovalUserId())) {
if (currentUserId.equals(ticket.getCreateUserId())) { // 情况1/2创建人 工单表审批人 isReview=falseisDispatch看是否有未分派/被驳回
// 创建人isReview=falseisDispatch仅在待流转状态
vo.setIsReview(false); vo.setIsReview(false);
vo.setIsDispatch(status != null && status == 0); // 无处理记录 存在被驳回的处理记录 isDispatch=true
} else if (currentUserId.equals(ticket.getApprovalUserId())) { boolean hasRejected = allProcesses.stream()
// 工单表审批人isReview=falseisDispatch在处理中到已完成之间 .anyMatch(p -> p.getApprovalStatus() != null && p.getApprovalStatus() == 1);
vo.setIsReview(false); vo.setIsDispatch(allProcesses.isEmpty() || hasRejected);
vo.setIsDispatch(status != null && status == 1);
} else if (allProcesses.stream().anyMatch(p -> currentUserId.equals(p.getLeaderUserId()))) { } else if (allProcesses.stream().anyMatch(p -> currentUserId.equals(p.getLeaderUserId()))) {
// 上级领导isReview=trueisDispatch=false // 情况4上级领导 isReview=trueisDispatch=false
vo.setIsReview(true); vo.setIsReview(true);
vo.setIsDispatch(false); vo.setIsDispatch(false);
} else { } else {
// 处理人/审批人工单处理表false // 情况3处理人/审批人工单处理表 isReview=falseisDispatch=false
vo.setIsReview(false); vo.setIsReview(false);
vo.setIsDispatch(false); vo.setIsDispatch(false);
} }

View File

@ -19,14 +19,12 @@ import com.nflg.wms.repository.entity.QmsPdiDetectionRulesStatusItem;
import com.nflg.wms.repository.entity.QmsPdiInspectionResults; import com.nflg.wms.repository.entity.QmsPdiInspectionResults;
import com.nflg.wms.repository.entity.QmsPdiTaskRecord; import com.nflg.wms.repository.entity.QmsPdiTaskRecord;
import com.nflg.wms.repository.entity.FileUploadRecord; import com.nflg.wms.repository.entity.FileUploadRecord;
import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.service.IQmsPdiDetectionRulesDeliveryItemService; import com.nflg.wms.repository.service.IQmsPdiDetectionRulesDeliveryItemService;
import com.nflg.wms.repository.service.IQmsPdiDetectionRulesService; import com.nflg.wms.repository.service.IQmsPdiDetectionRulesService;
import com.nflg.wms.repository.service.IQmsPdiDetectionRulesStatusItemService; import com.nflg.wms.repository.service.IQmsPdiDetectionRulesStatusItemService;
import com.nflg.wms.repository.service.IQmsPdiInspectionResultsService; import com.nflg.wms.repository.service.IQmsPdiInspectionResultsService;
import com.nflg.wms.repository.service.IQmsPdiTaskRecordService; import com.nflg.wms.repository.service.IQmsPdiTaskRecordService;
import com.nflg.wms.repository.service.IFileUploadRecordService; import com.nflg.wms.repository.service.IFileUploadRecordService;
import com.nflg.wms.repository.service.IUserService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -62,9 +60,6 @@ public class QmsPdiTaskRecordControllerService {
@Resource @Resource
private IFileUploadRecordService fileUploadRecordService; private IFileUploadRecordService fileUploadRecordService;
@Resource
private IUserService userService;
// ========================= 转办 ========================= // ========================= 转办 =========================
/** /**
@ -382,42 +377,4 @@ public class QmsPdiTaskRecordControllerService {
} }
return convertImageIdsToVO(result.getInspectionItemImage()); return convertImageIdsToVO(result.getInspectionItemImage());
} }
// ========================= 任务详情 =========================
/**
* 查询任务详情订单编号机型编号机台编号检查版本所属工厂检测类型检测结果质检员检测完成时间
*/
public QmsPdiTaskRecordDetailVO.TaskInfoVO detail(Long id) {
QmsPdiTaskRecord record = taskRecordService.getById(id);
if (Objects.isNull(record)) {
throw new NflgException(STATE.BusinessError, "检测任务记录不存在");
}
QmsPdiTaskRecordDetailVO.TaskInfoVO vo = new QmsPdiTaskRecordDetailVO.TaskInfoVO();
vo.setOrderNo(record.getOrderNo());
vo.setDeviceNo(record.getDeviceNo());
vo.setFactoryNo(record.getFactoryNo());
vo.setInspectionInspection(record.getInspectionInspection());
vo.setDetectionCompletionTime(record.getDetectionCompletionTime());
// 关联检测规则获取机型编号检查版本检测类型质检员
if (record.getDetectionRulesId() != null) {
QmsPdiDetectionRules rules = detectionRulesService.getById(record.getDetectionRulesId());
if (rules != null) {
vo.setMachineNo(rules.getMachineNo());
vo.setInspectionVersion(rules.getInspectionVersion());
vo.setInspectionType(rules.getInspectionType());
// 质检员名称
if (rules.getInspectorId() != null) {
User inspector = userService.getById(rules.getInspectorId());
if (inspector != null) {
vo.setInspectorName(inspector.getUserName());
}
}
}
}
return vo;
}
} }

View File

@ -111,58 +111,6 @@ public class QmsPdiTaskRecordDetailVO {
private List<FileDetailVO> inspectionItemImage; private List<FileDetailVO> inspectionItemImage;
} }
/**
* 任务详情信息VO
*/
@Data
public static class TaskInfoVO {
/**
* 订单编号
*/
private String orderNo;
/**
* 机型编号
*/
private String machineNo;
/**
* 机台编号
*/
private String deviceNo;
/**
* 检查版本
*/
private String inspectionVersion;
/**
* 所属工厂
*/
private String factoryNo;
/**
* 检测类型
*/
private Integer inspectionType;
/**
* 检测结果true=合格false=不合格
*/
private Boolean inspectionInspection;
/**
* 质检员名称
*/
private String inspectorName;
/**
* 检测完成时间
*/
private LocalDateTime detectionCompletionTime;
}
/** /**
* 发货前检测项明细VO图片直接返回URL列表 * 发货前检测项明细VO图片直接返回URL列表
*/ */

View File

@ -27,11 +27,6 @@ public class QmsPdiTicketMyDetailVO {
*/ */
private Boolean isDispatch; private Boolean isDispatch;
/**
* 是否有编辑权限
*/
private Boolean isEdit;
/** /**
* 来源类型0=IQC检测任务1=PDI检测任务2=巡检 * 来源类型0=IQC检测任务1=PDI检测任务2=巡检
*/ */

View File

@ -9,13 +9,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.QmsIssueTicketSearchQO; import com.nflg.wms.common.pojo.qo.QmsIssueTicketSearchQO;
import com.nflg.wms.common.pojo.vo.QmsIssueTicketVO; import com.nflg.wms.common.pojo.vo.QmsIssueTicketVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.FileUploadRecord; import com.nflg.wms.repository.entity.FileUploadRecord;
import com.nflg.wms.repository.entity.QmsIssueTicket; import com.nflg.wms.repository.entity.QmsIssueTicket;
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
import com.nflg.wms.repository.mapper.QmsIssueTicketMapper; import com.nflg.wms.repository.mapper.QmsIssueTicketMapper;
import com.nflg.wms.repository.service.IFileUploadRecordService; import com.nflg.wms.repository.service.IFileUploadRecordService;
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
import com.nflg.wms.repository.service.IQmsIssueTicketService; import com.nflg.wms.repository.service.IQmsIssueTicketService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -34,32 +31,12 @@ public class QmsIssueTicketServiceImpl
implements IQmsIssueTicketService { implements IQmsIssueTicketService {
private final IFileUploadRecordService fileUploadRecordService; private final IFileUploadRecordService fileUploadRecordService;
private final IQmsIssueTicketProcessService issueTicketProcessService;
@Override @Override
public PageData<QmsIssueTicketVO> search(QmsIssueTicketSearchQO request) { public PageData<QmsIssueTicketVO> search(QmsIssueTicketSearchQO request) {
Long currentUserId = UserUtil.getUserId();
Page<QmsIssueTicket> page = new Page<>(request.getPage(), request.getPageSize()); Page<QmsIssueTicket> page = new Page<>(request.getPage(), request.getPageSize());
// 查询当前用户在处理记录中关联的工单ID处理人/审批人/领导
List<Long> processTicketIds = issueTicketProcessService.lambdaQuery()
.and(w -> w
.eq(QmsIssueTicketProcess::getHandlerUserId, currentUserId)
.or().eq(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
.or().eq(QmsIssueTicketProcess::getLeaderUserId, currentUserId)
)
.list()
.stream().map(QmsIssueTicketProcess::getIssueTicketId).distinct().collect(Collectors.toList());
var query = lambdaQuery() var query = lambdaQuery()
// 数据权限只能看到与当前登录人相关的工单
.and(w -> {
w.eq(QmsIssueTicket::getCreateUserId, currentUserId)
.or().eq(QmsIssueTicket::getApprovalUserId, currentUserId);
if (CollectionUtil.isNotEmpty(processTicketIds)) {
w.or().in(QmsIssueTicket::getId, processTicketIds);
}
})
.like(StrUtil.isNotBlank(request.getTicketNo()), QmsIssueTicket::getTicketNo, request.getTicketNo()) .like(StrUtil.isNotBlank(request.getTicketNo()), QmsIssueTicket::getTicketNo, request.getTicketNo())
.like(StrUtil.isNotBlank(request.getTicketTitle()), QmsIssueTicket::getTicketTitle, request.getTicketTitle()) .like(StrUtil.isNotBlank(request.getTicketTitle()), QmsIssueTicket::getTicketTitle, request.getTicketTitle())
.like(StrUtil.isNotBlank(request.getProjectNo()), QmsIssueTicket::getProjectNo, request.getProjectNo()) .like(StrUtil.isNotBlank(request.getProjectNo()), QmsIssueTicket::getProjectNo, request.getProjectNo())