From 4312630da6f783cb4aca69f02e014b35ca7e19be Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Wed, 25 Feb 2026 18:11:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=89=A9=E6=96=99=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialInfomationController.java | 18 ++-- .../admin/MaterialUseRecordController.java | 4 +- .../MaterialUseRecordDetailController.java | 21 +++-- .../vo/MaterialHazardousMakeSaveReqVO.java | 5 +- .../vo/MaterialInfomationPageReqVO.java | 3 + .../vo/MaterialInfomationRespVO.java | 11 +++ .../controller/vo/MaterialProductRespVO.java | 2 +- .../vo/MaterialUseRecordRespVO.java | 8 +- .../vo/MaterialUseRecordSaveReqVO.java | 7 +- .../vo/query/MaterialInfomationQueryVO.java | 83 +++++++++++++++++++ .../MaterialUseRecordWithMakeInfoQueryVO.java | 16 ++++ .../MaterialUseRecordWithMakeInfoRespVO.java | 19 +++++ .../dal/dataobject/MaterialInfomationDO.java | 5 ++ .../dal/dataobject/MaterialUseRecordDO.java | 6 +- .../dal/mapper/MaterialInfomationMapper.java | 24 ++++-- .../dal/mapper/MaterialUseRecordMapper.java | 19 +++++ .../enums/MaterialInfomationOrigin.java | 31 +++++++ .../service/MaterialInfomationService.java | 13 ++- .../MaterialInfomationServiceImpl.java | 11 ++- .../MaterialInventoryInboundServiceImpl.java | 4 +- .../MaterialStandardSolutionServiceImpl.java | 4 +- .../MaterialUseRecordDetailService.java | 18 ++++ .../MaterialUseRecordDetailServiceImpl.java | 59 +++++++++++++ .../service/MaterialUseRecordService.java | 8 ++ .../service/MaterialUseRecordServiceImpl.java | 66 ++++++++++++--- 25 files changed, 414 insertions(+), 51 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialUseRecordWithMakeInfoQueryVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialUseRecordWithMakeInfoRespVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOrigin.java diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInfomationController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInfomationController.java index 8782d5d6..12ded776 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInfomationController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialInfomationController.java @@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.material.controller.admin; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfomationQueryVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.service.MaterialInfomationService; import org.springframework.web.bind.annotation.*; @@ -44,14 +45,14 @@ public class MaterialInfomationController implements BusinessControllerMarker { @Resource private MaterialInfomationService materialInfomationService; - @PostMapping("/create") +// @PostMapping("/create") @Operation(summary = "创建物料实例") @PreAuthorize("@ss.hasPermission('qms:material-infomation:create')") public CommonResult createMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqVO createReqVO) { return success(materialInfomationService.createMaterialInfomation(createReqVO)); } - @PutMapping("/update") +// @PutMapping("/update") @Operation(summary = "更新物料实例") @PreAuthorize("@ss.hasPermission('qms:material-infomation:update')") public CommonResult updateMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqVO updateReqVO) { @@ -59,7 +60,7 @@ public class MaterialInfomationController implements BusinessControllerMarker { return success(true); } - @DeleteMapping("/delete") +// @DeleteMapping("/delete") @Operation(summary = "删除物料实例") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('qms:material-infomation:delete')") @@ -68,7 +69,7 @@ public class MaterialInfomationController implements BusinessControllerMarker { return success(true); } - @DeleteMapping("/delete-list") +// @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除物料实例") @PreAuthorize("@ss.hasPermission('qms:material-infomation:delete')") @@ -82,16 +83,15 @@ public class MaterialInfomationController implements BusinessControllerMarker { @Parameter(name = "id", description = "编号", required = true, example = "1024") // @PreAuthorize("@ss.hasPermission('qms:material-infomation:query')") public CommonResult getMaterialInfomation(@RequestParam("id") Long id) { - MaterialInfomationDO materialInfomation = materialInfomationService.getMaterialInfomation(id); - return success(BeanUtils.toBean(materialInfomation, MaterialInfomationRespVO.class)); + MaterialInfomationRespVO infomationRespVO = materialInfomationService.getMaterialInfomationWithPdtInfoByInfId(id); + return success(infomationRespVO); } @GetMapping("/get-by-code") @Operation(summary = "根据物料编码获取物料") - @Parameter(name = "code", description = "编码", required = true, example = "SN001") // @PreAuthorize("@ss.hasPermission('qms:material-infomation:query')") - public CommonResult getMaterialInfomationWithPdtInfoByInfCode(@RequestParam("code") String code) { - MaterialInfomationRespVO materialInfomation = materialInfomationService.getMaterialInfomationWithPdtInfoByInfCode(code); + public CommonResult getMaterialInfomationWithPdtInfoByInfCode(@Valid MaterialInfomationQueryVO queryVO) { + MaterialInfomationRespVO materialInfomation = materialInfomationService.getMaterialInfomationWithPdtInfoByInfCode(queryVO); return success(materialInfomation); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java index 8dc5ed3a..bc66cac4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java @@ -90,8 +90,8 @@ public class MaterialUseRecordController implements BusinessControllerMarker { @Operation(summary = "获得使用记录分页") // @PreAuthorize("@ss.hasPermission('qms:material-use-record:query')") public CommonResult> getMaterialUseRecordPage(@Valid MaterialUseRecordPageReqVO pageReqVO) { - PageResult pageResult = materialUseRecordService.getMaterialUseRecordPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MaterialUseRecordRespVO.class)); + PageResult pageResult = materialUseRecordService.getMaterialUseRecordPageWithInf(pageReqVO); + return success(pageResult); } @GetMapping("/export-excel") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java index 67d08097..147a0aba 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java @@ -11,6 +11,8 @@ import com.zt.plat.framework.excel.core.util.ExcelUtils; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialUseRecordWithMakeInfoQueryVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialUseRecordWithMakeInfoRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDetailDO; import com.zt.plat.module.qms.resource.material.service.MaterialUseRecordDetailService; import io.swagger.v3.oas.annotations.Operation; @@ -29,9 +31,9 @@ import java.util.List; import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static com.zt.plat.framework.common.pojo.CommonResult.success; -@Tag(name = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系") +@Tag(name = "管理后台 - 物料使用记录配置关系,用于处理危险品溶液配置关系") @RestController -@RequestMapping("/qms/material-use-record-detail") +@RequestMapping("/qms/resource/material-use-record-detail") @Validated public class MaterialUseRecordDetailController implements BusinessControllerMarker { @@ -39,14 +41,14 @@ public class MaterialUseRecordDetailController implements BusinessControllerMark @Resource private MaterialUseRecordDetailService materialUseRecordDetailService; - @PostMapping("/create") +// @PostMapping("/create") @Operation(summary = "创建使用记录配置关系,用于处理危险品溶液配置关系") @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:create')") public CommonResult createMaterialUseRecordDetail(@Valid @RequestBody MaterialUseRecordDetailSaveReqVO createReqVO) { return success(materialUseRecordDetailService.createMaterialUseRecordDetail(createReqVO)); } - @PutMapping("/update") +// @PutMapping("/update") @Operation(summary = "更新使用记录配置关系,用于处理危险品溶液配置关系") @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:update')") public CommonResult updateMaterialUseRecordDetail(@Valid @RequestBody MaterialUseRecordDetailSaveReqVO updateReqVO) { @@ -54,7 +56,7 @@ public class MaterialUseRecordDetailController implements BusinessControllerMark return success(true); } - @DeleteMapping("/delete") +// @DeleteMapping("/delete") @Operation(summary = "删除使用记录配置关系,用于处理危险品溶液配置关系") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:delete')") @@ -63,7 +65,7 @@ public class MaterialUseRecordDetailController implements BusinessControllerMark return success(true); } - @DeleteMapping("/delete-list") +// @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除使用记录配置关系,用于处理危险品溶液配置关系") @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:delete')") @@ -81,6 +83,13 @@ public class MaterialUseRecordDetailController implements BusinessControllerMark return success(BeanUtils.toBean(materialUseRecordDetail, MaterialUseRecordDetailRespVO.class)); } + @GetMapping("/get-makeinfo") + @Operation(summary = "获取危化品配置信息") + public CommonResult> getMaterialMakeInfoUseRecordDetail(@Valid MaterialUseRecordWithMakeInfoQueryVO queryVO) { + List makeInfoRespVOList = materialUseRecordDetailService.getMaterialMakeInfoUseRecordDetail(queryVO); + return success(makeInfoRespVOList); + } + @GetMapping("/page") @Operation(summary = "获得使用记录配置关系,用于处理危险品溶液配置关系分页") @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:query')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java index 371715fb..6908f37c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java @@ -5,7 +5,6 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; -import java.time.LocalDateTime; import java.util.List; @Schema(description = "管理后台 - 使用记录新增/修改 Request VO") @@ -13,8 +12,8 @@ import java.util.List; public class MaterialHazardousMakeSaveReqVO { @Schema(description = "使用记录ids") - @NotNull - private List recordIds; + @NotEmpty + private List records; @Schema(description = "配置的大类") @NotNull 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 5cac7622..30066434 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 @@ -27,6 +27,9 @@ public class MaterialInfomationPageReqVO extends PageParam { @Schema(description = "编码") private String code; + @Schema(description = "来源,批次入库,标液配置、危化品配置等") + private String origin; + @Schema(description = "名称") 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/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 c46e7c26..167e1d1f 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,10 +1,12 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.baomidou.mybatisplus.annotation.TableField; +import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import org.springframework.format.annotation.DateTimeFormat; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; @@ -56,10 +58,19 @@ public class MaterialInfomationRespVO { @ExcelProperty("编码") private String code; + @Schema(description = "来源,批次入库,标液配置、危化品配置等") + @ExcelProperty("来源,批次入库,标液配置、危化品配置等") + @Dict(dicCode = "material_infomation_origin") + private String origin; + @Schema(description = "名称") @ExcelProperty("名称") private String name; + @Schema(description = "额定容量") + @ExcelProperty("额定容量") + private BigDecimal standardCapacity; + @Schema(description = "型号") @ExcelProperty("型号") private String modelNo; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductRespVO.java index 269741a9..733e47cc 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductRespVO.java @@ -77,7 +77,7 @@ public class MaterialProductRespVO { private String parameter; @Schema(description = "额定容量") - @ExcelProperty("技术参数") + @ExcelProperty("额定容量") private BigDecimal standardCapacity; @Schema(description = "制造商") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java index 258c6bb6..716d48a4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -20,9 +21,14 @@ public class MaterialUseRecordRespVO { @ExcelProperty("物料实例id,1-是;0-否") private Long infomationId; + @Schema(description = "物料实例编号") + @ExcelProperty("物料实例编号") + private String infomationCode; + @Schema(description = "是否配置危险品", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("是否配置危险品") - private String hazardousMakeFlag; + @Dict(dicCode = "yes_or_no") + private Integer hazardousMakeFlag; @Schema(description = "本次数量", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("本次数量") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java index a8ea1779..4aa8b704 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java @@ -16,13 +16,12 @@ public class MaterialUseRecordSaveReqVO { @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15790") private Long id; - @Schema(description = "物料实例id,1-是;0-否", requiredMode = Schema.RequiredMode.REQUIRED, example = "16550") - @NotNull(message = "物料实例id,1-是;0-否不能为空") + @Schema(description = "物料实例id,", requiredMode = Schema.RequiredMode.REQUIRED, example = "16550") + @NotNull(message = "物料实例id不能为空") private Long infomationId; @Schema(description = "是否配置危险品", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "是否配置危险品不能为空") - private String hazardousMakeFlag; + private Integer hazardousMakeFlag; @Schema(description = "本次数量", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "本次数量不能为空") 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 new file mode 100644 index 00000000..2f23bb0d --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialInfomationQueryVO.java @@ -0,0 +1,83 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 物料实例 Request VO") +@Data +public class MaterialInfomationQueryVO { + + @Schema(description = "物料大类id", example = "2691") + private Long productId; + + @Schema(description = "批次id", example = "2703") + private Long batchId; + + @Schema(description = "存放位置", example = "13603") + private String locationId; + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "是否危险品,1-是,0-否") + private Integer hazardous; + + @Schema(description = "是否标准溶液,1-是,0-否") + private Integer standardSolutionFlag; + + @Schema(description = "是否标准物质,1-是,0-否") + private Integer standardMaterialFlag; + + @Schema(description = "上架状态,0-未上架,1-已上架", example = "2") + private Integer publishStatus; + + @Schema(description = "领用状态,0-未领用,1-已领用", example = "1") + private Integer usageStatus; + + @Schema(description = "所属部门ID", example = "16158") + private Integer managerDepartmentId; + + @Schema(description = "领用人部门", example = "王五") + private String managerDepartmentName; + + @Schema(description = "负责人id", example = "7209") + private Long managerUserId; + + @Schema(description = "负责人", example = "张三") + private String managerUserName; + + @Schema(description = "开封状态,0-未开封,1-已开封", example = "2") + private Integer openStatus; + + @Schema(description = "开封人id", example = "8280") + private Long openUserId; + + @Schema(description = "开封人", example = "王五") + private String openUserName; + + @Schema(description = "过期状态") + private String expirationFlag; + + @Schema(description = "剩余量") + private BigDecimal remainingVolume; + + @Schema(description = "用完标记,0-未标记,1-已用完标记") + private Integer useEndFlag; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + 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/query/MaterialUseRecordWithMakeInfoQueryVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialUseRecordWithMakeInfoQueryVO.java new file mode 100644 index 00000000..1ab6f9a8 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/query/MaterialUseRecordWithMakeInfoQueryVO.java @@ -0,0 +1,16 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系分页 Request VO") +@Data +public class MaterialUseRecordWithMakeInfoQueryVO { + + @Schema(description = "物料实例id", example = "26970") + private Long infomationId; + + @Schema(description = "使用记录id", example = "2761") + private Long recordId; + +} \ 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/resp/MaterialUseRecordWithMakeInfoRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialUseRecordWithMakeInfoRespVO.java new file mode 100644 index 00000000..8bb39638 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialUseRecordWithMakeInfoRespVO.java @@ -0,0 +1,19 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.resp; + +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系 Response VO") +@Data +public class MaterialUseRecordWithMakeInfoRespVO { + + @Schema(description = "参与配置明细") + private List makeInfoList; + + @Schema(description = "配置生成的实例") + private MaterialInfomationRespVO targetInfo; + +} \ 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/MaterialInfomationDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInfomationDO.java index c60fbbd4..b11b4788 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInfomationDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialInfomationDO.java @@ -58,6 +58,11 @@ public class MaterialInfomationDO extends BusinessBaseDO { */ @TableField("CD") private String code; + /** + * 来源,批次入库,标液配置、危化品配置等 + */ + @TableField("ORGN") + private String origin; /** * 名称 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java index b70ecaf5..a23cc9d0 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java @@ -40,7 +40,7 @@ public class MaterialUseRecordDO extends BusinessBaseDO { * 是否配置危险品 */ @TableField("HZRD_MKE_FLG") - private String hazardousMakeFlag; + private Integer hazardousMakeFlag; /** * 本次数量 */ @@ -50,12 +50,12 @@ public class MaterialUseRecordDO extends BusinessBaseDO { * 之前量 */ @TableField("BFR_QTY") - private String beforeQuantity; + private BigDecimal beforeQuantity; /** * 余量 */ @TableField("AFT_QTY") - private String afterQuantity; + private BigDecimal afterQuantity; /** * 使用日期 */ 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 5c096d84..30aa90eb 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 @@ -8,12 +8,16 @@ import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLocationDO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfomationQueryVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialStandardSolutionDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; +import java.util.Set; + /** * 物料实例 Mapper * @@ -53,7 +57,7 @@ public interface MaterialInfomationMapper extends BaseMapperX wrapper = new MPJLambdaWrapperX() .select(MaterialInfomationDO::getId, MaterialInfomationDO::getProductId, MaterialInfomationDO::getBatchId, MaterialInfomationDO::getGongduanId, - MaterialInfomationDO::getCode, MaterialInfomationDO::getPublishStatus, + MaterialInfomationDO::getCode, MaterialInfomationDO::getOrigin, MaterialInfomationDO::getPublishStatus, MaterialInfomationDO::getUsageStatus, MaterialInfomationDO::getManagerDepartmentId, MaterialInfomationDO::getManagerDepartmentName, MaterialInfomationDO::getManagerUserId, MaterialInfomationDO::getManagerUserName, MaterialInfomationDO::getOpenStatus, MaterialInfomationDO::getOpenUserId, MaterialInfomationDO::getOpenUserName, @@ -61,7 +65,7 @@ public interface MaterialInfomationMapper extends BaseMapperX wrapper = getInfomationDOMPJLambdaWrapper(); - wrapper.eqIfExists(MaterialInfomationDO::getCode, code); + wrapper.eqIfExists(MaterialInfomationDO::getCode, queryVO.getCode()) + .eqIfExists(MaterialInfomationDO::getUsageStatus, queryVO.getUsageStatus()) + .eqIfExists(MaterialInfomationDO::getUseEndFlag, queryVO.getUseEndFlag()); return selectJoinOne(MaterialInfomationRespVO.class, wrapper); } @@ -108,7 +114,7 @@ public interface MaterialInfomationMapper extends BaseMapperX() .select(MaterialInfomationDO::getId, MaterialInfomationDO::getProductId, MaterialInfomationDO::getBatchId, MaterialInfomationDO::getGongduanId, - MaterialInfomationDO::getCode, MaterialInfomationDO::getPublishStatus, + MaterialInfomationDO::getCode, MaterialInfomationDO::getOrigin, MaterialInfomationDO::getPublishStatus, MaterialInfomationDO::getUsageStatus, MaterialInfomationDO::getManagerDepartmentId, MaterialInfomationDO::getManagerDepartmentName, MaterialInfomationDO::getManagerUserId, MaterialInfomationDO::getManagerUserName, MaterialInfomationDO::getOpenStatus, MaterialInfomationDO::getOpenUserId, MaterialInfomationDO::getOpenUserName, @@ -116,7 +122,7 @@ public interface MaterialInfomationMapper extends BaseMapperX selectOneWithPdtInfoByInfIds(List ids) { + MPJLambdaWrapper wrapper = getInfomationDOMPJLambdaWrapper(); + wrapper.in(MaterialInfomationDO::getId, ids); + return selectJoinList(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/MaterialUseRecordMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.java index 1c6ed7e0..5520e578 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.java @@ -3,7 +3,10 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; 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; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordRespVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +37,20 @@ public interface MaterialUseRecordMapper extends BaseMapperX selectPageWithInf(MaterialUseRecordPageReqVO reqVO) { + MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX() + .selectAll(MaterialUseRecordDO.class) + .selectAs(MaterialInfomationDO::getCode, MaterialUseRecordRespVO::getInfomationCode) + .leftJoin(MaterialInfomationDO.class, MaterialInfomationDO::getId, MaterialUseRecordDO::getInfomationId) + .eqIfPresent(MaterialUseRecordDO::getHazardousMakeFlag, reqVO.getHazardousMakeFlag()) + .betweenIfPresent(MaterialUseRecordDO::getUseDate, reqVO.getUseDate()) + .likeIfPresent(MaterialUseRecordDO::getUserName, reqVO.getUserName()) + .likeIfPresent(MaterialUseRecordDO::getReason, reqVO.getReason()) + .likeIfPresent(MaterialUseRecordDO::getSupervisorName, reqVO.getSupervisorName()) + .eqIfPresent(MaterialUseRecordDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .likeIfPresent(MaterialUseRecordDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseRecordDO::getId); + return selectJoinPage(reqVO, MaterialUseRecordRespVO.class, wrapperX); + } } \ 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/enums/MaterialInfomationOrigin.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOrigin.java new file mode 100644 index 00000000..ba4d808a --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOrigin.java @@ -0,0 +1,31 @@ +package com.zt.plat.module.qms.resource.material.enums; + +import lombok.Getter; + +/** + * 物料实例来源 + */ +@Getter +public enum MaterialInfomationOrigin { + batchInbound("批次入库"), + + standardSolutionMake("标液配置"), + + hazardousMaterialMake("危化品配置") + ; + + private final String name; + + MaterialInfomationOrigin(String name) { + this.name = name; + } + + public static MaterialFlowType fromName(String name) { + for (MaterialFlowType type : MaterialFlowType.values()) { + if (type.getName().equals(name)) { + return type; + } + } + throw new IllegalArgumentException("No enum constant with name: " + name); + } +} 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 a70e9706..5ffbaf73 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 @@ -5,6 +5,7 @@ import java.util.*; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfomationQueryVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import jakarta.validation.*; import com.zt.plat.framework.common.pojo.PageResult; @@ -87,10 +88,10 @@ public interface MaterialInfomationService { /** * 根据物料编号获取物料信息 * - * @param code 物料编号 + * @param queryVO 查询信息 * @return 物料信息 */ - MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfCode(String code); + MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfCode(MaterialInfomationQueryVO queryVO); /** * 根据物料实例id集合 获取物料信息 @@ -136,4 +137,12 @@ public interface MaterialInfomationService { * @param infomationDOS 批量更新 */ void updateBatch(List infomationDOS); + + /** + * 根据id集合获取物料信息 - 带大类信息 + * + * @param ids id集合 + * @return 物料信息 + */ + List getMaterialInfomationsWithPdtInfoByIds(List ids); } \ 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/MaterialInfomationServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationServiceImpl.java index d52203d8..8d466b6f 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 @@ -8,6 +8,7 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInfomationSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialInfomationQueryVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInfomationMapper; import groovy.util.logging.Slf4j; @@ -18,6 +19,7 @@ import org.springframework.validation.annotation.Validated; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -121,9 +123,9 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService } @Override - public MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfCode(String code) { + public MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfCode(MaterialInfomationQueryVO queryVO) { - return materialInfomationMapper.selectOneWithPdtInfoByInfCode(code); + return materialInfomationMapper.selectOneWithPdtInfoByInfCode(queryVO); } @Override @@ -158,4 +160,9 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService materialInfomationMapper.updateBatch(infomationDOS); } + @Override + public List getMaterialInfomationsWithPdtInfoByIds(List ids) { + return materialInfomationMapper.selectOneWithPdtInfoByInfIds(ids); + } + } \ 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/MaterialInventoryInboundServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryInboundServiceImpl.java index 618e6660..6213c2c4 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 @@ -17,6 +17,7 @@ import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryI 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; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOrigin; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -118,7 +119,8 @@ public class MaterialInventoryInboundServiceImpl implements MaterialInventoryInb .setUsageStatus(0) .setOpenStatus(0) .setManufacturerDate(batch.getManufacturerDate()).setExpirationDate(batch.getDueDate()) - .setRemainingVolume(product.getStandardCapacity()); + .setRemainingVolume(product.getStandardCapacity()) + .setOrigin(MaterialInfomationOrigin.batchInbound.name()); // 生成编号 String code = sequenceUtil.genCode(MaterialConstants.SEQUENCE_INF_KEY); infomationDO.setCode(code); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialStandardSolutionServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialStandardSolutionServiceImpl.java index ed249daa..e1fdc715 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialStandardSolutionServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialStandardSolutionServiceImpl.java @@ -18,6 +18,7 @@ import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomatio import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialStandardSolutionDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialStandardSolutionMapper; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOrigin; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -98,7 +99,8 @@ public class MaterialStandardSolutionServiceImpl implements MaterialStandardSolu .setManufacturerDate(LocalDate.from(mtrlStandSol.getMakeDate())) .setExpirationDate(LocalDate.from(mtrlStandSol.getDueDate())) .setUsageStatus(0) - .setUseEndFlag(0); + .setUseEndFlag(0) + .setOrigin(MaterialInfomationOrigin.standardSolutionMake.name()); materialInfomationService.save(infomationDO); // 插入 mtrlStandSol.setInfomationId(infomationDO.getId()); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java index 3cc13662..59cf71d4 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java @@ -4,6 +4,8 @@ import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialUseRecordWithMakeInfoQueryVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialUseRecordWithMakeInfoRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDetailDO; import jakarta.validation.Valid; @@ -67,4 +69,20 @@ public interface MaterialUseRecordDetailService { * @param recordDetailDOS 使用记录配置关系 */ void saveBatch(List recordDetailDOS); + + /** + * 获取危化品配置信息 + * + * @param queryVO 查询参数 + * @return 危化品配置信息 + */ + List getMaterialMakeInfoUseRecordDetail(@Valid MaterialUseRecordWithMakeInfoQueryVO queryVO); + + /** + * 检查使用记录中是否存在危化品配置信息 + * + * @param recordIds 使用记录编号 + * @return 是否存在危化品配置信息 + */ + Boolean checkIsExistMakeInfoByRecordIds(List recordIds); } \ 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/MaterialUseRecordDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java index 0952941a..5f3e34f7 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 @@ -1,19 +1,32 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.MaterialInfomationRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseRecordDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialUseRecordWithMakeInfoQueryVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialUseRecordWithMakeInfoRespVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDetailDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialUseRecordDetailMapper; 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.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_USE_RECORD_DETAIL_NOT_EXISTS; @@ -29,6 +42,8 @@ public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDeta @Resource private MaterialUseRecordDetailMapper materialUseRecordDetailMapper; + @Autowired + private MaterialInfomationService materialInfomationService; @Override public MaterialUseRecordDetailRespVO createMaterialUseRecordDetail(MaterialUseRecordDetailSaveReqVO createReqVO) { @@ -93,4 +108,48 @@ public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDeta materialUseRecordDetailMapper.insertBatch(recordDetailDOS); } + @Override + public List getMaterialMakeInfoUseRecordDetail(MaterialUseRecordWithMakeInfoQueryVO queryVO) { + Long infomationId = queryVO.getInfomationId(); + Long recordId = queryVO.getRecordId(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (infomationId != null) { + // 根据物料id查询 + wrapper = Wrappers.lambdaQuery(MaterialUseRecordDetailDO.class) + .eq(MaterialUseRecordDetailDO::getInfomationId, infomationId) + .or() + .eq(MaterialUseRecordDetailDO::getTargetInfomationId, infomationId); + + } else if (recordId != null) { + // 根据使用记录id查询 + wrapper = Wrappers.lambdaQuery(MaterialUseRecordDetailDO.class) + .eq(MaterialUseRecordDetailDO::getRecordId, recordId); + } + List recordDetailDOS = materialUseRecordDetailMapper.selectList(wrapper); + if (CollUtil.isEmpty(recordDetailDOS)) return List.of(); + Set informationIds = recordDetailDOS.stream() + .flatMap(detail -> Stream.of(detail.getInfomationId(), detail.getTargetInfomationId())) + .collect(Collectors.toSet()); + List infomationRespVOS = materialInfomationService.getMaterialInfomationsWithPdtInfoByIds(new ArrayList<>(informationIds)); + if (CollUtil.isEmpty(infomationRespVOS)) return List.of(); + Map infomationRespVOMapById = infomationRespVOS.stream().collect(Collectors.toMap(MaterialInfomationRespVO::getId, Function.identity())); + Map> recordDetailMapByTargetInfId = recordDetailDOS.stream().collect(Collectors.groupingBy(MaterialUseRecordDetailDO::getTargetInfomationId)); + ArrayList result = new ArrayList<>(); + recordDetailMapByTargetInfId.forEach((targetInfId, detailDOS) -> { + MaterialUseRecordWithMakeInfoRespVO makeInfoRespVO = new MaterialUseRecordWithMakeInfoRespVO(); + makeInfoRespVO.setTargetInfo(infomationRespVOMapById.get(targetInfId)); + List infIds = detailDOS.stream().map(MaterialUseRecordDetailDO::getInfomationId).toList(); + List infomationRespVOS1 = infIds.stream().map(infomationRespVOMapById::get).toList(); + makeInfoRespVO.setMakeInfoList(infomationRespVOS1); + result.add(makeInfoRespVO); + }); + return result; + } + + @Override + public Boolean checkIsExistMakeInfoByRecordIds(List recordIds) { + return materialUseRecordDetailMapper.exists(Wrappers.lambdaQuery(MaterialUseRecordDetailDO.class) + .in(MaterialUseRecordDetailDO::getRecordId, recordIds)); + } + } \ 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/MaterialUseRecordService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordService.java index c404d33e..b3ac7c42 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordService.java @@ -66,4 +66,12 @@ public interface MaterialUseRecordService { * @return 配置后的物料实例 */ MaterialInfomationRespVO makeHazardousMaterial(@Valid MaterialHazardousMakeSaveReqVO makeReqVO); + + /** + * 获得使用记录分页 - 含物料信息 + * + * @param pageReqVO 分页查询 + * @return 使用记录分页 + */ + PageResult getMaterialUseRecordPageWithInf(@Valid MaterialUseRecordPageReqVO pageReqVO); } \ 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/MaterialUseRecordServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordServiceImpl.java index 50e208e3..d35b08ed 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordServiceImpl.java @@ -13,6 +13,7 @@ import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDetailDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialUseRecordMapper; +import com.zt.plat.module.qms.resource.material.enums.MaterialInfomationOrigin; import com.zt.plat.module.qms.resource.material.enums.MaterialOutboundType; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +25,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -71,7 +73,8 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); recordDO.setUseDate(LocalDateTime.now()).setUserId(loginUserId).setUserName(loginUserNickname); - + recordDO.setBeforeQuantity(remainingVolume) + .setAfterQuantity(remainingVolume.subtract(operationQuantity)); materialUseRecordMapper.insert(recordDO); // 更新物料剩余量 @@ -151,17 +154,53 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { @Override public MaterialInfomationRespVO makeHazardousMaterial(MaterialHazardousMakeSaveReqVO makeReqVO) { - List recordIds = makeReqVO.getRecordIds(); - if (CollUtil.isEmpty(recordIds)) throw new ServiceException(1_032_160_000, "使用记录为空"); - List recordDOS = materialUseRecordMapper.selectByIds(recordIds); - if (CollUtil.isEmpty(recordDOS)) throw new ServiceException(1_032_160_000, "使用记录不存在"); - BigDecimal totalOperationQuantity = recordDOS.stream() - .map(MaterialUseRecordDO::getOperationQuantity) + List records = makeReqVO.getRecords(); + BigDecimal totalOperationQuantity = records.stream() + .map(MaterialUseRecordSaveReqVO::getOperationQuantity) .reduce(BigDecimal.ZERO, BigDecimal::add); Long productId = makeReqVO.getProductId(); MaterialProductDO product = materialProductService.getMaterialProduct(productId); if (product == null) throw new ServiceException(1_032_160_000, "配置大类不存在"); if (totalOperationQuantity.compareTo(product.getStandardCapacity()) > 0) throw new ServiceException(1_032_160_000, "配置的总容量超过了额定容量"); + Set infIds = records.stream().map(MaterialUseRecordSaveReqVO::getInfomationId).collect(Collectors.toSet()); + List infomations = materialInfomationService.getMaterialInfomationsByIds(new ArrayList<>(infIds)); + if (CollUtil.isEmpty(infomations)) throw new ServiceException(1_032_160_000, "物料实例不存在"); + + Map> recordMapByInfId = records.stream().collect(Collectors.groupingBy(MaterialUseRecordSaveReqVO::getInfomationId)); + for (MaterialInfomationDO infomation : infomations) { + BigDecimal reduce = recordMapByInfId.get(infomation.getId()).stream().map(MaterialUseRecordSaveReqVO::getOperationQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + if (reduce.compareTo(infomation.getRemainingVolume()) > 0) throw new ServiceException(1_032_160_000, "使用量不能大于剩余量"); + } + // 保存使用记录 + Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); + String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); + Map infomationDOMapById = infomations.stream().collect(Collectors.toMap(MaterialInfomationDO::getId, Function.identity())); + List recordDOS = records.stream().map(record -> { + MaterialUseRecordDO recordDO = BeanUtils.toBean(record, MaterialUseRecordDO.class); + recordDO.setHazardousMakeFlag(1); + + recordDO.setUseDate(LocalDateTime.now()).setUserId(loginUserId).setUserName(loginUserNickname); + Long infomationId = record.getInfomationId(); + MaterialInfomationDO infomationDO = infomationDOMapById.get(infomationId); + BigDecimal remainingVolume = infomationDO.getRemainingVolume(); + recordDO.setBeforeQuantity(remainingVolume) + .setAfterQuantity(remainingVolume.subtract(record.getOperationQuantity())); + // 扣除物料剩余量 + infomationDO.setRemainingVolume(remainingVolume.subtract(record.getOperationQuantity())); + infomationDOMapById.put(infomationId, infomationDO); + return recordDO; + }).toList(); + materialUseRecordMapper.insertBatch(recordDOS); + + // 更新物料剩余量 + Map> groupRecordDOSByInfId = recordDOS.stream().collect(Collectors.groupingBy(MaterialUseRecordDO::getInfomationId)); + for (MaterialInfomationDO infomation : infomations) { + List recordDOS1 = groupRecordDOSByInfId.get(infomation.getId()); + BigDecimal totalOperationQuantity1 = recordDOS1.stream().map(MaterialUseRecordDO::getOperationQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + infomation.setRemainingVolume(infomation.getRemainingVolume().subtract(totalOperationQuantity1)); + } + materialInfomationService.updateBatch(infomations); + // 生成物料实例 MaterialInfomationDO infomationDO = BeanUtils.toBean(product, MaterialInfomationDO.class); infomationDO @@ -170,23 +209,30 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { .setCode(sequenceUtil.genCode(MaterialConstants.SEQUENCE_INF_KEY)) .setManufacturerDate(LocalDate.now()) .setExpirationDate(LocalDate.now().plusDays(product.getDue())) - // 生成就领用 - .setUsageStatus(1) - .setUseEndFlag(0); + .setUsageStatus(0) + .setUseEndFlag(0) + .setOrigin(MaterialInfomationOrigin.hazardousMaterialMake.name()); materialInfomationService.save(infomationDO); // 保存配置明细 List recordDetailDOS = recordDOS.stream().map(record -> new MaterialUseRecordDetailDO() .setRecordId(record.getId()).setInfomationId(record.getInfomationId()) .setTargetInfomationId(infomationDO.getId())).toList(); materialUseRecordDetailService.saveBatch(recordDetailDOS); + // 保存领用记录 MaterialInventoryOutboundSaveReqVO outboundSaveReqVO = new MaterialInventoryOutboundSaveReqVO() .setBusinessType(MaterialOutboundType.receiveOutbound.getName()) .setInfomationIds(Collections.singletonList(infomationDO.getId())) + .setApplyUser(recordDOS.get(0).getUserName()).setApplyUserId(recordDOS.get(0).getUserId()) .setSuperviseUser(recordDOS.get(0).getSupervisorName()) .setSuperviseUserId(recordDOS.get(0).getSupervisorId()); materialInventoryOutboundService.createMaterialInventoryOutbound(outboundSaveReqVO); return materialInfomationService.getMaterialInfomationWithPdtInfoByInfId(infomationDO.getId()); } + @Override + public PageResult getMaterialUseRecordPageWithInf(MaterialUseRecordPageReqVO pageReqVO) { + return materialUseRecordMapper.selectPageWithInf(pageReqVO); + } + } \ No newline at end of file