Compare commits
No commits in common. "e8a38ae171405f90b3ec924aacc04ebe7529689a" and "19862342f10f6457cf143491291a346d91e60d03" have entirely different histories.
e8a38ae171
...
19862342f1
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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=false,isEdit=false
|
// 创建人:isReview = false,isDispatch = 是否有未分派/被驳回的不合格项
|
||||||
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=false,isDispatch看是否有未分派/被驳回
|
||||||
// 创建人:isReview=false,isDispatch仅在待流转状态
|
|
||||||
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=false,isDispatch在处理中到已完成之间
|
.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=true,isDispatch=false
|
// 情况4:上级领导 → isReview=true,isDispatch=false
|
||||||
vo.setIsReview(true);
|
vo.setIsReview(true);
|
||||||
vo.setIsDispatch(false);
|
vo.setIsDispatch(false);
|
||||||
} else {
|
} else {
|
||||||
// 处理人/审批人(工单处理表):全false
|
// 情况3:处理人/审批人(工单处理表) → isReview=false,isDispatch=false
|
||||||
vo.setIsReview(false);
|
vo.setIsReview(false);
|
||||||
vo.setIsDispatch(false);
|
vo.setIsDispatch(false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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列表)
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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=巡检
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue