From edb387a8a5a7be8af41ed21cf8c091c44bb8593d Mon Sep 17 00:00:00 2001 From: funny <834502597@qq.com> Date: Mon, 11 May 2026 17:05:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E8=BD=A6=E5=89=8D=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QmsPdiDeliveryItemController.java | 5 +- .../QmsPdiDeliveryItemControllerService.java | 82 +++++++++++++++---- .../QmsPdiStatusItemControllerService.java | 40 +++++++-- .../QmsPdiTaskRecordControllerService.java | 3 + .../pojo/qo/QmsPdiTaskRecordSearchQO.java | 7 +- .../mapper/QmsPdiTaskRecordMapper.xml | 5 ++ 6 files changed, 118 insertions(+), 24 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsPdiDeliveryItemController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsPdiDeliveryItemController.java index d822de55..f98f61ff 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsPdiDeliveryItemController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsPdiDeliveryItemController.java @@ -92,8 +92,9 @@ public class QmsPdiDeliveryItemController extends BaseController { */ @GetMapping("/search") public ApiResult> search( - @NotNull(message = "PDI检测规则ID不能为空") @RequestParam Long detectionRulesId) { - return ApiResult.success(deliveryItemControllerService.search(detectionRulesId)); + @NotNull(message = "PDI检测规则ID不能为空") @RequestParam Long detectionRulesId, + @RequestParam(defaultValue = "true") Boolean isAsc) { + return ApiResult.success(deliveryItemControllerService.search(detectionRulesId, isAsc)); } /** diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiDeliveryItemControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiDeliveryItemControllerService.java index 3c0136d5..22451461 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiDeliveryItemControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiDeliveryItemControllerService.java @@ -54,20 +54,12 @@ public class QmsPdiDeliveryItemControllerService { .map(QmsPdiDetectionRulesDeliveryItem::getSort) .orElse(0); - // 将已有数据的sort全部+1 - if (maxSort > 0) { - deliveryItemService.lambdaUpdate() - .eq(QmsPdiDetectionRulesDeliveryItem::getDetectionRulesId, request.getDetectionRulesId()) - .setSql("sort = sort + 1") - .update(); - } - String operator = UserUtil.getUserName(); LocalDateTime now = LocalDateTime.now(); QmsPdiDetectionRulesDeliveryItem entity = new QmsPdiDetectionRulesDeliveryItem() .setDetectionRulesId(request.getDetectionRulesId()) .setChecklist(request.getChecklist()) - .setSort(1) // 新数据sort=1 + .setSort(maxSort + 1) // 追加到最后 .setCreateBy(operator) .setCreateTime(now); deliveryItemService.save(entity); @@ -131,10 +123,49 @@ public class QmsPdiDeliveryItemControllerService { if (CollectionUtil.isEmpty(data)) { throw new NflgException(STATE.BusinessError, "导入文件内容为空"); } + + // 过滤掉检查项为空的数据 + List validData = data.stream() + .filter(dto -> StrUtil.isNotBlank(dto.getChecklist())) + .collect(Collectors.toList()); + + if (CollectionUtil.isEmpty(validData)) { + throw new NflgException(STATE.BusinessError, "导入数据中检查项均为空,请检查文件"); + } + + // 查询数据库中该检测规则的最大sort值 + Integer maxSort = deliveryItemService.lambdaQuery() + .eq(QmsPdiDetectionRulesDeliveryItem::getDetectionRulesId, detectionRulesId) + .orderByDesc(QmsPdiDetectionRulesDeliveryItem::getSort) + .last("LIMIT 1") + .oneOpt() + .map(QmsPdiDetectionRulesDeliveryItem::getSort) + .orElse(0); + + // 判断导入数据中是否有空的sort值 + boolean hasEmptySort = validData.stream().anyMatch(dto -> dto.getSort() == null); + + // 计算起始sort值 + int startSort = maxSort + 1; + + // 处理排序逻辑 + if (hasEmptySort) { + // 情况A:存在空值 - 按Excel顺序从起始值递增 + for (int i = 0; i < validData.size(); i++) { + validData.get(i).setSort(startSort + i); + } + } else { + // 情况B:全部有值 - 先按sort排序,再从起始值递增 + validData.sort(java.util.Comparator.comparingInt(QmsPdiDeliveryItemExportDTO::getSort)); + for (int i = 0; i < validData.size(); i++) { + validData.get(i).setSort(startSort + i); + } + } + + // 转换为实体并保存 String operator = UserUtil.getUserName(); LocalDateTime now = LocalDateTime.now(); - List entities = data.stream() - .filter(dto -> StrUtil.isNotBlank(dto.getChecklist())) + List entities = validData.stream() .map(dto -> new QmsPdiDetectionRulesDeliveryItem() .setDetectionRulesId(detectionRulesId) .setChecklist(dto.getChecklist()) @@ -142,9 +173,7 @@ public class QmsPdiDeliveryItemControllerService { .setCreateBy(operator) .setCreateTime(now)) .collect(Collectors.toList()); - if (CollectionUtil.isEmpty(entities)) { - throw new NflgException(STATE.BusinessError, "导入数据中检查项均为空,请检查文件"); - } + deliveryItemService.saveBatch(entities); markMaintained(detectionRulesId); } @@ -155,12 +184,33 @@ public class QmsPdiDeliveryItemControllerService { * 查询PDI发货前检查项列表 * * @param detectionRulesId PDI检测规则ID(必传) + * @param isAsc 是否升序:true=升序(默认),false=降序 */ - public List search(Long detectionRulesId) { - return deliveryItemService.lambdaQuery() + public List search(Long detectionRulesId, Boolean isAsc) { + // 1. 查询所有数据(按sort升序) + List allItems = deliveryItemService.lambdaQuery() .eq(QmsPdiDetectionRulesDeliveryItem::getDetectionRulesId, detectionRulesId) .orderByAsc(QmsPdiDetectionRulesDeliveryItem::getSort) .list(); + + // 2. 重新赋值sort(从1开始连续递增) + for (int i = 0; i < allItems.size(); i++) { + allItems.get(i).setSort(i + 1); + } + + // 3. 批量更新数据库 + if (!allItems.isEmpty()) { + deliveryItemService.updateBatchById(allItems); + } + + // 4. 如果是降序,反转列表 + boolean ascending = isAsc == null || isAsc; // 默认升序 + if (!ascending) { + java.util.Collections.reverse(allItems); + } + + // 5. 返回 + return allItems; } /** diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java index 4bd3f6ae..bfdd00b0 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java @@ -39,6 +39,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -306,20 +307,49 @@ public class QmsPdiStatusItemControllerService { // 获取排序方向(默认升序) boolean ascending = isAsc == null || isAsc; - Page page = statusItemService.lambdaQuery() + // 1. 查询所有数据(不分页),按sort升序 + List allItems = statusItemService.lambdaQuery() .eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId) .eq(QmsPdiDetectionRulesStatusItem::getStatus, status) - .orderBy(true, ascending, QmsPdiDetectionRulesStatusItem::getSort) - .page(new Page<>(pageNum, pageSize)); + .orderByAsc(QmsPdiDetectionRulesStatusItem::getSort) + .list(); - List voList = page.getRecords().stream() + // 2. 重新赋值sort(从1开始连续递增) + for (int i = 0; i < allItems.size(); i++) { + allItems.get(i).setSort(i + 1); + } + + // 3. 批量更新数据库 + if (!allItems.isEmpty()) { + statusItemService.updateBatchById(allItems); + } + + // 4. 按排序方向分页 + int total = allItems.size(); + int fromIndex = (pageNum - 1) * pageSize; + int toIndex = Math.min(fromIndex + pageSize, total); + + List pagedItems; + if (fromIndex >= total) { + pagedItems = List.of(); + } else { + pagedItems = allItems.subList(fromIndex, toIndex); + // 如果是降序,反转列表 + if (!ascending) { + pagedItems = new ArrayList<>(pagedItems); + java.util.Collections.reverse(pagedItems); + } + } + + // 5. 转换为VO + List voList = pagedItems.stream() .map(this::toVO) .collect(Collectors.toList()); PageData pd = new PageData<>(); pd.setPage(pageNum); pd.setPageSize(pageSize); - pd.setTotal((int) page.getTotal()); + pd.setTotal(total); pd.setItems(voList); return pd; } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java index 135ff5e6..aed04ec3 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java @@ -82,6 +82,9 @@ public class QmsPdiTaskRecordControllerService { * 分页查询(关联检测规则、质检人、帮办人) */ public PageData search(QmsPdiTaskRecordSearchQO request) { + // 填充当前登录用户ID(用于数据权限过滤) + request.setCurrentUserId(UserUtil.getUserId()); + Page page = taskRecordService.search(request); PageData result = new PageData<>(); result.setItems(page.getRecords()); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiTaskRecordSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiTaskRecordSearchQO.java index 3effb725..4223c2a5 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiTaskRecordSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiTaskRecordSearchQO.java @@ -45,7 +45,7 @@ public class QmsPdiTaskRecordSearchQO { private String warehouseNo; /** - * 检验类型(必传):0=静态,1=动态,2=特殊 + * 检验类型(必传):0=新机检测,1=库存检测 */ @NotNull(message = "检验类型不能为空") private Integer inspectionType; @@ -59,4 +59,9 @@ public class QmsPdiTaskRecordSearchQO { * 每页条数 */ private Integer pageSize = 20; + + /** + * 当前登录用户ID(用于数据权限过滤,由系统自动填充) + */ + private Long currentUserId; } diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsPdiTaskRecordMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsPdiTaskRecordMapper.xml index 19db58d3..57759d16 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsPdiTaskRecordMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsPdiTaskRecordMapper.xml @@ -51,6 +51,11 @@ AND t.warehouse_no = #{request.warehouseNo} + + AND ( + r.inspector_id = #{request.currentUserId} + OR t.assistant_id = #{request.currentUserId} + ) AND ( t.inspection_enable IN (0, 1, 3)