Compare commits

...

8 Commits

Author SHA1 Message Date
shusir
c6f4034685 fix:物料新增入库 2026-02-05 18:02:28 +08:00
wxr
e29c43032c 样品委托提交时参数中配置了默认值,业务参数添加默认值 2026-02-05 17:24:39 +08:00
wxr
83fe91812d 任务分配报错bug修复 2026-02-05 17:18:10 +08:00
shusir
50cfdea28d Merge remote-tracking branch 'origin/test' into test 2026-02-05 08:32:13 +08:00
wxr
7d8a5c1e88 荧光线、分析时间等修改 2026-02-04 19:31:41 +08:00
FCL
9014e8bcc8 Merge remote-tracking branch 'origin/test' into test 2026-02-04 18:21:51 +08:00
FCL
fa43a6579a 报告增加属性 2026-02-04 18:07:42 +08:00
shusir
d5b40bfba0 feat:准备物料入库接口 2026-02-04 18:03:51 +08:00
41 changed files with 798 additions and 118 deletions

View File

@@ -182,6 +182,7 @@ public interface ErrorCodeConstants {
ErrorCode MATERIAL_LIFECYCLE_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程不存在"); ErrorCode MATERIAL_LIFECYCLE_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程不存在");
ErrorCode MATERIAL_BATCH_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料批次不存在"); ErrorCode MATERIAL_BATCH_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料批次不存在");
ErrorCode MATERIAL_BATCH_GONG_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料批次工段不存在");
ErrorCode MATERIAL_BATCH_ASSIGN_END = new ErrorCode(1_032_160_000, "物料批次已拆分,不可操作"); ErrorCode MATERIAL_BATCH_ASSIGN_END = new ErrorCode(1_032_160_000, "物料批次已拆分,不可操作");
ErrorCode GONGDUAN_BELONG_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段所属的物料批次不一致"); ErrorCode GONGDUAN_BELONG_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段所属的物料批次不一致");
ErrorCode GONGDUAN_QUANTITY_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段累加数量和批次数量不一致"); ErrorCode GONGDUAN_QUANTITY_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段累加数量和批次数量不一致");

View File

@@ -77,6 +77,9 @@ public interface QmsCommonConstant {
/** 已驳回 **/ /** 已驳回 **/
String REJECTED = "rejected"; String REJECTED = "rejected";
/** 已拒绝 **/
String REFUSED = "refused";
/** 作废 **/ /** 作废 **/
String VOID = "void"; String VOID = "void";

View File

@@ -0,0 +1,30 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class BusinessAssayTaskParameterDataExtendRespVO extends BusinessAssayTaskParameterDataRespVO {
@Schema(description = "检测方法ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29823")
@ExcelProperty("检测方法ID")
private Long configAssayMethodId;
@Schema(description = "参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("参数名称")
private String parameterName;
@Schema(description = "参数简称", example = "张三")
@ExcelProperty("参数简称")
private String shortName;
@Schema(description = "参数序号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("参数序号")
private Integer no;
@Schema(description = "键值")
@ExcelProperty("键值")
private String key;
}

View File

@@ -32,6 +32,14 @@ public class BusinessXRFDataPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleTime; private LocalDateTime[] sampleTime;
@Schema(description = "样品开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleStartTime;
@Schema(description = "样品结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleEndTime;
@Schema(description = "分析人") @Schema(description = "分析人")
private String assayOperator; private String assayOperator;

View File

@@ -35,6 +35,14 @@ public class BusinessXRFDataReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleTime; private LocalDateTime[] sampleTime;
@Schema(description = "样品开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleStartTime;
@Schema(description = "样品结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleEndTime;
@Schema(description = "分析人") @Schema(description = "分析人")
private String assayOperator; private String assayOperator;

View File

@@ -40,6 +40,14 @@ public class BusinessXRFDataRespVO {
@ExcelProperty("样品时间") @ExcelProperty("样品时间")
private LocalDateTime sampleTime; private LocalDateTime sampleTime;
@Schema(description = "样品开始时间")
@ExcelProperty("样品开始时间")
private LocalDateTime sampleStartTime;
@Schema(description = "样品结束时间")
@ExcelProperty("样品结束时间")
private LocalDateTime sampleEndTime;
@Schema(description = "分析人") @Schema(description = "分析人")
@ExcelProperty("分析人") @ExcelProperty("分析人")
private String assayOperator; private String assayOperator;

View File

@@ -34,6 +34,12 @@ public class BusinessXRFDataSaveReqVO {
@Schema(description = "样品时间") @Schema(description = "样品时间")
private LocalDateTime sampleTime; private LocalDateTime sampleTime;
@Schema(description = "样品开始时间")
private LocalDateTime sampleStartTime;
@Schema(description = "样品结束时间")
private LocalDateTime sampleEndTime;
@Schema(description = "分析人") @Schema(description = "分析人")
private String assayOperator; private String assayOperator;

View File

@@ -2,10 +2,7 @@ package com.zt.plat.module.qms.business.bus.dal.dataobject;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/** /**
@@ -64,6 +61,16 @@ public class BusinessXRFDataDO extends BusinessBaseDO {
@TableField("SMP_TM") @TableField("SMP_TM")
private LocalDateTime sampleTime; private LocalDateTime sampleTime;
/** /**
* 样品开始时间
*/
@TableField("SMP_STRT_TM")
private LocalDateTime sampleStartTime;
/**
* 样品结束时间
*/
@TableField("SMP_END_TM")
private LocalDateTime sampleEndTime;
/**
* 分析人 * 分析人
*/ */
@TableField("ASY_OPTR") @TableField("ASY_OPTR")

View File

@@ -290,6 +290,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName) .selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName)
.selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode) .selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode)
.selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayTaskDataExtendRespVO::getSampleAssayCode) .selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayTaskDataExtendRespVO::getSampleAssayCode)
.selectAs(BusinessSubSampleDO::getConfigSubSampleId, BusinessAssayTaskDataExtendRespVO::getConfigSubSampleId)
.in(BusinessSubSampleDO::getSampleAssayCode, sampleAssayCodes) .in(BusinessSubSampleDO::getSampleAssayCode, sampleAssayCodes)
.eq(ConfigAssayMethodDO::getDictionaryBusinessKey, configAssayMethodDictionaryBusinessKey) .eq(ConfigAssayMethodDO::getDictionaryBusinessKey, configAssayMethodDictionaryBusinessKey)
.eq(BusinessAssayTaskDataDO::getIsReported, QmsCommonConstant.NO)); .eq(BusinessAssayTaskDataDO::getIsReported, QmsCommonConstant.NO));

View File

@@ -61,4 +61,18 @@ public interface BusinessAssayTaskParameterDataMapper extends BaseMapperX<Busine
.orderByAsc(ConfigAssayMethodParameterDO::getSortNo)); .orderByAsc(ConfigAssayMethodParameterDO::getSortNo));
} }
default List<BusinessAssayTaskParameterDataExtendRespVO> selectExtendByBusinessAssayTaskDataIds(List<Long> businessAssayTaskDataIdList) {
return selectJoinList(BusinessAssayTaskParameterDataExtendRespVO.class, new MPJLambdaWrapperX<BusinessAssayTaskParameterDataDO>()
.leftJoin(ConfigAssayMethodParameterDO.class, ConfigAssayMethodParameterDO::getId, BusinessAssayTaskParameterDataDO::getConfigAssayMethodParameterId)
.selectAll(BusinessAssayTaskParameterDataDO.class)
.selectAs(ConfigAssayMethodParameterDO::getConfigAssayMethodId, BusinessAssayTaskParameterDataExtendRespVO::getConfigAssayMethodId)
.selectAs(ConfigAssayMethodParameterDO::getParameterName, BusinessAssayTaskParameterDataExtendRespVO::getParameterName)
.selectAs(ConfigAssayMethodParameterDO::getShortName, BusinessAssayTaskParameterDataExtendRespVO::getShortName)
.selectAs(ConfigAssayMethodParameterDO::getKey, BusinessAssayTaskParameterDataExtendRespVO::getKey)
.selectAs(ConfigAssayMethodParameterDO::getNo, BusinessAssayTaskParameterDataExtendRespVO::getNo)
.in(BusinessAssayTaskParameterDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList)
);
}
} }

View File

@@ -643,6 +643,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
if (StringUtils.isNotBlank(configAssayMethodProjectParameterDO.getDefaultValue())) {
businessAssayParameterDataDO.setValue(configAssayMethodProjectParameterDO.getDefaultValue());
}
businessAssayParameterDataDOList.add(businessAssayParameterDataDO); businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
@@ -661,6 +664,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
if (StringUtils.isNotBlank(configAssayMethodProjectParameterDO.getDefaultValue())) {
businessAssayParameterDataDO.setValue(configAssayMethodProjectParameterDO.getDefaultValue());
}
businessAssayParameterDataDOList.add(businessAssayParameterDataDO); businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
@@ -904,6 +910,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
if (StringUtils.isNotBlank(configAssayMethodProjectParameterDO.getDefaultValue())) {
businessAssayParameterDataDO.setValue(configAssayMethodProjectParameterDO.getDefaultValue());
}
businessAssayParameterDataDOList.add(businessAssayParameterDataDO); businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
@@ -922,6 +931,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
if (StringUtils.isNotBlank(configAssayMethodProjectParameterDO.getDefaultValue())) {
businessAssayParameterDataDO.setValue(configAssayMethodProjectParameterDO.getDefaultValue());
}
businessAssayParameterDataDOList.add(businessAssayParameterDataDO); businessAssayParameterDataDOList.add(businessAssayParameterDataDO);

View File

@@ -144,8 +144,11 @@ public class BusinessAssayTaskDataServiceImpl implements BusinessAssayTaskDataSe
List<String> projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个 List<String> projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个
for (String project : projectList) { for (String project : projectList) {
String parameter = target.getParameter(); String parameter = target.getParameter();
BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && project.equals(f.getSimpleName())).findFirst().orElse(null);
BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); if (currentBusinessAssayProjectData == null) {//如果检测项目为空,则跳出当前循环
continue;
}
BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && parameter.equals(f.getParameterKey())).findFirst().orElse(null);
if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) { if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) {
ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append("").append(currentBusinessAssayParameterData.getValue()).append(""); ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append("").append(currentBusinessAssayParameterData.getValue()).append("");
break; break;
@@ -187,8 +190,11 @@ public class BusinessAssayTaskDataServiceImpl implements BusinessAssayTaskDataSe
List<String> projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个 List<String> projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个
for (String project : projectList) { for (String project : projectList) {
String parameter = target.getParameter(); String parameter = target.getParameter();
BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && project.equals(f.getSimpleName())).findFirst().orElse(null);
BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); if (currentBusinessAssayProjectData == null) {//如果检测项目为空,则跳出当前循环
continue;
}
BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && parameter.equals(f.getParameterKey())).findFirst().orElse(null);
if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) { if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) {
ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append("").append(currentBusinessAssayParameterData.getValue()).append(""); ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append("").append(currentBusinessAssayParameterData.getValue()).append("");
break; break;

View File

@@ -666,11 +666,11 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
String targetParameter = target.getParameter(); String targetParameter = target.getParameter();
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter); BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter);
if (businessAssayParameterDataDO == null) { // if (businessAssayParameterDataDO == null) {
throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误"); // throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误");
} // }
if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) { if (businessAssayParameterDataDO != null && StringUtils.isBlank(businessAssayParameterDataDO.getValue())) {
//1 查询委托明细 //1 查询委托明细
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId()); BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId());
//2 查询样品大类 //2 查询样品大类
@@ -1290,11 +1290,14 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
//循环任务,赋值 //循环任务,赋值
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : businessAssayTaskDataExtendList) { for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : businessAssayTaskDataExtendList) {
ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodDOList.stream().filter(f -> f.getConfigBaseSampleId().equals(businessAssayTaskData.getConfigSubSampleId()) && f.getConfigAssayMethodId().equals(businessAssayTaskData.getConfigAssayMethodId())).findFirst().orElse(null); ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodDOList.stream().filter(f -> f.getConfigSubSampleId().equals(businessAssayTaskData.getConfigSubSampleId()) && f.getConfigAssayMethodId().equals(businessAssayTaskData.getConfigAssayMethodId())).findFirst().orElse(null);
String configInfomation = configSubSampleMethod.getConfigInfomation(); String configInfomation = configSubSampleMethod.getConfigInfomation();
if (StringUtils.isNotBlank(configInfomation)) { if (StringUtils.isNotBlank(configInfomation)) {
ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class);
List<ConfigSubSampleMethodConfItem> setParamList = configSubSampleMethodConfInfo.getSetParam(); List<ConfigSubSampleMethodConfItem> setParamList = configSubSampleMethodConfInfo.getSetParam();
if (CollUtil.isEmpty(setParamList)) {
continue;//跳出循环
}
String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null); String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null);
List<BusinessAssayTaskDataDO> targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey); List<BusinessAssayTaskDataDO> targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey);

View File

@@ -214,9 +214,17 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
//委托单号 //委托单号
String entrustCode = ""; String entrustCode = "";
if(!ObjectUtils.isEmpty(entrustList)){ if(!ObjectUtils.isEmpty(entrustList)){
for(BusinessSampleEntrustRegistrationDO entrust : entrustList){ for(BusinessSampleEntrustRegistrationDO entrust : entrustList){
entrustCode += entrust.getEntrustNumber() + ","; entrustCode += entrust.getEntrustNumber() + ",";
String externalInfomation = entrust.getExternalInfomation();
if(!ObjectUtils.isEmpty(externalInfomation)){
JSONObject externalInfomationJson = JSONObject.parseObject(externalInfomation);
String sampleCategory = externalInfomationJson.getString("sampleCategory");
if(!ObjectUtils.isEmpty(sampleCategory))
formDataJson.put("sampleCategory", sampleCategory);
}
break; break;
} }
} }

View File

@@ -7,6 +7,7 @@ import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO; import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore;
import com.zt.plat.framework.excel.core.util.ExcelUtils; import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundRespVO;
@@ -29,35 +30,28 @@ import java.util.List;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static com.zt.plat.framework.common.pojo.CommonResult.success; import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 入库") @Tag(name = "管理后台 - 物料入库")
@RestController @RestController
@RequestMapping("/t/material-inventory-inbound") @RequestMapping("/qms/resource/material-inventory-inbound")
@Validated @Validated
@DeptDataPermissionIgnore(enable = "true")
public class MaterialInventoryInboundController implements BusinessControllerMarker { public class MaterialInventoryInboundController implements BusinessControllerMarker {
@Resource @Resource
private MaterialInventoryInboundService materialInventoryInboundService; private MaterialInventoryInboundService materialInventoryInboundService;
@PostMapping("/create") @PostMapping("/add")
@Operation(summary = "创建入库") @Operation(summary = "物料入库")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:create')") // @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:create')")
public CommonResult<MaterialInventoryInboundRespVO> createMaterialInventoryInbound(@Valid @RequestBody MaterialInventoryInboundSaveReqVO createReqVO) { public CommonResult<MaterialInventoryInboundRespVO> createMaterialInventoryInbound(@Valid @RequestBody MaterialInventoryInboundSaveReqVO createReqVO) {
return success(materialInventoryInboundService.createMaterialInventoryInbound(createReqVO)); return success(materialInventoryInboundService.createMaterialInventoryInbound(createReqVO));
} }
@PutMapping("/update")
@Operation(summary = "更新入库")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:update')")
public CommonResult<Boolean> updateMaterialInventoryInbound(@Valid @RequestBody MaterialInventoryInboundSaveReqVO updateReqVO) {
materialInventoryInboundService.updateMaterialInventoryInbound(updateReqVO);
return success(true);
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除入库") @Operation(summary = "删除入库")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:delete')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:delete')")
public CommonResult<Boolean> deleteMaterialInventoryInbound(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteMaterialInventoryInbound(@RequestParam("id") Long id) {
materialInventoryInboundService.deleteMaterialInventoryInbound(id); materialInventoryInboundService.deleteMaterialInventoryInbound(id);
return success(true); return success(true);
@@ -66,7 +60,7 @@ public class MaterialInventoryInboundController implements BusinessControllerMar
@DeleteMapping("/delete-list") @DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除入库") @Operation(summary = "批量删除入库")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:delete')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:delete')")
public CommonResult<Boolean> deleteMaterialInventoryInboundList(@RequestBody BatchDeleteReqVO req) { public CommonResult<Boolean> deleteMaterialInventoryInboundList(@RequestBody BatchDeleteReqVO req) {
materialInventoryInboundService.deleteMaterialInventoryInboundListByIds(req.getIds()); materialInventoryInboundService.deleteMaterialInventoryInboundListByIds(req.getIds());
return success(true); return success(true);
@@ -75,7 +69,7 @@ public class MaterialInventoryInboundController implements BusinessControllerMar
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得入库") @Operation(summary = "获得入库")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:query')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:query')")
public CommonResult<MaterialInventoryInboundRespVO> getMaterialInventoryInbound(@RequestParam("id") Long id) { public CommonResult<MaterialInventoryInboundRespVO> getMaterialInventoryInbound(@RequestParam("id") Long id) {
MaterialInventoryInboundDO materialInventoryInbound = materialInventoryInboundService.getMaterialInventoryInbound(id); MaterialInventoryInboundDO materialInventoryInbound = materialInventoryInboundService.getMaterialInventoryInbound(id);
return success(BeanUtils.toBean(materialInventoryInbound, MaterialInventoryInboundRespVO.class)); return success(BeanUtils.toBean(materialInventoryInbound, MaterialInventoryInboundRespVO.class));
@@ -83,7 +77,7 @@ public class MaterialInventoryInboundController implements BusinessControllerMar
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得入库分页") @Operation(summary = "获得入库分页")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:query')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:query')")
public CommonResult<PageResult<MaterialInventoryInboundRespVO>> getMaterialInventoryInboundPage(@Valid MaterialInventoryInboundPageReqVO pageReqVO) { public CommonResult<PageResult<MaterialInventoryInboundRespVO>> getMaterialInventoryInboundPage(@Valid MaterialInventoryInboundPageReqVO pageReqVO) {
PageResult<MaterialInventoryInboundDO> pageResult = materialInventoryInboundService.getMaterialInventoryInboundPage(pageReqVO); PageResult<MaterialInventoryInboundDO> pageResult = materialInventoryInboundService.getMaterialInventoryInboundPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialInventoryInboundRespVO.class)); return success(BeanUtils.toBean(pageResult, MaterialInventoryInboundRespVO.class));
@@ -91,7 +85,7 @@ public class MaterialInventoryInboundController implements BusinessControllerMar
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出入库 Excel") @Operation(summary = "导出入库 Excel")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound:export')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound:export')")
@ApiAccessLog(operateType = EXPORT) @ApiAccessLog(operateType = EXPORT)
public void exportMaterialInventoryInboundExcel(@Valid MaterialInventoryInboundPageReqVO pageReqVO, public void exportMaterialInventoryInboundExcel(@Valid MaterialInventoryInboundPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {

View File

@@ -31,7 +31,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 入库明细,验收入库、盘盈入库等") @Tag(name = "管理后台 - 入库明细,验收入库、盘盈入库等")
@RestController @RestController
@RequestMapping("/t/material-inventory-inbound-detail") @RequestMapping("/qms/resource/material-inventory-inbound-detail")
@Validated @Validated
public class MaterialInventoryInboundDetailController implements BusinessControllerMarker { public class MaterialInventoryInboundDetailController implements BusinessControllerMarker {
@@ -41,14 +41,14 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建入库明细,验收入库、盘盈入库等") @Operation(summary = "创建入库明细,验收入库、盘盈入库等")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:create')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:create')")
public CommonResult<MaterialInventoryInboundDetailRespVO> createMaterialInventoryInboundDetail(@Valid @RequestBody MaterialInventoryInboundDetailSaveReqVO createReqVO) { public CommonResult<MaterialInventoryInboundDetailRespVO> createMaterialInventoryInboundDetail(@Valid @RequestBody MaterialInventoryInboundDetailSaveReqVO createReqVO) {
return success(materialInventoryInboundDetailService.createMaterialInventoryInboundDetail(createReqVO)); return success(materialInventoryInboundDetailService.createMaterialInventoryInboundDetail(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新入库明细,验收入库、盘盈入库等") @Operation(summary = "更新入库明细,验收入库、盘盈入库等")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:update')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:update')")
public CommonResult<Boolean> updateMaterialInventoryInboundDetail(@Valid @RequestBody MaterialInventoryInboundDetailSaveReqVO updateReqVO) { public CommonResult<Boolean> updateMaterialInventoryInboundDetail(@Valid @RequestBody MaterialInventoryInboundDetailSaveReqVO updateReqVO) {
materialInventoryInboundDetailService.updateMaterialInventoryInboundDetail(updateReqVO); materialInventoryInboundDetailService.updateMaterialInventoryInboundDetail(updateReqVO);
return success(true); return success(true);
@@ -57,7 +57,7 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除入库明细,验收入库、盘盈入库等") @Operation(summary = "删除入库明细,验收入库、盘盈入库等")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:delete')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:delete')")
public CommonResult<Boolean> deleteMaterialInventoryInboundDetail(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteMaterialInventoryInboundDetail(@RequestParam("id") Long id) {
materialInventoryInboundDetailService.deleteMaterialInventoryInboundDetail(id); materialInventoryInboundDetailService.deleteMaterialInventoryInboundDetail(id);
return success(true); return success(true);
@@ -66,7 +66,7 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@DeleteMapping("/delete-list") @DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除入库明细,验收入库、盘盈入库等") @Operation(summary = "批量删除入库明细,验收入库、盘盈入库等")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:delete')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:delete')")
public CommonResult<Boolean> deleteMaterialInventoryInboundDetailList(@RequestBody BatchDeleteReqVO req) { public CommonResult<Boolean> deleteMaterialInventoryInboundDetailList(@RequestBody BatchDeleteReqVO req) {
materialInventoryInboundDetailService.deleteMaterialInventoryInboundDetailListByIds(req.getIds()); materialInventoryInboundDetailService.deleteMaterialInventoryInboundDetailListByIds(req.getIds());
return success(true); return success(true);
@@ -75,7 +75,7 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得入库明细,验收入库、盘盈入库等") @Operation(summary = "获得入库明细,验收入库、盘盈入库等")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:query')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:query')")
public CommonResult<MaterialInventoryInboundDetailRespVO> getMaterialInventoryInboundDetail(@RequestParam("id") Long id) { public CommonResult<MaterialInventoryInboundDetailRespVO> getMaterialInventoryInboundDetail(@RequestParam("id") Long id) {
MaterialInventoryInboundDetailDO materialInventoryInboundDetail = materialInventoryInboundDetailService.getMaterialInventoryInboundDetail(id); MaterialInventoryInboundDetailDO materialInventoryInboundDetail = materialInventoryInboundDetailService.getMaterialInventoryInboundDetail(id);
return success(BeanUtils.toBean(materialInventoryInboundDetail, MaterialInventoryInboundDetailRespVO.class)); return success(BeanUtils.toBean(materialInventoryInboundDetail, MaterialInventoryInboundDetailRespVO.class));
@@ -83,7 +83,7 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得入库明细,验收入库、盘盈入库等分页") @Operation(summary = "获得入库明细,验收入库、盘盈入库等分页")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:query')") // @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:query')")
public CommonResult<PageResult<MaterialInventoryInboundDetailRespVO>> getMaterialInventoryInboundDetailPage(@Valid MaterialInventoryInboundDetailPageReqVO pageReqVO) { public CommonResult<PageResult<MaterialInventoryInboundDetailRespVO>> getMaterialInventoryInboundDetailPage(@Valid MaterialInventoryInboundDetailPageReqVO pageReqVO) {
PageResult<MaterialInventoryInboundDetailDO> pageResult = materialInventoryInboundDetailService.getMaterialInventoryInboundDetailPage(pageReqVO); PageResult<MaterialInventoryInboundDetailDO> pageResult = materialInventoryInboundDetailService.getMaterialInventoryInboundDetailPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialInventoryInboundDetailRespVO.class)); return success(BeanUtils.toBean(pageResult, MaterialInventoryInboundDetailRespVO.class));
@@ -91,7 +91,7 @@ public class MaterialInventoryInboundDetailController implements BusinessControl
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出入库明细,验收入库、盘盈入库等 Excel") @Operation(summary = "导出入库明细,验收入库、盘盈入库等 Excel")
@PreAuthorize("@ss.hasPermission('t:material-inventory-inbound-detail:export')") @PreAuthorize("@ss.hasPermission('qms:material-inventory-inbound-detail:export')")
@ApiAccessLog(operateType = EXPORT) @ApiAccessLog(operateType = EXPORT)
public void exportMaterialInventoryInboundDetailExcel(@Valid MaterialInventoryInboundDetailPageReqVO pageReqVO, public void exportMaterialInventoryInboundDetailExcel(@Valid MaterialInventoryInboundDetailPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {

View File

@@ -25,6 +25,9 @@ public class MaterialBatchPageReqVO extends PageParam {
@Schema(description = "是否只需要工段") @Schema(description = "是否只需要工段")
private Boolean onlyGong = false; private Boolean onlyGong = false;
@Schema(description = "true-已处理false-未处理")
private Boolean treatment = false;
@Schema(description = "批次编号") @Schema(description = "批次编号")
private String batchNo; private String batchNo;

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.resource.material.controller.vo; package com.zt.plat.module.qms.resource.material.controller.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@@ -48,6 +49,10 @@ public class MaterialBatchRespVO {
@ExcelProperty("总数量") @ExcelProperty("总数量")
private BigDecimal inboundQuantity; private BigDecimal inboundQuantity;
@Schema(description = "已入库数量")
@ExcelProperty("已入库数量")
private BigDecimal inboundEndQuantity;
@Schema(description = "存放位置描述") @Schema(description = "存放位置描述")
@ExcelProperty("存放位置描述") @ExcelProperty("存放位置描述")
private String location; private String location;

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.resource.material.controller.vo; package com.zt.plat.module.qms.resource.material.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*; import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam; import com.zt.plat.framework.common.pojo.PageParam;
@@ -26,6 +27,9 @@ public class MaterialInfomationPageReqVO extends PageParam {
@Schema(description = "编码") @Schema(description = "编码")
private String code; private String code;
@Schema(description = "名称")
private String name;
@Schema(description = "技术参数") @Schema(description = "技术参数")
private String parameter; private String parameter;

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.qms.resource.material.controller.vo; package com.zt.plat.module.qms.resource.material.controller.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@@ -33,6 +34,10 @@ public class MaterialInfomationRespVO {
@ExcelProperty("编码") @ExcelProperty("编码")
private String code; private String code;
@Schema(description = "名称")
@ExcelProperty("名称")
private String name;
@Schema(description = "技术参数") @Schema(description = "技术参数")
@ExcelProperty("技术参数") @ExcelProperty("技术参数")
private String parameter; private String parameter;

View File

@@ -1,9 +1,7 @@
package com.zt.plat.module.qms.resource.material.controller.vo; package com.zt.plat.module.qms.resource.material.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -27,6 +25,9 @@ public class MaterialInfomationSaveReqVO {
@Schema(description = "编码") @Schema(description = "编码")
private String code; private String code;
@Schema(description = "名称")
private String name;
@Schema(description = "技术参数") @Schema(description = "技术参数")
private String parameter; private String parameter;

View File

@@ -24,10 +24,16 @@ public class MaterialInventoryInboundDetailRespVO {
@ExcelProperty("批次id") @ExcelProperty("批次id")
private Long batchId; private Long batchId;
// 物料名称
// 批次编号
@Schema(description = "批次工段id", example = "1454") @Schema(description = "批次工段id", example = "1454")
@ExcelProperty("批次工段id") @ExcelProperty("批次工段id")
private Long batchGongduanId; private Long batchGongduanId;
// 工段名
@Schema(description = "物料实例ID", example = "17457") @Schema(description = "物料实例ID", example = "17457")
@ExcelProperty("物料实例ID") @ExcelProperty("物料实例ID")
private Long materialInfomationId; private Long materialInfomationId;

View File

@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Schema(description = "管理后台 - 入库 Response VO") @Schema(description = "管理后台 - 入库 Response VO")
@@ -48,6 +49,26 @@ public class MaterialInventoryInboundRespVO {
@ExcelProperty("申请时间") @ExcelProperty("申请时间")
private LocalDateTime applyTime; private LocalDateTime applyTime;
@Schema(description = "监督人,危化品才有")
@ExcelProperty("监督人,危化品才有")
private String superviseUser;
@Schema(description = "监督人id危化品才有")
@ExcelProperty("监督人id危化品才有")
private Long superviseUserId;
@Schema(description = "批次工段id")
@ExcelProperty("批次工段id")
private Long gongduanId;
@Schema(description = "入库数量")
@ExcelProperty("入库数量")
private BigDecimal quantity;
@Schema(description = "库位id")
@ExcelProperty("库位id")
private Long locationId;
@Schema(description = "流程实例id", example = "16660") @Schema(description = "流程实例id", example = "16660")
@ExcelProperty("流程实例id") @ExcelProperty("流程实例id")
private String flowInstanceId; private String flowInstanceId;

View File

@@ -1,8 +1,10 @@
package com.zt.plat.module.qms.resource.material.controller.vo; package com.zt.plat.module.qms.resource.material.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Min;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Schema(description = "管理后台 - 入库新增/修改 Request VO") @Schema(description = "管理后台 - 入库新增/修改 Request VO")
@@ -36,6 +38,22 @@ public class MaterialInventoryInboundSaveReqVO {
@Schema(description = "申请时间") @Schema(description = "申请时间")
private LocalDateTime applyTime; private LocalDateTime applyTime;
@Schema(description = "监督人,危化品才有")
private String superviseUser;
@Schema(description = "监督人id危化品才有")
private Long superviseUserId;
@Schema(description = "批次工段id")
private Long gongduanId;
@Schema(description = "入库数量")
@Min(value = 0, message = "入库数量不能小于0")
private BigDecimal quantity;
@Schema(description = "库位id")
private Long locationId;
@Schema(description = "流程实例id", example = "16660") @Schema(description = "流程实例id", example = "16660")
private String flowInstanceId; private String flowInstanceId;

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.zt.plat.module.qms.core.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -97,6 +98,7 @@ public class MaterialProductRespVO {
@Schema(description = "开封后保质期是否变化,1-是0-否") @Schema(description = "开封后保质期是否变化,1-是0-否")
@ExcelProperty("开封后保质期是否变化,1-是0-否") @ExcelProperty("开封后保质期是否变化,1-是0-否")
@Dict(dicCode = "yes_or_no")
private Integer openDueFlag; private Integer openDueFlag;
@Schema(description = "开封后保质期(天)") @Schema(description = "开封后保质期(天)")
@@ -133,6 +135,7 @@ public class MaterialProductRespVO {
@Schema(description = "是否进行库存预警,1-是0-否") @Schema(description = "是否进行库存预警,1-是0-否")
@ExcelProperty("是否进行库存预警,1-是0-否") @ExcelProperty("是否进行库存预警,1-是0-否")
@Dict(dicCode = "yes_or_no")
private Integer InventoryAlarmFlag; private Integer InventoryAlarmFlag;
@Schema(description = "库存预警区间,json格式配置") @Schema(description = "库存预警区间,json格式配置")

View File

@@ -53,6 +53,11 @@ public class MaterialBatchDO extends BusinessBaseDO {
@TableField("INB_QTY") @TableField("INB_QTY")
private BigDecimal inboundQuantity; private BigDecimal inboundQuantity;
/** /**
* 已入库数量
*/
@TableField("INB_END_QTY")
private BigDecimal inboundEndQuantity;
/**
* 存放位置描述 * 存放位置描述
*/ */
@TableField("LOC") @TableField("LOC")

View File

@@ -46,17 +46,57 @@ public class MaterialInfomationDO extends BusinessBaseDO {
* 存放位置 * 存放位置
*/ */
@TableField("LOC_ID") @TableField("LOC_ID")
private String locationId; private Long locationId;
/**
* 工段id
*/
@TableField("GONG_ID")
private Long gongduanId;
/** /**
* 编码 * 编码
*/ */
@TableField("CD") @TableField("CD")
private String code; private String code;
/** /**
* 名称
*/
@TableField("NAME")
private String name;
/**
* 型号
*/
@TableField("MDL_NO")
private String modelNo;
/**
* 规格
*/
@TableField("SPEC")
private String specification;
/**
* 技术参数 * 技术参数
*/ */
@TableField("PRM") @TableField("PRM")
private String parameter; private String parameter;
/**
* 制造商
*/
@TableField("MFR")
private String manufacturer;
/**
* 单位
*/
@TableField("UNT")
private String unit;
/**
* 保质期(天)
*/
@TableField("DUE")
private Integer due;
/**
* 开封后保质期(天)
*/
@TableField("OPN_DUE_AFT")
private Integer openDueAfter;
/** /**
* 上架状态,0-未上架1-已上架 * 上架状态,0-未上架1-已上架
*/ */
@@ -107,6 +147,11 @@ public class MaterialInfomationDO extends BusinessBaseDO {
*/ */
@TableField("OPN_DT") @TableField("OPN_DT")
private LocalDateTime openDate; private LocalDateTime openDate;
/**
* 生产日期
*/
@TableField("MFR_DT")
private LocalDate manufacturerDate;
/** /**
* 到期日期 * 到期日期
*/ */

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
import lombok.*; import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
* 入库 DO * 入库 DO
@@ -70,6 +71,31 @@ public class MaterialInventoryInboundDO extends BusinessBaseDO {
*/ */
@TableField("APL_TM") @TableField("APL_TM")
private LocalDateTime applyTime; private LocalDateTime applyTime;
/**
* 监督人,危化品才有
*/
@TableField("SUPR_USER")
private String superviseUser;
/**
* 监督人id危化品才有
*/
@TableField("SUPR_USER_ID")
private Long superviseUserId;
/**
* 批次工段id
*/
@TableField("GONG_ID")
private Long gongduanId;
/**
* 入库数量
*/
@TableField("QTY")
private BigDecimal quantity;
/**
* 库位id
*/
@TableField("LOC_ID")
private Long locationId;
/** /**
* 流程实例id * 流程实例id
*/ */

View File

@@ -8,6 +8,7 @@ import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO;
@@ -74,6 +75,42 @@ public interface MaterialBatchMapper extends BaseMapperX<MaterialBatchDO> {
default PageResult<MaterialBatchRespVO> selectGongPage(MaterialBatchPageReqVO reqVO, List<Long> pdtIds) { default PageResult<MaterialBatchRespVO> selectGongPage(MaterialBatchPageReqVO reqVO, List<Long> pdtIds) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
Long visitDeptId = null;
if (loginUser != null) {
visitDeptId = loginUser.getVisitDeptId();
}
MPJLambdaWrapper<MaterialBatchDO> wrapper = new MPJLambdaWrapperX<MaterialBatchDO>()
.selectAll(MaterialBatchDO.class)
.selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName)
.selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode)
.selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo)
.selectAs("batch.MFR_DT", MaterialBatchDO::getManufacturerDate)
.selectAs("batch.DUE_DT", MaterialBatchDO::getDueDate)
.leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId)
.leftJoin(MaterialBatchDO.class, "batch", MaterialBatchDO::getId, MaterialBatchDO::getParentId)
// 只查询工段
.ne(MaterialBatchDO::getParentId, 0)
.eq(MaterialBatchDO::getSubmitStatus, 1)
.notExists("SELECT 1 FROM t_mtrl_lfc_dtl ld WHERE ld.BAT_GONG_ID = t.ID AND ld.DELETED = 0")
// .eq(onlyGong != null && visitDeptId != null && onlyGong, MaterialBatchDO::getAssignDepartmentId, visitDeptId)
.in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds)
.eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId())
.likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo())
.likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation())
.likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId())
.eqIfExists(MaterialBatchDO::getAssignDepartmentId, reqVO.getAssignDepartmentId())
.likeIfExists(MaterialBatchDO::getAssignDepartmentName, reqVO.getAssignDepartmentName())
.eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus())
.eqIfExists(MaterialBatchDO::getAssayFlag, reqVO.getAssayFlag())
.eqIfExists(MaterialBatchDO::getAssayStatus, reqVO.getAssayStatus())
.eqIfExists(MaterialBatchDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.eqIfExists(MaterialBatchDO::getRemark, reqVO.getRemark())
.orderByDesc(MaterialBatchDO::getParentId);
return selectJoinPage(reqVO, MaterialBatchRespVO.class, wrapper);
}
default PageResult<MaterialBatchRespVO> selectAcceptedGongPage(MaterialBatchPageReqVO reqVO, List<Long> pdtIds) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
Long visitDeptId = null; Long visitDeptId = null;
@@ -85,19 +122,22 @@ public interface MaterialBatchMapper extends BaseMapperX<MaterialBatchDO> {
.selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName) .selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName)
.selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode) .selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode)
.selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo) .selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo)
.selectAs("batch.MFR_DT", MaterialBatchDO::getManufacturerDate)
.selectAs("batch.DUE_DT", MaterialBatchDO::getDueDate)
.leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId) .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId)
.leftJoin(MaterialBatchDO.class, "batch", MaterialBatchDO::getId, MaterialBatchDO::getParentId)
// 只查询工段 // 只查询工段
.ne(MaterialBatchDO::getParentId, 0) .ne(MaterialBatchDO::getParentId, 0)
.eq(MaterialBatchDO::getSubmitStatus, 1) .eq(MaterialBatchDO::getSubmitStatus, 1)
.notExists("SELECT 1 FROM t_mtrl_lfc_dtl ld WHERE ld.BAT_GONG_ID = t.id AND ld.DELETED = 0") .eq(MaterialBatchDO::getAcceptanceStatus, QmsCommonConstant.COMPLETED)
// .eq(onlyGong != null && visitDeptId != null && onlyGong, MaterialBatchDO::getAssignDepartmentId, visitDeptId) // .eq(onlyGong != null && visitDeptId != null && onlyGong, MaterialBatchDO::getAssignDepartmentId, visitDeptId)
.in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds)
.eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId())
.likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) .likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo())
.likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation()) .likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation())
.likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId()) .likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId())
// .betweenIfPresent(MaterialBatchDO::getManufacturerDate, reqVO.getManufacturerDate()) // .betweenIfPresent(MaterialBatchDO::getManufacturerDate, reqVO.getManufacturerDate())
// .betweenIfPresent(MaterialBatchDO::getDueDate, reqVO.getDueDate()) // .betweenIfPresent(MaterialBatchDO::getDueDate, reqVO.getDueDate())
.eqIfExists(MaterialBatchDO::getAssignDepartmentId, reqVO.getAssignDepartmentId()) .eqIfExists(MaterialBatchDO::getAssignDepartmentId, reqVO.getAssignDepartmentId())
.likeIfExists(MaterialBatchDO::getAssignDepartmentName, reqVO.getAssignDepartmentName()) .likeIfExists(MaterialBatchDO::getAssignDepartmentName, reqVO.getAssignDepartmentName())
.eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus()) .eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus())
@@ -105,8 +145,12 @@ public interface MaterialBatchMapper extends BaseMapperX<MaterialBatchDO> {
.eqIfExists(MaterialBatchDO::getAssayStatus, reqVO.getAssayStatus()) .eqIfExists(MaterialBatchDO::getAssayStatus, reqVO.getAssayStatus())
.eqIfExists(MaterialBatchDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) .eqIfExists(MaterialBatchDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.eqIfExists(MaterialBatchDO::getRemark, reqVO.getRemark()) .eqIfExists(MaterialBatchDO::getRemark, reqVO.getRemark())
// .betweenIfPresent(MaterialBatchDO::getCreateTime, reqVO.getCreateTime()) // 已处理
.orderByDesc(MaterialBatchDO::getId); .le(reqVO.getTreatment(), MaterialBatchDO::getInboundQuantity, MaterialBatchDO::getInboundEndQuantity)
// 未处理
.gt(!reqVO.getTreatment(), MaterialBatchDO::getInboundQuantity, MaterialBatchDO::getInboundEndQuantity)
// .between(reqVO.getCreateTime() != null && reqVO.getCreateTime().length == 2, MaterialBatchDO::getCreateTime, reqVO.getCreateTime()[0], reqVO.getCreateTime()[1])
.orderByDesc(MaterialBatchDO::getParentId);
return selectJoinPage(reqVO, MaterialBatchRespVO.class, wrapper); return selectJoinPage(reqVO, MaterialBatchRespVO.class, wrapper);
} }

View File

@@ -124,4 +124,19 @@ public interface MaterialBatchService {
* @return 分页数据 * @return 分页数据
*/ */
PageResult<MaterialBatchRespVO> getMaterialBatchGongPageWithPdtInfo(@Valid MaterialBatchPageReqVO pageReqVO); PageResult<MaterialBatchRespVO> getMaterialBatchGongPageWithPdtInfo(@Valid MaterialBatchPageReqVO pageReqVO);
/**
* 更新批次工段入库数量
*
* @param gongDO 批次工段信息
*/
void updateMaterialBatchInbEndQty(MaterialBatchDO gongDO);
/**
* 更新批次工段验收状态
*
* @param lfcId 流程id
* @param status 验收状态
*/
void updateMaterialBatchAcceptStatusByLfcId(Long lfcId, String status);
} }

View File

@@ -6,10 +6,12 @@ import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.core.code.SequenceUtil; import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO;
import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialBatchMapper; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialBatchMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -43,7 +45,10 @@ public class MaterialBatchServiceImpl implements MaterialBatchService {
@Autowired @Autowired
private MaterialProductService materialProductService; private MaterialProductService materialProductService;
private final String sequenceKey = "QMS_MATERIAL_BATCH_NO"; @Autowired
private MaterialLifecycleDetailService materialLifecycleDetailService;
private final String batchSequenceKey = "QMS_MATERIAL_BATCH_NO";
@Override @Override
public MaterialBatchRespVO createMaterialBatch(MaterialBatchSaveReqVO createReqVO) { public MaterialBatchRespVO createMaterialBatch(MaterialBatchSaveReqVO createReqVO) {
@@ -51,7 +56,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService {
MaterialBatchDO mtrlBat = BeanUtils.toBean(createReqVO, MaterialBatchDO.class); MaterialBatchDO mtrlBat = BeanUtils.toBean(createReqVO, MaterialBatchDO.class);
// 批次编号 // 批次编号
mtrlBat.setBatchNo(sequenceUtil.genCode(sequenceKey)); mtrlBat.setBatchNo(sequenceUtil.genCode(batchSequenceKey));
mtrlBat.setParentId(0L); mtrlBat.setParentId(0L);
materialBatchMapper.insert(mtrlBat); materialBatchMapper.insert(mtrlBat);
@@ -265,21 +270,46 @@ public class MaterialBatchServiceImpl implements MaterialBatchService {
@Override @Override
public PageResult<MaterialBatchRespVO> getMaterialBatchGongPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { public PageResult<MaterialBatchRespVO> getMaterialBatchGongPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) {
// 需要排除已经被选择的工段
Long pdtId = pageReqVO.getProductId(); Long pdtId = pageReqVO.getProductId();
PageResult<MaterialBatchRespVO> pageResult; if (QmsCommonConstant.COMPLETED.equals(pageReqVO.getAcceptanceStatus())) {
if (pdtId == null) { // 用于入库
pageResult = materialBatchMapper.selectGongPage(pageReqVO, List.of()); if (pdtId == null) {
} else { return materialBatchMapper.selectAcceptedGongPage(pageReqVO, List.of());
}
List<MaterialProductDO> mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId); List<MaterialProductDO> mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId);
if (CollUtil.isEmpty(mtrlDos)) { if (CollUtil.isEmpty(mtrlDos)) {
pageResult = materialBatchMapper.selectGongPage(pageReqVO, List.of()); return materialBatchMapper.selectAcceptedGongPage(pageReqVO, List.of());
} else {
List<Long> pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList();
pageResult = materialBatchMapper.selectGongPage(pageReqVO, pdtIds);
} }
List<Long> pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList();
return materialBatchMapper.selectAcceptedGongPage(pageReqVO, pdtIds);
} }
return pageResult; // 用于验收
// 需要排除已经被选择的工段
if (pdtId == null) {
return materialBatchMapper.selectGongPage(pageReqVO, List.of());
}
List<MaterialProductDO> mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId);
if (CollUtil.isEmpty(mtrlDos)) {
return materialBatchMapper.selectGongPage(pageReqVO, List.of());
}
List<Long> pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList();
return materialBatchMapper.selectGongPage(pageReqVO, pdtIds);
}
@Override
public void updateMaterialBatchInbEndQty(MaterialBatchDO gongDO) {
materialBatchMapper.updateById(gongDO);
}
@Override
public void updateMaterialBatchAcceptStatusByLfcId(Long lfcId, String status) {
List<MaterialLifecycleDetailDO> detailList = materialLifecycleDetailService.getDetailListByLfcId(lfcId);
if (CollUtil.isEmpty(detailList)) return;
List<Long> gongIds = detailList.stream().map(MaterialLifecycleDetailDO::getBatchGongduanId).toList();
if (CollUtil.isEmpty(gongIds)) return;
MaterialBatchDO updateEntity = new MaterialBatchDO().setAcceptanceStatus(status);
materialBatchMapper.update(updateEntity, Wrappers.lambdaQuery(MaterialBatchDO.class)
.in(MaterialBatchDO::getId, gongIds));
} }
/** /**

View File

@@ -68,4 +68,11 @@ public interface MaterialInfomationService {
* @return 大类id-库存数量 * @return 大类id-库存数量
*/ */
Map<Long, Long> getStockQuantityByPdtIds(List<Long> mtrlIds); Map<Long, Long> getStockQuantityByPdtIds(List<Long> mtrlIds);
/**
* 批量保存物料实例
*
* @param infomationDOS 物料实例
*/
void saveBatch(List<MaterialInfomationDO> infomationDOS);
} }

View File

@@ -107,4 +107,9 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService
)); ));
} }
@Override
public void saveBatch(List<MaterialInfomationDO> infomationDOS) {
materialInfomationMapper.insertBatch(infomationDOS);
}
} }

View File

@@ -61,4 +61,10 @@ public interface MaterialInventoryInboundDetailService {
*/ */
PageResult<MaterialInventoryInboundDetailDO> getMaterialInventoryInboundDetailPage(MaterialInventoryInboundDetailPageReqVO pageReqVO); PageResult<MaterialInventoryInboundDetailDO> getMaterialInventoryInboundDetailPage(MaterialInventoryInboundDetailPageReqVO pageReqVO);
/**
* 批量保存入库明细
*
* @param detailList 入库明细
*/
void saveBatch(List<MaterialInventoryInboundDetailDO> detailList);
} }

View File

@@ -86,4 +86,9 @@ public class MaterialInventoryInboundDetailServiceImpl implements MaterialInvent
return materialInventoryInboundDetailMapper.selectPage(pageReqVO); return materialInventoryInboundDetailMapper.selectPage(pageReqVO);
} }
@Override
public void saveBatch(List<MaterialInventoryInboundDetailDO> detailList) {
materialInventoryInboundDetailMapper.insertBatch(detailList);
}
} }

View File

@@ -1,21 +1,34 @@
package com.zt.plat.module.qms.resource.material.service; package com.zt.plat.module.qms.resource.material.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.security.core.LoginUser;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.core.constant.DataTypeConstant;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundSaveReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundSaveReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryInboundDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.*;
import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInventoryInboundMapper; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInventoryInboundMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_INVENTORY_INBOUND_NOT_EXISTS; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
import static com.zt.plat.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
/** /**
@@ -30,13 +43,106 @@ public class MaterialInventoryInboundServiceImpl implements MaterialInventoryInb
@Resource @Resource
private MaterialInventoryInboundMapper materialInventoryInboundMapper; private MaterialInventoryInboundMapper materialInventoryInboundMapper;
@Autowired
private MaterialLifecycleDetailService materialLifecycleDetailService;
@Autowired
private MaterialBatchService materialBatchService;
@Autowired
private MaterialProductService materialProductService;
@Autowired
private SequenceUtil sequenceUtil;
@Autowired
private MaterialInfomationService materialInfomationService;
@Autowired
private MaterialInventoryInboundDetailService materialInventoryInboundDetailService;
private final String infSequenceKey = "QMS_MATERIAL_INF_NO";
@Transactional
@Override @Override
public MaterialInventoryInboundRespVO createMaterialInventoryInbound(MaterialInventoryInboundSaveReqVO createReqVO) { public MaterialInventoryInboundRespVO createMaterialInventoryInbound(MaterialInventoryInboundSaveReqVO createReqVO) {
// 插入 Long gongduanId = createReqVO.getGongduanId();
MaterialInventoryInboundDO materialInventoryInbound = BeanUtils.toBean(createReqVO, MaterialInventoryInboundDO.class); BigDecimal reqQuantity = createReqVO.getQuantity();
materialInventoryInboundMapper.insert(materialInventoryInbound); if (reqQuantity.compareTo(BigDecimal.ZERO) <= 0) throw new ServiceException(1_032_160_000, "入库数量不能小于等于0");
MaterialBatchDO gongDO = materialBatchService.getMaterialBatch(gongduanId);
if (gongDO == null) throw exception(MATERIAL_BATCH_GONG_NOT_EXISTS);
// 1.检查工段是否已经验收
if (!QmsCommonConstant.COMPLETED.equals(gongDO.getAcceptanceStatus()))
throw new ServiceException(1_032_160_000, "工段未验收,不能入库");
// 2.入库数量不大于批次工段数量
if (reqQuantity.compareTo(gongDO.getInboundQuantity()) > 0) throw new ServiceException(1_032_160_000, "入库数量不能大于批次工段数量");
// TODO 这儿应该调整为去物料实例统计出此工段的入库数量
List<MaterialInventoryInboundDO> inboundDOS = materialInventoryInboundMapper.selectList(Wrappers.lambdaQuery(MaterialInventoryInboundDO.class)
.eq(MaterialInventoryInboundDO::getGongduanId, gongduanId));
if (CollUtil.isNotEmpty(inboundDOS)) {
BigDecimal totalQuantity = reqQuantity;
for (MaterialInventoryInboundDO inboundDO : inboundDOS) {
totalQuantity = totalQuantity.add(inboundDO.getQuantity());
}
if (totalQuantity.compareTo(gongDO.getInboundQuantity()) > 0) throw new ServiceException(1_032_160_000, "入库数量不能大于批次工段数量");
}
// 3.保存入库记录
MaterialInventoryInboundDO inbound = BeanUtils.toBean(createReqVO, MaterialInventoryInboundDO.class);
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
if (loginUser == null) throw exception(USER_NOT_EXISTS);
String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname();
inbound.setApplyUser(loginUserNickname).setApplyUserId(loginUser.getId())
.setApplyDepartment(loginUser.getVisitDeptName()).setApplyDepartmentId(loginUser.getVisitDeptId())
.setApplyTime(LocalDateTime.now())
.setRemark(gongDO.getRemark());
materialInventoryInboundMapper.insert(inbound);
// 4.生成物料实例
Long productId = gongDO.getProductId();
MaterialProductDO product = materialProductService.getMaterialProduct(productId);
if (product == null || !DataTypeConstant.DATA_TYPE_DATA.equals(product.getNodeType()))
throw exception(MATERIAL_PRODUCT_NOT_EXISTS);
Long batchId = gongDO.getParentId();
MaterialBatchDO batch = materialBatchService.getMaterialBatch(batchId);
if (batch == null || batch.getParentId() != 0) throw exception(MATERIAL_BATCH_NOT_EXISTS);
List<MaterialInfomationDO> infomationDOS = new ArrayList<>();
for (int i = 0; i < reqQuantity.intValue(); i++) {
MaterialInfomationDO infomationDO = new MaterialInfomationDO();
infomationDO
.setProductId(productId).setBatchId(batchId)
.setLocationId(createReqVO.getLocationId())
.setGongduanId(gongduanId)
.setSpecification(product.getSpecification()).setModelNo(product.getModelNo())
.setParameter(product.getParameter())
.setManufacturer(product.getManufacturer()).setUnit(product.getUnit())
.setDue(product.getDue()).setOpenDueAfter(product.getOpenDueAfter())
.setPublishStatus(0)
.setUsageStatus(0)
.setOpenStatus(0)
.setManufacturerDate(batch.getManufacturerDate()).setExpirationDate(batch.getDueDate());
// 生成编号
String code = sequenceUtil.genCode(infSequenceKey);
infomationDO.setCode(code);
infomationDOS.add(infomationDO);
}
materialInfomationService.saveBatch(infomationDOS);
// 5.保存入库明细
List<MaterialInventoryInboundDetailDO> detailList = new ArrayList<>();
for (MaterialInfomationDO infomationDO : infomationDOS) {
MaterialInventoryInboundDetailDO detail = new MaterialInventoryInboundDetailDO();
detail
.setInboundId(inbound.getId())
.setBatchId(batchId)
.setBatchGongduanId(gongduanId)
.setMaterialInfomationId(infomationDO.getId())
.setInboundUserName(loginUserNickname)
.setInboundUserId(loginUser.getId())
.setInboundDepartmentName(loginUser.getVisitDeptName())
.setInboundDepartmentId(loginUser.getVisitDeptId())
.setInboundTime(inbound.getApplyTime());
detailList.add(detail);
}
materialInventoryInboundDetailService.saveBatch(detailList);
// 更新工段已入库数量
gongDO.setInboundEndQuantity(gongDO.getInboundEndQuantity().add(reqQuantity));
materialBatchService.updateMaterialBatchInbEndQty(gongDO);
// 返回 // 返回
return BeanUtils.toBean(materialInventoryInbound, MaterialInventoryInboundRespVO.class); return BeanUtils.toBean(inbound, MaterialInventoryInboundRespVO.class);
} }
@Override @Override

View File

@@ -88,5 +88,28 @@ public interface MaterialLifecycleDetailService {
* @param id 流程id * @param id 流程id
* @return 明细列表 * @return 明细列表
*/ */
List<MaterialLifecycleDetailRespVO> getMaterialLifecycleDetailListByLfcId(Long id); List<MaterialLifecycleDetailRespVO> getDetailListWithPdtInfoByLfcId(Long id);
/**
* 根据工段id 获取流程明细数据
* @param gongduanId 工段id
* @return 明细数据
*/
MaterialLifecycleDetailDO getMaterialLifecycleDetailByGongId(Long gongduanId);
/**
* 更新流程明细状态
*
* @param lfcId 流程id
* @param status 状态
*/
void updateDetailTreatStatusByLfcId(Long lfcId, String status);
/**
* 根据流程id 获取流程明细数据
*
* @param lfcId 流程id
* @return 明细列表
*/
List<MaterialLifecycleDetailDO> getDetailListByLfcId(Long lfcId);
} }

