Merge remote-tracking branch 'origin/master'

liweidong
绫Umbrella 1 month ago
commit e70e98b467
  1. 19
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java
  2. 13
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankWave.java
  3. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RelTankWaveItem.java
  4. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java
  5. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemVO.java
  6. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java
  7. 192
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java
  8. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java
  9. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  10. 61
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.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<LocalDate> testDateList = new ArrayList<>();
@Schema(description = "目标上限")
@TableField(exist = false)
private List<Double> maxList = new ArrayList<>();
@Schema(description = "目标下限")
@TableField(exist = false)
private List<Double> minList = new ArrayList<>();
@Schema(description = "目标值")
@TableField(exist = false)
private List<Double> targetList = new ArrayList<>();
@Schema(description = "复测测量值")
@TableField(exist = false)
private List<Double> testList = new ArrayList<>();
}

@ -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;
/**
* 排序
*/

@ -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;
}

@ -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<LiquidTankWaveDrawSingleVO> waveData = new ArrayList<>();
private List<LiquidTankTaskCopy> copys = new ArrayList<>();
private List<LiquidTankTaskCopyVO> taskCopys = new ArrayList<>();
}

@ -36,4 +36,6 @@ public class WorkPlanItemVO extends WorkPlanItem {
// private DsProcessEntity process;
@Schema(description = "wp详情 List")
private List<WorkPlanItemDetailVO> wpItemDetailList;
@Schema(description = "硬度详情 List")
private List<WorkPlanItemThicknessVO> thicknessList;
}

@ -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<LiquidTankTaskCopy> records = service.list(qw);
// List<LiquidTankTaskCopyVO> vos = records.stream()
// .map(LiquidTankTaskCopyWrapper.build()::entityVO)
// .collect(Collectors.toList());
//// IPage<LiquidTankTaskCopy> pages = service.page(Condition.getPage(query), qw);
//// IPage<LiquidTankTaskCopyVO> pagesVO = LiquidTankTaskCopyWrapper.build().pageVO(pages);
// pagesVO.stream()
// .peek(service::setVOValue)
// .collect(Collectors.toList());
Map<String, LiquidTankTaskCopy> 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<LiquidTankTaskCopyVO> 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<LiquidTankTaskCopy> list) {
// return service.generateWave(list);
// }
@PostMapping("/generateWave")
@ApiOperationSupport(order = 101)
@Operation(summary = "生成曲线", description = "传入LiquidTankTaskCopy List")
public R generateWave(@Valid @RequestBody List<LiquidTankTaskCopy> list) {
return service.generateWave(list);
public R generateWave(@Valid @RequestBody LiquidTankWaveVO vo) {
return service.generateWave(vo);
}
}

@ -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);
}

@ -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<LiquidTankTaskCo
R generateReport(@Valid @RequestBody List<LiquidTankTaskCopy> list);
R generateWave(@Valid @RequestBody List<LiquidTankTaskCopy> list);
// R generateWave(@Valid @RequestBody List<LiquidTankTaskCopy> list);
List<LiquidTankTaskCopyVO> getListByLiquidTankReportIdNew(Long liquidTankReportId);
List<LiquidTankTaskCopyVO> getListByLiquidTankReportId(Long liquidTankReportId);
R generateWave(@Valid @RequestBody LiquidTankWaveVO vo);
}

@ -67,7 +67,8 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
private IWorkPlanItemDetailService wpItemDetailService;
@Resource
private IReviewSheetSubService rsSubService;
@Resource
private IWorkPlanItemThicknessService wpItemThicknessService;
@Resource
private IUserClient userClient;
@Resource
@ -282,12 +283,27 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
wpItemDetailService.save(wpItemDetail);
}
}
for (WorkPlanItemThicknessVO wpItemDetailVO : wpItemVO.getThicknessList()) {
WorkPlanThicknessDetail wpItemDetail = new WorkPlanThicknessDetail();
BeanUtil.copyProperties(wpItemDetailVO, wpItemDetail);
wpItemDetail.setWorkPlanItemId(wpItemDB.getId());
if (IdUtil.isValid(wpItemDetail.getId())) {
// 更新 WorkPlanItemDetail
wpItemThicknessService.updateById(wpItemDetail);
} else {
// 保存
wpItemThicknessService.save(wpItemDetail);
}
}
}
//
refreshStatusAndQty(detailVO.getId());
return R.success("检验填报");
}
@Override
public IPage<InspectionTaskListVO> listSearch(IPage<InspectionTaskListVO> page, InspectionTaskSearch search) {
List<InspectionTaskListVO> listVO = baseMapper.listSearch(page, search);

@ -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<LiquidTankTas
@Transactional
@Override
public R generateWave(List<LiquidTankTaskCopy> list) {
public R generateWave(LiquidTankWaveVO vo) {
List<LiquidTankTaskCopy> list = vo.getCopys();
if (list == null || list.isEmpty()) {
return R.fail("没有使用任何数据");
}
@ -159,12 +162,68 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
RelTankWaveItem item = new RelTankWaveItem();
item.setLiquidTankWaveId(wave.getId());
item.setLiquidTankTaskId(one.getId());
String maxlist = one.getMaxList().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
String minlist = one.getMinList().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
String targetList = one.getTargetList().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
String testDateList = one.getTestDateList().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
String testList = one.getTestList().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
item.setMaxList(maxlist);
item.setMinList(minlist);
item.setTargetList(targetList);
item.setTestDateList(testDateList);
item.setTestList(testList);
// 保存关联关系
relTankWaveItemService.save(item);
}
return R.success("生成曲线成功");
}
// @Transactional
// @Override
// public R generateWave(List<LiquidTankTaskCopy> 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<LiquidTankTaskCopyVO> getListByLiquidTankReportId(Long liquidTankReportId) {
LambdaQueryWrapper<RelTankReportItem> qw = Wrappers.lambdaQuery();

Loading…
Cancel
Save