liweidong
张乾翔 2 weeks ago
parent 53b1bb2a1e
commit c9fb9ae9c5
  1. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobtransfer/pojo/vo/CertificateLedgerVO.java
  2. 117
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java
  3. 4
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java
  4. 4
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java
  5. 62
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/service/impl/CertificateMaintenanceServiceImpl.java
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml
  7. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java
  8. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java
  9. 319
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/LiquidTankExcel.java
  10. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java
  11. 245
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankServiceImpl.java
  12. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java
  13. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/槽液信息模板.xls
  14. 4
      blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java

@ -2,6 +2,8 @@ package org.springblade.desk.jobtransfer.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import java.util.List; import java.util.List;
@ -18,4 +20,7 @@ public class CertificateLedgerVO {
//岗位证书数据集合 //岗位证书数据集合
@Schema(description = "岗位证书数据集合") @Schema(description = "岗位证书数据集合")
private List<CertificateMaintenanceVO> certificateMaintenanceVOList; private List<CertificateMaintenanceVO> certificateMaintenanceVOList;
@Schema(description = "班组")
private List<TeamSet> teamSetList;
} }

@ -10,8 +10,13 @@ import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial; import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* [槽液] 实体类 * [槽液] 实体类
@ -388,32 +393,32 @@ public class LiquidTank extends BaseEntity {
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围; * 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/ */
@Schema(description = "温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;") @Schema(description = "温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType; private Integer temperatureType;
/** /**
* 温度范围LEFT * 温度范围LEFT
*/ */
@Schema(description = "温度范围LEFT") @Schema(description = "温度范围LEFT")
private Long temperatureRangeLeft; private BigDecimal temperatureRangeLeft;
/** /**
* 温度范围RIGHT * 温度范围RIGHT
*/ */
@Schema(description = "温度范围RIGHT") @Schema(description = "温度范围RIGHT")
private Long temperatureRangeRight; private BigDecimal temperatureRangeRight;
/** /**
* 室内温度 * 室内温度
*/ */
@Schema(description = "室内温度") @Schema(description = "室内温度")
private Long temperatureInRoom; private BigDecimal temperatureInRoom;
/** /**
* 环境温度 * 环境温度
*/ */
@Schema(description = "环境温度") @Schema(description = "环境温度")
private Long temperatureEnv; private BigDecimal temperatureEnv;
/** /**
* PH范围类型:[1]:;[2]:PH值范围; * PH范围类型:[1]:;[2]:PH值范围;
*/ */
@Schema(description = "PH范围类型:[1]:无;[2]:PH值范围;") @Schema(description = "PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType; private Integer phType;
/** /**
* 实测ph值 * 实测ph值
*/ */
@ -423,12 +428,12 @@ public class LiquidTank extends BaseEntity {
* PH范围LEFT * PH范围LEFT
*/ */
@Schema(description = "PH范围LEFT") @Schema(description = "PH范围LEFT")
private Long phRangeLeft; private BigDecimal phRangeLeft;
/** /**
* PH范围RIGHT * PH范围RIGHT
*/ */
@Schema(description = "PH范围RIGHT") @Schema(description = "PH范围RIGHT")
private Long phRangeRight; private BigDecimal phRangeRight;
/** /**
* 加药后化验值 * 加药后化验值
*/ */
@ -489,4 +494,100 @@ public class LiquidTank extends BaseEntity {
*/ */
@Schema(description = "是否顺延-[1]:是;[0]:否;") @Schema(description = "是否顺延-[1]:是;[0]:否;")
private Long isPutOff; private Long isPutOff;
//生成温度类型key value枚举类
public enum TemperatureTypeEnum {
NONE(1, "无"),
INDOOR_TEMPERATURE(2, "室内温度"),
ENVIRONMENT_TEMPERATURE(3, "环境温度"),
TEMPERATURE_RANGE(4, "温度范围");
private Integer code;
private String message;
TemperatureTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
public static String getMessageByCode(Integer code) {
for (TemperatureTypeEnum item : values()) {
if (item.getCode().equals(code)) {
return item.getMessage();
}
}
return null;
}
public static Integer getCodeByMessage(String message) {
for (TemperatureTypeEnum item : values()) {
if (item.getMessage().equals(message)) {
return item.getCode();
}
}
return null;
}
public static TemperatureTypeEnum getByCode(Integer code) {
for (TemperatureTypeEnum item : values()) {
if (item.getCode().equals(code)) {
return item;
}
}
return null;
}
public static TemperatureTypeEnum getByMessage(String message) {
for (TemperatureTypeEnum item : values()) {
if (item.getMessage().equals(message)) {
return item;
}
}
return null;
}
public static List<Map<String, Object>> getList() {
List<Map<String, Object>> list = new ArrayList<>();
for (TemperatureTypeEnum item : values()) {
Map<String, Object> map = new HashMap<>();
map.put("code", item.getCode());
map.put("message", item.getMessage());
list.add(map);
}
return list;
}
}
public enum PhTypeEnum {
NONE(1, "无"),
PH_VALUE_RANGE(2, "PH值范围");
private Integer code;
private String message;
PhTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
public static String getMessageByCode(Integer code) {
for (PhTypeEnum item : values()) {
if (item.getCode().equals(code)) {
return item.getMessage();
}
}
return null;
}
public static Integer getCodeByMessage(String message) {
for (PhTypeEnum item : values()) {
if (item.getMessage().equals(message)) {
return item.getCode();
}
}
return null;
}
}
} }

@ -31,6 +31,7 @@ public interface StRealtimeStockClient {
String MEASURING_TOOLS = API_PREFIX + "/pageToolsData"; String MEASURING_TOOLS = API_PREFIX + "/pageToolsData";
String MEASURING_Id = API_PREFIX + "/getById"; String MEASURING_Id = API_PREFIX + "/getById";
String GET_ST_GOODS = API_PREFIX + "/getStGoods";
String GET_REALTIME_STOCK_BY_GOOD = API_PREFIX + "/getRealtimeStockByGood"; String GET_REALTIME_STOCK_BY_GOOD = API_PREFIX + "/getRealtimeStockByGood";
@ -46,7 +47,8 @@ public interface StRealtimeStockClient {
@PostMapping(MEASURING_Id) @PostMapping(MEASURING_Id)
R<StGoods> getById(@RequestBody StGoods stGoods); R<StGoods> getById(@RequestBody StGoods stGoods);
@PostMapping(GET_ST_GOODS)
R<List<StGoods>> getStGoods();
/** /**
* 查询指定物料的可用库存记录 * 查询指定物料的可用库存记录
* *

@ -28,6 +28,10 @@ public class StRealtimeStockClientFallback implements StRealtimeStockClient {
public R<StGoods> getById(StGoods stGoods) { public R<StGoods> getById(StGoods stGoods) {
return null; return null;
} }
@Override
public R<List<StGoods>> getStGoods() {
return null;
}
@Override @Override
public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) { public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) {

@ -1,9 +1,16 @@
package org.springblade.desk.jobtransfer.service.impl; package org.springblade.desk.jobtransfer.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.service.IRelTeamSetUserService;
import org.springblade.desk.basic.service.impl.TeamSetServiceImpl;
import org.springblade.desk.jobtransfer.mapper.CertificateTypeMapper; import org.springblade.desk.jobtransfer.mapper.CertificateTypeMapper;
import org.springblade.desk.jobtransfer.mapper.PostHandleMapper; import org.springblade.desk.jobtransfer.mapper.PostHandleMapper;
import org.springblade.desk.jobtransfer.pojo.entity.CertificateMaintenanceEntity; import org.springblade.desk.jobtransfer.pojo.entity.CertificateMaintenanceEntity;
@ -17,6 +24,7 @@ import org.springblade.desk.jobtransfer.pojo.excel.CertificateMaintenanceImport;
import org.springblade.desk.jobtransfer.pojo.request.CertificateLedgerQuery; import org.springblade.desk.jobtransfer.pojo.request.CertificateLedgerQuery;
import org.springblade.desk.jobtransfer.pojo.vo.CertificateLedgerVO; import org.springblade.desk.jobtransfer.pojo.vo.CertificateLedgerVO;
import org.springblade.desk.jobtransfer.mapper.CertificateMaintenanceMapper; import org.springblade.desk.jobtransfer.mapper.CertificateMaintenanceMapper;
import org.springblade.desk.jobtransfer.pojo.vo.PostHandleVO;
import org.springblade.desk.jobtransfer.service.ICertificateMaintenanceService; import org.springblade.desk.jobtransfer.service.ICertificateMaintenanceService;
import org.springblade.system.cache.UserCache; import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.UserInfo; import org.springblade.system.pojo.entity.UserInfo;
@ -44,9 +52,61 @@ public class CertificateMaintenanceServiceImpl extends BaseServiceImpl<Certifica
@Resource @Resource
private CertificateTypeMapper certificateTypeMapper; private CertificateTypeMapper certificateTypeMapper;
@Resource
private IRelTeamSetUserService relTeamSetUserService;
@Resource
TeamSetServiceImpl teamSetService;
@Override @Override
public IPage<CertificateLedgerVO> selectCertificateMaintenancePage(IPage<CertificateLedgerVO> page, CertificateLedgerQuery certificateLedgerQuery) { public IPage<CertificateLedgerVO> selectCertificateMaintenancePage(IPage<CertificateLedgerVO> page, CertificateLedgerQuery certificateLedgerQuery) {
return page.setRecords(baseMapper.selectCertificateMaintenancePage(page, certificateLedgerQuery)); List<CertificateLedgerVO> certificateLedgerVOS = baseMapper.selectCertificateMaintenancePage(page, certificateLedgerQuery);
if (CollUtil.isEmpty(certificateLedgerVOS)){
return page;
}
page.setRecords(certificateLedgerVOS);
//班组
setTeamSetList(page);
return page;
}
private void setTeamSetList(IPage<CertificateLedgerVO> page) {
List<Long> userIds = page.getRecords().stream().map(certificateLedgerVO ->
certificateLedgerVO.getPostHandleVO().getUserId()).toList();
List<RelTeamSetUser> relTeamSetUserList = relTeamSetUserService.list(Wrappers.lambdaQuery(RelTeamSetUser.class)
.in(RelTeamSetUser::getUserId, userIds));
if (CollUtil.isEmpty(relTeamSetUserList)) {
return;
}
Map<Long, List<RelTeamSetUser>> userTeamMap =
relTeamSetUserList.stream().collect(Collectors.groupingBy(RelTeamSetUser::getUserId));
Set<Long> teamIdSet = relTeamSetUserList.stream().map(RelTeamSetUser::getTeamSetId).collect(Collectors.toSet());
List<TeamSet> teamSets = teamSetService.list(Wrappers.lambdaQuery(TeamSet.class)
.in(TeamSet::getId, teamIdSet));
if (CollUtil.isEmpty(teamSets)) {
return;
}
page.getRecords().forEach(s -> {
PostHandleVO postHandleVO = s.getPostHandleVO();
Long userId = postHandleVO.getUserId();
List<RelTeamSetUser> relTeamSetUsers = userTeamMap.getOrDefault(userId, new ArrayList<>());
if (CollUtil.isEmpty(relTeamSetUsers)) {
return;
}
List<TeamSet> teamSetList = relTeamSetUsers.stream().map(relTeamSetUser ->
teamSets.stream()
.filter(teamSet -> teamSet.getId().equals(relTeamSetUser.getTeamSetId()))
.findFirst()
.orElse(null)
).filter(BeanUtil::isNotEmpty).toList();
s.setTeamSetList(teamSetList);
});
} }

@ -62,7 +62,9 @@
<if test="query.statementCategory != null and query.statementCategory != ''"> <if test="query.statementCategory != null and query.statementCategory != ''">
AND mosc.STATEMENT_CATEGORY LIKE CONCAT('%', CONCAT(#{query.statementCategory}, '%')) AND mosc.STATEMENT_CATEGORY LIKE CONCAT('%', CONCAT(#{query.statementCategory}, '%'))
</if> </if>
<if test="query.processId != null">
AND bps.ID = #{query.processId}
</if>
ORDER BY bps.CODE ASC ORDER BY bps.CODE ASC
</select> </select>

@ -1,5 +1,6 @@
package org.springblade.desk.oem.service.impl; package org.springblade.desk.oem.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.util.StringUtils; import com.alibaba.excel.util.StringUtils;
import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -96,9 +97,9 @@ public class OemProcessServiceImpl extends BaseServiceImpl<OemProcessMapper, Oem
if (StringUtils.isEmpty(oemProcessImport.getPaCode())) { if (StringUtils.isEmpty(oemProcessImport.getPaCode())) {
return R.fail("第" + rowNum + "行,工序为空"); return R.fail("第" + rowNum + "行,工序为空");
} }
if(StringUtils.isEmpty(oemProcessImport.getCaCodes())){ //if(StringUtils.isEmpty(oemProcessImport.getCaCodes())){
return R.fail("第" + rowNum + "行,工艺能力为空"); // return R.fail("第" + rowNum + "行,工艺能力为空");
} //}
if(StringUtils.isEmpty(oemProcessImport.getStatementCategory())){ if(StringUtils.isEmpty(oemProcessImport.getStatementCategory())){
return R.fail("第" + rowNum + "行,工序大类为空"); return R.fail("第" + rowNum + "行,工序大类为空");
} }
@ -111,21 +112,24 @@ public class OemProcessServiceImpl extends BaseServiceImpl<OemProcessMapper, Oem
if(!statementCategoryMap.containsKey(oemProcessImport.getStatementCategory())){ if(!statementCategoryMap.containsKey(oemProcessImport.getStatementCategory())){
return R.fail("第" + rowNum + "行,工序大类不存在"); return R.fail("第" + rowNum + "行,工序大类不存在");
} }
LambdaQueryWrapper<CraftAbilityEntity> craftAbilityEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StrUtil.isNotEmpty(oemProcessImport.getCaCodes())){
Set<String> caCodeSet = Arrays.stream(oemProcessImport.getCaCodes().split(",")) LambdaQueryWrapper<CraftAbilityEntity> craftAbilityEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
.collect(Collectors.toCollection(HashSet::new)); Set<String> caCodeSet = Arrays.stream(oemProcessImport.getCaCodes().split(","))
craftAbilityEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet); .collect(Collectors.toCollection(HashSet::new));
List<CraftAbilityEntity> craftAbilityEntities = craftAbilityMapper.selectList(craftAbilityEntityLambdaQueryWrapper); craftAbilityEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet);
if(caCodeSet.size() != craftAbilityEntities.size()){ List<CraftAbilityEntity> craftAbilityEntities = craftAbilityMapper.selectList(craftAbilityEntityLambdaQueryWrapper);
return R.fail("第" + rowNum + "行,工艺能力不存在"); if(caCodeSet.size() != craftAbilityEntities.size()){
return R.fail("第" + rowNum + "行,工艺能力不存在");
}
String caIds = craftAbilityEntities.stream()
.map(entity -> String.valueOf(entity.getId()))
.collect(Collectors.joining(","));
oemProcessImport.setCraftIds(caIds);
} }
Long processId = processSetMap.get(oemProcessImport.getPaCode()); Long processId = processSetMap.get(oemProcessImport.getPaCode());
String caIds = craftAbilityEntities.stream()
.map(entity -> String.valueOf(entity.getId()))
.collect(Collectors.joining(","));
oemProcessImport.setProcessId(processId); oemProcessImport.setProcessId(processId);
oemProcessImport.setCraftIds(caIds);
oemProcessImport.setManual("否".equals(oemProcessImport.getManualStr()) ? "0" : "1"); oemProcessImport.setManual("否".equals(oemProcessImport.getManualStr()) ? "0" : "1");
OemProcessEntity oemProcessEntity = new OemProcessEntity(); OemProcessEntity oemProcessEntity = new OemProcessEntity();
BeanUtils.copyProperties(oemProcessImport, oemProcessEntity); BeanUtils.copyProperties(oemProcessImport, oemProcessEntity);

@ -188,6 +188,7 @@ public class LiquidTankController extends BladeController {
@Operation(summary = "新增一条", description = "传入LiquidTank Obj") @Operation(summary = "新增一条", description = "传入LiquidTank Obj")
public R save(@Valid @RequestBody LiquidTank addOne) { public R save(@Valid @RequestBody LiquidTank addOne) {
addOne.setId(null); addOne.setId(null);
return R.status(service.save(addOne)); return R.status(service.save(addOne));
} }
@ -293,13 +294,11 @@ public class LiquidTankController extends BladeController {
@ApiOperationSupport(order = 72) @ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile") @Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) { public R importExcel(@RequestParam("file") MultipartFile file) {
List<LiquidTank> noticeList = new ArrayList<>(); List<LiquidTankExcel> list = ExcelUtil.read( file, LiquidTankExcel.class);
List<LiquidTankExcel> list = ExcelUtil.read(file, LiquidTankExcel.class); list = list.subList(3, list.size());
R result = service.importExcel(list); R result = service.importExcel(list);
return result; return result;
} }

@ -31,12 +31,12 @@ public class LiquidTankExcel implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** ///**
* 任务前缀 // * 任务前缀
*/ // */
@ColumnWidth(20) //@ColumnWidth(20)
@ExcelProperty("任务前缀") //@ExcelProperty("任务前缀")
private String taskPrefix; //private String taskPrefix;
/** /**
* [作业中心]id * [作业中心]id
*/ */
@ -228,159 +228,176 @@ public class LiquidTankExcel implements Serializable {
@ExcelProperty("每年") @ExcelProperty("每年")
private String jobTypeYearValue; private String jobTypeYearValue;
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* 添加值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
/** /**
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围; * 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/ */
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;") @ExcelProperty("温度类型")
private Long temperatureType; private String temperatureTypeStr;
/**
* PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
/**
* 药品[物料]id
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]id")
private BigDecimal drugMaterialId;
/**
* 工艺含量
*/
@ColumnWidth(20)
@ExcelProperty("工艺含量")
private BigDecimal processContent;
/**
* 上次化验日期
*/
@ColumnWidth(20)
@ExcelProperty("上次化验日期")
private LocalDateTime lastTest;
/**
* 槽液到期日期
*/
@ColumnWidth(20)
@ExcelProperty("槽液到期日期")
private LocalDateTime expiryDate;
/**
* 实测温度
*/
@ColumnWidth(20)
@ExcelProperty("实测温度")
private String temperatureActual;
/**
* 实测ph值
*/
@ColumnWidth(20)
@ExcelProperty("实测ph值")
private String phActual;
/**
* 药品批次号
*/
@ColumnWidth(20)
@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
*/
@ColumnWidth(20)
@ExcelProperty("PH范围LEFT")
private BigDecimal phRangeLeft;
/**
* PH范围RIGHT
*/
@ColumnWidth(20)
@ExcelProperty("PH范围RIGHT")
private BigDecimal phRangeRight;
/**
* 生成任务CRON表达式
*/
@ColumnWidth(20)
@ExcelProperty("生成任务CRON表达式")
private String cronGenTask;
/**
* 温度范围LEFT
*/
@ColumnWidth(20)
@ExcelProperty("温度范围LEFT")
private BigDecimal temperatureRangeLeft;
/**
* 温度范围RIGHT
*/
@ColumnWidth(20)
@ExcelProperty("温度范围RIGHT")
private BigDecimal temperatureRangeRight;
/**
* 室内温度
*/
@ColumnWidth(20)
@ExcelProperty("室内温度")
private BigDecimal temperatureInRoom;
/**
* 环境温度
*/
@ColumnWidth(20)
@ExcelProperty("环境温度")
private BigDecimal temperatureEnv;
/**
* 生成任务 json config
*/
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("生成任务 json config") @ExcelProperty("温度值")
private String jsonConfigGenTask; private String temperatureValue;
/** /**
* 临期提醒 json config * PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("临期提醒 json config")
private String jsonConfigRemind;
/**
* 是否顺延-[1]:;[0]:;
*/ */
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("是否顺延-[1]:是;[0]:否;") @ExcelProperty("PH值")
private Long isPutOff; private String phValue;
///**
// * 室内温度
// */
//@ColumnWidth(20)
//@ExcelProperty("室内温度")
//private BigDecimal temperatureInRoom;
//
///**
// * 环境温度
// */
//@ColumnWidth(20)
//@ExcelProperty("环境温度")
//private BigDecimal temperatureEnv;
//
///**
// * 温度范围LEFT
// */
//@ColumnWidth(20)
//@ExcelProperty("温度范围LEFT")
//private BigDecimal temperatureRangeLeft;
//
///**
// * 温度范围RIGHT
// */
//@ColumnWidth(20)
//@ExcelProperty("温度范围RIGHT")
//private BigDecimal temperatureRangeRight;
//
///**
// * PH范围类型:[1]:无;[2]:PH值范围;
// */
//@ColumnWidth(20)
//@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
//private Long phType;
//
///**
// * PH范围LEFT
// */
//@ColumnWidth(20)
//@ExcelProperty("PH范围LEFT")
//private BigDecimal phRangeLeft;
///**
// * PH范围RIGHT
// */
//@ColumnWidth(20)
//@ExcelProperty("PH范围RIGHT")
//private BigDecimal phRangeRight;
//
//
//@ColumnWidth(20)
//@ExcelProperty("槽液编码/槽号")
//private String code;
///**
// * 添加值[计量单位]id
// */
//@ColumnWidth(20)
//@ExcelProperty("添加值[计量单位]id")
//private BigDecimal addUnitId;
//
//
//
///**
// * 药品[物料]id
// */
//@ColumnWidth(20)
//@ExcelProperty("药品[物料]id")
//private BigDecimal drugMaterialId;
//
///**
// * 工艺含量
// */
//@ColumnWidth(20)
//@ExcelProperty("工艺含量")
//private BigDecimal processContent;
//
//
///**
// * 上次化验日期
// */
//@ColumnWidth(20)
//@ExcelProperty("上次化验日期")
//private LocalDateTime lastTest;
///**
// * 槽液到期日期
// */
//@ColumnWidth(20)
//@ExcelProperty("槽液到期日期")
//private LocalDateTime expiryDate;
//
//
///**
// * 实测温度
// */
//@ColumnWidth(20)
//@ExcelProperty("实测温度")
//private String temperatureActual;
///**
// * 实测ph值
// */
//@ColumnWidth(20)
//@ExcelProperty("实测ph值")
//private String phActual;
//
///**
// * 药品批次号
// */
//@ColumnWidth(20)
//@ExcelProperty("药品批次号")
//private String drugBatNum;
///**
// * 加药后化验值
// */
//@ColumnWidth(20)
//@ExcelProperty("加药后化验值")
//private String postTestValue;
///**
// * 是否合格
// */
//@ColumnWidth(20)
//@ExcelProperty("是否合格")
//private Long qualified;
///**
// * 测量值[计量单位]id
// */
//@ColumnWidth(20)
//@ExcelProperty("测量值[计量单位]id")
//private BigDecimal testUnitId;
//
//
///**
// * 生成任务CRON表达式
// */
//@ColumnWidth(20)
//@ExcelProperty("生成任务CRON表达式")
//private String cronGenTask;
//
///**
// * 生成任务 json config
// */
//@ColumnWidth(20)
//@ExcelProperty("生成任务 json config")
//private String jsonConfigGenTask;
///**
// * 临期提醒 json config
// */
//@ColumnWidth(20)
//@ExcelProperty("临期提醒 json config")
//private String jsonConfigRemind;
///**
// * 是否顺延-[1]:是;[0]:否;
// */
//@ColumnWidth(20)
//@ExcelProperty("是否顺延-[1]:是;[0]:否;")
//private Long isPutOff;
} }

@ -148,6 +148,7 @@ public class CycleTestServiceImpl extends BaseServiceImpl<CycleTestMapper, Cycle
.headRowNumber(1) .headRowNumber(1)
.sheet(0) .sheet(0)
.doRead(); .doRead();
} }
@Override @Override

@ -3,6 +3,8 @@
*/ */
package org.springblade.desk.quality.service.impl; package org.springblade.desk.quality.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -32,11 +34,16 @@ import org.springblade.desk.basic.util.IdUtil;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springblade.system.pojo.entity.UserInfo; import org.springblade.system.pojo.entity.UserInfo;
import org.springblade.wms.feign.StRealtimeStockClient;
import org.springblade.wms.pojo.entity.StGoods;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* [槽液] 服务实现类 * [槽液] 服务实现类
@ -62,12 +69,159 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
private IWorkTankService workTankService; private IWorkTankService workTankService;
@Resource @Resource
private ITeamSetService teamSetService; private ITeamSetService teamSetService;
@Resource
StRealtimeStockClient stRealtimeStockClient;
@Override @Override
public R importExcel(List<LiquidTankExcel> list) { public R importExcel(List<LiquidTankExcel> list) {
List<LiquidTank> noticeList = new ArrayList<>(); List<LiquidTank> noticeList = new ArrayList<>();
R r = check(list);
if (cn.hutool.core.bean.BeanUtil.isNotEmpty(r)){
return r;
}
R<List<StGoods>> stGoods = stRealtimeStockClient.getStGoods();
if (!stGoods.isSuccess() || CollUtil.isEmpty(stGoods.getData())){
return R.fail("获取药品物料信息失败");
}
List<StGoods> stGoodsList = stGoods.getData();
Map<String, Long> stGoodsMap = stGoodsList.stream().collect(Collectors.toMap(StGoods::getGoodsCode, StGoods::getId));
list.forEach(noticeExcel -> {
LiquidTank notice = BeanUtil.copy(noticeExcel, LiquidTank.class);
//工作中心
QueryWrapper<WorkCenter> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("WC_NAME",noticeExcel.getWorkCenterName());
List<WorkCenter> centers = workCenterService.list(queryWrapper);
if(null != centers && centers.size() > 0){
notice.setWorkCenterId(centers.get(0).getId());
}
//作业槽
QueryWrapper<WorkTank> queryWrappertank = new QueryWrapper<>();
queryWrappertank.eq("NAME",noticeExcel.getWorkTankName());
List<WorkTank> tanks = workTankService.list(queryWrappertank);
if(null != tanks && tanks.size() > 0){
notice.setWorkTankId(tanks.get(0).getId());
}
//加药量计算公式
QueryWrapper<Formula> queryWrapperformulaadd = new QueryWrapper<>();
queryWrapperformulaadd.eq("NAME",noticeExcel.getAddDrugFormulaName());
queryWrapperformulaadd.eq("FORMULA_TYPE","1");
List<Formula> adds = formulaService.list(queryWrapperformulaadd);
if(null != adds && adds.size() > 0){
notice.setAddDrugFormulaId(adds.get(0).getId());
}
//添加后理论值计算公式
QueryWrapper<Formula> queryWrapperformulaafter = new QueryWrapper<>();
queryWrapperformulaafter.eq("NAME",noticeExcel.getAfterTheoryFormulaName());
queryWrapperformulaafter.eq("FORMULA_TYPE","2");
List<Formula> afters = formulaService.list(queryWrapperformulaafter);
if(null != afters && afters.size() > 0){
notice.setAfterTheoryFormulaId(afters.get(0).getId());
}
//化验人
if(noticeExcel.getTestUserName() != null && !noticeExcel.getTestUserName().trim().isEmpty()){
List<User> tests = userClient.listByNameNolike(noticeExcel.getTestUserName());
if(null != tests && tests.size() > 0){
notice.setTestUserId(tests.get(0).getId());
}
}
//工艺主管
if(noticeExcel.getProcessUserName() != null && !noticeExcel.getProcessUserName().trim().isEmpty()){
List<User> process = userClient.listByNameNolike(noticeExcel.getProcessUserName());
if(null != process && process.size() > 0){
notice.setProcessUserId(process.get(0).getId());
}
}
//班组
QueryWrapper<TeamSet> queryWrapperteam = new QueryWrapper<>();
queryWrapperteam.eq("TS_NAME",noticeExcel.getTeamName());
List<TeamSet> teams = teamSetService.list(queryWrapperteam);
if(null != teams && teams.size() > 0){
notice.setTeamId(teams.get(0).getId());
}
notice.setDrugMaterialId(stGoodsMap.getOrDefault(noticeExcel.getDrugMaterialCode(),null));
//温度 、 ph值
setTemperatureAndPh(noticeExcel,notice);
noticeList.add(notice);
});
return R.data(this.saveBatch(noticeList));
}
private void setTemperatureAndPh(LiquidTankExcel noticeExcel, LiquidTank notice) {
// 2026-05-29
notice.setTemperatureType(LiquidTank.TemperatureTypeEnum.NONE.getCode());
notice.setPhType(LiquidTank.PhTypeEnum.NONE.getCode());
if (StrUtil.isNotEmpty(noticeExcel.getTemperatureTypeStr())) {
LiquidTank.TemperatureTypeEnum byMessage = LiquidTank.TemperatureTypeEnum.getByMessage(noticeExcel.getTemperatureTypeStr());
if (cn.hutool.core.bean.BeanUtil.isEmpty(byMessage)) {
throw new RuntimeException("温度类型错误");
}
notice.setTemperatureType(byMessage.getCode());
if (byMessage.getCode().equals(LiquidTank.TemperatureTypeEnum.TEMPERATURE_RANGE.getCode())) {
try {
List<String> dates = Arrays.asList(noticeExcel.getTemperatureValue().split("-"));
String l = dates.get(0);
String r = dates.get(1);
double dL = Double.parseDouble(l);
double dR = Double.parseDouble(r);
notice.setTemperatureRangeLeft(BigDecimal.valueOf(dL));
notice.setTemperatureRangeRight(BigDecimal.valueOf(dR));
} catch (Exception e) {
throw new RuntimeException("周期为温度范围的温度数据格式不正确");
}
}
if (byMessage.getCode().equals(LiquidTank.TemperatureTypeEnum.INDOOR_TEMPERATURE.getCode())) {
try {
Double.parseDouble(noticeExcel.getTemperatureValue());
notice.setTemperatureInRoom(BigDecimal.valueOf(Double.parseDouble(noticeExcel.getTemperatureValue())));
} catch (Exception e) {
throw new RuntimeException("周期为室内温度的室内温度数据格式不正确");
}
}
if (byMessage.getCode().equals(LiquidTank.TemperatureTypeEnum.ENVIRONMENT_TEMPERATURE.getCode())) {
try {
Double.parseDouble(noticeExcel.getTemperatureValue());
notice.setTemperatureEnv(BigDecimal.valueOf(Double.parseDouble(noticeExcel.getTemperatureValue())));
} catch (Exception e) {
throw new RuntimeException("周期为环境温度的室内温度数据格式不正确");
}
}
}
if (StrUtil.isNotEmpty(noticeExcel.getPhValue())) {
notice.setPhType(LiquidTank.PhTypeEnum.PH_VALUE_RANGE.getCode());
try {
List<String> dates = Arrays.asList(noticeExcel.getPhValue().split("-"));
String l = dates.get(0);
String r = dates.get(1);
double dL = Double.parseDouble(l);
double dR = Double.parseDouble(r);
notice.setPhRangeLeft(BigDecimal.valueOf(dL));
notice.setPhRangeRight(BigDecimal.valueOf(dR));
} catch (Exception e) {
throw new RuntimeException("ph值范围数据格式不正确");
}
}
}
for(LiquidTankExcel excel:list) { private R check(List<LiquidTankExcel> noticeList) {
for(LiquidTankExcel excel:noticeList) {
Integer jobType = excel.getJobType(); Integer jobType = excel.getJobType();
String jobTypeWeekValue = excel.getJobTypeWeekValue(); String jobTypeWeekValue = excel.getJobTypeWeekValue();
@ -84,16 +238,16 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
if (jobTypeYearValue != null && !jobTypeYearValue.trim().isEmpty()) { if (jobTypeYearValue != null && !jobTypeYearValue.trim().isEmpty()) {
count++; count++;
} }
if(count > 1){ if (count > 1) {
return R.fail("每周、每月、每年只能输入一个周期类型值"); return R.fail("每周、每月、每年只能输入一个周期类型值");
} }
if(jobType == 1){ if (jobType == 1) {
if (jobTypeWeekValue == null || jobTypeWeekValue.trim().isEmpty()) { if (jobTypeWeekValue == null || jobTypeWeekValue.trim().isEmpty()) {
return R.fail("当前周期类型是周,请填写每周数据"); return R.fail("当前周期类型是周,请填写每周数据");
} }
List<String> weekList = Func.toStrList(jobTypeWeekValue); List<String> weekList = Func.toStrList(jobTypeWeekValue);
for(String week:weekList){ for (String week : weekList) {
try { try {
Integer.parseInt(week); Integer.parseInt(week);
} catch (Exception e) { } catch (Exception e) {
@ -107,25 +261,25 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
} }
if(jobType == 2){ if (jobType == 2) {
if (jobTypeMonthValue == null || jobTypeMonthValue.trim().isEmpty()) { if (jobTypeMonthValue == null || jobTypeMonthValue.trim().isEmpty()) {
return R.fail("当前周期类型是月,请填写每月数据"); return R.fail("当前周期类型是月,请填写每月数据");
} }
List<String> monthList = Func.toStrList(jobTypeMonthValue); List<String> monthList = Func.toStrList(jobTypeMonthValue);
for(String month:monthList){ for (String month : monthList) {
try { try {
Integer.parseInt(month); Integer.parseInt(month);
} catch (Exception e) { } catch (Exception e) {
return R.fail("周期为月的每月数据格式不正确"); return R.fail("周期为月的每月数据格式不正确");
} }
if (Integer.parseInt(month)>=1 && Integer.parseInt(month)<=31) { if (Integer.parseInt(month) >= 1 && Integer.parseInt(month) <= 31) {
} else { } else {
return R.fail("周期为月的每月数据格式不正确"); return R.fail("周期为月的每月数据格式不正确");
} }
} }
} }
if(jobType == 3){ if (jobType == 3) {
if (jobTypeYearValue == null || jobTypeYearValue.trim().isEmpty()) { if (jobTypeYearValue == null || jobTypeYearValue.trim().isEmpty()) {
return R.fail("当前周期类型是年,请填写每年数据"); return R.fail("当前周期类型是年,请填写每年数据");
} }
@ -133,9 +287,8 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
List<String> yearList = Func.toStrList(jobTypeYearValue); List<String> yearList = Func.toStrList(jobTypeYearValue);
for (String date : yearList) { for (String date : yearList) {
List< String> dates = Arrays.asList(date.split("-")); List<String> dates = Arrays.asList(date.split("-"));
String month = dates.get(0); String month = dates.get(0);
String day = dates.get(1); String day = dates.get(1);
@ -146,9 +299,9 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
} catch (Exception e) { } catch (Exception e) {
return R.fail("周期为年的每年数据格式不正确"); return R.fail("周期为年的每年数据格式不正确");
} }
if (Integer.parseInt(month)>=1 && Integer.parseInt(month)<=12) { if (Integer.parseInt(month) >= 1 && Integer.parseInt(month) <= 12) {
if(Integer.parseInt(day)>=1 && Integer.parseInt(day)<=31){ if (Integer.parseInt(day) >= 1 && Integer.parseInt(day) <= 31) {
}else{ } else {
return R.fail("周期为年的每年数据格式不正确"); return R.fail("周期为年的每年数据格式不正确");
} }
} else { } else {
@ -158,71 +311,7 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
} }
} }
} }
return null;
list.forEach(noticeExcel -> {
LiquidTank notice = BeanUtil.copy(noticeExcel, LiquidTank.class);
//工作中心
QueryWrapper<WorkCenter> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("WC_NAME",noticeExcel.getWorkCenterName());
List<WorkCenter> centers = workCenterService.list(queryWrapper);
if(null != centers && centers.size() > 0){
notice.setWorkCenterId(centers.get(0).getId());
}
//作业槽
QueryWrapper<WorkTank> queryWrappertank = new QueryWrapper<>();
queryWrappertank.eq("NAME",noticeExcel.getWorkTankName());
List<WorkTank> tanks = workTankService.list(queryWrappertank);
if(null != tanks && tanks.size() > 0){
notice.setWorkTankId(tanks.get(0).getId());
}
//加药量计算公式
QueryWrapper<Formula> queryWrapperformulaadd = new QueryWrapper<>();
queryWrapperformulaadd.eq("NAME",noticeExcel.getAddDrugFormulaName());
queryWrapperformulaadd.eq("FORMULA_TYPE","1");
List<Formula> adds = formulaService.list(queryWrapperformulaadd);
if(null != adds && adds.size() > 0){
notice.setAddDrugFormulaId(adds.get(0).getId());
}
//添加后理论值计算公式
QueryWrapper<Formula> queryWrapperformulaafter = new QueryWrapper<>();
queryWrapperformulaafter.eq("NAME",noticeExcel.getAfterTheoryFormulaName());
queryWrapperformulaafter.eq("FORMULA_TYPE","2");
List<Formula> afters = formulaService.list(queryWrapperformulaafter);
if(null != afters && afters.size() > 0){
notice.setAfterTheoryFormulaId(afters.get(0).getId());
}
//化验人
if(noticeExcel.getTestUserName() != null && !noticeExcel.getTestUserName().trim().isEmpty()){
List<User> tests = userClient.listByNameNolike(noticeExcel.getTestUserName());
if(null != tests && tests.size() > 0){
notice.setTestUserId(tests.get(0).getId());
}
}
//工艺主管
if(noticeExcel.getProcessUserName() != null && !noticeExcel.getProcessUserName().trim().isEmpty()){
List<User> process = userClient.listByNameNolike(noticeExcel.getProcessUserName());
if(null != process && process.size() > 0){
notice.setProcessUserId(process.get(0).getId());
}
}
//班组
QueryWrapper<TeamSet> queryWrapperteam = new QueryWrapper<>();
queryWrapperteam.eq("TS_NAME",noticeExcel.getTeamName());
List<TeamSet> teams = teamSetService.list(queryWrapperteam);
if(null != teams && teams.size() > 0){
notice.setTeamId(teams.get(0).getId());
}
noticeList.add(notice);
});
return R.data(this.saveBatch(noticeList));
} }
@Override @Override

@ -47,11 +47,11 @@ import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.time.ZoneId;
import java.util.List; import java.util.*;
import java.util.Objects;
/** /**
* [槽液检测任务] 服务实现类 * [槽液检测任务] 服务实现类
@ -480,7 +480,15 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
task.setFillingLocation(lt.getFillingLocation()); task.setFillingLocation(lt.getFillingLocation());
task.setAnalysisCycle(lt.getAnalysisCycle()); task.setAnalysisCycle(lt.getAnalysisCycle());
task.setTestElement(lt.getTestElement()); task.setTestElement(lt.getTestElement());
task.setValidDate(lt.getValidDate()); Date createTime = lt.getCreateTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(createTime);
calendar.add(Calendar.DAY_OF_YEAR, Objects.isNull(lt.getAnalysisCycle()) ? 0 : lt.getAnalysisCycle());
Instant instant = calendar.getTime().toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
task.setValidDate(localDate);
} }
task.setName(""); task.setName("");
task.setCode("" + System.currentTimeMillis()); task.setCode("" + System.currentTimeMillis());

@ -73,6 +73,10 @@ public class StRealtimeStockClientImpl implements StRealtimeStockClient {
StGoods detail = stGoodsService.getById(goodId); StGoods detail = stGoodsService.getById(goodId);
return R.data(detail); return R.data(detail);
} }
@Override
public R<List<StGoods>> getStGoods() {
return R.data(stGoodsService.list());
}
@Override @Override
public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) { public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) {

Loading…
Cancel
Save