View File

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.enums.QmsBpmConstant;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailSaveReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailSaveReqVO;
@@ -107,9 +109,34 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta
} }
@Override @Override
public List<MaterialLifecycleDetailRespVO> getMaterialLifecycleDetailListByLfcId(Long id) { public List<MaterialLifecycleDetailRespVO> getDetailListWithPdtInfoByLfcId(Long id) {
return materialLifecycleDetailMapper.selectListWithPdtBatInfo(id); return materialLifecycleDetailMapper.selectListWithPdtBatInfo(id);
} }
@Override
public MaterialLifecycleDetailDO getMaterialLifecycleDetailByGongId(Long gongduanId) {
List<MaterialLifecycleDetailDO> detailDOS = materialLifecycleDetailMapper.selectList(Wrappers.lambdaQuery(MaterialLifecycleDetailDO.class)
.eq(MaterialLifecycleDetailDO::getBatchGongduanId, gongduanId)
.last("limit 1"));
if (CollUtil.isEmpty(detailDOS)) return null;
return detailDOS.get(0);
}
@Override
public void updateDetailTreatStatusByLfcId(Long lfcId, String status) {
boolean isCompleted = QmsCommonConstant.COMPLETED.equals(status);
MaterialLifecycleDetailDO detailUpdate = new MaterialLifecycleDetailDO().setTreatmentStatus(isCompleted ? 1 : 0);
materialLifecycleDetailMapper.update(detailUpdate, Wrappers.lambdaQuery(MaterialLifecycleDetailDO.class)
.eq(MaterialLifecycleDetailDO::getLifecycleId, lfcId));
}
@Override
public List<MaterialLifecycleDetailDO> getDetailListByLfcId(Long lfcId) {
return materialLifecycleDetailMapper.selectList(Wrappers.lambdaQuery(MaterialLifecycleDetailDO.class)
.eq(MaterialLifecycleDetailDO::getLifecycleId, lfcId));
}
} }

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.material.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
@@ -17,6 +18,8 @@ import com.zt.plat.module.bpm.api.task.dto.BpmTaskApproveReqDTO;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO; import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
import com.zt.plat.module.qms.api.task.BMPCallbackInterface; import com.zt.plat.module.qms.api.task.BMPCallbackInterface;
import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO; import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO;
import com.zt.plat.module.qms.common.data.service.DataKeyCheckService;
import com.zt.plat.module.qms.enums.QmsBpmConstant;
import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.*; import com.zt.plat.module.qms.resource.material.controller.vo.*;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO;
@@ -70,6 +73,9 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService ,
@Autowired @Autowired
private BpmProcessInstanceApi bpmProcessInstanceApi; private BpmProcessInstanceApi bpmProcessInstanceApi;
@Autowired
private DataKeyCheckService dataKeyCheckService;
@Transactional @Transactional
@Override @Override
public MaterialLifecycleRespVO createMaterialLifecycle(MaterialLifecycleSaveReqVO createReqVO) { public MaterialLifecycleRespVO createMaterialLifecycle(MaterialLifecycleSaveReqVO createReqVO) {
@@ -114,7 +120,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService ,
MaterialLifecycleDetailDO detailDO = new MaterialLifecycleDetailDO(); MaterialLifecycleDetailDO detailDO = new MaterialLifecycleDetailDO();
detailDO.setLifecycleId(mtrlLfc.getId()) detailDO.setLifecycleId(mtrlLfc.getId())
.setProductId(gong.getProductId()).setBatchId(gong.getParentId()) .setProductId(gong.getProductId()).setBatchId(gong.getParentId())
.setBatchGongduanId(gong.getId()) .setBatchGongduanId(gong.getId()).setBusinessType(mtrlLfc.getBusinessType())
.setAssayFlag(gong.getAssayFlag()) .setAssayFlag(gong.getAssayFlag())
.setTreatmentStatus(0); .setTreatmentStatus(0);
return detailDO; return detailDO;
@@ -202,7 +208,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService ,
if (lifecycleDO == null) return null; if (lifecycleDO == null) return null;
MaterialLifecycleRespVO respVO = BeanUtils.toBean(lifecycleDO, MaterialLifecycleRespVO.class); MaterialLifecycleRespVO respVO = BeanUtils.toBean(lifecycleDO, MaterialLifecycleRespVO.class);
// 获取明细 // 获取明细
List<MaterialLifecycleDetailRespVO> detailRespVOS = materialLifecycleDetailService.getMaterialLifecycleDetailListByLfcId(id); List<MaterialLifecycleDetailRespVO> detailRespVOS = materialLifecycleDetailService.getDetailListWithPdtInfoByLfcId(id);
respVO.setDetailList(detailRespVOS); respVO.setDetailList(detailRespVOS);
return respVO; return respVO;
} }
@@ -276,19 +282,18 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService ,
BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO();
reqDTO.setBusinessKey(String.valueOf(lifecycleDO.getId())) reqDTO.setBusinessKey(String.valueOf(lifecycleDO.getId()))
.setVariables(variables); .setVariables(variables);
// TODO 流程key根据业务类型动态获取
// switch (lifecycleDO.getBusinessType()) { switch (lifecycleDO.getBusinessType()) {
// case "验收": case "验收":
// reqDTO.setProcessDefinitionKey("MATERIAL_ACCEPTANCE_FLOW_KEY"); reqDTO.setProcessDefinitionKey("QMS_RESOURCE_MATERIAL_ACCEPTANCE");
// break; break;
// case "退换货": case "退换货":
// reqDTO.setProcessDefinitionKey("MATERIAL_RETURN_EXCHANGE_FLOW_KEY"); reqDTO.setProcessDefinitionKey("QMS_RESOURCE_MATERIAL_RETURN_EXCHANGE");
// break; break;
// case "配置申请": case "配置申请":
// reqDTO.setProcessDefinitionKey("MATERIAL_CONFIG_APPLY_FLOW_KEY"); reqDTO.setProcessDefinitionKey("QMS_RESOURCE_MATERIAL_CONFIG_APPLY");
// break; break;
// } }
reqDTO.setProcessDefinitionKey("QMS_RESOURCE_MATERIAL_COMMON");
CommonResult<String> result = bpmProcessInstanceApi.createProcessInstance(loginUserId, reqDTO); CommonResult<String> result = bpmProcessInstanceApi.createProcessInstance(loginUserId, reqDTO);
if(!result.isSuccess()){ if(!result.isSuccess()){
throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg());
@@ -307,36 +312,73 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService ,
*/ */
@Override @Override
public CommonResult<JSONObject> callback(QmsBpmDTO reqDTO) { public CommonResult<JSONObject> callback(QmsBpmDTO reqDTO) {
log.info("物料流程回调信息:{}", reqDTO.toString()); log.debug("物料流程回调信息:{}", reqDTO.toString());
/*
QmsBpmDTO( JSONObject variables = reqDTO.getVariables();
processInstanceId=042585c1-00e3-11f1-9df0-005056c00001, String processInsId = reqDTO.getProcessInstanceId();
businessKey=2018618104343769090, String currentActivityInsId = variables.getString(QmsBpmConstant.BPM_CUR_ACTIVITY_INS_ID);
variables={ String returnFlag = variables.getString(QmsBpmConstant.BPM_REJECT_TO_FIRST_FLAG);
"_FLOWABLE_SKIP_EXPRESSION_ENABLED":true, // 同一个节点需要避免重复处理
"processInstanceId":"042585c1-00e3-11f1-9df0-005056c00001", String checkKey = currentActivityInsId;
"nrOfActiveInstances":1, if(StrUtil.isEmpty(currentActivityInsId))
"bpmFieldExtensions":[], checkKey = processInsId + "-create";
"PROCESS_STATUS":1, if("1".equals(returnFlag))
"currentActivityInsId":"043c904a-00e3-11f1-9df0-005056c00001", checkKey += "-reject";
"bpmCallbackBean":"materialLifecycleService", try{
"applyDepartment":"检验检测管理中心", dataKeyCheckService.create(checkKey, this.getClass().getName());
"Activity_0tp833v_assignees":["2008359763063820290"], } catch (Exception e){
"loopCounter":0, log.error("checkKey 重复key={}", checkKey);
"applyUserId":"2008359763063820290", return CommonResult.success(new JSONObject());
"nrOfInstances":1, }
"PROCESS_START_USER_ID":"2008359763063820290", // 流程状态处理 1-提交(含退回) 3-拒绝 4-取消流程
"applyUser":"云铜检验管理员", String PROCESS_STATUS = variables.getString(QmsBpmConstant.PROCESS_INSTANCE_VARIABLE_STATUS);
"Activity_0tp833v_assignee":"2008359763063820290", String businessKey = reqDTO.getBusinessKey();
"applyDepartmentId":170, JSONArray fieldExtensions = new JSONArray();
"applyTime":"2026-02-03 17:30:44", if(variables.containsKey(QmsBpmConstant.BPM_FIELD_EXTENSIONS)){
"mainId":"2018618104343769090", fieldExtensions = variables.getJSONArray(QmsBpmConstant.BPM_FIELD_EXTENSIONS);
"bpmCallbackActivityId":"Activity_0tp833v", }
"nrOfCompletedInstances":1 MaterialLifecycleDO entity = materialLifecycleMapper.selectById(Long.valueOf(businessKey));
}, // String currentActivityId = variables.getString(QmsBpmConstant.BPM_CALLBACK_ACTIVITY_ID);
state=) // 检查是否最后一个节点
*/ boolean lastActivityFlag = false;
// 变更流程状态 boolean firstActivityFlag = false;
return null; if(!fieldExtensions.isEmpty()){
for(int i = 0; i < fieldExtensions.size(); i++){
JSONObject fieldExtension = fieldExtensions.getJSONObject(i);
if(fieldExtension.getString("fieldName").equalsIgnoreCase(QmsBpmConstant.BPM_LAST_ACTIVITY_FLAG)){
lastActivityFlag = true;
}
if(fieldExtension.getString("fieldName").equalsIgnoreCase(QmsBpmConstant.BPM_FIRST_ACTIVITY_FLAG)){
firstActivityFlag = true;
}
}
}
// 根据流程状态处理业务数据
if(("1").equals(returnFlag)){
// 驳回。流程需要配置退回到发起节点
entity.setFlowStatus(QmsCommonConstant.REJECTED);
} else if("3".equals(PROCESS_STATUS)){
// 拒绝
entity.setFlowStatus(QmsCommonConstant.REFUSED);
} else if("4".equals(PROCESS_STATUS)){
// 作废
entity.setFlowStatus(QmsCommonConstant.VOID);
} else if("1".equals(PROCESS_STATUS) || "2".equals(PROCESS_STATUS)){
// 通过
if(firstActivityFlag)
// 驳回后重新提交
entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS);
if(lastActivityFlag) {
// 结束审批
entity.setFlowStatus(QmsCommonConstant.COMPLETED);
// 更新明细处理状态
materialLifecycleDetailService.updateDetailTreatStatusByLfcId(entity.getId(), QmsCommonConstant.COMPLETED);
// 更新批次工段验收状态
materialBatchService.updateMaterialBatchAcceptStatusByLfcId(entity.getId(), QmsCommonConstant.COMPLETED);
}
}
materialLifecycleMapper.updateById(entity);
return CommonResult.success(new JSONObject());
} }
} }

