diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java index cca6ffec..e84bd0d6 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java @@ -14,6 +14,8 @@ import java.io.Serial; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; /** * [槽液检测任务复制] 实体类 @@ -552,4 +554,21 @@ public class LiquidTankTaskCopy extends BaseEntity { @Schema(description = "药品计算公式") private String reportFormulaContent; + + @Schema(description = "日期数组") + @TableField(exist = false) + private List testDateList = new ArrayList<>(); + @Schema(description = "目标上限") + @TableField(exist = false) + private List maxList = new ArrayList<>(); + @Schema(description = "目标下限") + @TableField(exist = false) + private List minList = new ArrayList<>(); + @Schema(description = "目标值") + @TableField(exist = false) + private List targetList = new ArrayList<>(); + @Schema(description = "复测测量值") + @TableField(exist = false) + private List testList = new ArrayList<>(); + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankWave.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankWave.java index 26bb8970..f687c5b7 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankWave.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankWave.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -31,6 +32,9 @@ public class LiquidTankWave extends BaseEntity { * [槽液曲线]编码 */ public static final String COL_CODE = "CODE"; + + private static final String COL_WC_ID = "WC_ID"; + /** * [槽液曲线]类型 */ @@ -56,6 +60,9 @@ public class LiquidTankWave extends BaseEntity { */ public static final String COL_REMARK = "REMARK"; + //作业中心id + private Long wcId; + /** * [槽液曲线]编码 */ @@ -75,12 +82,14 @@ public class LiquidTankWave extends BaseEntity { * 开始日期 */ @Schema(description = "开始日期") - private LocalDateTime startDate; +// private LocalDateTime startDate; + private LocalDate createTimeStart; /** * 结束日期 */ @Schema(description = "结束日期") - private LocalDateTime endDate; +// private LocalDateTime endDate; + private LocalDate createTimeEnd; /** * 排序 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RelTankWaveItem.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RelTankWaveItem.java index ec7475f2..9e1f3d5f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RelTankWaveItem.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RelTankWaveItem.java @@ -64,4 +64,11 @@ public class RelTankWaveItem extends BaseEntity { */ @Schema(description = "备注") private String remark; + + private String maxList; + private String minList; + private String targetList; + private String testDateList; + private String testList; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java index 962b3895..852c4194 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java @@ -6,6 +6,7 @@ package org.springblade.desk.quality.pojo.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springblade.desk.quality.pojo.entity.LiquidTankTaskCopy; import org.springblade.desk.quality.pojo.entity.LiquidTankWave; import java.io.Serial; @@ -30,4 +31,6 @@ public class LiquidTankWaveVO extends LiquidTankWave { private String workCenterName; private List waveData = new ArrayList<>(); + private List copys = new ArrayList<>(); + private List taskCopys = new ArrayList<>(); } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemVO.java index 6d07bd7c..dc7a8683 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemVO.java @@ -36,4 +36,6 @@ public class WorkPlanItemVO extends WorkPlanItem { // private DsProcessEntity process; @Schema(description = "wp详情 List") private List wpItemDetailList; + @Schema(description = "硬度详情 List") + private List thicknessList; } 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 ecefcb73..ec293b68 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 @@ -23,7 +23,9 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.pojo.entity.WorkCenter; import org.springblade.desk.basic.pojo.entity.WorkTank; +import org.springblade.desk.basic.service.IWorkCenterService; import org.springblade.desk.basic.service.IWorkTankService; import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.basic.util.RequestUtil; @@ -74,6 +76,8 @@ public class LiquidTankTaskCopyController extends BladeController { private ILiquidTankService tankService; @Resource private IWorkTankService workTankService; + @Resource + private IWorkCenterService centerService; /** * [槽液检测任务复制] 详情 @@ -265,15 +269,6 @@ public class LiquidTankTaskCopyController extends BladeController { )); 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( @@ -307,9 +302,14 @@ public class LiquidTankTaskCopyController extends BladeController { 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; + WorkTank tanke = workTankService.getById(wtId); + vo.setWorkTankName(tanke.getWorkTankCode()); + WorkCenter center = centerService.getById(wcId); + vo.setWcName(center.getWcName()); // 不包含,新建 if (!treeMap.containsKey(keys)) { List list = new ArrayList<>(); @@ -716,10 +716,17 @@ public class LiquidTankTaskCopyController extends BladeController { /** * */ +// @PostMapping("/generateWave") +// @ApiOperationSupport(order = 101) +// @Operation(summary = "生成曲线", description = "传入LiquidTankTaskCopy List") +// public R generateWave(@Valid @RequestBody List list) { +// return service.generateWave(list); +// } + @PostMapping("/generateWave") @ApiOperationSupport(order = 101) @Operation(summary = "生成曲线", description = "传入LiquidTankTaskCopy List") - public R generateWave(@Valid @RequestBody List list) { - return service.generateWave(list); + public R generateWave(@Valid @RequestBody LiquidTankWaveVO vo) { + return service.generateWave(vo); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java index 18cc14b4..3f2ac52d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java @@ -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 max = Arrays.stream(relOne.getMaxList().split(",")) + .mapToDouble(Double::parseDouble) // 将字符串转换为double + .boxed() // 将double Stream转换为Double Stream + .collect(Collectors.toList()); + List 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 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 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 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 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 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 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 voess = lesss.stream() -// .map(LiquidTankTaskCopyWrapper.build()::entityVO) +// List lesss = new ArrayList<>(latestRecordMap.values()); +//// +//// +//// List voess = lesss.stream() +//// .map(LiquidTankTaskCopyWrapper.build()::entityVO) +//// .collect(Collectors.toList()); +// +// List vos = lesss.stream() +// .filter(vo -> vo.getSampleDate() != null) +// .sorted(Comparator.comparing(LiquidTankTaskCopyVO::getSampleDate)) // .collect(Collectors.toList()); - - List vos = lesss.stream() - .filter(vo -> vo.getSampleDate() != null) - .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); - } - detailVO.setWaveData(allChart); +// +// // 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); +// } +// detailVO.setWaveData(allChart); return R.data(detailVO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java index cc67b92b..b8ed90be 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java @@ -11,6 +11,7 @@ import org.springblade.core.tool.api.R; import org.springblade.desk.quality.excel.LiquidTankTaskCopyExcel; import org.springblade.desk.quality.pojo.entity.LiquidTankTaskCopy; import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO; +import org.springblade.desk.quality.pojo.vo.LiquidTankWaveVO; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -44,7 +45,9 @@ public interface ILiquidTankTaskCopyService extends BaseService list); - R generateWave(@Valid @RequestBody List list); +// R generateWave(@Valid @RequestBody List list); List getListByLiquidTankReportIdNew(Long liquidTankReportId); List getListByLiquidTankReportId(Long liquidTankReportId); + R generateWave(@Valid @RequestBody LiquidTankWaveVO vo); + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java index 10a8b75f..704e295f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java @@ -67,7 +67,8 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl listSearch(IPage page, InspectionTaskSearch search) { List listVO = baseMapper.listSearch(page, search); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java index 37384601..03936bd1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java @@ -25,6 +25,7 @@ import org.springblade.desk.quality.pojo.entity.*; import org.springblade.desk.quality.pojo.vo.LiquidTankReportConfigVO; import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO; import org.springblade.desk.quality.pojo.vo.LiquidTankTaskVO; +import org.springblade.desk.quality.pojo.vo.LiquidTankWaveVO; import org.springblade.desk.quality.service.*; import org.springblade.desk.quality.util.CodeUtil; import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper; @@ -33,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * [槽液检测任务复制] 服务实现类 @@ -140,7 +142,8 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl list) { + public R generateWave(LiquidTankWaveVO vo) { + List list = vo.getCopys(); if (list == null || list.isEmpty()) { return R.fail("没有使用任何数据"); } @@ -159,12 +162,68 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl list) { +// if (list == null || list.isEmpty()) { +// return R.fail("没有使用任何数据"); +// } +// WorkCenter wc = workCenterService.getById(list.get(0).getWorkCenterId()); +//// WorkCenter wc = workCenterService.getById(list.get(0).getWcId()); +// if (wc == null) { +// return R.fail("作业中心错误"); +// } +// // 保存copy任务list数据 +// updateBatchById(list); +// LiquidTankWave wave = new LiquidTankWave(); +// wave.setName("" + System.currentTimeMillis()); +// // 保存曲线 +// waveService.save(wave); +// for (LiquidTankTaskCopy one : list) { +// RelTankWaveItem item = new RelTankWaveItem(); +// item.setLiquidTankWaveId(wave.getId()); +// item.setLiquidTankTaskId(one.getId()); +// // 保存关联关系 +// relTankWaveItemService.save(item); +// } +// return R.success("生成曲线成功"); +// } + @Override public List getListByLiquidTankReportId(Long liquidTankReportId) { LambdaQueryWrapper qw = Wrappers.lambdaQuery();