调整排序功能
This commit is contained in:
parent
682fba28b7
commit
e8c8f2d111
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ public class QmsPdiStatusItemImportDTO {
|
|||
private String inspectionImage;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
* 排序(可选)
|
||||
*/
|
||||
@ExcelColumn("排序")
|
||||
@ExcelColumn("排序(可选)")
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -30,4 +30,9 @@ public class QmsPdiStatusItemSearchQO {
|
|||
*/
|
||||
@NotNull(message = "PDI检测项类型不能为空")
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 是否升序:true=升序,false=降序(默认降序)
|
||||
*/
|
||||
private Boolean isAsc = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue