From c8776349a553bdf11877a4ae25edaac1bb921457 Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Wed, 8 Apr 2026 16:05:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E9=AA=8C=E6=94=B6=E6=A3=80=E9=AA=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E5=A4=84=E7=90=86=EF=BC=8C=E6=89=B9=E6=AC=A1?= =?UTF-8?q?=E5=B7=A5=E6=AE=B5=E4=B8=9A=E5=8A=A1=E5=9C=BA=E6=99=AF=EF=BC=8C?= =?UTF-8?q?=E6=A0=B9=E6=8D=AEcode=E6=9F=A5=E7=89=A9=E6=96=99=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E4=B8=9A=E5=8A=A1=E5=9C=BA=E6=99=AF=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialLifecycleController.java | 11 +++-- .../vo/MaterialCorrelationAssayRespVO.java | 10 +++- .../vo/MaterialLifecycleRespVO.java | 14 ++++++ .../vo/assist/MaterialAssayResult.java | 17 +++++-- .../assist/MaterialSampleItemAssayResult.java | 16 ++++++ .../MaterialCorrelationAssayDO.java | 2 - .../dal/mapper/MaterialBatchMapper.java | 21 +++++--- .../listener/MaterialAssayResultListener.java | 44 +++++++++++++---- .../service/MaterialBatchServiceImpl.java | 8 ++- .../MaterialInfomationServiceImpl.java | 6 ++- .../MaterialInventoryInboundServiceImpl.java | 3 +- .../MaterialLifecycleDetailServiceImpl.java | 1 + .../service/MaterialLifecycleServiceImpl.java | 49 ++++++++++++------- 13 files changed, 155 insertions(+), 47 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialSampleItemAssayResult.java diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java index 28b11f02..11889c87 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java @@ -107,9 +107,9 @@ public class MaterialLifecycleController extends AbstractFileUploadController im @PutMapping("/submit") @Operation(summary = "提交(验收等流程)") @Parameter(name = "id", description = "编号", required = true, example = "1024") - public CommonResult submitLifecycle(@RequestParam("id") Long id) { - - return success(materialLifecycleService.submitLifecycle(id)); + public CommonResult submitLifecycle(@RequestParam("id") Long id) { + materialLifecycleService.submitLifecycle(id); + return success(materialLifecycleService.getMaterialLifecycleWithDetailList(id)); } @PutMapping("/operator-submit") @@ -133,6 +133,11 @@ public class MaterialLifecycleController extends AbstractFileUploadController im materialAssayResultListener.approveTask(flowId); } + @PutMapping("/mq-test") + public void testMq() { + materialAssayResultListener.mqTest(); + } + @GetMapping("/export-excel") @Operation(summary = "导出物料通用流程,物料验收、退换货 Excel") @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:export')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialCorrelationAssayRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialCorrelationAssayRespVO.java index 5f0bc380..a7154faa 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialCorrelationAssayRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialCorrelationAssayRespVO.java @@ -1,6 +1,5 @@ package com.zt.plat.module.qms.resource.material.controller.vo; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; @@ -8,6 +7,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.zt.plat.module.qms.core.aspect.annotation.Dict; import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialAssayResult; +import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialSampleItemAssayResult; import com.zt.plat.module.qms.resource.material.enums.MaterialAssayStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +15,6 @@ import lombok.extern.slf4j.Slf4j; import java.time.LocalDateTime; import java.util.List; -import java.util.Objects; @Slf4j @Schema(description = "管理后台 - 物料检化验关联信息 Response VO") @@ -50,6 +49,9 @@ public class MaterialCorrelationAssayRespVO { @Schema(description = "样品编号") private String sampleCode; + @Schema(description = "样品名称") + private String sampleName; + @Schema(description = "样品标签模板") private String sampleLabelTemplate; @@ -111,6 +113,10 @@ public class MaterialCorrelationAssayRespVO { return array.toList(Long.class); } + public String getAssayProject() { + return this.itemsShowName; + } + public String getAssayStatus_dictText() { if (StrUtil.isBlank(this.assayStatus)) { return MaterialAssayStatus.not_start.getName(); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java index aa5d0bef..03598f83 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java @@ -1,11 +1,13 @@ package com.zt.plat.module.qms.resource.material.controller.vo; +import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; import com.zt.plat.module.qms.core.aspect.annotation.Dict; +import com.zt.plat.module.qms.resource.material.enums.MaterialFlowType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -118,4 +120,16 @@ public class MaterialLifecycleRespVO { @Schema(description = "附件对象") private CommonResult> businessFileRet; + // 是否走流程审批 + public Boolean getNeedFlowApproval() { + MaterialFlowType flowType = MaterialFlowType.fromName(this.businessType); + return switch (flowType) { + case acceptance -> + CollUtil.isNotEmpty(detailList) + && detailList.stream().anyMatch(d -> d.getAssayFlag() == 1); + case verify_calibrate, inventory_check -> true; + case return_material, replace_material, make_apply -> false; + }; + } + } \ 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/assist/MaterialAssayResult.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialAssayResult.java index 5e4908ef..965004b2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialAssayResult.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialAssayResult.java @@ -1,16 +1,25 @@ package com.zt.plat.module.qms.resource.material.controller.vo.assist; -import com.zt.plat.module.qms.business.bus.controller.vo.SampleProjectResultDetailRespVO; -import com.zt.plat.module.qms.business.bus.controller.vo.SampleProjectResultRespVO; import lombok.Data; +import java.time.LocalDateTime; import java.util.List; @Data -public class MaterialAssayResult extends SampleProjectResultRespVO { +public class MaterialAssayResult { + + /** + * 报出结果 + */ + private String assessmentValue; + + /** + * 报出时间 + */ + private LocalDateTime reportTime; /** * 结果明细 */ - private List detailList; + private List detailList; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialSampleItemAssayResult.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialSampleItemAssayResult.java new file mode 100644 index 00000000..b3aa5d18 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/assist/MaterialSampleItemAssayResult.java @@ -0,0 +1,16 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.assist; + +import com.zt.plat.module.qms.business.bus.controller.vo.SampleProjectResultDetailRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.SampleProjectResultRespVO; +import lombok.Data; + +import java.util.List; + +@Data +public class MaterialSampleItemAssayResult extends SampleProjectResultRespVO { + + /** + * 结果明细 + */ + private List detailList; +} 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 7ed876cf..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 @@ -1,9 +1,7 @@ package com.zt.plat.module.qms.resource.material.dal.dataobject; import com.baomidou.mybatisplus.annotation.*; -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; -import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialAssayResult; import lombok.*; /** * 物料检化验关联信息 DO diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java index 9e483bdf..2000952f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java @@ -11,13 +11,16 @@ import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.core.aspect.annotation.QmsPermission; import com.zt.plat.module.qms.enums.QmsCommonConstant; +import com.zt.plat.module.qms.enums.QmsPermissionConstant; import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierDO; 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.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.enums.MaterialAcceptStatus; +import com.zt.plat.module.qms.resource.material.enums.MaterialBatchGongBusinessType; import com.zt.plat.module.qms.resource.material.enums.MaterialBatchGongType; +import com.zt.plat.module.qms.resource.material.enums.MaterialFlowType; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -50,9 +53,10 @@ public interface MaterialBatchMapper extends BaseMapperX { } // @QmsPermission(deptIdColumn = "ASN_DEPT_ID", moduleDataRoleCodes = "ytjy_material_admin") - @QmsPermission(deptIdColumn = "ASN_DEPT_ID", moduleDataRoleCodes = "ytjyAdmin,ytjy_material_admin") + @QmsPermission(deptIdColumn = "ASN_DEPT_ID", + moduleDataRoleCodes = QmsPermissionConstant.ADMIN_ROLE + "," + QmsPermissionConstant.MATERIAL_ADMIN_ROLE) default PageResult selectPageWithPdtInfo(MaterialBatchPageReqVO reqVO, List pdtIds) { - + MaterialBatchGongBusinessType businessType = reqVO.getBusinessType(); MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() .selectAll(MaterialBatchDO.class) .selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName) @@ -77,21 +81,24 @@ public interface MaterialBatchMapper extends BaseMapperX { // 只要工段 .ne(MaterialBatchGongType.gong.name().equals(reqVO.getDataType()), MaterialBatchDO::getParentId, 0) // 用于批次分页 - .eq(StrUtil.isBlank(reqVO.getDataType()), MaterialBatchDO::getParentId, 0) + .eq(businessType == MaterialBatchGongBusinessType.batch_manage, + MaterialBatchDO::getParentId, 0) // 用于退换货(已提交) .eqIfExists(MaterialBatchDO::getSubmitStatus, reqVO.getSubmitStatus()) // 用于验收(提交且未验收) - // 用于入库(提交且已验收) + // 用于入库(提交且已验收且可入库) .eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus()) + .eq(businessType == MaterialBatchGongBusinessType.inbound, + MaterialBatchDO::getInboundFlag, 1) // 用于验收 - .notExists(reqVO.getSubmitStatus() != null && reqVO.getSubmitStatus() == 1 && MaterialAcceptStatus.not_accepted.name().equals(reqVO.getAcceptanceStatus()), + .notExists(businessType == MaterialBatchGongBusinessType.acceptance, "SELECT 1 FROM t_mtrl_lfc_dtl ld WHERE ld.BAT_GONG_ID = t.ID AND ld.TMT_STS = 0 AND ld.DELETED = 0") // 用于入库(分已处理和未处理) // 已处理 - .apply(MaterialAcceptStatus.accepted.name().equals(reqVO.getAcceptanceStatus()) + .apply(businessType == MaterialBatchGongBusinessType.inbound && reqVO.getTreatment(), "t.INB_END_QTY >= t.INB_QTY") // 未处理 - .apply(MaterialAcceptStatus.accepted.name().equals(reqVO.getAcceptanceStatus()) + .apply(businessType == MaterialBatchGongBusinessType.inbound && !reqVO.getTreatment(), "t.INB_END_QTY < t.INB_QTY") .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/listener/MaterialAssayResultListener.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/listener/MaterialAssayResultListener.java index ab3187ad..a515f2d4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/listener/MaterialAssayResultListener.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/listener/MaterialAssayResultListener.java @@ -20,6 +20,7 @@ import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.mq.SampleEntrustRegistrationAssayCompleteMessage; import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialAssayResult; +import com.zt.plat.module.qms.resource.material.controller.vo.assist.MaterialSampleItemAssayResult; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialCorrelationAssayDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; @@ -29,13 +30,13 @@ import com.zt.plat.module.qms.resource.material.service.MaterialLifecycleService import com.zt.plat.module.qms.resource.material.utils.BpmnXmlUtil; import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; -import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; +import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -69,6 +70,9 @@ public class MaterialAssayResultListener implements RocketMQListener asyResultDetail = sampleResultQueryService.sampleProjectResultDetailQuery(detailReqVO); log.info("检验结果明细:{}", asyResultDetail); - assayResult.setDetailList(asyResultDetail); + assayResult.setDetailList(asyResultDetail);*/ + List assessValues = asyResults.stream().map(oriAsyResult -> oriAsyResult.getProjectShowName() + "/" + oriAsyResult.getAssessmentValue()).toList(); + assayResult.setAssessmentValue(String.join(";", assessValues)); + assayResult.setReportTime(asyResults.get(0).getReportTime()); + assayResult.setDetailList(BeanUtils.toBean(asyResults, MaterialSampleItemAssayResult.class)); assay.setResult(JSONUtil.toJsonStr(assayResult)); assay.setAssayStatus(QmsCommonConstant.COMPLETED); materialCorrelationAssayService.updateById(assay); @@ -149,7 +156,6 @@ public class MaterialAssayResultListener implements RocketMQListener getBatchGongPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { // 分为 批次分页、验收、入库、退换货 + MaterialBatchGongBusinessType businessType = pageReqVO.getBusinessType(); Long pdtId = pageReqVO.getProductId(); PageResult pageResult = new PageResult<>(); String categoryCustomConfig = pageReqVO.getCategoryCustomConfig(); if (pdtId != null){ + // 指定分类或大类 List mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId); if (CollUtil.isEmpty(mtrlDos)) { pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, List.of()); @@ -368,6 +371,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, pdtIds); } } else if (StrUtil.isNotEmpty(categoryCustomConfig)) { + // 根据分类自定义配置匹配 List categoryAndData = materialProductService.getCategoryAndData(new MaterialProductQueryVO().setCategoryCustomConfig(categoryCustomConfig)); if (CollUtil.isNotEmpty(categoryAndData)) { List pdtIds = categoryAndData.stream() @@ -376,10 +380,12 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, pdtIds); } } else { + // 默认 pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, List.of()); } // 给批次设置顶级分类的json配置 - if (StrUtil.isEmpty(pageReqVO.getDataType()) || MaterialBatchGongType.batch.name().equals(pageReqVO.getDataType())) { + // if (StrUtil.isEmpty(pageReqVO.getDataType()) || MaterialBatchGongType.batch.name().equals(pageReqVO.getDataType())) { + if (businessType == MaterialBatchGongBusinessType.batch_manage) { List batches = pageResult.getList(); if (CollUtil.isNotEmpty(batches)) { List pdtIds = batches.stream().map(MaterialBatchRespVO::getProductId).toList(); 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 3ff2f19e..b3094315 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 @@ -156,18 +156,22 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService } // 使用记录时校验是否已用完 case use_record -> { + // 校验是否已领用 + if (infomation.getUsageStatus() != 1) throw new ServiceException(1_032_160_000, "该物料未领用"); // 需要校验是否危化品 Long productId = infomation.getProductId(); MaterialProductDO product = materialProductService.getMaterialProduct(productId); - if (product.getHazardous() != 1) throw new ServiceException(1_032_160_000, "该物料是危化品"); + if (product.getHazardous() != 1) throw new ServiceException(1_032_160_000, "该物料不是危化品"); if (infomation.getUseEndFlag() == 1) throw new ServiceException(1_032_160_000, "该物料已用完"); } // 用完标记时校验是否已用完并标记 case used_mark -> { + if (infomation.getUsageStatus() != 1) throw new ServiceException(1_032_160_000, "该物料未领用"); if (infomation.getUseEndFlag() == 1) throw new ServiceException(1_032_160_000, "该物料已用完并标记"); } // 开封时校验是否已开封 case open_seal -> { + if (infomation.getUsageStatus() != 1) throw new ServiceException(1_032_160_000, "该物料未领用"); // 需要校验是否要开封 Long productId = infomation.getProductId(); MaterialProductDO product = materialProductService.getMaterialProduct(productId); 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 374a1e60..2ed07820 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 @@ -66,9 +66,10 @@ public class MaterialInventoryInboundServiceImpl implements MaterialInventoryInb inboundQtyLimit(reqQuantity); MaterialBatchDO gongDO = materialBatchService.getMaterialBatch(gongduanId); if (gongDO == null) throw exception(MATERIAL_BATCH_GONG_NOT_EXISTS); - // 1.检查工段是否已经验收 + // 1.检查工段是否已经验收以及是否可入库 if (!MaterialAcceptStatus.accepted.name().equals(gongDO.getAcceptanceStatus())) throw new ServiceException(1_032_160_000, "工段未验收,不能入库"); + if (gongDO.getInboundFlag() != 1) throw new ServiceException(1_032_160_000, "此工段不可入库"); // 2. 校验入库数量不超过工段可用数量(考虑锁定数量) BigDecimal availableQuantity = gongDO.getRemaineQuantity().subtract(gongDO.getLockQuantity()); 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 e774d3b4..aae7ef42 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 @@ -262,6 +262,7 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta @Override public List getDetailListByLfcIds(List lfcIds) { + if (CollUtil.isEmpty(lfcIds)) return List.of(); return materialLifecycleDetailMapper.selectList(Wrappers.lambdaQuery(MaterialLifecycleDetailDO.class) .in(MaterialLifecycleDetailDO::getLifecycleId, lfcIds)); } 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 eef7668c..62d977fc 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 @@ -706,9 +706,18 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , .setApplyTime(LocalDateTime.now()); MaterialFlowType flowType = MaterialFlowType.fromName(lifecycleDO.getBusinessType()); switch (flowType) { - case acceptance -> - // 验收需要发起流程 - this.createProcessInstance(lifecycleDO); + case acceptance -> { + // 验收并且有检化验时需要发起流程 + List details = materialLifecycleDetailService.getDetailListByLfcId(id); + boolean hasAssay = CollUtil.isNotEmpty(details) && + details.stream().anyMatch(detail -> detail.getAssayFlag() == 1); + if (hasAssay) { + this.createProcessInstance(lifecycleDO); + } else { + // 直接更新验收状态 + this.updateMaterialBatchesAcceptStatusByLfcId(id, MaterialAcceptStatus.accepted.name()); + } + } case return_material, replace_material -> { // 退换货需要释放锁定的资源并更新退换货数量或更新实例状态 List detailList = materialLifecycleDetailService.getDetailListByLfcId(id); @@ -802,25 +811,30 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , List lifecycleDOS = lifecyclePage.getList(); PageResult respVOPageResult = BeanUtils.toBean(lifecyclePage, MaterialLifecycleRespVO.class); if (CollUtil.isEmpty(lifecycleDOS)) return respVOPageResult; + // 组装明细 + List lifecycleRespVOS = respVOPageResult.getList(); + List lfcIds = lifecycleRespVOS.stream().map(MaterialLifecycleRespVO::getId).toList(); + List details = materialLifecycleDetailService.getDetailListByLfcIds(lfcIds); + if (CollUtil.isEmpty(details)) return respVOPageResult; + List detailRespVOS = BeanUtils.toBean(details, MaterialLifecycleDetailRespVO.class); + Map> detailMapByLfcId = detailRespVOS.stream().collect(Collectors.groupingBy(MaterialLifecycleDetailRespVO::getLifecycleId)); + lifecycleRespVOS.forEach(lifecycleRespVO -> + lifecycleRespVO.setDetailList(detailMapByLfcId.get(lifecycleRespVO.getId()))); + respVOPageResult.setList(lifecycleRespVOS); if (MaterialFlowType.make_apply.getName().equals(pageReqVO.getBusinessType())) { - List lifecycleRespVOS = respVOPageResult.getList(); - // 组装明细 - List lfcIds = lifecycleRespVOS.stream().map(MaterialLifecycleRespVO::getId).toList(); - List detailRespVOS = materialLifecycleDetailService.getDetailRespVOListByLfcIds(lfcIds); if (CollUtil.isNotEmpty(detailRespVOS)) { - // 获取已配置的数量 + detailRespVOS = materialLifecycleDetailService.getDetailRespVOListByLfcIds(lfcIds); + if (CollUtil.isEmpty(detailRespVOS)) return respVOPageResult; List detailIds = detailRespVOS.stream().map(MaterialLifecycleDetailRespVO::getId).toList(); Map madeCountMap = materialLifecycleDetailService.getMadeCountMapByDetailIds(detailIds); for (MaterialLifecycleDetailRespVO detailRespVO : detailRespVOS) { Long finishedCount = madeCountMap.get(detailRespVO.getId()); detailRespVO.setFinishedCount(finishedCount == null ? 0L : finishedCount); } - Map> detailMapByLfcId = detailRespVOS.stream().collect(Collectors.groupingBy(MaterialLifecycleDetailRespVO::getLifecycleId)); - for (MaterialLifecycleRespVO lifecycleRespVO : lifecycleRespVOS) { - lifecycleRespVO.setDetailList(detailMapByLfcId.get(lifecycleRespVO.getId())); - } - + Map> detailMapByLfcId1 = detailRespVOS.stream().collect(Collectors.groupingBy(MaterialLifecycleDetailRespVO::getLifecycleId)); + lifecycleRespVOS.forEach(lifecycleRespVO -> + lifecycleRespVO.setDetailList(detailMapByLfcId1.get(lifecycleRespVO.getId()))); } respVOPageResult.setList(lifecycleRespVOS); } @@ -958,6 +972,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , variables.put("applyDepartmentId", loginUser.getVisitDeptId()); variables.put("applyTime", sdf.format(new Date())); variables.put(BPM_CALLBACK_BEAN_NAME, "materialLifecycleService"); + // TODO 检验节点处理人需要用角色去关联 variables.put("assayAssignee", "2038786007172124673"); List detailList = materialLifecycleDetailService.getDetailListByLfcId(lifecycleDO.getId()); for (MaterialLifecycleDetailDO detailDO : detailList) { @@ -1121,16 +1136,16 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , // 更新明细处理状态 materialLifecycleDetailService.updateDetailTreatStatusByLfcId(entity.getId(), true); switch (flowType) { - case acceptance: + case acceptance -> { // 更新批次工段验收状态 this.updateMaterialBatchesAcceptStatusByLfcId(entity.getId(), MaterialAcceptStatus.accepted.name()); // 更新批次工段是否可入库状态 this.updateMaterialBatchesInboundFlagByLfcId(entity.getId()); - case verify_calibrate: + } + case verify_calibrate -> // 批次检定完成后生成批次拆分 this.createVerifyBatchAssignsByLfcId(entity.getId()); - break; - case inventory_check: + case inventory_check -> // 库存盘点通过,对相应物料进行出入库 this.inventoryCheckPassHandle(entity.getId()); } From 4fb1e5040058650d15fd78d675743465a0c53a4b Mon Sep 17 00:00:00 2001 From: FCL Date: Wed, 8 Apr 2026 16:11:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=E8=AE=BE=E5=A4=87=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/controller/admin/DataTemplateController.java | 2 +- .../device/controller/vo/DeviceApplyDetailRespVO.java | 6 ++++++ .../device/controller/vo/DeviceInfomationSaveReqVO.java | 6 ++++++ .../resource/device/dal/mapper/DeviceApplyDetailMapper.java | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/data/controller/admin/DataTemplateController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/data/controller/admin/DataTemplateController.java index c3a5966a..31475214 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/data/controller/admin/DataTemplateController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/common/data/controller/admin/DataTemplateController.java @@ -134,7 +134,7 @@ public class DataTemplateController implements BusinessControllerMarker { @GetMapping("/page") @Operation(summary = "获得表单设计器模板分页") - @PreAuthorize("@ss.hasPermission('qms:data-template:query')") +// @PreAuthorize("@ss.hasPermission('qms:data-template:query')") public CommonResult> getDataTemplatePage(@Valid DataTemplatePageReqVO pageReqVO) { PageResult pageResult = dataTemplateService.getDataTemplatePage(pageReqVO); return success(BeanUtils.toBean(pageResult, DataTemplateRespVO.class)); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailRespVO.java index ace2b06c..ce2b7fb1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceApplyDetailRespVO.java @@ -92,4 +92,10 @@ public class DeviceApplyDetailRespVO { @Schema(description = "购入价格", example = "25826") @ExcelProperty("购入价格") private BigDecimal purchasePrice; + + @Schema(description = "所属部门ID") + private Long deviceDeptId; + + @Schema(description = "所属部门名称") + private String deviceDeptName; } \ 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/device/controller/vo/DeviceInfomationSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceInfomationSaveReqVO.java index 1a6a6ef0..d780349d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceInfomationSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceInfomationSaveReqVO.java @@ -111,6 +111,12 @@ public class DeviceInfomationSaveReqVO { @Schema(description = "数据采集设备类型") private String collectDeviceType; + @Schema(description = "所属部门ID") + private Long deptId; + + @Schema(description = "所属部门名称") + private String deptName; + //=================扩展字段==================> @Schema(description = "删除的文件id") private List deleteFileIdList; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java index 39b21c86..596609f1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/mapper/DeviceApplyDetailMapper.java @@ -49,6 +49,8 @@ public interface DeviceApplyDetailMapper extends BaseMapperX