View File

@@ -55,6 +55,26 @@ public class XRFDeviceSampleReqVO implements Serializable {
@Schema(description = "样品时间") @Schema(description = "样品时间")
private LocalDateTime sampleTime; private LocalDateTime sampleTime;
/**
* 样品开始时间
*/
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化(请求)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "样品开始时间")
private LocalDateTime sampleStartTime;
/**
* 样品结束时间
*/
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化(请求)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "样品结束时间")
private LocalDateTime sampleEndTime;
/** /**
* 分析人 * 分析人
*/ */

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -17,29 +18,40 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementProjectDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessXRFDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessXRFDataDO;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayProjectDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayProjectDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientParameterDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementProjectDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementProjectDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessXRFDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessXRFDataMapper;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfItem;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfPoint;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodExtendRespVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFConversionRateDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFConversionRateDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFLineDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFLineDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFProjectDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFProjectDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFConversionRateMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFConversionRateMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFLineMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFLineMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFProjectMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFProjectMapper;
import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.thirdpartyapi.controller.vo.*; import com.zt.plat.module.qms.thirdpartyapi.controller.vo.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -59,15 +71,24 @@ public class XRFDataServiceImpl implements XRFDataService {
@Resource @Resource
private ConfigAssayMethodProjectMapper configAssayMethodProjectMapper; private ConfigAssayMethodProjectMapper configAssayMethodProjectMapper;
@Resource
private ConfigSubSampleMethodMapper configSubSampleMethodMapper;
@Resource @Resource
private BusinessXRFDataMapper businessXRFDataMapper; private BusinessXRFDataMapper businessXRFDataMapper;
@Resource @Resource
private BusinessAssayTaskDataMapper businessAssayTaskDataMapper; private BusinessAssayTaskDataMapper businessAssayTaskDataMapper;
@Resource
private BusinessAssayTaskParameterDataMapper businessAssayTaskParameterDataMapper;
@Resource @Resource
private BusinessAssayProjectDataMapper businessAssayProjectDataMapper; private BusinessAssayProjectDataMapper businessAssayProjectDataMapper;
@Resource
private BusinessAssayParameterDataMapper businessAssayParameterDataMapper;
@Resource @Resource
private BusinessQCManagementDataMapper businessQCManagementDataMapper; private BusinessQCManagementDataMapper businessQCManagementDataMapper;
@@ -121,6 +142,11 @@ public class XRFDataServiceImpl implements XRFDataService {
//根据样品编号及分析方法类型,获取检测任务数据 //根据样品编号及分析方法类型,获取检测任务数据
List<BusinessAssayTaskDataExtendRespVO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf"); List<BusinessAssayTaskDataExtendRespVO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
List<Long> businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
//获取检测参数
List<BusinessAssayTaskParameterDataExtendRespVO> businessAssayTaskParameterDataExtendList = businessAssayTaskParameterDataMapper.selectExtendByBusinessAssayTaskDataIds(businessAssayTaskDataIdList);
//管理样和标准样 //管理样和标准样
List<BusinessQCManagementDataDO> businessQCManagementDataList = businessQCManagementDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf"); List<BusinessQCManagementDataDO> businessQCManagementDataList = businessQCManagementDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
@@ -128,7 +154,11 @@ public class XRFDataServiceImpl implements XRFDataService {
// List<BusinessQCCoefficientDataDO> businessQCCoefficientDataList = businessQCCoefficientDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf"); // List<BusinessQCCoefficientDataDO> businessQCCoefficientDataList = businessQCCoefficientDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = new ArrayList<>(); List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = new ArrayList<>();
List<BusinessAssayTaskParameterDataDO> businessAssayTaskParameterDataList = new ArrayList<>();
List<BusinessAssayProjectDataDO> busElementValueList = new ArrayList<>(); List<BusinessAssayProjectDataDO> busElementValueList = new ArrayList<>();
List<BusinessAssayParameterDataDO> updateBusinessAssayParameterDataList = new ArrayList<>();
List<BusinessQCManagementProjectDataDO> busQcManageElementValueList = new ArrayList<>(); List<BusinessQCManagementProjectDataDO> busQcManageElementValueList = new ArrayList<>();
// List<BusinessQCCoefficientParameterDataDO> busQccParameterValueList = new ArrayList<>(); // List<BusinessQCCoefficientParameterDataDO> busQccParameterValueList = new ArrayList<>();
List<BusinessXRFDataDO> busYgDataList = new ArrayList<>(); List<BusinessXRFDataDO> busYgDataList = new ArrayList<>();
@@ -149,6 +179,8 @@ public class XRFDataServiceImpl implements XRFDataService {
busYgData.setXRFSampleId(ygDeviceSample.getSampleId()); busYgData.setXRFSampleId(ygDeviceSample.getSampleId());
busYgData.setSampleCode(ygDeviceSample.getSampleCode()); busYgData.setSampleCode(ygDeviceSample.getSampleCode());
busYgData.setSampleTime(ygDeviceSample.getSampleTime()); busYgData.setSampleTime(ygDeviceSample.getSampleTime());
busYgData.setSampleStartTime(ygDeviceSample.getSampleStartTime());
busYgData.setSampleEndTime(ygDeviceSample.getSampleEndTime());
busYgData.setAssayOperator(ygDeviceSample.getAssayOper()); busYgData.setAssayOperator(ygDeviceSample.getAssayOper());
busYgData.setIsCheckCreate(ygDeviceSample.getIsCheck() ? 1 : 0); busYgData.setIsCheckCreate(ygDeviceSample.getIsCheck() ? 1 : 0);
@@ -165,6 +197,25 @@ public class XRFDataServiceImpl implements XRFDataService {
List<BusinessAssayTaskDataExtendRespVO> currBusinessAssayTaskDataList = businessAssayTaskDataList.stream().filter(f -> ygDeviceSample.getSampleCode().equals(f.getSampleAssayCode())).collect(Collectors.toList()); List<BusinessAssayTaskDataExtendRespVO> currBusinessAssayTaskDataList = businessAssayTaskDataList.stream().filter(f -> ygDeviceSample.getSampleCode().equals(f.getSampleAssayCode())).collect(Collectors.toList());
if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) { if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) {
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) { for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) {
//处理任务参数
List<BusinessAssayTaskParameterDataExtendRespVO> currBusinessAssayTaskParameterDataExtendList = businessAssayTaskParameterDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId())).collect(Collectors.toList());
for (BusinessAssayTaskParameterDataExtendRespVO currBusinessAssayTaskParameterDataExtend : currBusinessAssayTaskParameterDataExtendList) {
switch (currBusinessAssayTaskParameterDataExtend.getKey()) {
case "lineName":
currBusinessAssayTaskParameterDataExtend.setValue(busYgData.getLineName());
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
case "sampleStartTime":
currBusinessAssayTaskParameterDataExtend.setValue(DateUtil.formatLocalDateTime(busYgData.getSampleStartTime()));
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
case "sampleEndTime":
currBusinessAssayTaskParameterDataExtend.setValue(DateUtil.formatLocalDateTime(busYgData.getSampleEndTime()));
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
}
}
List<BusinessAssayProjectDataExtendRespVO> busElementValues = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataId(businessAssayTaskData.getId()); List<BusinessAssayProjectDataExtendRespVO> busElementValues = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataId(businessAssayTaskData.getId());
tempBusElementValueList.addAll(busElementValues); tempBusElementValueList.addAll(busElementValues);
} }
@@ -295,6 +346,43 @@ public class XRFDataServiceImpl implements XRFDataService {
if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) { if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) {
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) { for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) {
ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodMapper.selectByConfigSubSampleIdAndConfigAssayMethodId(businessAssayTaskData.getConfigSubSampleId(), businessAssayTaskData.getConfigAssayMethodId());
String configInfomation = configSubSampleMethod.getConfigInfomation();
if (StringUtils.isNotBlank(configInfomation)) {
ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class);
List<ConfigSubSampleMethodConfItem> setParamList = configSubSampleMethodConfInfo.getSetParam();
if (CollUtil.isEmpty(setParamList)) {
continue;//跳出循环
}
String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null);
List<BusinessAssayTaskDataDO> targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey);
List<Long> targetBusinessAssayTaskDataIdList = targetBusinessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
List<BusinessAssayProjectDataExtendRespVO> targetBusinessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(targetBusinessAssayTaskDataIdList);
for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : setParamList) {
ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource();
String project = source.getProject();
BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = tempBusElementValueList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null);
ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget();
for (BusinessAssayTaskDataDO targetBusinessAssayTaskData : targetBusinessAssayTaskDataList) {
List<String> targetProjectList = Arrays.asList(target.getProject().split(","));
String targetParameter = target.getParameter();
for (String targetProject : targetProjectList) {
BusinessAssayProjectDataExtendRespVO targetBusinessAssayProjectData = targetBusinessAssayProjectDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(targetBusinessAssayTaskData.getId()) && f.getSimpleName().equals(targetProject)).findFirst().orElse(null);
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(targetBusinessAssayProjectData.getId(), targetProject, targetParameter);
if (businessAssayParameterDataDO != null) {
businessAssayParameterDataDO.setValue(currentBusinessAssayProjectData.getValue());
updateBusinessAssayParameterDataList.add(businessAssayParameterDataDO);
}
}
}
}
}
busYgData.setIsMatched(QmsCommonConstant.YES); busYgData.setIsMatched(QmsCommonConstant.YES);
busYgData.setBusinessBaseSampleId(businessAssayTaskData.getBusinessBaseSampleId()); busYgData.setBusinessBaseSampleId(businessAssayTaskData.getBusinessBaseSampleId());
busYgData.setBusinessSubParentSampleId(businessAssayTaskData.getBusinessSubParentSampleId()); busYgData.setBusinessSubParentSampleId(businessAssayTaskData.getBusinessSubParentSampleId());
@@ -327,10 +415,21 @@ public class XRFDataServiceImpl implements XRFDataService {
//保存荧光数据 //保存荧光数据
businessXRFDataMapper.insertBatch(busYgDataList); businessXRFDataMapper.insertBatch(busYgDataList);
//更新任务参数
if (businessAssayTaskParameterDataList.size() > 0) {
businessAssayTaskParameterDataMapper.updateBatch(businessAssayTaskParameterDataList);
}
//更新分析结果 //更新分析结果
if (busElementValueList.size() > 0) { if (busElementValueList.size() > 0) {
businessAssayProjectDataMapper.updateBatch(busElementValueList); businessAssayProjectDataMapper.updateBatch(busElementValueList);
} }
//更新检测项目参数
if (updateBusinessAssayParameterDataList.size() > 0) {
businessAssayParameterDataMapper.updateBatch(updateBusinessAssayParameterDataList);
}
//荧光管理样和标准样 //荧光管理样和标准样
if (busQcManageElementValueList.size() > 0) { if (busQcManageElementValueList.size() > 0) {
businessQCManagementProjectDataMapper.updateBatch(busQcManageElementValueList); businessQCManagementProjectDataMapper.updateBatch(busQcManageElementValueList);