diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskVO.java index e07659a4..6d6a7548 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskVO.java @@ -90,4 +90,5 @@ public class LiquidTankTaskVO extends LiquidTankTask { private String drugAddUserSign; @Schema(description = "控制规范(报告)") private String norm; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java index a1c4130a..9e3dd4d9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java @@ -221,6 +221,127 @@ public class LiquidTankTaskCopyController extends BladeController { /** * [槽液曲线] 查询Copy任务 list分页 */ + + @GetMapping("/listWave") + @ApiOperationSupport(order = 20) + @Operation(summary = "[槽液曲线] 查询任务 list分页", description = "传入LiquidTankTaskCopy Obj") + public R listWave(@Parameter(hidden = true) @RequestParam Map map, + Query query) { + map.forEach((key, value) -> { + log.warn("key = {}, value = {}, type = {}", key, value, value.getClass()); + } + ); + + List ids = new ArrayList<>(); + ids.add(2029787979027017730L); + ids.add(2029746616600240129L); + ids.add(2029744474384678914L); + ids.add(2029740705257250817L); + + QueryWrapper qw = Condition.getQueryWrapper(map, LiquidTankTaskCopy.class); + // 正常结束的,异常结束的 +// qw.in(BaseCol.STATUS, asList(LiquidTankTaskConst.S_FINISH_FAILED, LiquidTankTaskConst.S_FINISH_OK)); + // [作业中心]id + qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_CENTER_ID), LiquidTankTaskCopy.COL_WORK_CENTER_ID, Func.toLong(map.get("workCenterId"))); + // 范围日期 + if (map.containsKey(BaseRequest.CREATE_TIME_START) && map.containsKey(BaseRequest.CREATE_TIME_END)) { + Date crStart = RequestUtil.buildDateBeginOfDay(map, BaseRequest.CREATE_TIME_START); + Date crEnd = RequestUtil.buildDateEndOfDay(map, BaseRequest.CREATE_TIME_END); + qw.between(BaseCol.CREATE_TIME, crStart, crEnd); + } +// qw.in("ID",ids); + // 排序 槽液id升序 复测化验时间升序 + qw.orderByAsc( + List.of( + "SAMPLE_DATE", + "WORK_CENTER_ID", + "WORK_TANK_ID", + "TEST_ELEMENT" + )); + + List records = service.list(qw); +// List vos = records.stream() +// .map(LiquidTankTaskCopyWrapper.build()::entityVO) +// .collect(Collectors.toList()); +//// IPage pages = service.page(Condition.getPage(query), qw); +//// IPage pagesVO = LiquidTankTaskCopyWrapper.build().pageVO(pages); +// pagesVO.stream() +// .peek(service::setVOValue) +// .collect(Collectors.toList()); + + + Map latestRecordMap = records.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 lesss = new ArrayList<>(latestRecordMap.values()); +// +// + List voess = lesss.stream() + .map(LiquidTankTaskCopyWrapper.build()::entityVO) + .collect(Collectors.toList()); + + List vos = voess.stream() + .sorted(Comparator.comparing(LiquidTankTaskCopyVO::getSampleDate)) + .collect(Collectors.toList()); + + // key 自带排序 + // key: [作业槽]id + // value: 任务数据列表 + Map> 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 list = new ArrayList<>(); + treeMap.put(keys, list); + } + treeMap.get(keys).add(vo); + }); + // 前端要求匹配对象 + LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO(); + List allChart = allVO.getWaveData(); + // 每个entry一个图表 + for (Map.Entry> entry : treeMap.entrySet()) { + String key = entry.getKey(); + // 数据列表 + List 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); + } + return R.data(allVO); + } + + + // @GetMapping("/listWave") // @ApiOperationSupport(order = 20) // @Operation(summary = "[槽液曲线] 查询任务 list分页", description = "传入LiquidTankTaskCopy Obj") @@ -232,7 +353,7 @@ public class LiquidTankTaskCopyController extends BladeController { // ); // QueryWrapper qw = Condition.getQueryWrapper(map, LiquidTankTaskCopy.class); // // 正常结束的,异常结束的 -// qw.in(BaseCol.STATUS, asList(LiquidTankTaskConst.S_FINISH_FAILED, LiquidTankTaskConst.S_FINISH_OK)); +//// qw.in(BaseCol.STATUS, asList(LiquidTankTaskConst.S_FINISH_FAILED, LiquidTankTaskConst.S_FINISH_OK)); // // [作业中心]id // qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_CENTER_ID), LiquidTankTaskCopy.COL_WORK_CENTER_ID, Func.toLong(map.get("workCenterId"))); // // 范围日期 @@ -247,6 +368,8 @@ public class LiquidTankTaskCopyController extends BladeController { // BaseCol.ID, // LiquidTankTaskCopy.COL_REPEAT_TEST_DATE // )); +// +// // IPage pages = service.page(Condition.getPage(query), qw); // IPage pagesVO = LiquidTankTaskCopyWrapper.build().pageVO(pages); // pagesVO.getRecords() @@ -287,7 +410,7 @@ public class LiquidTankTaskCopyController extends BladeController { // singleChart.getMinList().add(one.getTargetValueMin()); // singleChart.getTargetList().add(one.getTargetValue()); // singleChart.getTestList().add(one.getRepeatTestValue()); -// singleChart.getTestDateList().add(one.getRepeatTestDate()); +// singleChart.getTestDateList().add(one.getSampleDate()); // singleChart.setId(one.getId()); // } // allChart.add(singleChart); @@ -296,87 +419,87 @@ public class LiquidTankTaskCopyController extends BladeController { // } - @GetMapping("/listWave") - @ApiOperationSupport(order = 20) - @Operation(summary = "[槽液曲线] 查询任务 list分页", description = "传入LiquidTankTaskCopy Obj") - public R listWave(@Parameter(hidden = true) @RequestParam Map map, - Query query) { - map.forEach((key, value) -> { - log.warn("key = {}, value = {}, type = {}", key, value, value.getClass()); - } - ); - map.forEach((key, value) -> { - log.warn("key = {}, value = {}, type = {}", key, value, value.getClass()); - } - ); - QueryWrapper qw = Condition.getQueryWrapper(map, LiquidTankTask.class); - // 正常结束的,异常结束的 - qw.in(BaseCol.STATUS, asList(LiquidTankTaskConst.S_FINISH_FAILED, LiquidTankTaskConst.S_FINISH_OK)); - // [作业中心]id - qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_CENTER_ID), LiquidTankTaskCopy.COL_WORK_CENTER_ID, Func.toLong(map.get("workCenterId"))); - // [作业槽]id -// qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_TANK_ID), LiquidTankTaskCopy.COL_WORK_TANK_ID, Func.toLong(map.get("workTankId"))); - // 待测成分/分析项目 -// qw.like(map.containsKey(LiquidTankTaskCopy.COL_TEST_ELEMENT), LiquidTankTaskCopy.COL_TEST_ELEMENT, Func.toStr(map.get("testElement"))); - // 范围日期 - if (map.containsKey(BaseRequest.CREATE_TIME_START) && map.containsKey(BaseRequest.CREATE_TIME_END)) { - Date crStart = RequestUtil.buildDateBeginOfDay(map, BaseRequest.CREATE_TIME_START); - Date crEnd = RequestUtil.buildDateEndOfDay(map, BaseRequest.CREATE_TIME_END); - qw.between(BaseCol.CREATE_TIME, crStart, crEnd); - } - // ID 升序 - qw.orderByAsc(BaseCol.ID); - // - IPage pages = taskService.page(Condition.getPage(query), qw); - IPage pagesVO = LiquidTankTaskWrapper.build().pageVO(pages); - - pagesVO.getRecords() - .stream() - .peek(taskService::setVOCopyValue) - .collect(Collectors.toList()); - // key 自带排序 - // key: [作业槽]id - // value: 任务数据列表 - Map> treeMap = new TreeMap<>(); - // 遍历赋值到treeMap中 - pagesVO.getRecords().forEach(vo -> { - final Long wtId = vo.getWorkTankId(); - // 不包含,新建 - if (!treeMap.containsKey(wtId)) { - List list = new ArrayList<>(); - treeMap.put(wtId, list); - } - treeMap.get(wtId).add(vo); - }); - // 前端要求匹配对象 - LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO(); - List allChart = allVO.getWaveData(); - // 每个entry一个图表 - for (Map.Entry> entry : treeMap.entrySet()) { - Long wtId = entry.getKey(); - // 数据列表 - List list = entry.getValue(); - LiquidTankWaveDrawSingleVO singleChart = new LiquidTankWaveDrawSingleVO(); - for (LiquidTankTaskVO 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()); - LocalDate localDate = one.getRepeatFillDate().toLocalDate(); - singleChart.getTestDateList().add(localDate); -// singleChart.getTestDateList().add(one.getRepeatFillDate()); - singleChart.setId(one.getId()); - } - allChart.add(singleChart); - } - return R.data(allVO); - } +// @GetMapping("/listWave") +// @ApiOperationSupport(order = 20) +// @Operation(summary = "[槽液曲线] 查询任务 list分页", description = "传入LiquidTankTaskCopy Obj") +// public R listWave(@Parameter(hidden = true) @RequestParam Map map, +// Query query) { +// map.forEach((key, value) -> { +// log.warn("key = {}, value = {}, type = {}", key, value, value.getClass()); +// } +// ); +// map.forEach((key, value) -> { +// log.warn("key = {}, value = {}, type = {}", key, value, value.getClass()); +// } +// ); +// QueryWrapper qw = Condition.getQueryWrapper(map, LiquidTankTask.class); +// // 正常结束的,异常结束的 +// qw.in(BaseCol.STATUS, asList(LiquidTankTaskConst.S_FINISH_FAILED, LiquidTankTaskConst.S_FINISH_OK)); +// // [作业中心]id +// qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_CENTER_ID), LiquidTankTaskCopy.COL_WORK_CENTER_ID, Func.toLong(map.get("workCenterId"))); +// // [作业槽]id +//// qw.eq(map.containsKey(LiquidTankTaskCopy.COL_WORK_TANK_ID), LiquidTankTaskCopy.COL_WORK_TANK_ID, Func.toLong(map.get("workTankId"))); +// // 待测成分/分析项目 +//// qw.like(map.containsKey(LiquidTankTaskCopy.COL_TEST_ELEMENT), LiquidTankTaskCopy.COL_TEST_ELEMENT, Func.toStr(map.get("testElement"))); +// // 范围日期 +// if (map.containsKey(BaseRequest.CREATE_TIME_START) && map.containsKey(BaseRequest.CREATE_TIME_END)) { +// Date crStart = RequestUtil.buildDateBeginOfDay(map, BaseRequest.CREATE_TIME_START); +// Date crEnd = RequestUtil.buildDateEndOfDay(map, BaseRequest.CREATE_TIME_END); +// qw.between(BaseCol.CREATE_TIME, crStart, crEnd); +// } +// // ID 升序 +// qw.orderByAsc(BaseCol.ID); +// // +// IPage pages = taskService.page(Condition.getPage(query), qw); +// IPage pagesVO = LiquidTankTaskWrapper.build().pageVO(pages); +// +// pagesVO.getRecords() +// .stream() +// .peek(taskService::setVOCopyValue) +// .collect(Collectors.toList()); +// // key 自带排序 +// // key: [作业槽]id +// // value: 任务数据列表 +// Map> treeMap = new TreeMap<>(); +// // 遍历赋值到treeMap中 +// pagesVO.getRecords().forEach(vo -> { +// final Long wtId = vo.getWorkTankId(); +// // 不包含,新建 +// if (!treeMap.containsKey(wtId)) { +// List list = new ArrayList<>(); +// treeMap.put(wtId, list); +// } +// treeMap.get(wtId).add(vo); +// }); +// // 前端要求匹配对象 +// LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO(); +// List allChart = allVO.getWaveData(); +// // 每个entry一个图表 +// for (Map.Entry> entry : treeMap.entrySet()) { +// Long wtId = entry.getKey(); +// // 数据列表 +// List list = entry.getValue(); +// LiquidTankWaveDrawSingleVO singleChart = new LiquidTankWaveDrawSingleVO(); +// for (LiquidTankTaskVO 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()); +// LocalDate localDate = one.getRepeatFillDate().toLocalDate(); +// singleChart.getTestDateList().add(localDate); +//// singleChart.getTestDateList().add(one.getRepeatFillDate()); +// singleChart.setId(one.getId()); +// } +// allChart.add(singleChart); +// } +// return R.data(allVO); +// } /** * [槽液检测任务复制] page分页 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskSetVoService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskSetVoService.java index f016d60a..9ce2d3cc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskSetVoService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LiquidTankTaskSetVoService.java @@ -127,7 +127,10 @@ public class LiquidTankTaskSetVoService { ); vo.setLiquidTank(lt); // 取样时间:当天时间 - vo.setSampleDate(LocalDate.now()); + if(vo.getSampleDate()== null){ + vo.setSampleDate(LocalDate.now()); + } +// vo.setSampleDate(LocalDate.now()); // 有效期 // Date validDateT = DateUtil.offsetDay(vo.getCreateTime(), vo.getAnalysisCycle()); // vo.setValidDate(LocalDateTimeUtil.of(validDateT).toLocalDate());