liweidong
张乾翔 17 hours 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 lombok.Data;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import java.util.List;
@ -18,4 +20,7 @@ public class CertificateLedgerVO {
//岗位证书数据集合
@Schema(description = "岗位证书数据集合")
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 java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDate;
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]:温度范围;
*/
@Schema(description = "温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
private Integer temperatureType;
/**
* 温度范围LEFT
*/
@Schema(description = "温度范围LEFT")
private Long temperatureRangeLeft;
private BigDecimal temperatureRangeLeft;
/**
* 温度范围RIGHT
*/
@Schema(description = "温度范围RIGHT")
private Long temperatureRangeRight;
private BigDecimal temperatureRangeRight;
/**
* 室内温度
*/
@Schema(description = "室内温度")
private Long temperatureInRoom;
private BigDecimal temperatureInRoom;
/**
* 环境温度
*/
@Schema(description = "环境温度")
private Long temperatureEnv;
private BigDecimal temperatureEnv;
/**
* PH范围类型:[1]:;[2]:PH值范围;
*/
@Schema(description = "PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
private Integer phType;
/**
* 实测ph值
*/
@ -423,12 +428,12 @@ public class LiquidTank extends BaseEntity {
* PH范围LEFT
*/
@Schema(description = "PH范围LEFT")
private Long phRangeLeft;
private BigDecimal phRangeLeft;
/**
* 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]:否;")
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_Id = API_PREFIX + "/getById";
String GET_ST_GOODS = API_PREFIX + "/getStGoods";
String GET_REALTIME_STOCK_BY_GOOD = API_PREFIX + "/getRealtimeStockByGood";
@ -46,7 +47,8 @@ public interface StRealtimeStockClient {
@PostMapping(MEASURING_Id)
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) {
return null;
}
@Override
public R<List<StGoods>> getStGoods() {
return null;
}
@Override
public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) {

@ -1,9 +1,16 @@
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
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.PostHandleMapper;
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.vo.CertificateLedgerVO;
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.system.cache.UserCache;
import org.springblade.system.pojo.entity.UserInfo;
@ -44,9 +52,61 @@ public class CertificateMaintenanceServiceImpl extends BaseServiceImpl<Certifica
@Resource
private CertificateTypeMapper certificateTypeMapper;
@Resource
private IRelTeamSetUserService relTeamSetUserService;
@Resource
TeamSetServiceImpl teamSetService;
@Override
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 != ''">
AND mosc.STATEMENT_CATEGORY LIKE CONCAT('%', CONCAT(#{query.statementCategory}, '%'))
</if>
<if test="query.processId != null">
AND bps.ID = #{query.processId}
</if>
ORDER BY bps.CODE ASC
</select>

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

@ -188,6 +188,7 @@ public class LiquidTankController extends BladeController {
@Operation(summary = "新增一条", description = "传入LiquidTank Obj")
public R save(@Valid @RequestBody LiquidTank addOne) {
addOne.setId(null);
return R.status(service.save(addOne));
}
@ -293,13 +294,11 @@ public class LiquidTankController extends BladeController {
@ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile")
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);
return result;
}

@ -31,12 +31,12 @@ public class LiquidTankExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务前缀
*/
@ColumnWidth(20)
@ExcelProperty("任务前缀")
private String taskPrefix;
///**
// * 任务前缀
// */
//@ColumnWidth(20)
//@ExcelProperty("任务前缀")
//private String taskPrefix;
/**
* [作业中心]id
*/
@ -228,159 +228,176 @@ public class LiquidTankExcel implements Serializable {
@ExcelProperty("每年")
private String jobTypeYearValue;
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* 添加值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
/**
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/
@ColumnWidth(20)
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
/**
* 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;
@ExcelProperty("温度类型")
private String temperatureTypeStr;
/**
* 生成任务 json config
*/
@ColumnWidth(20)
@ExcelProperty("生成任务 json config")
private String jsonConfigGenTask;
@ExcelProperty("温度值")
private String temperatureValue;
/**
* 临期提醒 json config
*/
@ColumnWidth(20)
@ExcelProperty("临期提醒 json config")
private String jsonConfigRemind;
/**
* 是否顺延-[1]:;[0]:;
* PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("是否顺延-[1]:是;[0]:否;")
private Long isPutOff;
@ExcelProperty("PH值")
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)
.sheet(0)
.doRead();
}
@Override

@ -3,6 +3,8 @@
*/
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.query.QueryWrapper;
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.pojo.entity.User;
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 java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
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;
@Resource
private ITeamSetService teamSetService;
@Resource
StRealtimeStockClient stRealtimeStockClient;
@Override
public R importExcel(List<LiquidTankExcel> list) {
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();
String jobTypeWeekValue = excel.getJobTypeWeekValue();
@ -84,16 +238,16 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
if (jobTypeYearValue != null && !jobTypeYearValue.trim().isEmpty()) {
count++;
}
if(count > 1){
if (count > 1) {
return R.fail("每周、每月、每年只能输入一个周期类型值");
}
if(jobType == 1){
if (jobType == 1) {
if (jobTypeWeekValue == null || jobTypeWeekValue.trim().isEmpty()) {
return R.fail("当前周期类型是周,请填写每周数据");
}
List<String> weekList = Func.toStrList(jobTypeWeekValue);
for(String week:weekList){
for (String week : weekList) {
try {
Integer.parseInt(week);
} 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()) {
return R.fail("当前周期类型是月,请填写每月数据");
}
List<String> monthList = Func.toStrList(jobTypeMonthValue);
for(String month:monthList){
for (String month : monthList) {
try {
Integer.parseInt(month);
} catch (Exception e) {
return R.fail("周期为月的每月数据格式不正确");
}
if (Integer.parseInt(month)>=1 && Integer.parseInt(month)<=31) {
if (Integer.parseInt(month) >= 1 && Integer.parseInt(month) <= 31) {
} else {
return R.fail("周期为月的每月数据格式不正确");
}
}
}
if(jobType == 3){
if (jobType == 3) {
if (jobTypeYearValue == null || jobTypeYearValue.trim().isEmpty()) {
return R.fail("当前周期类型是年,请填写每年数据");
}
@ -133,9 +287,8 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
List<String> yearList = Func.toStrList(jobTypeYearValue);
for (String date : yearList) {
List< String> dates = Arrays.asList(date.split("-"));
List<String> dates = Arrays.asList(date.split("-"));
String month = dates.get(0);
String day = dates.get(1);
@ -146,9 +299,9 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
} catch (Exception e) {
return R.fail("周期为年的每年数据格式不正确");
}
if (Integer.parseInt(month)>=1 && Integer.parseInt(month)<=12) {
if(Integer.parseInt(day)>=1 && Integer.parseInt(day)<=31){
}else{
if (Integer.parseInt(month) >= 1 && Integer.parseInt(month) <= 12) {
if (Integer.parseInt(day) >= 1 && Integer.parseInt(day) <= 31) {
} else {
return R.fail("周期为年的每年数据格式不正确");
}
} else {
@ -158,71 +311,7 @@ public class LiquidTankServiceImpl extends BaseServiceImpl<LiquidTankMapper, Liq
}
}
}
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));
return null;
}
@Override

@ -47,11 +47,11 @@ import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.time.ZoneId;
import java.util.*;
/**
* [槽液检测任务] 服务实现类
@ -480,7 +480,15 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
task.setFillingLocation(lt.getFillingLocation());
task.setAnalysisCycle(lt.getAnalysisCycle());
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.setCode("" + System.currentTimeMillis());

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

Loading…
Cancel
Save