调整排序功能

This commit is contained in:
funny 2026-05-11 14:33:41 +08:00
parent 682fba28b7
commit e8c8f2d111
4 changed files with 77 additions and 39 deletions

View File

@ -84,15 +84,15 @@ public class QmsPdiStatusItemController extends BaseController {
if (status == 0) { if (status == 0) {
// 动态检测 // 动态检测
templateName = "动态监测标准模版"; templateName = "动态监测标准模版";
headers = Arrays.asList("部件描述", "*检查核实内容", "检测示例图", "排序"); headers = Arrays.asList("部件描述", "*检查核实内容", "检测示例图", "排序(可选)");
} else if (status == 1) { } else if (status == 1) {
// 静态检测 // 静态检测
templateName = "静态检测标准模版"; templateName = "静态检测标准模版";
headers = Arrays.asList("部件描述", "*检查核实内容", "检测示例图", "排序"); headers = Arrays.asList("部件描述", "*检查核实内容", "检测示例图", "排序(可选)");
} else if (status == 2) { } else if (status == 2) {
// 特殊检测整件- 不需要部件描述字段 // 特殊检测整件- 不需要部件描述字段
templateName = "整件检测标准模版"; templateName = "整件检测标准模版";
headers = Arrays.asList("*检查核实内容", "检测示例图", "排序"); headers = Arrays.asList("*检查核实内容", "检测示例图", "排序(可选)");
} else { } else {
throw new IllegalArgumentException("状态参数错误只能为0、1或2"); throw new IllegalArgumentException("状态参数错误只能为0、1或2");
} }

View File

@ -39,6 +39,7 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -79,15 +80,6 @@ public class QmsPdiStatusItemControllerService {
.map(QmsPdiDetectionRulesStatusItem::getSort) .map(QmsPdiDetectionRulesStatusItem::getSort)
.orElse(0); .orElse(0);
// 将已有数据的sort全部+1
if (maxSort > 0) {
statusItemService.lambdaUpdate()
.eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, request.getDetectionRulesId())
.eq(QmsPdiDetectionRulesStatusItem::getStatus, request.getStatus())
.setSql("sort = sort + 1")
.update();
}
String operator = UserUtil.getUserName(); String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
QmsPdiDetectionRulesStatusItem entity = new QmsPdiDetectionRulesStatusItem() QmsPdiDetectionRulesStatusItem entity = new QmsPdiDetectionRulesStatusItem()
@ -96,7 +88,7 @@ public class QmsPdiStatusItemControllerService {
.setInspectionContent(request.getInspectionContent()) .setInspectionContent(request.getInspectionContent())
.setInspectionImage(request.getInspectionImage()) .setInspectionImage(request.getInspectionImage())
.setStatus(request.getStatus()) .setStatus(request.getStatus())
.setSort(1) // 新数据sort=1 .setSort(maxSort + 1) // 追加到最后
.setCreateBy(operator) .setCreateBy(operator)
.setCreateTime(now); .setCreateTime(now);
statusItemService.save(entity); statusItemService.save(entity);
@ -200,7 +192,7 @@ public class QmsPdiStatusItemControllerService {
List<QmsPdiStatusItemImportDTO> data = EecExcelUtil.readTo(new java.io.ByteArrayInputStream(fileBytes), QmsPdiStatusItemImportDTO.class); List<QmsPdiStatusItemImportDTO> data = EecExcelUtil.readTo(new java.io.ByteArrayInputStream(fileBytes), QmsPdiStatusItemImportDTO.class);
if (CollectionUtil.isEmpty(data)) { if (CollectionUtil.isEmpty(data)) {
throw new NflgException(STATE.BusinessError, "导入文件内容为空"); throw new NflgException(STATE.BusinessError, "导入文件无数据");
} }
// 读取 Excel 里的所有图片 // 读取 Excel 里的所有图片
@ -230,17 +222,58 @@ public class QmsPdiStatusItemControllerService {
} }
} }
String operator = UserUtil.getUserName(); // 过滤掉检查核实内容为空的数据
LocalDateTime now = LocalDateTime.now(); List<QmsPdiStatusItemImportDTO> validData = data.stream()
List<QmsPdiDetectionRulesStatusItem> entities = data.stream()
.filter(dto -> StrUtil.isNotBlank(dto.getInspectionContent())) .filter(dto -> StrUtil.isNotBlank(dto.getInspectionContent()))
.map(dto -> { .collect(Collectors.toList());
// 状态为0或1时部件描述不能为空
if (CollectionUtil.isEmpty(validData)) {
throw new NflgException(STATE.BusinessError, "导入数据中必填字段(检查核实内容)为空,请检查文件");
}
// 校验状态为0或1时部件描述不能为空
for (QmsPdiStatusItemImportDTO dto : validData) {
if ((Objects.equals(status, 0) || Objects.equals(status, 1)) if ((Objects.equals(status, 0) || Objects.equals(status, 1))
&& StrUtil.isBlank(dto.getComponentsDes())) { && StrUtil.isBlank(dto.getComponentsDes())) {
throw new NflgException(STATE.BusinessError, "静态/动态检测项的部件描述不能为空"); throw new NflgException(STATE.BusinessError, "静态/动态检测项的部件描述不能为空");
} }
return new QmsPdiDetectionRulesStatusItem() }
// 查询数据库中该检测规则+状态的最大sort值
Integer maxSort = statusItemService.lambdaQuery()
.eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId)
.eq(QmsPdiDetectionRulesStatusItem::getStatus, status)
.orderByDesc(QmsPdiDetectionRulesStatusItem::getSort)
.last("LIMIT 1")
.oneOpt()
.map(QmsPdiDetectionRulesStatusItem::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(Comparator.comparingInt(QmsPdiStatusItemImportDTO::getSort));
for (int i = 0; i < validData.size(); i++) {
validData.get(i).setSort(startSort + i);
}
}
// 转换为实体并保存
String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
List<QmsPdiDetectionRulesStatusItem> entities = validData.stream()
.map(dto -> new QmsPdiDetectionRulesStatusItem()
.setDetectionRulesId(detectionRulesId) .setDetectionRulesId(detectionRulesId)
.setComponentsDes(dto.getComponentsDes()) .setComponentsDes(dto.getComponentsDes())
.setInspectionContent(dto.getInspectionContent()) .setInspectionContent(dto.getInspectionContent())
@ -248,12 +281,9 @@ public class QmsPdiStatusItemControllerService {
.setSort(dto.getSort()) .setSort(dto.getSort())
.setStatus(status) .setStatus(status)
.setCreateBy(operator) .setCreateBy(operator)
.setCreateTime(now); .setCreateTime(now))
})
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isEmpty(entities)) {
throw new NflgException(STATE.BusinessError, "导入数据中必填字段(检查核实内容)为空,请检查文件");
}
statusItemService.saveBatch(entities); statusItemService.saveBatch(entities);
markMaintained(detectionRulesId); markMaintained(detectionRulesId);
} }
@ -265,18 +295,21 @@ public class QmsPdiStatusItemControllerService {
*/ */
public PageData<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> search(QmsPdiStatusItemSearchQO request) { public PageData<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> search(QmsPdiStatusItemSearchQO request) {
return buildStatusItemPage(request.getDetectionRulesId(), request.getStatus(), return buildStatusItemPage(request.getDetectionRulesId(), request.getStatus(),
request.getPage(), request.getPageSize()); request.getPage(), request.getPageSize(), request.getIsAsc());
} }
/** /**
* 按状态构建检测项分页数据 * 按状态构建检测项分页数据
*/ */
private PageData<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> buildStatusItemPage( private PageData<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> buildStatusItemPage(
Long detectionRulesId, int status, int pageNum, int pageSize) { Long detectionRulesId, int status, int pageNum, int pageSize, Boolean isAsc) {
// 获取排序方向默认降序
boolean ascending = isAsc != null && isAsc;
Page<QmsPdiDetectionRulesStatusItem> page = statusItemService.lambdaQuery() Page<QmsPdiDetectionRulesStatusItem> page = statusItemService.lambdaQuery()
.eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId) .eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId)
.eq(QmsPdiDetectionRulesStatusItem::getStatus, status) .eq(QmsPdiDetectionRulesStatusItem::getStatus, status)
.orderByAsc(QmsPdiDetectionRulesStatusItem::getSort) .orderBy(true, ascending, QmsPdiDetectionRulesStatusItem::getSort)
.page(new Page<>(pageNum, pageSize)); .page(new Page<>(pageNum, pageSize));
List<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> voList = page.getRecords().stream() List<QmsPdiStatusItemGroupVO.QmsPdiStatusItemVO> voList = page.getRecords().stream()

View File

@ -30,9 +30,9 @@ public class QmsPdiStatusItemImportDTO {
private String inspectionImage; private String inspectionImage;
/** /**
* 排序 * 排序可选
*/ */
@ExcelColumn("排序") @ExcelColumn("排序(可选)")
private Integer sort; private Integer sort;
/** /**

View File

@ -30,4 +30,9 @@ public class QmsPdiStatusItemSearchQO {
*/ */
@NotNull(message = "PDI检测项类型不能为空") @NotNull(message = "PDI检测项类型不能为空")
private Integer status; private Integer status;
/**
* 是否升序true=升序false=降序默认降序
*/
private Boolean isAsc = false;
} }