质量管理槽液管理

liweidong
pangyang 1 month ago
parent 3c3342a286
commit 8651459737
  1. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java
  2. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java
  3. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java
  4. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveDrawSingleVO.java
  5. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankWaveVO.java
  6. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java
  7. 118
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java
  8. 71
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java
  9. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java
  10. 42
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java
  11. 94
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankWaveController.java
  12. 246
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/LiquidTankExcel.java
  13. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTaskMapper.xml
  14. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java
  15. 25
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java
  16. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/分派规则维护.xls

@ -43,4 +43,7 @@ public class BsAssignVO extends BsAssignEntity {
@Serial
private static final long serialVersionUID = 1L;
private String areaName;
private String limitAreaName;
}

@ -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;
/**
@ -293,6 +294,8 @@ public class LiquidTankTask extends BaseEntity {
*/
@Schema(description = "工艺主管[用户]id")
private Long processUserId;
private LocalDate validDate;
/**
* 审核[用户]id
*/

@ -3,6 +3,7 @@
*/
package org.springblade.desk.quality.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -11,6 +12,7 @@ import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@ -264,6 +266,8 @@ public class LiquidTankTaskCopy extends BaseEntity {
*/
@Schema(description = "[作业中心]id")
private Long workCenterId;
@TableField(exist = false)
private Long wcId;
/**
* [作业槽]id
*/
@ -524,4 +528,8 @@ public class LiquidTankTaskCopy extends BaseEntity {
*/
@Schema(description = "超期标记")
private Integer flagOut;
@Schema(description = "有效期")
private LocalDate validDate;
}

@ -46,4 +46,6 @@ public class LiquidTankWaveDrawSingleVO implements Serializable {
private List<Double> targetList = new ArrayList<>();
@Schema(description = "复测测量值")
private List<Double> testList = new ArrayList<>();
private Long id;
}

@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode;
import org.springblade.desk.quality.pojo.entity.LiquidTankWave;
import java.io.Serial;
import java.util.ArrayList;
import java.util.List;
/**
* [槽液曲线] 视图实体类
@ -24,4 +26,6 @@ public class LiquidTankWaveVO extends LiquidTankWave {
@Schema(description = "维护人")
private String updateUserRealName;
private List<LiquidTankWaveDrawSingleVO> waveData = new ArrayList<>();
}

@ -111,6 +111,11 @@ public class BsAssignController extends BladeController {
@Operation(summary = "分页", description = "传入bsAssign")
public R<IPage<BsAssignVO>> page(BsAssignVO bsAssign, Query query) {
IPage<BsAssignVO> pages = bsAssignService.selectBsAssignPage(Condition.getPage(query), bsAssign);
List<BsAssignVO> list = pages.getRecords();
for(BsAssignVO vo:list){
vo.setAreaName(vo.getLowArea()+"~"+vo.getUpArea());
vo.setLimitAreaName(vo.getSingleDownArea()+"~"+vo.getSingleUpArea());
}
return R.data(pages);
}

@ -117,29 +117,53 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1)
|| (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){
// if (currentUpperArea >= traversedLowerArea && currentUpperArea <= traversedUpperArea) {
// System.out.printf(
// "触发退出条件!当前数据%s的上限%.1f,落在已遍历数据%s的区间[%.1f, %.1f]内%n",
// current.getId(), currentUpperArea, traversed.getId(), traversedLowerArea, traversedUpperArea
// );
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单面积上下限已存在,请检查数据");
}
// if(currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0){
// return R.fail("单面积上限已存在,请检查数据");
// }
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)==0
&& currentUpperArea.compareTo(traversedUpperArea)==0){
return R.fail("单面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && singleLowArea.compareTo(traversedSingleUpArea)<=0) &&
(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) ||
(singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){
return R.fail("单批面积上下限已存在,请检查数据");
}
// foundLowMatch = true;
// 跳出内层循环
// break;
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
return R.fail("单批面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0)
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)==0 &&
singleUpArea.compareTo(traversedSingleUpArea)==0){
return R.fail("单批面积上下限已存在,请检查数据");
}
@ -249,35 +273,55 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1)
|| (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){
// if (currentUpperArea >= traversedLowerArea && currentUpperArea <= traversedUpperArea) {
// System.out.printf(
// "触发退出条件!当前数据%s的上限%.1f,落在已遍历数据%s的区间[%.1f, %.1f]内%n",
// current.getId(), currentUpperArea, traversed.getId(), traversedLowerArea, traversedUpperArea
// );
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单面积上下限已存在,请检查数据");
}
// if(currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0){
// return R.fail("单面积上限已存在,请检查数据");
// }
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && singleLowArea.compareTo(traversedSingleUpArea)<=0) &&
(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)==0
&& currentUpperArea.compareTo(traversedUpperArea)==0){
return R.fail("单面积上下限已存在,请检查数据");
}
// foundLowMatch = true;
// 跳出内层循环
// break;
if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) ||
(singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){
return R.fail("单批面积上下限已存在,请检查数据");
}
// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){
// return R.fail("单批面积上限已存在,请检查数据");
// }
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
return R.fail("单批面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0)
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)==0 &&
singleUpArea.compareTo(traversedSingleUpArea)==0){
return R.fail("单批面积上下限已存在,请检查数据");
}
}
// 未匹配,将当前数据加入已遍历集合,继续下一条
traversedList.add(current);

@ -21,8 +21,15 @@ import org.springblade.core.mp.support.Condition;
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.BeanUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.excel.TeamSetExcel;
import org.springblade.desk.basic.pojo.entity.Shifts;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.pojo.entity.WorkTank;
import org.springblade.desk.basic.service.IWorkTankService;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.LiquidTankExcel;
@ -30,10 +37,12 @@ import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.LiquidTankVO;
import org.springblade.desk.quality.service.ILiquidTankService;
import org.springblade.desk.quality.wrapper.LiquidTankWrapper;
import org.springblade.system.pojo.entity.User;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -55,6 +64,9 @@ public class LiquidTankController extends BladeController {
@Resource
private ILiquidTankService service;
@Resource
private IWorkTankService tankService;
/**
* [槽液] 详情
*/
@ -66,6 +78,14 @@ public class LiquidTankController extends BladeController {
LiquidTank detail = service.getOne(qw);
LiquidTankVO detailVO = LiquidTankWrapper.build().entityVO(detail);
service.setVOValue(detailVO);
QueryWrapper<WorkTank> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ID",detailVO.getWorkTankId());
List<WorkTank> records = tankService.list(queryWrapper);
if(null != records && records.size()>0){
detailVO.setWorkTankName(records.get(0).getWorkTankCode());
}
return R.data(detailVO);
}
@ -80,6 +100,18 @@ public class LiquidTankController extends BladeController {
QueryWrapper<LiquidTank> qw = Condition.getQueryWrapper(liquidTank, LiquidTank.class);
IPage<LiquidTank> pages = service.page(Condition.getPage(query), qw);
IPage<LiquidTankVO> pagesVO = LiquidTankWrapper.build().pageVO(pages);
List<LiquidTankVO> list = pagesVO.getRecords();
for(LiquidTankVO vo : list){
QueryWrapper<WorkTank> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ID",vo.getWorkTankId());
List<WorkTank> records = tankService.list(queryWrapper);
if(null != records && records.size()>0){
vo.setWorkTankName(records.get(0).getWorkTankCode());
}
}
pagesVO.getRecords()
.stream()
.peek(service::setVOValue)
@ -241,14 +273,37 @@ public class LiquidTankController extends BladeController {
@ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<LiquidTank> importList = ExcelUtil.read(
file, 0, 1, LiquidTank.class
);
return R.status(service.saveBatch(importList));
List<LiquidTank> noticeList = new ArrayList<>();
List<LiquidTankExcel> list = ExcelUtil.read(file, LiquidTankExcel.class);
list.forEach(noticeExcel -> {
LiquidTank notice = BeanUtil.copy(noticeExcel, LiquidTank.class);
// List<User> userPlanners = iUserClient.listByNameNolike(noticeExcel.getPlannerName());
// if(null != userPlanners && userPlanners.size() > 0){
// notice.setPlanner(userPlanners.get(0).getId());
// }
//
// List<User> userDispatchers = iUserClient.listByNameNolike(noticeExcel.getDispatcherName());
// if(null != userDispatchers && userDispatchers.size() > 0){
// notice.setDispatcher(userDispatchers.get(0).getId());
// }
//
// List<User> userLeaders = iUserClient.listByNameNolike(noticeExcel.getTeamLeaderName());
// if(null != userLeaders && userLeaders.size() > 0){
// notice.setTeamLeader(userLeaders.get(0).getId());
// }
//
// QueryWrapper<Shifts> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("name",noticeExcel.getCsName());
// List<Shifts> shifts = shiftService.list(queryWrapper);
// if(null != shifts && shifts.size() > 0){
// notice.setCsId(shifts.get(0).getId());
// }
noticeList.add(notice);
});
return R.status(service.saveBatch(noticeList));
}
@PostMapping("/updateUserBat")

@ -24,7 +24,9 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.desk.basic.pojo.entity.Formula;
import org.springblade.desk.basic.pojo.entity.WorkTank;
import org.springblade.desk.basic.service.IFormulaService;
import org.springblade.desk.basic.service.IWorkTankService;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.basic.constant.BaseCol;
import org.springblade.desk.quality.constant.LiquidTankTaskConst;
@ -36,6 +38,8 @@ import org.springblade.desk.quality.pojo.vo.LiquidTankTaskVO;
import org.springblade.desk.quality.service.ILiquidTankService;
import org.springblade.desk.quality.service.ILiquidTankTaskService;
import org.springblade.desk.quality.wrapper.LiquidTankTaskWrapper;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springblade.wms.feign.StRealtimeStockClient;
import org.springblade.wms.pojo.entity.StGoods;
import org.springframework.http.ResponseEntity;
@ -72,7 +76,11 @@ public class LiquidTankTaskController extends BladeController {
@Resource
private final StRealtimeStockClient stRealtimeStockClient;
@Resource
private IUserClient iUserClient;
@Resource
private IWorkTankService tankService;
/**
* [槽液检测任务] 详情
*/
@ -82,7 +90,26 @@ public class LiquidTankTaskController extends BladeController {
public R<LiquidTankTaskVO> detail(LiquidTankTask liquidTankTask) {
QueryWrapper<LiquidTankTask> qw = Condition.getQueryWrapper(liquidTankTask);
LiquidTankTask detail = service.getOne(qw);
LiquidTankTaskVO detailVO = LiquidTankTaskWrapper.build().entityVO(detail);
if(null != detail.getReceiveDrugUserId()){
R<User> user = iUserClient.userInfoById(detail.getReceiveDrugUserId());
detailVO.setReceiveDurgUserRealName(user.getData().getRealName());
}
if(null != detail.getRepeatTestUserId()){
R<User> userrepeat = iUserClient.userInfoById(detail.getRepeatTestUserId());
detailVO.setRepeatTestUserRealName(userrepeat.getData().getRealName());
}
Long goodId = detail.getDrugMaterialId();
StGoods good = new StGoods();
good.setId(goodId);
StGoods stGoods = stRealtimeStockClient.getById(good).getData();
detailVO.setDrugMaterialCode(stGoods.getGoodsCode());
service.setVOValue(detailVO);
return R.data(detailVO);
}
@ -184,6 +211,13 @@ public class LiquidTankTaskController extends BladeController {
good.setId(goodId);
StGoods stGoods = stRealtimeStockClient.getById(good).getData();
one.setDrugMaterialCode(stGoods.getGoodsCode());
QueryWrapper<WorkTank> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ID",one.getWorkTankId());
List<WorkTank> records = tankService.list(queryWrapper);
if(null != records && records.size()>0){
one.setWorkTankName(records.get(0).getWorkTankCode());
}
}
pagesVO.getRecords()
.stream()

@ -23,6 +23,7 @@ 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.WorkTank;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.basic.util.RequestUtil;
import org.springblade.desk.basic.constant.BaseCol;
@ -30,10 +31,13 @@ import org.springblade.desk.basic.constant.BaseRequest;
import org.springblade.desk.quality.constant.LiquidTankTaskConst;
import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.LiquidTankTaskCopyExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.entity.LiquidTankTask;
import org.springblade.desk.quality.pojo.entity.LiquidTankTaskCopy;
import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawSingleVO;
import org.springblade.desk.quality.service.ILiquidTankService;
import org.springblade.desk.quality.service.ILiquidTankTaskCopyService;
import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper;
import org.springframework.http.ResponseEntity;
@ -44,6 +48,8 @@ import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import static java.util.Arrays.asList;
/**
* [槽液检测任务复制] 控制器
*
@ -62,6 +68,9 @@ public class LiquidTankTaskCopyController extends BladeController {
@Resource
private ILiquidTankTaskCopyService service;
@Resource
private ILiquidTankService tankService;
/**
* [槽液检测任务复制] 详情
*/
@ -89,7 +98,7 @@ public class LiquidTankTaskCopyController extends BladeController {
);
QueryWrapper<LiquidTankTaskCopy> qw = Condition.getQueryWrapper(map, LiquidTankTaskCopy.class);
// 正常结束的,异常结束的
qw.in(BaseCol.STATUS, Arrays.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")));
// [作业槽]id
@ -107,6 +116,34 @@ public class LiquidTankTaskCopyController extends BladeController {
//
IPage<LiquidTankTaskCopy> pages = service.page(Condition.getPage(query), qw);
IPage<LiquidTankTaskCopyVO> pagesVO = LiquidTankTaskCopyWrapper.build().pageVO(pages);
List<LiquidTankTaskCopyVO> list = pagesVO.getRecords();
for(LiquidTankTaskCopyVO copyVO : list){
QueryWrapper<LiquidTank> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ID",copyVO.getLiquidTankId());
List<LiquidTank> records = tankService.list(queryWrapper);
if(null != records && records.size()>0){
LiquidTank tank = records.get(0);
if(1==tank.getJobType()){
String weekly = tank.getJobTypeWeekValue();
List<String> weeks = Arrays.asList(weekly.split(","));
copyVO.setTestFrequency( weeks.size()+"次/周");
}
if(2==tank.getJobType()){
String month = tank.getJobTypeMonthValue();
List<String> months = Arrays.asList(month.split(","));
copyVO.setTestFrequency( months.size()+"次/月");
}
if(3==tank.getJobType()){
String year = tank.getJobTypeYearValue();
List<String> years = Arrays.asList(year.split(","));
copyVO.setTestFrequency( years.size()+"次/年");
}
}
}
pagesVO.getRecords()
.stream()
.peek(service::setVOValue)
@ -128,7 +165,7 @@ public class LiquidTankTaskCopyController extends BladeController {
);
QueryWrapper<LiquidTankTaskCopy> qw = Condition.getQueryWrapper(map, LiquidTankTaskCopy.class);
// 正常结束的,异常结束的
qw.in(BaseCol.STATUS, Arrays.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")));
// 范围日期
@ -183,6 +220,7 @@ public class LiquidTankTaskCopyController extends BladeController {
singleChart.getMinList().add(one.getTargetValueMin());
singleChart.getTargetList().add(one.getTargetValue());
singleChart.getTestList().add(one.getRepeatTestValue());
singleChart.setId(one.getId());
}
allChart.add(singleChart);
}

@ -3,8 +3,10 @@
*/
package org.springblade.desk.quality.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -30,18 +32,22 @@ import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.basic.util.RequestUtil;
import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.LiquidTankWaveExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTankReport;
import org.springblade.desk.quality.pojo.entity.LiquidTankWave;
import org.springblade.desk.quality.pojo.entity.*;
import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawSingleVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankWaveVO;
import org.springblade.desk.quality.service.ILiquidTankTaskCopyService;
import org.springblade.desk.quality.service.ILiquidTankWaveService;
import org.springblade.desk.quality.service.IRelTankWaveItemService;
import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper;
import org.springblade.desk.quality.wrapper.LiquidTankWaveWrapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
* [槽液曲线] 控制器
@ -61,6 +67,30 @@ public class LiquidTankWaveController extends BladeController {
@Resource
private ILiquidTankWaveService service;
@Resource
private ILiquidTankTaskCopyService copyService;
@Resource
private IRelTankWaveItemService relReportItemService;
public List<LiquidTankTaskCopyVO> getListByLiquidTankReportId(Long liquidTankReportId) {
LambdaQueryWrapper<RelTankWaveItem> qw = Wrappers.lambdaQuery();
qw.eq(RelTankWaveItem::getLiquidTankWaveId, liquidTankReportId);
List<RelTankWaveItem> relList = relReportItemService.list(qw);
// List<LiquidTankTaskCopyVO> copyList = new ArrayList<>();
List<LiquidTankTaskCopy> list = new ArrayList<>();
for (RelTankWaveItem relOne : relList) {
Long taskId = relOne.getLiquidTankTaskId();
LiquidTankTaskCopy copy = copyService.getById(taskId);
list.add(copy);
// LiquidTankTaskCopyVO copyVO = LiquidTankTaskCopyWrapper.build().entityVO(copy);
// setVoValue(copyVO);
// copyList.add(copyVO);
}
List<LiquidTankTaskCopyVO> pagesVO = LiquidTankTaskCopyWrapper.build().listVO(list);
return pagesVO;
}
/**
* [槽液曲线] 详情
*/
@ -71,6 +101,60 @@ public class LiquidTankWaveController extends BladeController {
QueryWrapper<LiquidTankWave> qw = Condition.getQueryWrapper(liquidTankWave);
LiquidTankWave detail = service.getOne(qw);
LiquidTankWaveVO detailVO = LiquidTankWaveWrapper.build().entityVO(detail);
List<LiquidTankTaskCopyVO> pagesVO = getListByLiquidTankReportId(detailVO.getId());
// QueryWrapper<LiquidTankTaskCopy> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq(LiquidTankTaskCopy.COL_LIQUID_TANK_WAVE_ID, detailVO.getId())
// queryWrapper.orderByAsc("ID");
// queryWrapper.orderByAsc(LiquidTankTaskCopy.COL_REPEAT_TEST_DATE);
// List<LiquidTankTaskCopy> pages = copyService.list(queryWrapper);
// List<LiquidTankTaskCopyVO> pagesVO = LiquidTankTaskCopyWrapper.build().listVO(pages);
// IPage<LiquidTankTaskCopyVO> pagesVO = LiquidTankTaskCopyWrapper.build().pageVO(pages);
pagesVO.stream()
.peek(copyService::setVOValue)
.collect(Collectors.toList());
// key 自带排序
// key: [作业槽]id
// value: 任务数据列表
Map<Long, List<LiquidTankTaskCopyVO>> treeMap = new TreeMap<>();
// 遍历赋值到treeMap中
pagesVO.forEach(vo -> {
final Long wtId = vo.getWorkTankId();
// 不包含,新建
if (!treeMap.containsKey(wtId)) {
List<LiquidTankTaskCopyVO> list = new ArrayList<>();
treeMap.put(wtId, list);
}
treeMap.get(wtId).add(vo);
});
// 前端要求匹配对象
// LiquidTankWaveDrawVO allVO = new LiquidTankWaveDrawVO();
// List<LiquidTankWaveDrawSingleVO> allChart = detailVO.getWaveData();
List<LiquidTankWaveDrawSingleVO> allChart = new ArrayList<>();
// 每个entry一个图表
for (Map.Entry<Long, List<LiquidTankTaskCopyVO>> entry : treeMap.entrySet()) {
Long wtId = 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());
}
allChart.add(singleChart);
}
detailVO.setWaveData(allChart);
return R.data(detailVO);
}

@ -41,200 +41,260 @@ public class LiquidTankExcel implements Serializable {
* [作业中心]id
*/
@ColumnWidth(20)
@ExcelProperty("[作业中心]id")
private BigDecimal workCenterId;
@ExcelProperty("作业中心")
// private BigDecimal workCenterId;
private String workCenterName;
/**
* 槽液编码/槽号
*/
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* 待测成分
* [作业槽]id
*/
@ColumnWidth(20)
@ExcelProperty("待测成分")
private String testElement;
@ExcelProperty("作业槽")
// private BigDecimal workTankId;
private String workTankName;
/**
* 药品名称
* 待测成分
*/
@ColumnWidth(20)
@ExcelProperty("药品名称")
private String drugName;
// @ExcelProperty("待测成分")
@ExcelProperty("分析项目")
private String testElement;
/**
* 药品[物料]id
* 规范上限
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]id")
private BigDecimal drugMaterialId;
@ExcelProperty("规范上限")
private BigDecimal normValueMax;
/**
* 药品[物料]编码
* 规范下限
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]编码")
private String drugMaterialCode;
@ExcelProperty("规范下限")
private BigDecimal normValueMin;
/**
* 药品物料名称
* 目标上限
*/
@ColumnWidth(20)
@ExcelProperty("药品物料名称")
private String drugMaterialName;
@ExcelProperty("目标上限")
private BigDecimal targetValueMax;
/**
* 工艺含量
* 目标下限
*/
@ColumnWidth(20)
@ExcelProperty("工艺含量")
private BigDecimal processContent;
@ExcelProperty("目标下限")
private BigDecimal targetValueMin;
/**
* 目标值
*/
@ColumnWidth(20)
@ExcelProperty("目标值")
private BigDecimal targetValue;
/**
* 添加点
*/
@ColumnWidth(20)
@ExcelProperty("添加点")
private BigDecimal fillingLocation;
/**
* 体积
*/
@ColumnWidth(20)
@ExcelProperty("体积")
private BigDecimal volume;
/**
* 测量值计量单位
*/
@ColumnWidth(20)
@ExcelProperty("测量值计量单位")
private String testUnit;
/**
* 分析周期
* 添加值[计量单位]
*/
@ColumnWidth(20)
@ExcelProperty("分析周期")
private Integer analysisCycle;
@ExcelProperty("添加值单位")
private String addUnit;
/**
* 有效期
* 添加值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("有效期")
private LocalDateTime validDate;
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
/**
* 上次化验日期
* 加药量[计算公式]id
*/
@ColumnWidth(20)
@ExcelProperty("上次化验日期")
private LocalDateTime lastTest;
@ExcelProperty("加药量计算公式")
// private BigDecimal addDrugFormulaId;
private String addDrugFormulaName;
/**
* 槽液到期日期
* 添加后理论值[计算公式]id
*/
@ColumnWidth(20)
@ExcelProperty("槽液到期日期")
private LocalDateTime expiryDate;
@ExcelProperty("添加后理论值计算公式")
// private BigDecimal afterTheoryFormulaId;
private String afterTheoryFormulaName;
/**
* 化验人[用户]id
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/
@ColumnWidth(20)
@ExcelProperty("化验人[用户]id")
private BigDecimal testUserId;
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
/**
* 工艺主管[用户]id
* PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("工艺主管[用户]id")
private BigDecimal processUserId;
@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
/**
* 实测温度
* 药品名称
*/
@ColumnWidth(20)
@ExcelProperty("实测温度")
private String temperatureActual;
@ExcelProperty("药品名称")
private String drugName;
/**
* 实测ph值
* 药品[物料]id
*/
@ColumnWidth(20)
@ExcelProperty("实测ph值")
private String phActual;
@ExcelProperty("药品[物料]id")
private BigDecimal drugMaterialId;
/**
* 目标上限
* 药品[物料]编码
*/
@ColumnWidth(20)
@ExcelProperty("目标上限")
private BigDecimal targetValueMax;
@ExcelProperty("药品物料编码")
private String drugMaterialCode;
/**
* 目标下限
* 药品物料名称
*/
@ColumnWidth(20)
@ExcelProperty("目标下限")
private BigDecimal targetValueMin;
@ExcelProperty("药品物料名称")
private String drugMaterialName;
/**
* 药品批次号
* 测试周期
*/
@ColumnWidth(20)
@ExcelProperty("药品批次号")
private String drugBatNum;
@ExcelProperty("测试周期")
private Integer analysisCycle;
/**
* 加药后化验值
* 化验人[用户]id
*/
@ColumnWidth(20)
@ExcelProperty("加药后化验值")
private String postTestValue;
@ExcelProperty("化验人")
// private BigDecimal testUserId;
private String testUserName;
/**
* 是否合格
* 工艺主管[用户]id
*/
@ColumnWidth(20)
@ExcelProperty("是否合格")
private Long qualified;
@ExcelProperty("工艺主管")
// private BigDecimal processUserId;
private String processUserName;
/**
* 测量值[计量单位]id
* [班组]id
*/
@ColumnWidth(20)
@ExcelProperty("测量值[计量单位]id")
private BigDecimal testUnitId;
@ExcelProperty("班组")
// private BigDecimal teamId;
private String teamName;
/**
* [作业槽]id
* 有效期
*/
@ColumnWidth(20)
@ExcelProperty("[作业槽]id")
private BigDecimal workTankId;
@ExcelProperty("有效期")
private LocalDateTime validDate;
/**
* 添加值[计量单位]
* 工艺含量
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]")
private String addUnit;
@ExcelProperty("工艺含量")
private BigDecimal processContent;
/**
* 添加值[计量单位]id
* 上次化验日期
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
@ExcelProperty("上次化验日期")
private LocalDateTime lastTest;
/**
* 加药量[计算公式]id
* 槽液到期日期
*/
@ColumnWidth(20)
@ExcelProperty("加药量[计算公式]id")
private BigDecimal addDrugFormulaId;
@ExcelProperty("槽液到期日期")
private LocalDateTime expiryDate;
/**
* 添加后理论值[计算公式]id
* 实测温度
*/
@ColumnWidth(20)
@ExcelProperty("添加后理论值[计算公式]id")
private BigDecimal afterTheoryFormulaId;
@ExcelProperty("实测温度")
private String temperatureActual;
/**
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
* 实测ph值
*/
@ColumnWidth(20)
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
@ExcelProperty("实测ph值")
private String phActual;
/**
* PH范围类型:[1]:;[2]:PH值范围;
* 药品批次号
*/
@ColumnWidth(20)
@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
@ExcelProperty("药品批次号")
private String drugBatNum;
/**
* 加药后化验值
*/
@ColumnWidth(20)
@ExcelProperty("加药后化验值")
private String postTestValue;
/**
* 是否合格
*/
@ColumnWidth(20)
@ExcelProperty("是否合格")
private Long qualified;
/**
* 测量值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("测量值[计量单位]id")
private BigDecimal testUnitId;
/**
* PH范围LEFT
*/
@ -277,12 +337,7 @@ public class LiquidTankExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("环境温度")
private BigDecimal temperatureEnv;
/**
* [班组]id
*/
@ColumnWidth(20)
@ExcelProperty("[班组]id")
private BigDecimal teamId;
/**
* 生成周期类型:生成周期类型:[1]:每周;[2]:每月;[3]:每年;[4]:自定义CRON
*/
@ -325,16 +380,5 @@ public class LiquidTankExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("是否顺延-[1]:是;[0]:否;")
private Long isPutOff;
/**
* 规范上限
*/
@ColumnWidth(20)
@ExcelProperty("规范上限")
private BigDecimal normValueMax;
/**
* 规范下限
*/
@ColumnWidth(20)
@ExcelProperty("规范下限")
private BigDecimal normValueMin;
}

@ -79,7 +79,7 @@
-- 工序
LEFT JOIN DS_PROCESS ps ON wp.ORDERS = ps.PROCESS_CODE
-- 外协厂商 oem
LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.ID
-- 班组 ts
-- LEFT JOIN BA_TEAM_SET ts ON wp.MAKE_TEAM = ts.ID
-- 部门

@ -20,6 +20,7 @@ import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.quality.excel.LiquidTankTaskCopyExcel;
import org.springblade.desk.quality.mapper.LiquidTankTaskCopyMapper;
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.service.*;
@ -97,9 +98,22 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
// 保存copy任务list数据
updateBatchById(list);
LiquidTankReport report = new LiquidTankReport();
LiquidTankReportConfigVO vo = reportConfigService.getByWcId(wc.getId());
if(null != vo){
String name = reportConfigService.getByWcId(wc.getId()).getNamePrefix() + "-" +
CodeUtil.getNowLocalDateString("yyyyMMdd");
report.setName(name);
}
// else{
// String name = "槽液报告" + "-" +
// CodeUtil.getNowLocalDateString("yyyyMMdd");
// report.setName(name);
// }
// String name = "槽液报告" + "-" +
// CodeUtil.getNowLocalDateString("yyyyMMdd");
// report.setName(name);
// 保存报告
reportService.save(report);
for (LiquidTankTaskCopy one : list) {
@ -119,6 +133,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
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("作业中心错误");
}

@ -20,6 +20,7 @@ import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.constant.WorkTankConst;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.pojo.entity.WorkTank;
import org.springblade.desk.basic.service.IFormulaService;
import org.springblade.desk.basic.service.ITeamSetService;
@ -221,11 +222,23 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
public R receiveDrugBat(List<LiquidTankTask> list) {
// todo:用户权限过滤
for (LiquidTankTask task : list) {
task = basicChangeStatus(task.getId(), LiquidTankTaskConst.S_PENDING_FILL_DATA_SECOND);
LiquidTankTask taskOld = getById(task.getId());
task = basicChangeTaskStatus(task, LiquidTankTaskConst.S_PENDING_FILL_DATA_SECOND);
// task = basicChangeStatus(task.getId(), LiquidTankTaskConst.S_PENDING_FILL_DATA_SECOND);
task.setTeamId(taskOld.getTeamId());
// 领药人 为指定班组 班组长
// task.setReceiveDrugUserId(AuthUtil.getUserId());
Long teamId = task.getTeamId();
task.setReceiveDrugUserId(teamSetService.getTeamSetLeader(teamId));
TeamSet teamSet = teamSetService.getById(task.getTeamId());
if(teamSet != null){
task.setReceiveDrugUserId(teamSet.getTeamLeader());
}
// 领药时间
task.setReceiveDrugDate(LocalDateTime.now());
basicUpdateById(task);
@ -237,12 +250,15 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
@Override
public R fillRepeatBat(List<LiquidTankTask> list) {
for (LiquidTankTask task : list) {
task = basicChangeStatus(task.getId(), LiquidTankTaskConst.S_FINISH_OK);
// task = basicChangeStatus(task.getId(), LiquidTankTaskConst.S_FINISH_OK);
task = basicChangeTaskStatus(task, LiquidTankTaskConst.S_FINISH_OK);
// 复检化验时间 用户填写
// 复检填报时间
task.setRepeatFillDate(LocalDateTime.now());
// 结束时间
task.setFinishDate(LocalDateTime.now());
task.setRepeatTestUserId(AuthUtil.getUserId());
basicUpdateById(task);
}
return R.success("复检填报成功");
@ -401,6 +417,7 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
task.setFillingLocation(lt.getFillingLocation());
task.setAnalysisCycle(lt.getAnalysisCycle());
task.setTestElement(lt.getTestElement());
task.setValidDate(lt.getValidDate());
}
task.setName("");
task.setCode("" + System.currentTimeMillis());
@ -532,8 +549,10 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
int oldStatus = task.getStatus();
task.setStatus(newStatus);
taskCopy.setStatus(newStatus);
// 更新状态
updateById(task);
taskCopy.setValidDate(task.getValidDate());
copyService.updateById(taskCopy);
// history
LiquidTankTaskHi hi = new LiquidTankTaskHi();

Loading…
Cancel
Save