调整排序功能

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

View File

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

View File

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

View File

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