diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/constant/MaterialConstants.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/constant/MaterialConstants.java index e8315644..51757dba 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/constant/MaterialConstants.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/constant/MaterialConstants.java @@ -11,6 +11,7 @@ public class MaterialConstants { // 序列号 public static final String SEQUENCE_BATCH_KEY = "QMS_MATERIAL_BATCH_NO"; public static final String SEQUENCE_INF_KEY = "QMS_MATERIAL_INF_NO"; + public static final String SEQUENCE_ASSAY_ACCEPT_SAMPLE_KEY = "QMS_MATERIAL_ASSAY_ACCEPT_SAMPLE"; // 外部模块 public static final String DEVICE_BURETTE_CATEGORY_NAME = "滴定管"; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationRespVO.java index def9fcb7..36a849ad 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationRespVO.java @@ -1,6 +1,9 @@ package com.zt.plat.module.qms.resource.material.controller.vo; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.zt.plat.module.qms.core.aspect.annotation.Dict; +import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialQrCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -37,9 +40,7 @@ public class MaterialInfomationRespVO { @Schema(description = "工段部门id") @ExcelProperty("工段部门id") private Long assignDepartmentId; - /** - * 分配部门名称 - */ + @Schema(description = "工段分配部门名称") @ExcelProperty("工段分配部门名称") private String assignDepartmentName; @@ -56,6 +57,9 @@ public class MaterialInfomationRespVO { @ExcelProperty("编码") private String code; + @Schema(description = "二维码内容") + private MaterialQrCode qrCode; + @Schema(description = "来源,批次入库,标液配置、危化品配置等") @ExcelProperty("来源,批次入库,标液配置、危化品配置等") @Dict(dicCode = "material_infomation_origin") @@ -216,4 +220,12 @@ public class MaterialInfomationRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; + + // 设置二维码内容 + public String getQrCode() { + MaterialQrCode qrCode = new MaterialQrCode(); + qrCode.setCode(this.code); + qrCode.setName(this.name); + return JSONUtil.toJsonStr(qrCode); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundDetailRespVO.java index aedcb89c..d18feb7e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundDetailRespVO.java @@ -1,7 +1,10 @@ package com.zt.plat.module.qms.resource.material.controller.vo; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialQrCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -86,4 +89,15 @@ public class MaterialInventoryInboundDetailRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "二维码内容") + private MaterialQrCode qrCode; + + // 设置二维码内容 + public String getQrCode() { + MaterialQrCode qrCode = new MaterialQrCode(); + qrCode.setCode(this.infomationCode); + qrCode.setName(this.infomationName); + return JSONUtil.toJsonStr(qrCode); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundRespVO.java index d5df9b70..9d48b5e4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryInboundRespVO.java @@ -98,4 +98,7 @@ public class MaterialInventoryInboundRespVO { @ExcelProperty("入库明细") private List detailList; + /*@Schema(description = "当次入库的物料实例") + private List infomationList;*/ + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java index 0f5f8822..7e376e82 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java @@ -8,6 +8,7 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 物料通用流程明细 Response VO") @Data @@ -100,6 +101,12 @@ public class MaterialLifecycleDetailRespVO { @Schema(description = "检化验id") private Long assayId; + @Schema(description = "检化验样品大类") + private Long assaySampleId; + + @Schema(description = "检化验检测项") + private List assayItemIds; + @Schema(description = "物料实例id", example = "968") @ExcelProperty("物料实例id") private Long infomationId; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialQrCode.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialQrCode.java new file mode 100644 index 00000000..b50d3c86 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialQrCode.java @@ -0,0 +1,18 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.assist; + +import lombok.Data; + +/** + * 物料二维码信息 + */ +@Data +public class MaterialQrCode { + /** + * 编号 + */ + private String code; + /** + * 名称 + */ + private String name; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java index afcfdd64..e843fc03 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java @@ -1,5 +1,9 @@ package com.zt.plat.module.qms.resource.material.controller.vo.query; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.zt.plat.framework.common.exception.ServiceException; +import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialQrCode; import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOneBusinessType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -33,6 +37,9 @@ public class MaterialInfomationQueryVO { @Schema(description = "名称") private String name; + @Schema(description = "二维码") + private String qrCode; + @Schema(description = "是否危险品,1-是,0-否") private Integer hazardous; @@ -88,4 +95,18 @@ public class MaterialInfomationQueryVO { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + public String getCode() { + // 优先从二维码字符串中解析 code + if (StrUtil.isNotEmpty(this.qrCode)) { + try { + MaterialQrCode materialQrCode = JSONUtil.toBean(this.qrCode, MaterialQrCode.class); + if (materialQrCode == null) return this.code; + return StrUtil.isNotEmpty(materialQrCode.getCode()) ? materialQrCode.getCode() : this.code; + } catch (Exception e) { + throw new ServiceException(1_032_160_000,"二维码解析失败"); + } + } + return this.code; + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialCorrelationAssayDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialCorrelationAssayDO.java index 585047cf..01d37045 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialCorrelationAssayDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialCorrelationAssayDO.java @@ -54,6 +54,16 @@ public class MaterialCorrelationAssayDO extends BusinessBaseDO { @TableField("SMP_ID") private Long sampleId; /** + * 样品名称 + */ + @TableField("SMP_NAME") + private String sampleName; + /** + * 样品编号 + */ + @TableField("SMP_CD") + private String sampleCode; + /** * 批次id */ @TableField("BAT_ID") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialAssayBusinessType.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialAssayBusinessType.java new file mode 100644 index 00000000..99f51a24 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialAssayBusinessType.java @@ -0,0 +1,12 @@ +package com.zt.plat.module.qms.resource.material.enums; + +/** + * 物料检化验业务类型 + * + */ +public enum MaterialAssayBusinessType { + /** + * 验收检化验 + */ + accept_assay, +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayService.java index 78410315..4c4acaf2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayService.java @@ -61,4 +61,32 @@ public interface MaterialCorrelationAssayService { */ PageResult getMaterialCorrelationAssayPage(MaterialCorrelationAssayPageReqVO pageReqVO); + /** + * 保存 + * + * @param assayDO 检化验关联信息 + */ + void save(MaterialCorrelationAssayDO assayDO); + + /** + * 批量保存 + * + * @param assayDOS 检化验关联信息 + */ + void saveBatch(List assayDOS); + + /** + * 根据id查询 + * + * @param ids id列表 + * @return 检化验关联信息列表 + */ + List getListByIds(List ids); + + /** + * 批量更新 + * + * @param needUpdateAssays 检化验关联信息列表 + */ + void updateBatch(List needUpdateAssays); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayServiceImpl.java index f97a881e..764dfac6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialCorrelationAssayServiceImpl.java @@ -86,4 +86,26 @@ public class MaterialCorrelationAssayServiceImpl implements MaterialCorrelationA return materialCorrelationAssayMapper.selectPage(pageReqVO); } + @Override + public void save(MaterialCorrelationAssayDO assayDO) { + materialCorrelationAssayMapper.insert(assayDO); + } + + @Override + public void saveBatch(List assayDOS) { + materialCorrelationAssayMapper.insertBatch(assayDOS); + } + + @Override + public List getListByIds(List ids) { + if (CollUtil.isEmpty(ids)) return List.of(); + return materialCorrelationAssayMapper.selectByIds(ids); + } + + @Override + public void updateBatch(List needUpdateAssays) { + if (CollUtil.isEmpty(needUpdateAssays)) return; + materialCorrelationAssayMapper.updateBatch(needUpdateAssays); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java index 3950ca15..c34fa787 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java @@ -68,14 +68,6 @@ public interface MaterialInfomationService { */ PageResult getMaterialInfomationPage(MaterialInfomationPageReqVO pageReqVO); - /** - * 根据物料大类 id 获取库存数量 - * - * @param mtrlIds ids - * @return 大类id-库存数量 - */ - Map getStockQuantityByPdtIds(List mtrlIds); - /** * 批量保存物料实例 * @@ -142,7 +134,7 @@ public interface MaterialInfomationService { * @param ids id集合 * @return 物料信息 */ - List getMaterialInfomationsWithPdtInfoByIds(List ids); + List getRespListWithPdtInfoByIds(List ids); /** * 保存物料信息 - 危化品配置生成 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java index fbfcc6e4..3ff2f19e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java @@ -122,22 +122,6 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService return materialInfomationMapper.selectPage(pageReqVO); } - @Override - public Map getStockQuantityByPdtIds(List pdtIds) { - QueryWrapper queryWrapper = Wrappers.query(MaterialInfomationDO.class) - .select("PDT_ID ,count(*) as quantity") - .in("PDT_ID", pdtIds) - .eq("USG_STS", 0) - .groupBy("PDT_ID"); - List> maps = materialInfomationMapper.selectMaps(queryWrapper); - if (CollUtil.isEmpty(maps)) return new HashMap<>(); - - return maps.stream().collect(Collectors.toMap( - map -> (Long) map.get("PDT_ID"), - map -> (Long) map.get("QUANTITY") - )); - } - @Override public void saveBatch(List infomationDOS) { materialInfomationMapper.insertBatch(infomationDOS); @@ -227,7 +211,7 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService } @Override - public List getMaterialInfomationsWithPdtInfoByIds(List ids) { + public List getRespListWithPdtInfoByIds(List ids) { return materialInfomationMapper.selectListWithPdtInfoByInfIds(ids); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryInboundServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryInboundServiceImpl.java index ae3c5bcb..374a1e60 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryInboundServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryInboundServiceImpl.java @@ -12,10 +12,7 @@ import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService; import com.zt.plat.module.qms.core.constant.CommonConstant; import com.zt.plat.module.qms.core.constant.DataTypeConstant; import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryInboundDetailRespVO; -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.MaterialInventoryInboundSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.*; 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.enums.MaterialAcceptStatus; @@ -113,6 +110,9 @@ public class MaterialInventoryInboundServiceImpl implements MaterialInventoryInb List detailRespVOList = materialInventoryInboundDetailService.getMaterialInfoListByInboundId(inbound.getId()); respVO.setDetailList(detailRespVOList); + /*List infIds = infomationDOS.stream().map(MaterialInfomationDO::getId).toList(); + List infs = materialInfomationService.getRespListWithPdtInfoByIds(infIds); + respVO.setInfomationList(infs);*/ return respVO; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java index d5a76672..1cecde25 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java @@ -153,4 +153,11 @@ public interface MaterialLifecycleDetailService { * @param updateReqVO 批量更新信息 */ void updateBatchMaterialLifecycleDetail(@Valid List updateReqVO); + + /** + * 批量更新 + * + * @param assayDetails 批量实体 + */ + void updateBatch(List assayDetails); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java index 6cde7420..d3cc7bfa 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java @@ -1,6 +1,8 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.pojo.PageResult; @@ -41,6 +43,8 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta private MaterialBatchService materialBatchService; @Autowired private MaterialProductService materialProductService; + @Autowired + private MaterialCorrelationAssayService materialCorrelationAssayService; @Override public MaterialLifecycleDetailRespVO createMaterialLifecycleDetail(MaterialLifecycleDetailSaveReqVO createReqVO) { @@ -133,7 +137,22 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta MaterialFlowType flowType = MaterialFlowType.fromName(lifecycleDO.getBusinessType()); switch (flowType) { case acceptance -> { - return materialLifecycleDetailMapper.selectListWithGongPdtBatInfo(lifecycleDO.getId()); + List details = materialLifecycleDetailMapper.selectListWithGongPdtBatInfo(lifecycleDO.getId()); + if (CollUtil.isEmpty(details)) return details; + // 有检化验的需要处理 + List assayDetails = details.stream().filter(detail -> detail.getAssayId() != null).toList(); + if (CollUtil.isEmpty(assayDetails)) return details; + List asyIds = assayDetails.stream().map(MaterialLifecycleDetailRespVO::getAssayId).toList(); + List assayDOS = materialCorrelationAssayService.getListByIds(asyIds); + if (CollUtil.isEmpty(assayDOS)) return details; + Map assayDOMapById = assayDOS.stream().collect(Collectors.toMap(MaterialCorrelationAssayDO::getId, Function.identity())); + details.forEach(detail -> { + MaterialCorrelationAssayDO assayDO = assayDOMapById.get(detail.getAssayId()); + JSONArray array = JSONUtil.parseArray(assayDO.getItem()); + detail.setAssaySampleId(assayDO.getSampleId()) + .setAssayItemIds(CollUtil.isEmpty(array) ? List.of() : array.toList(Long.class)); + }); + return details; } case verify_calibrate -> { return materialLifecycleDetailMapper.selectListWithBatchPdtBatInfo(lifecycleDO.getId()); @@ -255,4 +274,9 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta } } + @Override + public void updateBatch(List assayDetails) { + materialLifecycleDetailMapper.updateBatch(assayDetails); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java index 9d5c4fe4..507bf199 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.yomahub.liteflow.flow.LiteflowResponse; import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; @@ -18,12 +18,18 @@ import com.zt.plat.module.bpm.api.task.dto.*; import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; 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.business.bus.liteflow.param.SampleEntrustDetail; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustDetailProject; +import com.zt.plat.module.qms.business.bus.liteflow.param.SampleEntrustParam; +import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleEntrustContext; +import com.zt.plat.module.qms.business.bus.service.SampleEntrustService; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLocationDO; import com.zt.plat.module.qms.business.config.service.ConfigWarehouseLocationService; import com.zt.plat.module.qms.common.data.service.DataKeyCheckService; import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService; import com.zt.plat.module.qms.common.service.BusinessFileService; +import com.zt.plat.module.qms.core.code.SequenceUtil; import com.zt.plat.module.qms.enums.AdjustType; import com.zt.plat.module.qms.enums.LockType; import com.zt.plat.module.qms.enums.QmsBpmConstant; @@ -32,10 +38,7 @@ import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; import com.zt.plat.module.qms.resource.material.controller.vo.*; import com.zt.plat.module.qms.resource.material.dal.dataobject.*; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialLifecycleMapper; -import com.zt.plat.module.qms.resource.material.enums.MaterialAcceptStatus; -import com.zt.plat.module.qms.resource.material.enums.MaterialFlowType; -import com.zt.plat.module.qms.resource.material.enums.MaterialInboundType; -import com.zt.plat.module.qms.resource.material.enums.MaterialOutboundType; +import com.zt.plat.module.qms.resource.material.enums.*; import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; import com.zt.plat.module.system.api.user.AdminUserApi; @@ -43,7 +46,6 @@ import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -59,7 +61,6 @@ import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; -import static com.zt.plat.module.qms.enums.ErrorCodeConstants.CONFIG_WAREHOUSE_LOCATION_NOT_EXISTS; import static com.zt.plat.module.qms.enums.QmsBpmConstant.BPM_CALLBACK_BEAN_NAME; /** @@ -106,6 +107,12 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , private MaterialInventoryCheckDetailService materialInventoryCheckDetailService; @Autowired private MaterialInventoryInboundService materialInventoryInboundService; + @Autowired + private MaterialCorrelationAssayService materialCorrelationAssayService; + @Autowired + private SampleEntrustService sampleEntrustService; + @Autowired + private SequenceUtil sequenceUtil; @Transactional @Override @@ -115,7 +122,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , mtrlLfc.setSubmitStatus(0); String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - if (loginUser == null) throw new ServiceException(1_032_160_000, "登录用户不存在"); + assert loginUser != null; mtrlLfc.setApplyUser(loginUserNickname) .setApplyUserId(loginUser.getId()) .setApplyDepartment(loginUser.getVisitDeptName()) @@ -147,6 +154,8 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , materialInventoryCheckItemService.saveBatch(checkItemDOS); } + case acceptance -> // 需要检查是否检化验 + this.saveAssays(detailDOS, detailList); } return BeanUtils.toBean(mtrlLfc, MaterialLifecycleRespVO.class); @@ -320,9 +329,50 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , materialLifecycleDetailService.saveBatch(detailDOS); if (isReturnExchangeMaterial) lockReturnExchangeResources(detailDOS, LockType.lock); if (isVerifyCalibrate) lockVerifyCalibrateResources(oriDetailList, LockType.lock); + if (flowType == MaterialFlowType.acceptance) { + this.saveAssays(detailDOS, detailList); + } materialLifecycleMapper.updateById(mtrlLfc); } + private void saveAssays(List detailDOS, List detailList) { + // 需要检查是否检化验 + List assayDetails = detailDOS.stream().filter(detail -> detail.getAssayFlag() == 1).toList(); + if (CollUtil.isEmpty(assayDetails)) return; + Map gongToReqMap = detailList.stream() + .collect(Collectors.toMap(MaterialLifecycleDetailSaveReqVO::getBatchGongduanId, Function.identity())); + List pdtIds = assayDetails.stream().map(MaterialLifecycleDetailDO::getProductId).toList(); + List pdts = materialProductService.getListByIds(pdtIds); + Map pdtMapById = pdts.stream().collect(Collectors.toMap(MaterialProductDO::getId, Function.identity())); + List assayDOS = assayDetails.stream().map(detail -> { + MaterialProductDO product = pdtMapById.get(detail.getProductId()); + MaterialLifecycleDetailSaveReqVO reqVO = gongToReqMap.get(detail.getBatchGongduanId()); + return new MaterialCorrelationAssayDO() + .setBusinessType(MaterialAssayBusinessType.accept_assay.name()) + .setProductId(detail.getProductId()) + .setBatchId(detail.getBatchId()) + .setGongduanId(detail.getBatchGongduanId()) + // 样品大类 + .setSampleId(reqVO != null ? reqVO.getAssaySampleId() : null) + .setSampleName(product.getName()) + .setSampleCode(sequenceUtil.genCode(MaterialConstants.SEQUENCE_ASSAY_ACCEPT_SAMPLE_KEY)) + // 检测项 + .setItem(reqVO != null && CollUtil.isNotEmpty(reqVO.getAssayItemIds()) + ? JSONUtil.toJsonStr(reqVO.getAssayItemIds()) + : null) + .setSource(String.valueOf(detail.getId())) + .setAssayStatus(QmsCommonConstant.NOT_START); + }).toList(); + + // 保存验收 + materialCorrelationAssayService.saveBatch(assayDOS); + // 设置明细的 assayId + for (int i = 0; i < assayDetails.size(); i++) { + assayDetails.get(i).setAssayId(assayDOS.get(i).getId()); + } + materialLifecycleDetailService.updateBatch(assayDetails); + } + private List getLifecycleDetailDOSByAcceptance(List detailList, MaterialLifecycleDO mtrlLfc) { List gongIds = detailList.stream().map(MaterialLifecycleDetailSaveReqVO::getBatchGongduanId).toList(); @@ -800,12 +850,10 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , items.forEach(item -> { if (item.getActual().compareTo(item.getExpected()) > 0) { item.setDifference("盘盈"); - // TODO 盘盈入库 } else if (item.getActual().compareTo(item.getExpected()) == 0) { item.setDifference("盘平"); } else if (item.getActual().compareTo(item.getExpected()) < 0) { item.setDifference("盘亏"); - // TODO 盘亏出库 } }); materialInventoryCheckItemService.updateBatch(items); @@ -993,7 +1041,6 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , } } } - // TODO 走到检化验节点时需要发起检化验流程 MaterialFlowType flowType = MaterialFlowType.fromName(entity.getBusinessType()); // 根据流程状态处理业务数据 if(("1").equals(returnFlag)){ @@ -1032,13 +1079,9 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , this.inventoryCheckPassHandle(entity.getId()); } } - // 需要发起检化验流程 + // 走到检化验节点时需要发起检化验流程 if(needInitAssayFlow && assayFlag != null && assayFlag == 1) { - // 获取明细批次拆分 - List details = this.getDetailListByLfcId(entity.getId()); - // 筛选需要检化验的批次 - List assayDetails = details.stream() - .filter(detail -> detail.getAssayFlag() != null && detail.getAssayFlag() == 1).toList(); + this.initAssayByLfcId(entity.getId()); } } @@ -1046,6 +1089,51 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , return CommonResult.success(new JSONObject()); } + private void initAssayByLfcId(Long lfcId) { + // 获取明细批次拆分 + List details = this.getDetailListByLfcId(lfcId); + // 筛选需要检化验的批次 + List assayDetails = details.stream() + .filter(detail -> detail.getAssayId() != null).toList(); + if (CollUtil.isEmpty(assayDetails)) return; + List asyIds = assayDetails.stream().map(MaterialLifecycleDetailDO::getAssayId).toList(); + List assays = materialCorrelationAssayService.getListByIds(asyIds); + if (CollUtil.isEmpty(assays)) return; + Map assayMapById = assays.stream().collect(Collectors.toMap(MaterialCorrelationAssayDO::getId, Function.identity())); + SampleEntrustParam entrustParam = new SampleEntrustParam() + .setCreateWay(QmsCommonConstant.INTERFACE_INTERNAL).setConfigEntrustSourceKey(QmsCommonConstant.ENTRUST_SOURCE_JYWT) + .setEntrustType(QmsCommonConstant.ENTRUST_INSPECTION); + List needUpdateAssays = new ArrayList<>(); + for (MaterialLifecycleDetailDO detail : assayDetails) { + MaterialCorrelationAssayDO assay = assayMapById.get(detail.getAssayId()); + if (assay == null) continue; + cn.hutool.json.JSONArray itemArray = JSONUtil.parseArray(assay.getItem()); + if (CollUtil.isEmpty(itemArray)) continue; + List itemIds = itemArray.toList(Long.class); + List projects = itemIds.stream().map(itemId -> + new SampleEntrustDetailProject().setMaterialAssayStandardDetailId(itemId) + .setIsEnabled(1)).toList(); + SampleEntrustDetail sampleEntrustDetail = new SampleEntrustDetail(); + sampleEntrustDetail + .setBaseSampleId(assay.getSampleId()) + .setEntrustSampleCode(assay.getSampleCode()) + .setEntrustSampleName(assay.getSampleName()) + .setIsWeighing(0) + .setSampleEntrustDetailProjectList(projects); + entrustParam.setSampleEntrustDetailList(List.of(sampleEntrustDetail)); + LiteflowResponse assayRes = sampleEntrustService.create(entrustParam); + if (!assayRes.isSuccess()) throw new ServiceException(1_032_160_000, "创建检化验单失败:" + assayRes.getMessage()); + assay.setEntrustId(assayRes.getContextBean(SampleEntrustContext.class).getSampleEntrustRegistration().getId()); + needUpdateAssays.add(assay); + /* 获取明细 + assayRes.getContextBean(SampleEntrustContext.class).getSampleEntrustDetailList().forEach(detail -> { + detail.getBusinessSampleEntrustRegistrationId() + }); + */ + } + materialCorrelationAssayService.updateBatch(needUpdateAssays); + } + private void createVerifyBatchAssignsByLfcId(Long id) { MaterialLifecycleDO lifecycleDO = this.getMaterialLifecycle(id); if (lifecycleDO == null) return; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java index 863b253c..78973d64 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java @@ -144,7 +144,7 @@ public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDeta Set targetInfomationIds = recordDetailDOS.stream().map(MaterialUseRecordDetailDO::getTargetInfomationId) .collect(Collectors.toSet()); List targetInfomationRespVOS = materialInfomationService - .getMaterialInfomationsWithPdtInfoByIds(new ArrayList<>(targetInfomationIds)); + .getRespListWithPdtInfoByIds(new ArrayList<>(targetInfomationIds)); if (CollUtil.isEmpty(targetInfomationRespVOS)) return List.of(); // 获取使用记录 Set recordIds = recordDetailDOS.stream().map(MaterialUseRecordDetailDO::getRecordId).collect(Collectors.toSet());