diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInventoryCheckDetailController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInventoryCheckDetailController.java index 3d29393c..2a8a18a6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInventoryCheckDetailController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInventoryCheckDetailController.java @@ -31,7 +31,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 库存盘点明细") @RestController -@RequestMapping("/qms/material-inventory-check-detail") +@RequestMapping("/qms/resource/material-inventory-check-detail") @Validated public class MaterialInventoryCheckDetailController implements BusinessControllerMarker { @@ -39,14 +39,14 @@ public class MaterialInventoryCheckDetailController implements BusinessControlle @Resource private MaterialInventoryCheckDetailService materialInventoryCheckDetailService; - @PostMapping("/create") - @Operation(summary = "创建库存盘点明细") - @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:create')") + @PostMapping("/add") + @Operation(summary = "新增库存盘点明细") +// @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:create')") public CommonResult createMaterialInventoryCheckDetail(@Valid @RequestBody MaterialInventoryCheckDetailSaveReqVO createReqVO) { return success(materialInventoryCheckDetailService.createMaterialInventoryCheckDetail(createReqVO)); } - @PutMapping("/update") +// @PutMapping("/update") @Operation(summary = "更新库存盘点明细") @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:update')") public CommonResult updateMaterialInventoryCheckDetail(@Valid @RequestBody MaterialInventoryCheckDetailSaveReqVO updateReqVO) { @@ -54,7 +54,7 @@ public class MaterialInventoryCheckDetailController implements BusinessControlle return success(true); } - @DeleteMapping("/delete") +// @DeleteMapping("/delete") @Operation(summary = "删除库存盘点明细") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:delete')") @@ -63,7 +63,7 @@ public class MaterialInventoryCheckDetailController implements BusinessControlle return success(true); } - @DeleteMapping("/delete-list") +// @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除库存盘点明细") @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:delete')") @@ -83,7 +83,7 @@ public class MaterialInventoryCheckDetailController implements BusinessControlle @GetMapping("/page") @Operation(summary = "获得库存盘点明细分页") - @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:query')") +// @PreAuthorize("@ss.hasPermission('qms:material-inventory-check-detail:query')") public CommonResult> getMaterialInventoryCheckDetailPage(@Valid MaterialInventoryCheckDetailPageReqVO pageReqVO) { PageResult pageResult = materialInventoryCheckDetailService.getMaterialInventoryCheckDetailPage(pageReqVO); return success(BeanUtils.toBean(pageResult, MaterialInventoryCheckDetailRespVO.class)); 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 e5e795fd..b9783e96 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 @@ -108,6 +108,14 @@ public class MaterialLifecycleController extends AbstractFileUploadController im return success(materialLifecycleService.submitLifecycle(id)); } + @PutMapping("/operator-submit") + @Operation(summary = "执行人提交(验收等流程)") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult operatorSubmitLifecycle(@RequestParam("id") Long id) { + + return success(materialLifecycleService.operatorSubmitLifecycle(id)); + } + @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/MaterialInfomationPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationPageReqVO.java index 4632de6b..7188f879 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInfomationPageReqVO.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.alibaba.excel.annotation.ExcelProperty; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationPageBusinessType; import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; import com.zt.plat.framework.common.pojo.PageParam; @@ -15,6 +16,12 @@ import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH @Data public class MaterialInfomationPageReqVO extends PageParam { + @Schema(description = "业务类型 inventory_check_detail-盘点明细") + private MaterialInfomationPageBusinessType businessType; + + @Schema(description = "盘点项id") + private Long checkItemId; + @Schema(description = "物料大类id", example = "2691") private Long productId; 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 f412be59..abe80b29 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 @@ -188,6 +188,12 @@ public class MaterialInfomationRespVO { @ExcelProperty("剩余量") private BigDecimal remainingVolume; + @Schema(description = "盘点数量") + private BigDecimal checkQuantity; + + @Schema(description = "盘点明细id") + private Long checkDetailId; + @Schema(description = "初始总量") @ExcelProperty("初始总量") private BigDecimal initialVolume; @@ -207,5 +213,4 @@ public class MaterialInfomationRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; - } \ 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/MaterialInventoryCheckDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailRespVO.java index 7d6ab4ee..18e45b2a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailRespVO.java @@ -16,9 +16,11 @@ public class MaterialInventoryCheckDetailRespVO { @ExcelProperty("主键") private Long id; - @Schema(description = "盘点项id", example = "1655") - @ExcelProperty("盘点项id") - private Long parentId; + @Schema(description = "盘点单id") + private Long checkId; + + @Schema(description = "盘点项id") + private Long itemId; @Schema(description = "物料实例id", example = "6754") @ExcelProperty("物料实例id") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailSaveReqVO.java index 0fd372a9..526b3a82 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckDetailSaveReqVO.java @@ -1,5 +1,6 @@ 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 lombok.Data; @@ -10,8 +11,11 @@ public class MaterialInventoryCheckDetailSaveReqVO { @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "24954") private Long id; - @Schema(description = "盘点项id", example = "1655") - private Long parentId; + @Schema(description = "盘点单id") + private Long checkId; + + @Schema(description = "盘点项id") + private Long itemId; @Schema(description = "物料实例id", example = "6754") 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/MaterialInventoryCheckItemRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckItemRespVO.java index 39245e92..5e66e824 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckItemRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialInventoryCheckItemRespVO.java @@ -21,14 +21,26 @@ public class MaterialInventoryCheckItemRespVO { @ExcelProperty("父id") private Long parentId; - @Schema(description = "盘点物料大类ID", example = "15446") - @ExcelProperty("盘点物料大类ID") + @Schema(description = "大类ID", example = "15446") + @ExcelProperty("大类ID") private Long productId; - @Schema(description = "盘点物料大类名称") - @ExcelProperty("盘点物料大类名称") + @Schema(description = "大类名称") + @ExcelProperty("大类名称") private String productName; + @Schema(description = "大类编码") + private String productCode; + + @Schema(description = "大类规格") + private String productSpecification; + + @Schema(description = "大类型号") + private String productModelNo; + + @Schema(description = "单位") + private String unit; + @Schema(description = "应有量") @ExcelProperty("应有量") private BigDecimal expected; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java index e40ba218..a5d5f7d4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.zt.plat.framework.common.pojo.PageParam; +import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -50,6 +51,15 @@ public class MaterialLifecyclePageReqVO extends PageParam { @Schema(description = "流程审批状态", example = "1") private String flowStatus; + @Schema(description = "执行人id") + private Long operatorId; + + @Schema(description = "执行人") + private String operatorName; + + @Schema(description = "执行进度") + private String progress; + @Schema(description = "所属部门") private String systemDepartmentCode; 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 d0ef35fa..8ff9d96a 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 @@ -85,8 +85,12 @@ public class MaterialLifecycleRespVO { private String operatorName; @Schema(description = "执行进度") + @Dict(dicCode = "material_inventory_check_progress") private String progress; + @Schema(description = "事由/说明") + private String reason; + @Schema(description = "所属部门") @ExcelProperty("所属部门") private String systemDepartmentCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java index e418126b..47e17f16 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.baomidou.mybatisplus.annotation.TableField; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckItemDO; import com.zt.plat.module.qms.resource.material.valid.AddGroup; import com.zt.plat.module.qms.resource.material.valid.UpdateGroup; import io.swagger.v3.oas.annotations.media.Schema; @@ -52,9 +53,6 @@ public class MaterialLifecycleSaveReqVO { @Schema(description = "库房ids") private List warehouseIds; - @Schema(description = "盘点物料大类ids") - private List productIds; - @Schema(description = "执行人id") private Long operatorId; @@ -67,12 +65,18 @@ public class MaterialLifecycleSaveReqVO { @Schema(description = "表单数据,表单数据") private String formData; + @Schema(description = "事由/说明") + private String reason; + @Schema(description = "所属部门") private String systemDepartmentCode; @Schema(description = "备注") private String remark; + @Schema(description = "盘点项") + private List checkItems; + @Schema(description = "工段列表") 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/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 f6df1d69..afcfdd64 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,7 +1,6 @@ package com.zt.plat.module.qms.resource.material.controller.vo.query; -import com.baomidou.mybatisplus.annotation.TableField; -import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationBusinessType; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOneBusinessType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -17,7 +16,7 @@ public class MaterialInfomationQueryVO { @Schema(description = "业务场景 outbound-出库,use_record-使用记录,used_mark-用完标记,open_seal-开封") - private MaterialInfomationBusinessType businessType; + private MaterialInfomationOneBusinessType businessType; @Schema(description = "物料大类id", example = "2691") private Long productId; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInventoryCheckDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInventoryCheckDetailDO.java index 4ca45c89..b849808b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInventoryCheckDetailDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInventoryCheckDetailDO.java @@ -3,6 +3,9 @@ package com.zt.plat.module.qms.resource.material.dal.dataobject; import com.baomidou.mybatisplus.annotation.*; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import lombok.*; + +import java.math.BigDecimal; + /** * 库存盘点明细 DO * @@ -29,10 +32,15 @@ public class MaterialInventoryCheckDetailDO extends BusinessBaseDO { @TableId(type = IdType.ASSIGN_ID) private Long id; /** + * 盘点单id + */ + @TableField("CHK_ID") + private Long checkId; + /** * 盘点项id */ - @TableField("PRN_ID") - private Long parentId; + @TableField("ITM_ID") + private Long itemId; /** * 物料实例id */ @@ -52,7 +60,7 @@ public class MaterialInventoryCheckDetailDO extends BusinessBaseDO { * 当前数量 */ @TableField("CRNT_QTY") - private String currentQuantity; + private BigDecimal currentQuantity; /** * 状态 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDO.java index c139c508..67d8026e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDO.java @@ -111,6 +111,11 @@ public class MaterialLifecycleDO extends BusinessBaseDO { */ @TableField("CST_CFG") private String customConfig; + /** + * 事由/说明 + */ + @TableField("RSN") + private String reason; /** * 所属部门 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInfomationMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInfomationMapper.java index 93baa9d5..e73a358a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInfomationMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInfomationMapper.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; @@ -15,8 +16,10 @@ import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomation import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfomationQueryVO; import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialInfomationLedgerRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.*; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationPageBusinessType; import org.apache.ibatis.annotations.Mapper; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -58,6 +61,7 @@ public interface MaterialInfomationMapper extends BaseMapperX selectPageWithPdtInfo(MaterialInfomationPageReqVO reqVO) { + MaterialInfomationPageBusinessType businessType = reqVO.getBusinessType(); MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() .select(MaterialInfomationDO::getId, MaterialInfomationDO::getProductId, MaterialInfomationDO::getBatchId, MaterialInfomationDO::getGongduanId, @@ -248,4 +252,42 @@ public interface MaterialInfomationMapper extends BaseMapperX selectPageWithPdtInfoByCheck(MaterialInfomationPageReqVO reqVO, LocalDateTime checkTime, Long checkItemId, List checkItemInfIds) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() + // 选择需要的字段 + .select(MaterialInfomationDO::getId, MaterialInfomationDO::getCode) + .select(MaterialProductDO::getName, MaterialProductDO::getSpecification) + .select(MaterialBatchDO::getBatchNo) + .selectAs(ConfigWarehouseLocationDO::getCode, MaterialInfomationRespVO::getLocationCode) + //.selectAs(MaterialInventoryCheckDetailDO::getPresent, MaterialInfomationRespVO::getPresent) + .selectAs(MaterialInventoryCheckDetailDO::getCurrentQuantity, MaterialInfomationRespVO::getCheckQuantity) + .selectAs(MaterialInventoryCheckDetailDO::getId, MaterialInfomationRespVO::getCheckDetailId) + // 关联产品表 + .innerJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialInfomationDO::getProductId) + .leftJoin(MaterialBatchDO.class, MaterialBatchDO::getId, MaterialInfomationDO::getBatchId) + .leftJoin(ConfigWarehouseLocationDO.class, ConfigWarehouseLocationDO::getId, MaterialInfomationDO::getLocationId) + // 左连接盘点明细表,用于判断是否已盘点 + .leftJoin(MaterialInventoryCheckDetailDO.class, MaterialInventoryCheckDetailDO::getInfomationId, + MaterialInfomationDO::getId) + // 条件:在库 OR 已盘点 + .and(wrapperX -> { + if (CollUtil.isNotEmpty(checkItemInfIds)) { + wrapperX.ne(MaterialInfomationDO::getUsageStatus, 1) // 在库 + .or() + .in(MaterialInfomationDO::getId, checkItemInfIds); // 已盘点 + } else { + // 没有已盘点的记录,只查询在库的 + wrapperX.ne(MaterialInfomationDO::getUsageStatus, 1); + } + } + ) + .eqIfExists(MaterialInfomationDO::getProductId, reqVO.getProductId()) + // 筛选条件:盘点时间之前创建的物料 + .le(MaterialInfomationDO::getCreateTime, checkTime) + .orderByAsc(MaterialInventoryCheckDetailDO::getId) + // .orderByDesc(MaterialInfomationDO::getId) + ; + return selectJoinPage(reqVO, MaterialInfomationRespVO.class, wrapper); + } } \ 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/mapper/MaterialInventoryCheckDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckDetailMapper.java index 24b49564..9f95658d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckDetailMapper.java @@ -17,7 +17,7 @@ public interface MaterialInventoryCheckDetailMapper extends BaseMapperX selectPage(MaterialInventoryCheckDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MaterialInventoryCheckDetailDO::getParentId, reqVO.getParentId()) + .eqIfPresent(MaterialInventoryCheckDetailDO::getItemId, reqVO.getParentId()) .eqIfPresent(MaterialInventoryCheckDetailDO::getInfomationId, reqVO.getInfomationId()) .eqIfPresent(MaterialInventoryCheckDetailDO::getPresent, reqVO.getPresent()) .eqIfPresent(MaterialInventoryCheckDetailDO::getInfomationCode, reqVO.getInfomationCode()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckItemMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckItemMapper.java index 207c8497..1b875cef 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckItemMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialInventoryCheckItemMapper.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -34,9 +35,13 @@ public interface MaterialInventoryCheckItemMapper extends BaseMapperX selectListWithPdtInfoByLfcId(Long lfcId) { - MPJLambdaWrapperX wrapper = new MPJLambdaWrapperX() + MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() .selectAll(MaterialInventoryCheckItemDO.class) .selectAs(MaterialProductDO::getName, MaterialInventoryCheckItemRespVO::getProductName) + .selectAs(MaterialProductDO::getCode, MaterialInventoryCheckItemRespVO::getProductCode) + .selectAs(MaterialProductDO::getSpecification, MaterialInventoryCheckItemRespVO::getProductSpecification) + .selectAs(MaterialProductDO::getModelNo, MaterialInventoryCheckItemRespVO::getProductModelNo) + .select(MaterialProductDO::getUnit) .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialInventoryCheckItemDO::getProductId) .eq(MaterialInventoryCheckItemDO::getParentId, lfcId); return selectJoinList(MaterialInventoryCheckItemRespVO.class, wrapper); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java index 4d72bd85..ad422fea 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java @@ -34,6 +34,9 @@ public interface MaterialLifecycleMapper extends BaseMapperX { .selectCount(MaterialInfomationDO::getId, "quantity") .leftJoin(MaterialInfomationDO.class, MaterialInfomationDO::getProductId, MaterialProductDO::getId) .in(MaterialProductDO::getId, mtrlIds) - .eq(MaterialInfomationDO::getUsageStatus, 0) + .ne(MaterialInfomationDO::getUsageStatus, 1) .groupBy(MaterialProductDO::getId); List> maps = selectJoinMaps(wrapper); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationBusinessType.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOneBusinessType.java similarity index 69% rename from zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationBusinessType.java rename to zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOneBusinessType.java index 71dcee7a..ff7c60da 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationBusinessType.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOneBusinessType.java @@ -4,7 +4,7 @@ package com.zt.plat.module.qms.resource.material.enums; * 物料实例操作类型 * */ -public enum MaterialInfomationBusinessType { +public enum MaterialInfomationOneBusinessType { /** * 出库 */ @@ -20,5 +20,9 @@ public enum MaterialInfomationBusinessType { /** * 开封 */ - open_seal + open_seal, + /** + * 库存盘点 + */ + inventory_check, } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationPageBusinessType.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationPageBusinessType.java new file mode 100644 index 00000000..971a35ec --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationPageBusinessType.java @@ -0,0 +1,13 @@ +package com.zt.plat.module.qms.resource.material.enums; + +/** + * 物料实例分页数据业务类型 + * + */ +public enum MaterialInfomationPageBusinessType { + + /** + * 库存盘点明细 + */ + inventory_check_detail, +} 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 8a179106..3e6f6b06 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 @@ -23,18 +23,21 @@ import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfo import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialInfomationLedgerRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.*; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInfomationMapper; -import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationBusinessType; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOneBusinessType; import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOrigin; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationPageBusinessType; import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; import groovy.util.logging.Slf4j; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -66,6 +69,12 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService private DeptApi deptApi; @Autowired private ConfigWarehouseLocationService configWarehouseLocationService; + @Lazy + @Autowired + private MaterialInventoryCheckItemService materialInventoryCheckItemService; + @Lazy + @Autowired + private MaterialLifecycleService materialLifecycleService; @Override public MaterialInfomationRespVO createMaterialInfomation(MaterialInfomationSaveReqVO createReqVO) { @@ -147,6 +156,20 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService @Override public PageResult getMaterialInfomationPageWithPdtInfo(MaterialInfomationPageReqVO pageReqVO) { + MaterialInfomationPageBusinessType businessType = pageReqVO.getBusinessType(); + if (businessType == MaterialInfomationPageBusinessType.inventory_check_detail) { + Long checkItemId = pageReqVO.getCheckItemId(); + if (checkItemId == null) throw new ServiceException(1_032_160_000, "盘点项ID不能为空"); + MaterialInventoryCheckItemDO checkItem = materialInventoryCheckItemService.getMaterialInventoryCheckItem(checkItemId); + if (checkItem == null) throw new ServiceException(1_032_160_000, "盘点项不存在"); + MaterialLifecycleDO lifecycleDO = materialLifecycleService.getMaterialLifecycle(checkItem.getParentId()); + LocalDateTime checkTime = lifecycleDO.getCreateTime(); + // 已盘点的明细id + List detailList = materialInventoryCheckItemService.getDetailListById(checkItemId); + List checkItemInfIds = detailList.stream().map(MaterialInventoryCheckDetailDO::getInfomationId).toList(); + log.info("盘点项明细id:{}", checkItemInfIds); + return materialInfomationMapper.selectPageWithPdtInfoByCheck(pageReqVO, checkTime, checkItemId, checkItemInfIds); + } PageResult pageResult = materialInfomationMapper.selectPageWithPdtInfo(pageReqVO); if (pageReqVO.getNeedDetectExistHazardousMake()) { List infomationRespVOS = pageResult.getList(); @@ -165,8 +188,8 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService @Override public MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfCode(MaterialInfomationQueryVO queryVO) { MaterialInfomationRespVO infomation = materialInfomationMapper.selectOneWithPdtInfoByInfCode(queryVO); - MaterialInfomationBusinessType businessType = queryVO.getBusinessType(); if (infomation == null) throw exception(MATERIAL_INFOMATION_NOT_EXISTS); + MaterialInfomationOneBusinessType businessType = queryVO.getBusinessType(); switch (businessType) { // 出库时校验是否已出库 case outbound -> { @@ -192,6 +215,9 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService if (product.getOpenDueFlag() != 1) throw new ServiceException(1_032_160_000, "该物料不需要开封"); if (infomation.getOpenStatus() == 1) throw new ServiceException(1_032_160_000, "该物料已开封"); } + case inventory_check -> { + // 检验物料是否已经盘点过 + } } return infomation; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailService.java index dbb3af51..a55a427f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailService.java @@ -61,4 +61,11 @@ public interface MaterialInventoryCheckDetailService { */ PageResult getMaterialInventoryCheckDetailPage(MaterialInventoryCheckDetailPageReqVO pageReqVO); + /** + * 根据盘点项id查询盘点明细 + * + * @param itemId 盘点项id + * @return 盘点项列表 + */ + List getListByItemId(Long itemId); } \ 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/MaterialInventoryCheckDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailServiceImpl.java index b0c58317..7ee0b2d4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckDetailServiceImpl.java @@ -1,21 +1,31 @@ package com.zt.plat.module.qms.resource.material.service; 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.util.object.BeanUtils; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckDetailPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckDetailDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckItemDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInventoryCheckDetailMapper; +import groovy.transform.TailRecursive; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_INVENTORY_CHECK_DETAIL_NOT_EXISTS; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; /** * 库存盘点明细 Service 实现类 @@ -28,14 +38,47 @@ public class MaterialInventoryCheckDetailServiceImpl implements MaterialInventor @Resource private MaterialInventoryCheckDetailMapper materialInventoryCheckDetailMapper; + @Autowired + private MaterialInfomationService materialInfomationService; + @Autowired + private MaterialLifecycleService materialLifecycleService; + @Autowired + private MaterialInventoryCheckItemService materialInventoryCheckItemService; + @Transactional @Override public MaterialInventoryCheckDetailRespVO createMaterialInventoryCheckDetail(MaterialInventoryCheckDetailSaveReqVO createReqVO) { + Long infomationId = createReqVO.getInfomationId(); + MaterialInfomationDO infomationDO = materialInfomationService.getMaterialInfomation(infomationId); + if (infomationDO == null) throw exception(MATERIAL_INFOMATION_NOT_EXISTS); + Long checkId = createReqVO.getCheckId(); + MaterialLifecycleDO lifecycleDO = materialLifecycleService.getMaterialLifecycle(checkId); + if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); + // 关联到盘点项 + MaterialInventoryCheckItemDO item = materialInventoryCheckItemService.getItemByCheckIdAndPdtId(checkId, infomationDO.getProductId()); + if (item == null) throw exception(MATERIAL_INVENTORY_CHECK_ITEM_NOT_EXISTS); + // 检查是否已经盘点过 + boolean exists = materialInventoryCheckDetailMapper.exists(Wrappers.lambdaQuery(MaterialInventoryCheckDetailDO.class) + .eq(MaterialInventoryCheckDetailDO::getCheckId, checkId) + .eq(MaterialInventoryCheckDetailDO::getInfomationId, infomationId)); + if (exists) throw new ServiceException(1_032_160_000, "此物料已盘点过"); + MaterialInventoryCheckDetailDO checkDetailDO = BeanUtils.toBean(createReqVO, MaterialInventoryCheckDetailDO.class); + LocalDateTime checkCreateTime = lifecycleDO.getCreateTime(); + Integer usageStatus = infomationDO.getUsageStatus(); + if (infomationDO.getCreateTime().isAfter(checkCreateTime)) throw new ServiceException(10001, "此物料在发起盘点后入库,不可盘点"); + // TODO 发起盘点后出库的和发起盘点前出库的需要分别处理 + if (usageStatus == 1) { + // 物料已出库 + checkDetailDO.setPresent(0); + } + checkDetailDO.setItemId(item.getId()); // 插入 - MaterialInventoryCheckDetailDO materialInventoryCheckDetail = BeanUtils.toBean(createReqVO, MaterialInventoryCheckDetailDO.class); - materialInventoryCheckDetailMapper.insert(materialInventoryCheckDetail); + materialInventoryCheckDetailMapper.insert(checkDetailDO); + + item.setActual(item.getActual().add(BigDecimal.valueOf(1))); + materialInventoryCheckItemService.updateById(item); // 返回 - return BeanUtils.toBean(materialInventoryCheckDetail, MaterialInventoryCheckDetailRespVO.class); + return BeanUtils.toBean(checkDetailDO, MaterialInventoryCheckDetailRespVO.class); } @Override @@ -86,4 +129,10 @@ public class MaterialInventoryCheckDetailServiceImpl implements MaterialInventor return materialInventoryCheckDetailMapper.selectPage(pageReqVO); } + @Override + public List getListByItemId(Long itemId) { + return materialInventoryCheckDetailMapper.selectList(Wrappers.lambdaQuery(MaterialInventoryCheckDetailDO.class) + .eq(MaterialInventoryCheckDetailDO::getItemId, itemId)); + } + } \ 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/MaterialInventoryCheckItemService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemService.java index 0fd78734..65c71fcb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemService.java @@ -4,6 +4,7 @@ import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckDetailDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckItemDO; import jakarta.validation.Valid; @@ -82,4 +83,43 @@ public interface MaterialInventoryCheckItemService { * @param lfcId 盘点记录编号 */ void deleteItemsByLfcId(Long lfcId); + + /** + * 根据盘点id和大类id查询盘点项 + * + * @param checkId 盘点id + * @param productId 大类id + * @return 盘点项 + */ + MaterialInventoryCheckItemDO getItemByCheckIdAndPdtId(Long checkId, Long productId); + + /** + * 根据盘点项id更新盘点项 + * + * @param item 盘点项 + */ + void updateById(MaterialInventoryCheckItemDO item); + + /** + * 根据盘点流程编号,查询盘点项列表 + * + * @param id 盘点记录编号 + * @return 盘点项列表 + */ + List getListByLfcId(Long id); + + /** + * 根据盘点项ids更新盘点项 + * + * @param items 盘点项 + */ + void updateByIds(List items); + + /** + * 根据盘点项id查询盘点明细 + * + * @param id 盘点项id + * @return 盘点项详情 + */ + List getDetailListById(Long id); } \ 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/MaterialInventoryCheckItemServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemServiceImpl.java index f5be327c..91f8432b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryCheckItemServiceImpl.java @@ -7,9 +7,12 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryCheckItemSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckDetailDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryCheckItemDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInventoryCheckItemMapper; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -30,6 +33,10 @@ public class MaterialInventoryCheckItemServiceImpl implements MaterialInventoryC @Resource private MaterialInventoryCheckItemMapper materialInventoryCheckItemMapper; + @Lazy + @Autowired + private MaterialInventoryCheckDetailService materialInventoryCheckDetailService; + @Override public MaterialInventoryCheckItemRespVO createMaterialInventoryCheckItem(MaterialInventoryCheckItemSaveReqVO createReqVO) { // 插入 @@ -104,4 +111,33 @@ public class MaterialInventoryCheckItemServiceImpl implements MaterialInventoryC .eq(MaterialInventoryCheckItemDO::getParentId, lfcId)); } + @Override + public MaterialInventoryCheckItemDO getItemByCheckIdAndPdtId(Long checkId, Long productId) { + + return materialInventoryCheckItemMapper.selectOne(Wrappers.lambdaQuery(MaterialInventoryCheckItemDO.class) + .eq(MaterialInventoryCheckItemDO::getParentId, checkId) + .eq(MaterialInventoryCheckItemDO::getProductId, productId)); + } + + @Override + public void updateById(MaterialInventoryCheckItemDO item) { + materialInventoryCheckItemMapper.updateById(item); + } + + @Override + public List getListByLfcId(Long id) { + return materialInventoryCheckItemMapper.selectList(Wrappers.lambdaQuery(MaterialInventoryCheckItemDO.class) + .eq(MaterialInventoryCheckItemDO::getParentId, id)); + } + + @Override + public void updateByIds(List items) { + materialInventoryCheckItemMapper.updateBatch(items); + } + + @Override + public List getDetailListById(Long id) { + return materialInventoryCheckDetailService.getListByItemId(id); + } + } \ 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/MaterialLifecycleService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java index c0e2732e..ff534b40 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java @@ -93,4 +93,12 @@ public interface MaterialLifecycleService { * @return 物料通用流程明细 */ List getDetailListByLfcId(Long lfcId); + + /** + * 执行人提交(验收等流程) + * + * @param id 编号 + * @return 是否成功 + */ + Boolean operatorSubmitLifecycle(Long id); } \ 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 f8daac90..01f33157 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 @@ -139,11 +139,11 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , case return_material, exchange_material -> lockReturnExchangeResources(detailDOS, LockType.lock); case verify_calibrate -> lockVerifyCalibrateResources(detailDOS, LockType.lock); case inventory_check -> { - List productIds = validProductAndOperator(createReqVO); + List checkItems = validProductAndOperator(createReqVO); JSONObject customConfigObj = getCheckCustomConfigObj(createReqVO); mtrlLfc.setCustomConfig(customConfigObj.toJSONString()); materialLifecycleMapper.updateById(mtrlLfc); - List checkItemDOS = getCheckItemDOS(productIds, mtrlLfc.getId()); + List checkItemDOS = getCheckItemDOS(checkItems, mtrlLfc.getId()); materialInventoryCheckItemService.saveBatch(checkItemDOS); } @@ -152,25 +152,30 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , return BeanUtils.toBean(mtrlLfc, MaterialLifecycleRespVO.class); } - private List validProductAndOperator(MaterialLifecycleSaveReqVO createReqVO) { - List productIds = createReqVO.getProductIds(); + private List validProductAndOperator(MaterialLifecycleSaveReqVO createReqVO) { + List checkItems = createReqVO.getCheckItems(); + if (CollUtil.isEmpty(checkItems)) throw new ServiceException(1_032_160_000, "盘点项不能为空"); + List productIds = checkItems.stream().map(MaterialInventoryCheckItemSaveReqVO::getProductId) + .filter(Objects::nonNull).toList(); + if (checkItems.size() != productIds.size()) throw new ServiceException(1_032_160_000, "盘点项物料大类不能为空"); List products = materialProductService.getListByIds(productIds); if (CollUtil.isEmpty(products) || products.size() != productIds.size()) throw new ServiceException(1_032_160_000, "物料大类不存在或与传入的数量不匹配"); Long operatorId = createReqVO.getOperatorId(); CommonResult user = adminUserApi.getUser(operatorId); if (user.getData() == null) throw new ServiceException(1_032_160_000, "执行人不存在"); - return productIds; + return checkItems; } - private List getCheckItemDOS(List productIds, Long lfcId) { - + private List getCheckItemDOS(List checkItems, Long lfcId) { + List productIds = checkItems.stream().map(MaterialInventoryCheckItemSaveReqVO::getProductId).toList(); Map stockQuantityByPdtIds = materialProductService.getStockQuantityByPdtIds(productIds); - return productIds.stream().map(pdtId -> + return checkItems.stream().map(item -> new MaterialInventoryCheckItemDO() .setParentId(lfcId) - .setProductId(pdtId) - .setExpected(BigDecimal.valueOf(stockQuantityByPdtIds.get(pdtId)))).toList(); + .setProductId(item.getProductId()) + .setExpected(BigDecimal.valueOf(stockQuantityByPdtIds.get(item.getProductId()) == null ? 0 : stockQuantityByPdtIds.get(item.getProductId()))) + .setRemark(item.getRemark())).toList(); } private JSONObject getCheckCustomConfigObj(MaterialLifecycleSaveReqVO createReqVO) { @@ -278,14 +283,14 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , MaterialLifecycleDO mtrlLfc = BeanUtils.toBean(updateReqVO, MaterialLifecycleDO.class); MaterialFlowType flowType = MaterialFlowType.fromName(mtrlLfc.getBusinessType()); if (flowType == MaterialFlowType.inventory_check) { - List productIds = validProductAndOperator(updateReqVO); + List checkItems = validProductAndOperator(updateReqVO); // 删除盘点项 materialInventoryCheckItemService.deleteItemsByLfcId(reqId); JSONObject customConfigObj = getCheckCustomConfigObj(updateReqVO); mtrlLfc.setCustomConfig(customConfigObj.toJSONString()); materialLifecycleMapper.updateById(mtrlLfc); - List checkItemDOS = getCheckItemDOS(productIds, mtrlLfc.getId()); + List checkItemDOS = getCheckItemDOS(checkItems, mtrlLfc.getId()); materialInventoryCheckItemService.saveBatch(checkItemDOS); return; } @@ -507,16 +512,18 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); // 已提交的流程不允许删除 if (lifecycleDO.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "流程已提交,不可删除"); - - boolean isReturnExchangeMaterial = MaterialFlowType.return_material.getName().equals(lifecycleDO.getBusinessType()) - || MaterialFlowType.exchange_material.getName().equals(lifecycleDO.getBusinessType()); - boolean isVerifyCalibrate = MaterialFlowType.verify_calibrate.getName().equals(lifecycleDO.getBusinessType()); + MaterialFlowType flowType = MaterialFlowType.fromName(lifecycleDO.getBusinessType()); + boolean isReturnExchangeMaterial = MaterialFlowType.return_material == flowType + || MaterialFlowType.exchange_material == flowType; + boolean isVerifyCalibrate = MaterialFlowType.verify_calibrate == flowType; if (isReturnExchangeMaterial || isVerifyCalibrate) { List detailList = materialLifecycleDetailService.getDetailListByLfcId(id); if (isReturnExchangeMaterial) this.lockReturnExchangeResources(detailList, LockType.unlock); if (isVerifyCalibrate) this.lockVerifyCalibrateResources(detailList, LockType.unlock); } + if (flowType == MaterialFlowType.inventory_check) + materialInventoryCheckItemService.deleteItemsByLfcId(lifecycleDO.getId()); // 删除明细 materialLifecycleDetailService.deleteLifecycleDetailListByLfcId(id); // 删除流程 @@ -642,6 +649,12 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , // 更新批次相关数量 this.updateVerifyCalibrateResources(detailList, AdjustType.add); } + case inventory_check -> { + // 盘点项不存在时不允许提交 + List checkItems = materialInventoryCheckItemService.getListByLfcId(id); + if (CollUtil.isEmpty(checkItems)) throw new ServiceException(1_032_160_000, "盘点项不存在,不可提交"); + lifecycleDO.setProgress(QmsCommonConstant.IN_PROGRESS); + } } lifecycleDO.setSubmitStatus(1); @@ -699,6 +712,39 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , return materialLifecycleDetailService.getDetailListByLfcId(lfcId); } + @Transactional + @Override + public Boolean operatorSubmitLifecycle(Long id) { + MaterialLifecycleDO lifecycleDO = materialLifecycleMapper.selectById(id); + if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); + String progress = lifecycleDO.getProgress(); + if (QmsCommonConstant.COMPLETED.equals(progress)) throw new ServiceException(1_032_160_000, "申请已经提交过"); + MaterialFlowType flowType = MaterialFlowType.fromName(lifecycleDO.getBusinessType()); + if (flowType == MaterialFlowType.inventory_check) { + // 发起流程 + this.createProcessInstance(lifecycleDO); + // 更新进度 + lifecycleDO.setProgress(QmsCommonConstant.COMPLETED); + // 处理盘点结果 + List items = materialInventoryCheckItemService.getListByLfcId(id); + if (CollUtil.isEmpty(items)) throw new ServiceException(1_032_160_000, "盘点项不存在,请检查"); + 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.updateByIds(items); + } + materialLifecycleMapper.updateById(lifecycleDO); + return true; + } + private void createProcessInstance(MaterialLifecycleDO lifecycleDO) { String flowInstanceId = lifecycleDO.getFlowInstanceId();