From f3e41e69e677c2af2d8d3e047888337c4c92c96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 27 Apr 2026 15:19:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(issueTicket):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=E9=97=AE=E9=A2=98=E5=B7=A5=E5=8D=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=8F=8A=E8=AF=A6=E6=83=85=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加质量问题工单新增接口,实现工单编号自动生成及基本信息保存 - 添加质量问题工单详情查询,包含图片信息、来料检测任务详情及检验记录 - 来料检验任务检验记录子项新增样本数量、合格数量、不合格数量属性 - 重命名检验记录样本数据中的图片字段为imageIds,统一字段命名 - 新增获取不合格数据分组方法,聚合不合格数量并合并图片列表 - 实现质量问题工单分页查询及搜索功能 - 新增质量问题工单相关的请求参数和响应视图对象定义 - 完善数据库Mapper接口及XML配置,支持新查询语句 - 调整前端传递及后端处理逻辑对应的字段及校验逻辑 --- .../controller/QmsIssueTicketController.java | 56 ++++++ ...comingInspectionTaskControllerService.java | 13 +- .../QmsIssueTicketControllerService.java | 169 ++++++++++++++++++ ...ngInspectionTaskTodoCheckSubmitItemQO.java | 12 ++ .../common/pojo/qo/QmsIssueTicketAddQO.java | 72 ++++++++ .../pojo/qo/QmsIssueTicketSearchQO.java | 59 ++++++ .../vo/QmsIncomingInspectionTaskRecordVO.java | 2 +- .../pojo/vo/QmsIssueTicketDetailVO.java | 140 +++++++++++++++ .../QmsIssueTicketInspectionRecordItemVO.java | 46 +++++ .../wms/common/pojo/vo/QmsIssueTicketVO.java | 99 ++++++++++ .../QmsIncomingInspectionTaskRecordItem.java | 15 ++ ...sIncomingInspectionTaskRecordItemData.java | 2 +- ...ncomingInspectionTaskRecordItemMapper.java | 4 + ...comingInspectionTaskRecordItemService.java | 4 + .../service/IQmsIssueTicketService.java | 8 + ...ngInspectionTaskRecordItemServiceImpl.java | 7 + .../impl/QmsIssueTicketServiceImpl.java | 42 +++++ ...IncomingInspectionTaskRecordItemMapper.xml | 7 + 18 files changed, 752 insertions(+), 5 deletions(-) create mode 100644 nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java create mode 100644 nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketAddQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketInspectionRecordItemVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java new file mode 100644 index 00000000..918bc1b8 --- /dev/null +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java @@ -0,0 +1,56 @@ +package com.nflg.qms.admin.controller; + +import com.nflg.qms.admin.service.QmsIssueTicketControllerService; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.QmsIssueTicketAddQO; +import com.nflg.wms.common.pojo.qo.QmsIssueTicketSearchQO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketDetailVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketVO; +import com.nflg.wms.repository.service.IQmsIssueTicketService; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springframework.web.bind.annotation.*; + +/** + * 质量问题工单管理 + */ +@RestController +@RequestMapping("/issueTicket") +public class QmsIssueTicketController extends BaseController { + + @Resource + private IQmsIssueTicketService issueTicketService; + + @Resource + private QmsIssueTicketControllerService issueTicketControllerService; + + /** + * 新增质量问题工单 + * 工单编号自动生成,来源类型固定为2(巡检) + */ + @PostMapping("add") + public ApiResult add(@Valid @RequestBody QmsIssueTicketAddQO request) { + issueTicketControllerService.add(request); + return ApiResult.success(); + } + + /** + * 查询来料检测任务质量问题工单详情 + * 含来料检测任务详情及来料检验任务检验记录子项样本列表 + */ + @GetMapping("detail") + public ApiResult detail(@NotNull(message = "ID不能为空") Long id) { + return ApiResult.success(issueTicketControllerService.getDetail(id)); + } + + /** + * 分页查询质量问题工单列表 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody QmsIssueTicketSearchQO request) { + return ApiResult.success(issueTicketService.search(request)); + } +} diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java index 5bf444cb..60149427 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java @@ -799,6 +799,9 @@ public class IncomingInspectionTaskControllerService { QmsIncomingInspectionTaskRecordItem ditem = new QmsIncomingInspectionTaskRecordItem() .setId(item.getId()) .setRecordId(record.getId()) + .setInspectionQty(request.getInspectionQty()) + .setQualifiedQty(item.getQualifiedQty()) + .setUnqualifiedQty(item.getUnqualifiedQty()) .setRemark(item.getRemark()) .setInspectionStandardItemContentId(item.getInspectionStandardItemContentId()); allItemEntities.add(ditem); @@ -833,7 +836,7 @@ public class IncomingInspectionTaskControllerService { .setItemId(ditem.getId()) .setQualified(data.getQualified()) .setMeasuredValue(data.getMeasuredValue()) - .setImages(imageIds); + .setImageIds(imageIds); if (data.getId() == null) { insertDatas.add(ddata); } else { @@ -1047,10 +1050,10 @@ public class IncomingInspectionTaskControllerService { dataVO.setItemId(data.getItemId()); dataVO.setMeasuredValue(data.getMeasuredValue()); dataVO.setQualified(data.getQualified()); - if (StrUtil.isNotBlank(data.getImages())) { + if (StrUtil.isNotBlank(data.getImageIds())) { dataVO.setImages( fileUploadRecordService.lambdaQuery() - .in(FileUploadRecord::getId, StrUtil.split(data.getImages(), ",")) + .in(FileUploadRecord::getId, StrUtil.split(data.getImageIds(), ",")) .list() .stream() .map(file -> new FileUploadVO() @@ -1067,4 +1070,8 @@ public class IncomingInspectionTaskControllerService { return vo; }).toList(); } + + public List getNonconformanceDataGroups(Long recordId) { + return incomingInspectionTaskRecordItemService.getNonconformanceDataGroups(recordId); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java new file mode 100644 index 00000000..2872f4f1 --- /dev/null +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java @@ -0,0 +1,169 @@ +package com.nflg.qms.admin.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.pojo.qo.QmsIssueTicketAddQO; +import com.nflg.wms.common.pojo.vo.FileUploadVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketDetailVO; +import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordItemDetailVO; +import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordVO; +import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskVO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketInspectionRecordItemVO; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.repository.entity.FileUploadRecord; +import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecord; +import com.nflg.wms.repository.entity.QmsIssueTicket; +import com.nflg.wms.repository.service.IFileUploadRecordService; +import com.nflg.wms.repository.service.IQmsIssueTicketService; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 质量问题工单 业务逻辑 + */ +@Component +public class QmsIssueTicketControllerService { + + @Resource + private IQmsIssueTicketService issueTicketService; + + @Resource + private BasdeSerialNumberControllerService basdeSerialNumberControllerService; + + @Resource + private IFileUploadRecordService fileUploadRecordService; + + @Resource + private IncomingInspectionTaskControllerService incomingInspectionTaskControllerService; + + /** + * 新增质量问题工单 + * 工单编号自动生成,来源类型固定为2(巡检),状态默认为0(待流转) + */ + @Transactional(rollbackFor = Exception.class) + public void add(@Valid QmsIssueTicketAddQO request) { + Long userId = UserUtil.getUserId(); + String userName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); + + // 自动生成工单编号 + String ticketNo = basdeSerialNumberControllerService.generateSerialNumber(36); + + QmsIssueTicket entity = new QmsIssueTicket() + .setSourceType((short) 2) + .setTicketNo(ticketNo) + .setTicketTitle(request.getTicketTitle()) + .setProjectNo(request.getProjectNo()) + .setIncidentType(request.getIncidentType()) + .setExceptionCode(request.getExceptionCode()) + .setUnqualifiedQty(request.getUnqualifiedQty()) + .setIncidentLocation(request.getIncidentLocation()) + .setIncidentDescription(request.getIncidentDescription()) + .setIncidentReason(request.getIncidentReason()) + .setIncidentConsequence(request.getIncidentConsequence()) + .setImageIds(request.getImages() == null + ? "" + : StrUtil.join(",", request.getImages().stream().map(FileUploadVO::getId).toList()) + ) + .setRemark(request.getRemark()) + .setCreateUserId(userId) + .setCreateUserName(userName) + .setCreateTime(now) + .setUpdateUserId(userId) + .setUpdateUserName(userName) + .setUpdateTime(now); + + issueTicketService.save(entity); + } + + /** + * 查询来料检测任务质量问题工单详情 + * 包含图片文件信息、来料检测任务详情、检验记录(含子项和样本数据) + */ + public QmsIssueTicketDetailVO getDetail(Long id) { + QmsIssueTicket entity = issueTicketService.getById(id); + if (Objects.isNull(entity)) { + throw new NflgException(STATE.BusinessError, "质量问题工单不存在"); + } + + QmsIssueTicketDetailVO vo = BeanUtil.copyProperties(entity, QmsIssueTicketDetailVO.class); + + // 解析图片ID列表并查询文件信息 + if (StrUtil.isNotBlank(entity.getImageIds())) { + List imageIdList = Arrays.stream(entity.getImageIds().split(",")) + .filter(StrUtil::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(imageIdList)) { + List records = fileUploadRecordService.lambdaQuery() + .in(FileUploadRecord::getId, imageIdList) + .list(); + vo.setImages(records.stream() + .map(file -> new FileUploadVO() + .setId(file.getId()) + .setFileName(file.getFileName()) + .setUrl(file.getUrl()) + ) + .collect(Collectors.toList()) + ); + } + } + + // 查询关联的来料检测任务详情及检验记录 + if (Objects.nonNull(entity.getSourceId())) { + // 来料检测任务详情 + QmsIncomingInspectionTaskVO taskDetail = incomingInspectionTaskControllerService.getDetail(entity.getSourceId()); + vo.setTaskDetail(taskDetail); + + List datas = incomingInspectionTaskControllerService.getNonconformanceDataGroups(entity.getSourceId()); + List records = new ArrayList<>(); + datas.forEach(record -> { + QmsIssueTicketInspectionRecordItemVO r = records.stream() + .filter(item -> item.getId().equals(record.getId())) + .findFirst() + .orElseGet(() -> { + QmsIssueTicketInspectionRecordItemVO r1 = new QmsIssueTicketInspectionRecordItemVO() + .setId(record.getId()) + .setName(record.getName()) + .setLegend(record.getLegend()) + .setUnqualifiedQty(0) + .setImageIds(record.getImageIds()); + records.add(r1); + return r1; + }); + r.setUnqualifiedQty(r.getUnqualifiedQty() + record.getUnqualifiedQty()); + r.setImageIds(StrUtil.join(",", r.getImageIds(), record.getImageIds())); + }); + records.stream() + .filter(record -> StrUtil.isNotBlank(record.getImageIds())) + .forEach(record -> { + record.setImages(fileUploadRecordService.lambdaQuery() + .in(FileUploadRecord::getId, StrUtil.split(record.getImageIds(), ",")) + .list() + .stream() + .map(file -> new FileUploadVO() + .setId(file.getId()) + .setFileName(file.getFileName()) + .setUrl(file.getUrl()) + ) + .collect(Collectors.toList()) + ); + }); + vo.setRecords(records); + } + + return vo; + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIncomingInspectionTaskTodoCheckSubmitItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIncomingInspectionTaskTodoCheckSubmitItemQO.java index 971a42dd..bdf88c8d 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIncomingInspectionTaskTodoCheckSubmitItemQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIncomingInspectionTaskTodoCheckSubmitItemQO.java @@ -18,6 +18,18 @@ public class QmsIncomingInspectionTaskTodoCheckSubmitItemQO { @NotNull(message = "检验标准项内容ID不能为空") private Long inspectionStandardItemContentId; + /** + * 合格数量 + */ + @NotNull(message = "合格数量不能为空") + private Integer qualifiedQty; + + /** + * 不合格数量 + */ + @NotNull(message = "不合格数量不能为空") + private Integer unqualifiedQty; + /** * 备注 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketAddQO.java new file mode 100644 index 00000000..484dac31 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketAddQO.java @@ -0,0 +1,72 @@ +package com.nflg.wms.common.pojo.qo; + +import com.nflg.wms.common.pojo.vo.FileUploadVO; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * 质量问题工单 新增参数 + */ +@Data +public class QmsIssueTicketAddQO { + + /** + * 工单标题 + */ + @NotBlank(message = "工单标题不能为空") + private String ticketTitle; + + /** + * 工程编号 + */ + private String projectNo; + + /** + * 事故类型:0=一般,1=较严重,2=严重 + */ + @NotNull(message = "事故类型不能为空") + private Short incidentType; + + /** + * 异常代码 + */ + private String exceptionCode; + + /** + * 不合格数量 + */ + private Integer unqualifiedQty; + + /** + * 事件地点 + */ + private String incidentLocation; + + /** + * 事件描述 + */ + private String incidentDescription; + + /** + * 事件原因 + */ + private String incidentReason; + + /** + * 事件后果 + */ + private String incidentConsequence; + + /** + * 图片列表 + */ + private List images; + + /** + * 备注 + */ + private String remark; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java new file mode 100644 index 00000000..775db3fc --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java @@ -0,0 +1,59 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; + +/** + * 质量问题工单 列表查询参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class QmsIssueTicketSearchQO extends PageQO { + + /** + * 工单编号(模糊匹配) + */ + private String ticketNo; + + /** + * 工单标题(模糊匹配) + */ + private String ticketTitle; + + /** + * 工程编号(模糊匹配) + */ + private String projectNo; + + /** + * 异常代码(精确匹配) + */ + private String exceptionCode; + + /** + * 工单类型/来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检 + */ + private Short ticketType; + + /** + * 工单状态:0=待流转,1=处理中,2=已完成 + */ + private Short status; + + /** + * 事故类型:0=一般,1=较严重,2=严重 + */ + private Short incidentType; + + /** + * 创建时间开始日期 + */ + private LocalDate createTimeStart; + + /** + * 创建时间结束日期 + */ + private LocalDate createTimeEnd; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java index c6fe1fab..a81fa681 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java @@ -61,5 +61,5 @@ public class QmsIncomingInspectionTaskRecordVO { /** * 检验记录项列表 */ - private List items; + private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java new file mode 100644 index 00000000..4f9297b4 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java @@ -0,0 +1,140 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 质量问题工单 详情视图对象 + */ +@Data +public class QmsIssueTicketDetailVO { + + private Long id; + + /** + * 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检 + */ + private Short sourceType; + + /** + * 来源ID,关联对应检测任务表 + */ + private Long sourceId; + + /** + * 工单编号 + */ + private String ticketNo; + + /** + * 工单标题 + */ + private String ticketTitle; + + /** + * 工程编号 + */ + private String projectNo; + + /** + * 事故类型:0=一般,1=较严重,2=严重 + */ + private Short incidentType; + + /** + * 异常代码 + */ + private String exceptionCode; + + /** + * 不合格数量 + */ + private Integer unqualifiedQty; + + /** + * 事件地点 + */ + private String incidentLocation; + + /** + * 事件描述 + */ + private String incidentDescription; + + /** + * 事件原因 + */ + private String incidentReason; + + /** + * 事件后果 + */ + private String incidentConsequence; + + /** + * 图片列表 + */ + private List images; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:0=待流转,1=处理中,2=已完成 + */ + private Short status; + + /** + * 审批状态:0=通过,1=驳回,2=重检,3=报废,4=维修,5=挑选使用,6=让渡使用 + */ + private Short approvalStatus; + + /** + * 审批意见 + */ + private String approvalOpinion; + + /** + * 审批人姓名 + */ + private String approvalUserName; + + /** + * 审批时间 + */ + private LocalDateTime approvalTime; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 来料检测任务详情 + */ + private QmsIncomingInspectionTaskVO taskDetail; + + /** + * 来料检验任务检验记录不合格列表 + */ + private List records; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketInspectionRecordItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketInspectionRecordItemVO.java new file mode 100644 index 00000000..74f96c02 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketInspectionRecordItemVO.java @@ -0,0 +1,46 @@ +package com.nflg.wms.common.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 质量问题工单 - 来料检验记录子项及样本合并VO + */ +@Data +@Accessors(chain = true) +public class QmsIssueTicketInspectionRecordItemVO { + + @JsonIgnore + private Long id; + + /** + * 检测项名称 + */ + private String name; + + /** + * 图例 + */ + private String legend; + + /** + * 不合格数量 + */ + private Integer unqualifiedQty; + + /** + * 图片列表 + */ + @JsonIgnore + private String imageIds; + + /** + * 图片列表 + */ + private List images=new ArrayList<>(); +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java new file mode 100644 index 00000000..7dfab4df --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java @@ -0,0 +1,99 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 质量问题工单 列表视图对象 + */ +@Data +public class QmsIssueTicketVO { + + private Long id; + + /** + * 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检 + */ + private Short sourceType; + + /** + * 来源ID + */ + private Long sourceId; + + /** + * 工单编号 + */ + private String ticketNo; + + /** + * 工单标题 + */ + private String ticketTitle; + + /** + * 工程编号 + */ + private String projectNo; + + /** + * 事故类型:0=一般,1=较严重,2=严重 + */ + private Short incidentType; + + /** + * 异常代码 + */ + private String exceptionCode; + + /** + * 不合格数量 + */ + private Integer unqualifiedQty; + + /** + * 事件地点 + */ + private String incidentLocation; + + /** + * 状态:0=待流转,1=处理中,2=已完成 + */ + private Short status; + + /** + * 审批状态:0=通过,1=驳回,2=重检,3=报废,4=维修,5=挑选使用,6=让渡使用 + */ + private Short approvalStatus; + + /** + * 审批人姓名 + */ + private String approvalUserName; + + /** + * 审批时间 + */ + private LocalDateTime approvalTime; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItem.java index 9bcb725d..a706e95e 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItem.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItem.java @@ -44,4 +44,19 @@ public class QmsIncomingInspectionTaskRecordItem implements Serializable { * 备注 */ private String remark; + + /** + * 样本数量 + */ + private Integer inspectionQty; + + /** + * 合格数量 + */ + private Integer qualifiedQty; + + /** + * 不合格数量 + */ + private Integer unqualifiedQty; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItemData.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItemData.java index b1b860c5..820da95d 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItemData.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIncomingInspectionTaskRecordItemData.java @@ -51,5 +51,5 @@ public class QmsIncomingInspectionTaskRecordItemData { /** * 图片id列表,多个逗号分隔 */ - private String images; + private String imageIds; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIncomingInspectionTaskRecordItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIncomingInspectionTaskRecordItemMapper.java index 43bc055f..19c2a631 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIncomingInspectionTaskRecordItemMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsIncomingInspectionTaskRecordItemMapper.java @@ -1,8 +1,11 @@ package com.nflg.wms.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketInspectionRecordItemVO; import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecordItem; +import java.util.List; + /** *

* 来料检验任务检验记录子项 Mapper 接口 @@ -13,4 +16,5 @@ import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecordItem; */ public interface QmsIncomingInspectionTaskRecordItemMapper extends BaseMapper { + List getNonconformanceDataGroups(Long recordId); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIncomingInspectionTaskRecordItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIncomingInspectionTaskRecordItemService.java index dc3f5f18..c03a2b60 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIncomingInspectionTaskRecordItemService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIncomingInspectionTaskRecordItemService.java @@ -1,8 +1,11 @@ package com.nflg.wms.repository.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketInspectionRecordItemVO; import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecordItem; +import java.util.List; + /** *

* 来料检验任务检验记录子项 服务类 @@ -13,4 +16,5 @@ import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecordItem; */ public interface IQmsIncomingInspectionTaskRecordItemService extends IService { + List getNonconformanceDataGroups(Long recordId); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketService.java index 47292322..ca447b85 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsIssueTicketService.java @@ -1,5 +1,8 @@ package com.nflg.wms.repository.service; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.QmsIssueTicketSearchQO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketVO; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.repository.entity.QmsIssueTicket; @@ -7,4 +10,9 @@ import com.nflg.wms.repository.entity.QmsIssueTicket; * 质量问题工单 Service */ public interface IQmsIssueTicketService extends IService { + + /** + * 分页查询质量问题工单列表 + */ + PageData search(QmsIssueTicketSearchQO request); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIncomingInspectionTaskRecordItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIncomingInspectionTaskRecordItemServiceImpl.java index b74c84f2..f5895366 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIncomingInspectionTaskRecordItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIncomingInspectionTaskRecordItemServiceImpl.java @@ -1,11 +1,14 @@ package com.nflg.wms.repository.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketInspectionRecordItemVO; import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecordItem; import com.nflg.wms.repository.mapper.QmsIncomingInspectionTaskRecordItemMapper; import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskRecordItemService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 来料检验任务检验记录子项 服务实现类 @@ -17,4 +20,8 @@ import org.springframework.stereotype.Service; @Service public class QmsIncomingInspectionTaskRecordItemServiceImpl extends ServiceImpl implements IQmsIncomingInspectionTaskRecordItemService { + @Override + public List getNonconformanceDataGroups(Long recordId) { + return baseMapper.getNonconformanceDataGroups(recordId); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketServiceImpl.java index fb2465bb..80e007b5 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsIssueTicketServiceImpl.java @@ -1,11 +1,23 @@ package com.nflg.wms.repository.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.QmsIssueTicketSearchQO; +import com.nflg.wms.common.pojo.vo.QmsIssueTicketVO; import com.nflg.wms.repository.entity.QmsIssueTicket; import com.nflg.wms.repository.mapper.QmsIssueTicketMapper; import com.nflg.wms.repository.service.IQmsIssueTicketService; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.List; +import java.util.stream.Collectors; + /** * 质量问题工单 ServiceImpl */ @@ -13,4 +25,34 @@ import org.springframework.stereotype.Service; public class QmsIssueTicketServiceImpl extends ServiceImpl implements IQmsIssueTicketService { + + @Override + public PageData search(QmsIssueTicketSearchQO request) { + Page page = new Page<>(request.getPage(), request.getPageSize()); + + var query = lambdaQuery() + .like(StrUtil.isNotBlank(request.getTicketNo()), QmsIssueTicket::getTicketNo, request.getTicketNo()) + .like(StrUtil.isNotBlank(request.getTicketTitle()), QmsIssueTicket::getTicketTitle, request.getTicketTitle()) + .like(StrUtil.isNotBlank(request.getProjectNo()), QmsIssueTicket::getProjectNo, request.getProjectNo()) + .eq(StrUtil.isNotBlank(request.getExceptionCode()), QmsIssueTicket::getExceptionCode, request.getExceptionCode()) + .eq(request.getTicketType() != null, QmsIssueTicket::getSourceType, request.getTicketType()) + .eq(request.getStatus() != null, QmsIssueTicket::getStatus, request.getStatus()) + .eq(request.getIncidentType() != null, QmsIssueTicket::getIncidentType, request.getIncidentType()) + .ge(request.getCreateTimeStart() != null, QmsIssueTicket::getCreateTime, request.getCreateTimeStart().atStartOfDay()) + .le(request.getCreateTimeEnd() != null, QmsIssueTicket::getCreateTime, request.getCreateTimeEnd().atTime(LocalTime.MAX)) + .orderByDesc(QmsIssueTicket::getCreateTime); + + IPage result = query.page(page); + + List voList = result.getRecords().stream() + .map(entity -> BeanUtil.copyProperties(entity, QmsIssueTicketVO.class)) + .collect(Collectors.toList()); + + PageData pageData = new PageData<>(); + pageData.setPage((int) result.getCurrent()); + pageData.setPageSize((int) result.getSize()); + pageData.setTotal((int) result.getTotal()); + pageData.setItems(voList); + return pageData; + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskRecordItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskRecordItemMapper.xml index aaed078b..28d5094a 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskRecordItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskRecordItemMapper.xml @@ -2,4 +2,11 @@ + From 26dd1383a0794f676052e3481c8ff5b0e7b6a109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 27 Apr 2026 15:24:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(repository):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=A3=80=E9=AA=8C=E4=BB=BB=E5=8A=A1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=BB=E5=8A=A1=E5=8F=B7=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改相关任务号查询字段为关联任务的任务号 - 添加入库检验任务表关联,实现相关任务号连接查询 - 优化SQL查询结构,确保相关任务号数据准确返回 --- .../main/resources/mapper/QmsIncomingInspectionTaskMapper.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskMapper.xml index 6b59f803..465c3f34 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsIncomingInspectionTaskMapper.xml @@ -34,13 +34,14 @@ t.inspection_finish_time, t.required_finish_time, t.is_overdue, - t.related_task_no, + t2.task_no as related_task_no, t.update_user_id, t.update_user_name, t.update_time FROM qms_incoming_inspection_task t LEFT JOIN qms_qc_material m ON t.material_id = m.id LEFT JOIN qms_inspection_standard s ON t.inspection_standard_id = s.id + LEFT JOIN qms_incoming_inspection_task t2 ON t.related_task_id = t2.id AND t.data_type = #{request.dataType}