|
|
|
|
@ -49,6 +49,8 @@ import org.springframework.web.bind.annotation.*; |
|
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
|
import java.time.format.DateTimeParseException; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
@ -87,6 +89,49 @@ public class LiquidTankWaveController extends BladeController { |
|
|
|
|
for (RelTankWaveItem relOne : relList) { |
|
|
|
|
Long taskId = relOne.getLiquidTankTaskId(); |
|
|
|
|
LiquidTankTaskCopy copy = copyService.getById(taskId); |
|
|
|
|
|
|
|
|
|
List<Double> max = Arrays.stream(relOne.getMaxList().split(",")) |
|
|
|
|
.mapToDouble(Double::parseDouble) // 将字符串转换为double
|
|
|
|
|
.boxed() // 将double Stream转换为Double Stream
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
List<Double> min = Arrays.stream(relOne.getMinList().split(",")) |
|
|
|
|
.mapToDouble(Double::parseDouble) // 将字符串转换为double
|
|
|
|
|
.boxed() // 将double Stream转换为Double Stream
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
List< Double> targetList = Arrays.stream(relOne.getTargetList().split(",")) |
|
|
|
|
.mapToDouble(Double::parseDouble) // 将字符串转换为double
|
|
|
|
|
.boxed() // 将double Stream转换为Double Stream
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
List<Double> testList = Arrays.stream(relOne.getTestList().split(",")) |
|
|
|
|
.mapToDouble(Double::parseDouble) // 将字符串转换为double
|
|
|
|
|
.boxed() // 将double Stream转换为Double Stream
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
|
|
|
String[] dateStrings = relOne.getTestDateList().split(","); |
|
|
|
|
List<LocalDate> testDateList = new ArrayList<>(); |
|
|
|
|
for (String dateString : dateStrings) { |
|
|
|
|
String trimmedDate = dateString.trim(); |
|
|
|
|
// 额外防护:跳过空字符串(比如分割后出现的空值)
|
|
|
|
|
if (trimmedDate.isEmpty()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
LocalDate date = LocalDate.parse(trimmedDate, formatter); |
|
|
|
|
testDateList.add(date); |
|
|
|
|
} catch (DateTimeParseException e) { |
|
|
|
|
// 可根据业务需求处理:打印日志/抛出自定义异常/跳过非法日期
|
|
|
|
|
System.err.println("日期解析失败,非法日期字符串:" + dateString + ",原因:" + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
copy.setMaxList(max); |
|
|
|
|
copy.setMinList(min); |
|
|
|
|
copy.setTargetList(targetList); |
|
|
|
|
copy.setTestList(testList); |
|
|
|
|
copy.setTestDateList(testDateList); |
|
|
|
|
list.add(copy); |
|
|
|
|
// LiquidTankTaskCopyVO copyVO = LiquidTankTaskCopyWrapper.build().entityVO(copy);
|
|
|
|
|
// setVoValue(copyVO);
|
|
|
|
|
@ -110,83 +155,86 @@ public class LiquidTankWaveController extends BladeController { |
|
|
|
|
User user = userClient.userInfoById(detailVO.getUpdateUser()).getData(); |
|
|
|
|
|
|
|
|
|
List<LiquidTankTaskCopyVO> pagesVO = getListByLiquidTankReportId(detailVO.getId()); |
|
|
|
|
pagesVO.stream() |
|
|
|
|
.peek(copyService::setVOValue) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
detailVO.setTaskCopys(pagesVO); |
|
|
|
|
detailVO.setWorkCenterName(pagesVO.get(0).getWcName()); |
|
|
|
|
detailVO.setUpdateUserRealName(user.getRealName()); |
|
|
|
|
// key 自带排序
|
|
|
|
|
// key: [作业槽]id
|
|
|
|
|
// value: 任务数据列表
|
|
|
|
|
Map<String, LiquidTankTaskCopyVO> latestRecordMap = pagesVO.stream() |
|
|
|
|
.collect(Collectors.groupingBy( |
|
|
|
|
record -> record.getWorkTankId() + "_" + record.getWorkCenterId()+"_"+record.getTestElement()+"_"+record.getSampleDate(), |
|
|
|
|
// 每组内按dateTime降序,取最新的一条
|
|
|
|
|
Collectors.collectingAndThen( |
|
|
|
|
Collectors.maxBy(Comparator.comparing(LiquidTankTaskCopy::getCreateTime)), |
|
|
|
|
optional -> optional.orElse(null) // 处理Optional避免空指针
|
|
|
|
|
) |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
// 3. 转换为List(如果需要List格式)
|
|
|
|
|
|
|
|
|
|
List<LiquidTankTaskCopyVO> lesss = new ArrayList<>(latestRecordMap.values()); |
|
|
|
|
// pagesVO.stream()
|
|
|
|
|
// .peek(copyService::setVOValue)
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
// detailVO.setWorkCenterName(pagesVO.get(0).getWcName());
|
|
|
|
|
// detailVO.setUpdateUserRealName(user.getRealName());
|
|
|
|
|
// // key 自带排序
|
|
|
|
|
// // key: [作业槽]id
|
|
|
|
|
// // value: 任务数据列表
|
|
|
|
|
// Map<String, LiquidTankTaskCopyVO> latestRecordMap = pagesVO.stream()
|
|
|
|
|
// .collect(Collectors.groupingBy(
|
|
|
|
|
// record -> record.getWorkTankId() + "_" + record.getWorkCenterId()+"_"+record.getTestElement()+"_"+record.getSampleDate(),
|
|
|
|
|
// // 每组内按dateTime降序,取最新的一条
|
|
|
|
|
// Collectors.collectingAndThen(
|
|
|
|
|
// Collectors.maxBy(Comparator.comparing(LiquidTankTaskCopy::getCreateTime)),
|
|
|
|
|
// optional -> optional.orElse(null) // 处理Optional避免空指针
|
|
|
|
|
// )
|
|
|
|
|
// ));
|
|
|
|
|
//
|
|
|
|
|
// // 3. 转换为List(如果需要List格式)
|
|
|
|
|
//
|
|
|
|
|
// List<LiquidTankTaskCopyVO> voess = lesss.stream()
|
|
|
|
|
// .map(LiquidTankTaskCopyWrapper.build()::entityVO)
|
|
|
|
|
// List<LiquidTankTaskCopyVO> lesss = new ArrayList<>(latestRecordMap.values());
|
|
|
|
|
////
|
|
|
|
|
////
|
|
|
|
|
//// List<LiquidTankTaskCopyVO> voess = lesss.stream()
|
|
|
|
|
//// .map(LiquidTankTaskCopyWrapper.build()::entityVO)
|
|
|
|
|
//// .collect(Collectors.toList());
|
|
|
|
|
//
|
|
|
|
|
// List<LiquidTankTaskCopyVO> vos = lesss.stream()
|
|
|
|
|
// .filter(vo -> vo.getSampleDate() != null)
|
|
|
|
|
// .sorted(Comparator.comparing(LiquidTankTaskCopyVO::getSampleDate))
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<LiquidTankTaskCopyVO> vos = lesss.stream() |
|
|
|
|
.filter(vo -> vo.getSampleDate() != null) |
|
|
|
|
.sorted(Comparator.comparing(LiquidTankTaskCopyVO::getSampleDate)) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// key 自带排序
|
|
|
|
|
// key: [作业槽]id
|
|
|
|
|
// value: 任务数据列表
|
|
|
|
|
Map<String, List<LiquidTankTaskCopyVO>> treeMap = new TreeMap<>(); |
|
|
|
|
// 遍历赋值到treeMap中
|
|
|
|
|
vos.forEach(vo -> { |
|
|
|
|
final Long wtId = vo.getWorkTankId(); |
|
|
|
|
final Long wcId = vo.getWorkCenterId(); |
|
|
|
|
final String testElement = vo.getTestElement(); |
|
|
|
|
final LocalDate date = vo.getSampleDate(); |
|
|
|
|
final String keys = wtId + "_" + wcId + "_" + testElement; |
|
|
|
|
// 不包含,新建
|
|
|
|
|
if (!treeMap.containsKey(keys)) { |
|
|
|
|
List<LiquidTankTaskCopyVO> list = new ArrayList<>(); |
|
|
|
|
treeMap.put(keys, list); |
|
|
|
|
} |
|
|
|
|
treeMap.get(keys).add(vo); |
|
|
|
|
}); |
|
|
|
|
// 前端要求匹配对象
|
|
|
|
|
LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO(); |
|
|
|
|
List<LiquidTankWaveDrawSingleVO> allChart = allVO.getWaveData(); |
|
|
|
|
// 每个entry一个图表
|
|
|
|
|
for (Map.Entry<String, List<LiquidTankTaskCopyVO>> entry : treeMap.entrySet()) { |
|
|
|
|
String key = entry.getKey(); |
|
|
|
|
// 数据列表
|
|
|
|
|
List<LiquidTankTaskCopyVO> list = entry.getValue(); |
|
|
|
|
LiquidTankWaveDrawSingleVO singleChart = new LiquidTankWaveDrawSingleVO(); |
|
|
|
|
for (LiquidTankTaskCopyVO one : list) { |
|
|
|
|
|
|
|
|
|
singleChart.setWcId(one.getWorkCenterId()); |
|
|
|
|
singleChart.setWcName(one.getWcName()); |
|
|
|
|
singleChart.setWorkTankId(one.getWorkTankId()); |
|
|
|
|
singleChart.setWorkTankName(one.getWorkTankName()); |
|
|
|
|
singleChart.setLiquidTankId(one.getLiquidTankId()); |
|
|
|
|
singleChart.setTestElement(one.getTestElement()); |
|
|
|
|
singleChart.getMaxList().add(one.getTargetValueMax()); |
|
|
|
|
singleChart.getMinList().add(one.getTargetValueMin()); |
|
|
|
|
singleChart.getTargetList().add(one.getTargetValue()); |
|
|
|
|
singleChart.getTestList().add(one.getRepeatTestValue()); |
|
|
|
|
singleChart.getTestDateList().add(one.getSampleDate()); |
|
|
|
|
singleChart.setId(one.getId()); |
|
|
|
|
} |
|
|
|
|
allChart.add(singleChart); |
|
|
|
|
} |
|
|
|
|
detailVO.setWaveData(allChart); |
|
|
|
|
//
|
|
|
|
|
// // key 自带排序
|
|
|
|
|
// // key: [作业槽]id
|
|
|
|
|
// // value: 任务数据列表
|
|
|
|
|
// Map<String, List<LiquidTankTaskCopyVO>> treeMap = new TreeMap<>();
|
|
|
|
|
// // 遍历赋值到treeMap中
|
|
|
|
|
// vos.forEach(vo -> {
|
|
|
|
|
// final Long wtId = vo.getWorkTankId();
|
|
|
|
|
// final Long wcId = vo.getWorkCenterId();
|
|
|
|
|
// final String testElement = vo.getTestElement();
|
|
|
|
|
// final LocalDate date = vo.getSampleDate();
|
|
|
|
|
// final String keys = wtId + "_" + wcId + "_" + testElement;
|
|
|
|
|
// // 不包含,新建
|
|
|
|
|
// if (!treeMap.containsKey(keys)) {
|
|
|
|
|
// List<LiquidTankTaskCopyVO> list = new ArrayList<>();
|
|
|
|
|
// treeMap.put(keys, list);
|
|
|
|
|
// }
|
|
|
|
|
// treeMap.get(keys).add(vo);
|
|
|
|
|
// });
|
|
|
|
|
// // 前端要求匹配对象
|
|
|
|
|
// LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO();
|
|
|
|
|
// List<LiquidTankWaveDrawSingleVO> allChart = allVO.getWaveData();
|
|
|
|
|
// // 每个entry一个图表
|
|
|
|
|
// for (Map.Entry<String, List<LiquidTankTaskCopyVO>> entry : treeMap.entrySet()) {
|
|
|
|
|
// String key = entry.getKey();
|
|
|
|
|
// // 数据列表
|
|
|
|
|
// List<LiquidTankTaskCopyVO> list = entry.getValue();
|
|
|
|
|
// LiquidTankWaveDrawSingleVO singleChart = new LiquidTankWaveDrawSingleVO();
|
|
|
|
|
// for (LiquidTankTaskCopyVO one : list) {
|
|
|
|
|
//
|
|
|
|
|
// singleChart.setWcId(one.getWorkCenterId());
|
|
|
|
|
// singleChart.setWcName(one.getWcName());
|
|
|
|
|
// singleChart.setWorkTankId(one.getWorkTankId());
|
|
|
|
|
// singleChart.setWorkTankName(one.getWorkTankName());
|
|
|
|
|
// singleChart.setLiquidTankId(one.getLiquidTankId());
|
|
|
|
|
// singleChart.setTestElement(one.getTestElement());
|
|
|
|
|
// singleChart.getMaxList().add(one.getTargetValueMax());
|
|
|
|
|
// singleChart.getMinList().add(one.getTargetValueMin());
|
|
|
|
|
// singleChart.getTargetList().add(one.getTargetValue());
|
|
|
|
|
// singleChart.getTestList().add(one.getRepeatTestValue());
|
|
|
|
|
// singleChart.getTestDateList().add(one.getSampleDate());
|
|
|
|
|
// singleChart.setId(one.getId());
|
|
|
|
|
// }
|
|
|
|
|
// allChart.add(singleChart);
|
|
|
|
|
// }
|
|
|
|
|
// detailVO.setWaveData(allChart);
|
|
|
|
|
return R.data(detailVO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|