调整排序功能
This commit is contained in:
parent
682fba28b7
commit
e8c8f2d111
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,30 +222,68 @@ 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 -> {
|
|
||||||
// 状态为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());
|
.collect(Collectors.toList());
|
||||||
if (CollectionUtil.isEmpty(entities)) {
|
|
||||||
|
if (CollectionUtil.isEmpty(validData)) {
|
||||||
throw new NflgException(STATE.BusinessError, "导入数据中必填字段(检查核实内容)为空,请检查文件");
|
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);
|
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()
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,9 @@ public class QmsPdiStatusItemImportDTO {
|
||||||
private String inspectionImage;
|
private String inspectionImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 排序
|
* 排序(可选)
|
||||||
*/
|
*/
|
||||||
@ExcelColumn("排序")
|
@ExcelColumn("排序(可选)")
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue