From 25adac246c6ad21e950e1fc4dccfd23962d8cfad Mon Sep 17 00:00:00 2001 From: wxr Date: Tue, 24 Feb 2026 17:29:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E7=BC=96=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E9=85=8D=E6=96=99=E6=96=B9=E6=B3=95=E4=B8=8D=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5=E5=88=B0=E6=8A=A5=E5=91=8A=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reportdoc/service/ReportDocumentMainServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/reportdoc/service/ReportDocumentMainServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/reportdoc/service/ReportDocumentMainServiceImpl.java index 16d06298..baa8974d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/reportdoc/service/ReportDocumentMainServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/reportdoc/service/ReportDocumentMainServiceImpl.java @@ -247,6 +247,9 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService, JSONObject json = JSONObject.parseObject(content); for(String key : json.keySet()){ JSONObject obj = json.getJSONObject(key); + if ("ingredient".equals(obj.get("usage"))) {//如果是配料的,则不拼接 + continue; + } String methodName = obj.getString("methodName"); if(ObjectUtils.isEmpty(methodName)) continue; From 85c50c1c69411f38685e8f1f35cdb3ad2a1a7126 Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Tue, 24 Feb 2026 18:01:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=E7=89=A9=E6=96=99=E5=8D=B1=E5=8C=96?= =?UTF-8?q?=E5=93=81=E4=BD=BF=E7=94=A8=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/qms/enums/ErrorCodeConstants.java | 2 + .../admin/MaterialUseRecordController.java | 110 ++++++++++ .../MaterialUseRecordDetailController.java | 105 ++++++++++ .../vo/MaterialHazardousMakeSaveReqVO.java | 38 ++++ .../vo/MaterialLifecycleRespVO.java | 4 + .../controller/vo/MaterialProductRespVO.java | 13 +- .../vo/MaterialProductSaveReqVO.java | 4 + .../vo/MaterialUseRecordDetailPageReqVO.java | 35 ++++ .../vo/MaterialUseRecordDetailRespVO.java | 43 ++++ .../vo/MaterialUseRecordDetailSaveReqVO.java | 28 +++ .../vo/MaterialUseRecordPageReqVO.java | 60 ++++++ .../vo/MaterialUseRecordRespVO.java | 75 +++++++ .../vo/MaterialUseRecordSaveReqVO.java | 56 +++++ .../dal/dataobject/MaterialInfomationDO.java | 3 +- .../dal/dataobject/MaterialProductDO.java | 13 +- .../dal/dataobject/MaterialUseRecordDO.java | 100 +++++++++ .../dataobject/MaterialUseRecordDetailDO.java | 57 ++++++ .../dal/mapper/MaterialInfomationMapper.java | 16 +- .../mapper/MaterialUseRecordDetailMapper.java | 29 +++ .../dal/mapper/MaterialUseRecordMapper.java | 37 ++++ .../service/MaterialInfomationService.java | 15 ++ .../MaterialInfomationServiceImpl.java | 10 + .../MaterialInventoryInboundServiceImpl.java | 3 +- .../service/MaterialLifecycleServiceImpl.java | 6 + .../service/MaterialProductServiceImpl.java | 32 +-- .../MaterialUseRecordDetailService.java | 70 +++++++ .../MaterialUseRecordDetailServiceImpl.java | 96 +++++++++ .../service/MaterialUseRecordService.java | 69 +++++++ .../service/MaterialUseRecordServiceImpl.java | 192 ++++++++++++++++++ .../mapper/MaterialUseRecordDetailMapper.xml | 12 ++ .../dal/mapper/MaterialUseRecordMapper.xml | 12 ++ 31 files changed, 1306 insertions(+), 39 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailPageReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailRespVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailSaveReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordPageReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDetailDO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordService.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordServiceImpl.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.xml create mode 100644 zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.xml diff --git a/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/ErrorCodeConstants.java b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/ErrorCodeConstants.java index 06f6d6e1..0aab17b9 100644 --- a/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/ErrorCodeConstants.java +++ b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/ErrorCodeConstants.java @@ -201,6 +201,8 @@ public interface ErrorCodeConstants { ErrorCode MATERIAL_INVENTORY_OUTBOUND_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "出库明细,出库明细,含领用出库、退货出库、盘亏出库、销毁出库等不存在"); ErrorCode MATERIAL_STANDARD_SOLUTION_NOT_EXISTS = new ErrorCode(1_032_160_000, "标准溶液不存在"); + ErrorCode MATERIAL_USE_RECORD_NOT_EXISTS = new ErrorCode(1_032_160_000, "使用记录不存在"); + ErrorCode MATERIAL_USE_RECORD_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "使用配置明细不存在"); 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 new file mode 100644 index 00000000..8dc5ed3a --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordController.java @@ -0,0 +1,110 @@ +package com.zt.plat.module.qms.resource.material.controller.admin; + +import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; +import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.pojo.PageParam; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO; +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.excel.core.util.ExcelUtils; +import com.zt.plat.module.qms.resource.material.controller.vo.*; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; +import com.zt.plat.module.qms.resource.material.service.MaterialUseRecordService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +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 = "管理后台 - 物料使用记录") +@RestController +@RequestMapping("/qms/resource/material-use-record") +@Validated +public class MaterialUseRecordController implements BusinessControllerMarker { + + + @Resource + private MaterialUseRecordService materialUseRecordService; + + @PostMapping("/add") + @Operation(summary = "新增使用记录") +// @PreAuthorize("@ss.hasPermission('qms:material-use-record:create')") + public CommonResult createMaterialUseRecord(@Valid @RequestBody MaterialUseRecordSaveReqVO createReqVO) { + return success(materialUseRecordService.createMaterialUseRecord(createReqVO)); + } + + @PostMapping("/hzrd-make") + @Operation(summary = "配置危化品") +// @PreAuthorize("@ss.hasPermission('qms:material-use-record:create')") + public CommonResult makeHazardousMaterial(@Valid @RequestBody MaterialHazardousMakeSaveReqVO makeReqVO) { + return success(materialUseRecordService.makeHazardousMaterial(makeReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新使用记录") + @PreAuthorize("@ss.hasPermission('qms:material-use-record:update')") + public CommonResult updateMaterialUseRecord(@Valid @RequestBody MaterialUseRecordSaveReqVO updateReqVO) { + materialUseRecordService.updateMaterialUseRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除使用记录") + @Parameter(name = "id", description = "编号", required = true) +// @PreAuthorize("@ss.hasPermission('qms:material-use-record:delete')") + public CommonResult deleteMaterialUseRecord(@RequestParam("id") Long id) { + materialUseRecordService.deleteMaterialUseRecord(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除使用记录") + @PreAuthorize("@ss.hasPermission('qms:material-use-record:delete')") + public CommonResult deleteMaterialUseRecordList(@RequestBody BatchDeleteReqVO req) { + materialUseRecordService.deleteMaterialUseRecordListByIds(req.getIds()); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得使用记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") +// @PreAuthorize("@ss.hasPermission('qms:material-use-record:query')") + public CommonResult getMaterialUseRecord(@RequestParam("id") Long id) { + MaterialUseRecordDO materialUseRecord = materialUseRecordService.getMaterialUseRecord(id); + return success(BeanUtils.toBean(materialUseRecord, MaterialUseRecordRespVO.class)); + } + + @GetMapping("/page") + @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)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出使用记录 Excel") + @PreAuthorize("@ss.hasPermission('qms:material-use-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMaterialUseRecordExcel(@Valid MaterialUseRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = materialUseRecordService.getMaterialUseRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "使用记录.xls", "数据", MaterialUseRecordRespVO.class, + BeanUtils.toBean(list, MaterialUseRecordRespVO.class)); + } + +} \ 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/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 new file mode 100644 index 00000000..67d08097 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseRecordDetailController.java @@ -0,0 +1,105 @@ +package com.zt.plat.module.qms.resource.material.controller.admin; + +import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; +import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.pojo.PageParam; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO; +import com.zt.plat.framework.common.util.object.BeanUtils; +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.dal.dataobject.MaterialUseRecordDetailDO; +import com.zt.plat.module.qms.resource.material.service.MaterialUseRecordDetailService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +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 = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系") +@RestController +@RequestMapping("/qms/material-use-record-detail") +@Validated +public class MaterialUseRecordDetailController implements BusinessControllerMarker { + + + @Resource + private MaterialUseRecordDetailService materialUseRecordDetailService; + + @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") + @Operation(summary = "更新使用记录配置关系,用于处理危险品溶液配置关系") + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:update')") + public CommonResult updateMaterialUseRecordDetail(@Valid @RequestBody MaterialUseRecordDetailSaveReqVO updateReqVO) { + materialUseRecordDetailService.updateMaterialUseRecordDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除使用记录配置关系,用于处理危险品溶液配置关系") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:delete')") + public CommonResult deleteMaterialUseRecordDetail(@RequestParam("id") Long id) { + materialUseRecordDetailService.deleteMaterialUseRecordDetail(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除使用记录配置关系,用于处理危险品溶液配置关系") + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:delete')") + public CommonResult deleteMaterialUseRecordDetailList(@RequestBody BatchDeleteReqVO req) { + materialUseRecordDetailService.deleteMaterialUseRecordDetailListByIds(req.getIds()); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得使用记录配置关系,用于处理危险品溶液配置关系") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:query')") + public CommonResult getMaterialUseRecordDetail(@RequestParam("id") Long id) { + MaterialUseRecordDetailDO materialUseRecordDetail = materialUseRecordDetailService.getMaterialUseRecordDetail(id); + return success(BeanUtils.toBean(materialUseRecordDetail, MaterialUseRecordDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得使用记录配置关系,用于处理危险品溶液配置关系分页") + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:query')") + public CommonResult> getMaterialUseRecordDetailPage(@Valid MaterialUseRecordDetailPageReqVO pageReqVO) { + PageResult pageResult = materialUseRecordDetailService.getMaterialUseRecordDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MaterialUseRecordDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出使用记录配置关系,用于处理危险品溶液配置关系 Excel") + @PreAuthorize("@ss.hasPermission('qms:material-use-record-detail:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMaterialUseRecordDetailExcel(@Valid MaterialUseRecordDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = materialUseRecordDetailService.getMaterialUseRecordDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "使用记录配置关系,用于处理危险品溶液配置关系.xls", "数据", MaterialUseRecordDetailRespVO.class, + BeanUtils.toBean(list, MaterialUseRecordDetailRespVO.class)); + } + +} \ 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/MaterialHazardousMakeSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java new file mode 100644 index 00000000..371715fb --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialHazardousMakeSaveReqVO.java @@ -0,0 +1,38 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +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") +@Data +public class MaterialHazardousMakeSaveReqVO { + + @Schema(description = "使用记录ids") + @NotNull + private List recordIds; + + @Schema(description = "配置的大类") + @NotNull + private Long productId; + + @Schema(description = "说明") + private String reason; + + @Schema(description = "监督人id", example = "13958") + private Long supervisorId; + + @Schema(description = "监督人姓名", example = "李四") + private String supervisorName; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + private String remark; + +} \ 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/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 19031eac..fdae4a88 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 @@ -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.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -84,4 +85,7 @@ public class MaterialLifecycleRespVO { @ExcelProperty("流程明细") private List detailList; + @Schema(description = "附件对象") + private List businessFileRet; + } \ 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/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 10418545..269741a9 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 @@ -2,8 +2,6 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.TableField; -import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; @@ -78,6 +76,10 @@ public class MaterialProductRespVO { @ExcelProperty("技术参数") private String parameter; + @Schema(description = "额定容量") + @ExcelProperty("技术参数") + private BigDecimal standardCapacity; + @Schema(description = "制造商") @ExcelProperty("制造商") private String manufacturer; @@ -133,22 +135,23 @@ public class MaterialProductRespVO { @Schema(description = "是否检化验,1-是,0-否") @ExcelProperty("是否检化验,1-是,0-否") + @Dict(dicCode = "yes_or_no") private Integer assayFlag; @Schema(description = "是否进行库存预警,1-是,0-否") @ExcelProperty("是否进行库存预警,1-是,0-否") @Dict(dicCode = "yes_or_no") - private Integer InventoryAlarmFlag; + private Integer inventoryAlarmFlag; @Schema(description = "库存预警级别,safe-安全,warn-警告,danger") @ExcelProperty("库存预警级别,safe-安全,warn-警告,danger") @Dict(dicCode = "alarm_level") - private String InventoryAlarmLevel; + private String inventoryAlarmLevel; @Schema(description = "库存预警区间,json格式配置") @ExcelProperty("库存预警区间,json格式配置") - private String InventoryAlarmRange; + private String inventoryAlarmRange; @Schema(description = "所属部门") @ExcelProperty("所属部门") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductSaveReqVO.java index 99572bf7..66cd8e87 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialProductSaveReqVO.java @@ -9,6 +9,7 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; +import java.math.BigDecimal; import java.util.List; @Schema(description = "管理后台 - 物料大类新增/修改 Request VO") @@ -53,6 +54,9 @@ public class MaterialProductSaveReqVO { @Schema(description = "技术参数") private String parameter; + @Schema(description = "额定容量") + private BigDecimal standardCapacity; + @Schema(description = "制造商") private String manufacturer; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailPageReqVO.java new file mode 100644 index 00000000..30f8f317 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailPageReqVO.java @@ -0,0 +1,35 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import com.zt.plat.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +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 MaterialUseRecordDetailPageReqVO extends PageParam { + + @Schema(description = "物料实例id", example = "26970") + private Long infomationId; + + @Schema(description = "源使用记录id", example = "2761") + private Long recordId; + + @Schema(description = "配置生成的物料实例id", example = "29658") + private Long targetInfomationId; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @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/MaterialUseRecordDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailRespVO.java new file mode 100644 index 00000000..f8e4d70b --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailRespVO.java @@ -0,0 +1,43 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MaterialUseRecordDetailRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "11654") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "物料实例id", example = "26970") + @ExcelProperty("物料实例id") + private Long infomationId; + + @Schema(description = "源使用记录id", example = "2761") + @ExcelProperty("源使用记录id") + private Long recordId; + + @Schema(description = "配置生成的物料实例id", example = "29658") + @ExcelProperty("配置生成的物料实例id") + private Long targetInfomationId; + + @Schema(description = "所属部门") + @ExcelProperty("所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @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/MaterialUseRecordDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailSaveReqVO.java new file mode 100644 index 00000000..ff3c019e --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordDetailSaveReqVO.java @@ -0,0 +1,28 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 使用记录配置关系,用于处理危险品溶液配置关系新增/修改 Request VO") +@Data +public class MaterialUseRecordDetailSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "11654") + private Long id; + + @Schema(description = "物料实例id", example = "26970") + private Long infomationId; + + @Schema(description = "源使用记录id", example = "2761") + private Long recordId; + + @Schema(description = "配置生成的物料实例id", example = "29658") + private Long targetInfomationId; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + private String remark; + +} \ 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/MaterialUseRecordPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordPageReqVO.java new file mode 100644 index 00000000..5958dc42 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordPageReqVO.java @@ -0,0 +1,60 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import com.zt.plat.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +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 MaterialUseRecordPageReqVO extends PageParam { + + @Schema(description = "物料实例id,1-是;0-否", example = "16550") + private Long infomationId; + + @Schema(description = "是否配置危险品") + private String hazardousMakeFlag; + + @Schema(description = "本次数量") + private String operationQuantity; + + @Schema(description = "之前量") + private String beforeQuantity; + + @Schema(description = "余量") + private String afterQuantity; + + @Schema(description = "使用日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] useDate; + + @Schema(description = "使用人id", example = "22146") + private Long userId; + + @Schema(description = "使用人", example = "ZT") + private String userName; + + @Schema(description = "说明") + private String reason; + + @Schema(description = "监督人id", example = "13958") + private Long supervisorId; + + @Schema(description = "监督人姓名", example = "李四") + private String supervisorName; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @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/MaterialUseRecordRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java new file mode 100644 index 00000000..258c6bb6 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordRespVO.java @@ -0,0 +1,75 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 使用记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MaterialUseRecordRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15790") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "物料实例id,1-是;0-否", requiredMode = Schema.RequiredMode.REQUIRED, example = "16550") + @ExcelProperty("物料实例id,1-是;0-否") + private Long infomationId; + + @Schema(description = "是否配置危险品", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否配置危险品") + private String hazardousMakeFlag; + + @Schema(description = "本次数量", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("本次数量") + private String operationQuantity; + + @Schema(description = "之前量") + @ExcelProperty("之前量") + private String beforeQuantity; + + @Schema(description = "余量") + @ExcelProperty("余量") + private String afterQuantity; + + @Schema(description = "使用日期", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("使用日期") + private LocalDateTime useDate; + + @Schema(description = "使用人id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22146") + @ExcelProperty("使用人id") + private Long userId; + + @Schema(description = "使用人", requiredMode = Schema.RequiredMode.REQUIRED, example = "ZT") + @ExcelProperty("使用人") + private String userName; + + @Schema(description = "说明") + @ExcelProperty("说明") + private String reason; + + @Schema(description = "监督人id", example = "13958") + @ExcelProperty("监督人id") + private Long supervisorId; + + @Schema(description = "监督人姓名", example = "李四") + @ExcelProperty("监督人姓名") + private String supervisorName; + + @Schema(description = "所属部门") + @ExcelProperty("所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @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/MaterialUseRecordSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java new file mode 100644 index 00000000..a8ea1779 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseRecordSaveReqVO.java @@ -0,0 +1,56 @@ +package com.zt.plat.module.qms.resource.material.controller.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 使用记录新增/修改 Request VO") +@Data +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-否不能为空") + private Long infomationId; + + @Schema(description = "是否配置危险品", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否配置危险品不能为空") + private String hazardousMakeFlag; + + @Schema(description = "本次数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "本次数量不能为空") + @Min(value = 0L, message = "数量不能小于0") + private BigDecimal operationQuantity; + + @Schema(description = "使用日期", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime useDate; + + @Schema(description = "使用人id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22146") + private Long userId; + + @Schema(description = "使用人", requiredMode = Schema.RequiredMode.REQUIRED, example = "ZT") + private String userName; + + @Schema(description = "说明") + private String reason; + + @Schema(description = "监督人id", example = "13958") + private Long supervisorId; + + @Schema(description = "监督人姓名", example = "李四") + private String supervisorName; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + private String remark; + +} \ 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 eb0f77ac..c60fbbd4 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 @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.resource.material.dal.dataobject; import lombok.*; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @@ -166,7 +167,7 @@ public class MaterialInfomationDO extends BusinessBaseDO { * 剩余量 */ @TableField("RMNG_VOL") - private String remainingVolume; + private BigDecimal remainingVolume; /** * 用完标记,0-未标记,1-已用完标记 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialProductDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialProductDO.java index 385ba14c..3b83a31c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialProductDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialProductDO.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.*; import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO; import lombok.*; +import java.math.BigDecimal; + /** * 物料大类 DO * @@ -103,6 +105,11 @@ public class MaterialProductDO extends BusinessBaseDO { @TableField("PRM") private String parameter; /** + * 额定容量 + */ + @TableField("STD_CPY") + private BigDecimal standardCapacity; + /** * 制造商 */ @TableField("MFR") @@ -171,17 +178,17 @@ public class MaterialProductDO extends BusinessBaseDO { * 是否进行库存预警,1-是,0-否 */ @TableField("INVT_ALM_FLG") - private Integer InventoryAlarmFlag; + private Integer inventoryAlarmFlag; /** * 库存预警级别,safe-安全,warn-警告,danger */ @TableField("INVT_ALM_LVL") - private String InventoryAlarmLevel; + private String inventoryAlarmLevel; /** * 库存预警区间,json格式配置 */ @TableField("INVT_ALM_RNG") - private String InventoryAlarmRange; + private String inventoryAlarmRange; /** * 所属部门 */ 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 new file mode 100644 index 00000000..b70ecaf5 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDO.java @@ -0,0 +1,100 @@ +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; +import java.time.LocalDateTime; +/** +* 使用记录 DO +* +* @author 后台管理 +*/ +@TableName("t_mtrl_use_rcd") +@KeySequence("t_mtrl_use_rcd_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** +* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO +*/ +public class MaterialUseRecordDO extends BusinessBaseDO { + + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 物料实例id,1-是;0-否 + */ + @TableField("INF_ID") + private Long infomationId; + /** + * 是否配置危险品 + */ + @TableField("HZRD_MKE_FLG") + private String hazardousMakeFlag; + /** + * 本次数量 + */ + @TableField("OPTN_QTY") + private BigDecimal operationQuantity; + /** + * 之前量 + */ + @TableField("BFR_QTY") + private String beforeQuantity; + /** + * 余量 + */ + @TableField("AFT_QTY") + private String afterQuantity; + /** + * 使用日期 + */ + @TableField("USE_DT") + private LocalDateTime useDate; + /** + * 使用人id + */ + @TableField("USER_ID") + private Long userId; + /** + * 使用人 + */ + @TableField("USER_NAME") + private String userName; + /** + * 说明 + */ + @TableField("RSN") + private String reason; + /** + * 监督人id + */ + @TableField("SPVR_ID") + private Long supervisorId; + /** + * 监督人姓名 + */ + @TableField("SPVR_NAME") + private String supervisorName; + /** + * 所属部门 + */ + @TableField("SYS_DEPT_CD") + private String systemDepartmentCode; + /** + * 备注 + */ + @TableField("RMK") + private String remark; + +} \ 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/MaterialUseRecordDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDetailDO.java new file mode 100644 index 00000000..32b6be42 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseRecordDetailDO.java @@ -0,0 +1,57 @@ +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.*; +/** +* 使用记录配置关系,用于处理危险品溶液配置关系 DO +* +* @author 后台管理 +*/ +@TableName("t_mtrl_use_rcd_dtl") +@KeySequence("t_mtrl_use_rcd_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** +* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO +*/ +public class MaterialUseRecordDetailDO extends BusinessBaseDO { + + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 物料实例id + */ + @TableField("INF_ID") + private Long infomationId; + /** + * 源使用记录id + */ + @TableField("RCD_ID") + private Long recordId; + /** + * 配置生成的物料实例id + */ + @TableField("TGT_INF_ID") + private Long targetInfomationId; + /** + * 所属部门 + */ + @TableField("SYS_DEPT_CD") + private String systemDepartmentCode; + /** + * 备注 + */ + @TableField("RMK") + private String remark; + +} \ 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/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 833b56b5..5c096d84 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 @@ -99,7 +99,13 @@ public interface MaterialInfomationMapper extends BaseMapperX wrapper = new MPJLambdaWrapperX() + MPJLambdaWrapper wrapper = getInfomationDOMPJLambdaWrapper(); + wrapper.eqIfExists(MaterialInfomationDO::getCode, code); + return selectJoinOne(MaterialInfomationRespVO.class, wrapper); + } + + default MPJLambdaWrapper getInfomationDOMPJLambdaWrapper() { + return new MPJLambdaWrapperX() .select(MaterialInfomationDO::getId, MaterialInfomationDO::getProductId, MaterialInfomationDO::getBatchId, MaterialInfomationDO::getGongduanId, MaterialInfomationDO::getCode, MaterialInfomationDO::getPublishStatus, @@ -124,8 +130,12 @@ public interface MaterialInfomationMapper extends BaseMapperX wrapper = getInfomationDOMPJLambdaWrapper(); + wrapper.eqIfExists(MaterialInfomationDO::getId, id); return selectJoinOne(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/MaterialUseRecordDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.java new file mode 100644 index 00000000..4c7446f4 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.java @@ -0,0 +1,29 @@ +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.module.qms.resource.material.controller.vo.MaterialUseRecordDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDetailDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 使用记录配置关系,用于处理危险品溶液配置关系 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface MaterialUseRecordDetailMapper extends BaseMapperX { + + default PageResult selectPage(MaterialUseRecordDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MaterialUseRecordDetailDO::getInfomationId, reqVO.getInfomationId()) + .eqIfPresent(MaterialUseRecordDetailDO::getRecordId, reqVO.getRecordId()) + .eqIfPresent(MaterialUseRecordDetailDO::getTargetInfomationId, reqVO.getTargetInfomationId()) + .eqIfPresent(MaterialUseRecordDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(MaterialUseRecordDetailDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseRecordDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseRecordDetailDO::getId)); + } + +} \ 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 new file mode 100644 index 00000000..1c6ed7e0 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.java @@ -0,0 +1,37 @@ +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.module.qms.resource.material.controller.vo.MaterialUseRecordPageReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 使用记录 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface MaterialUseRecordMapper extends BaseMapperX { + + default PageResult selectPage(MaterialUseRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MaterialUseRecordDO::getInfomationId, reqVO.getInfomationId()) + .eqIfPresent(MaterialUseRecordDO::getHazardousMakeFlag, reqVO.getHazardousMakeFlag()) + .eqIfPresent(MaterialUseRecordDO::getOperationQuantity, reqVO.getOperationQuantity()) + .eqIfPresent(MaterialUseRecordDO::getBeforeQuantity, reqVO.getBeforeQuantity()) + .eqIfPresent(MaterialUseRecordDO::getAfterQuantity, reqVO.getAfterQuantity()) + .betweenIfPresent(MaterialUseRecordDO::getUseDate, reqVO.getUseDate()) + .eqIfPresent(MaterialUseRecordDO::getUserId, reqVO.getUserId()) + .likeIfPresent(MaterialUseRecordDO::getUserName, reqVO.getUserName()) + .eqIfPresent(MaterialUseRecordDO::getReason, reqVO.getReason()) + .eqIfPresent(MaterialUseRecordDO::getSupervisorId, reqVO.getSupervisorId()) + .likeIfPresent(MaterialUseRecordDO::getSupervisorName, reqVO.getSupervisorName()) + .eqIfPresent(MaterialUseRecordDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(MaterialUseRecordDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseRecordDO::getId)); + } + +} \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInfomationService.java index 36d2d902..a70e9706 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 @@ -121,4 +121,19 @@ public interface MaterialInfomationService { * @param infomationDO 物料实例 */ void updateById(MaterialInfomationDO infomationDO); + + /** + * 根据id获取物料信息 + * + * @param id id + * @return 物料信息 + */ + MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfId(Long id); + + /** + * 批量更新物料信息 + * + * @param infomationDOS 批量更新 + */ + void updateBatch(List infomationDOS); } \ 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 b7b95746..d52203d8 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 @@ -148,4 +148,14 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService materialInfomationMapper.updateById(infomationDO); } + @Override + public MaterialInfomationRespVO getMaterialInfomationWithPdtInfoByInfId(Long id) { + return materialInfomationMapper.selectOneWithPdtInfoByInfId(id); + } + + @Override + public void updateBatch(List infomationDOS) { + materialInfomationMapper.updateBatch(infomationDOS); + } + } \ 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 d4803442..618e6660 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 @@ -117,7 +117,8 @@ public class MaterialInventoryInboundServiceImpl implements MaterialInventoryInb .setPublishStatus(0) .setUsageStatus(0) .setOpenStatus(0) - .setManufacturerDate(batch.getManufacturerDate()).setExpirationDate(batch.getDueDate()); + .setManufacturerDate(batch.getManufacturerDate()).setExpirationDate(batch.getDueDate()) + .setRemainingVolume(product.getStandardCapacity()); // 生成编号 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/MaterialLifecycleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java index c9a37fda..d41bb57d 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 @@ -16,11 +16,13 @@ import com.zt.plat.module.bpm.api.task.BpmTaskApi; import com.zt.plat.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import com.zt.plat.module.bpm.api.task.dto.BpmTaskApproveReqDTO; import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO; +import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileWithUrlRespDTO; import com.zt.plat.module.qms.api.task.BMPCallbackInterface; import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO; import com.zt.plat.module.qms.common.data.service.DataKeyCheckService; import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService; +import com.zt.plat.module.qms.common.service.BusinessFileService; import com.zt.plat.module.qms.enums.QmsBpmConstant; import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; @@ -86,6 +88,8 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , private DictionaryBusinessService dictionaryBusinessService; @Autowired private MaterialProductService materialProductService; + @Autowired + private BusinessFileService businessFileService; @Transactional @Override @@ -249,6 +253,8 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , // 获取明细 List detailRespVOS = materialLifecycleDetailService.getDetailListWithPdtInfoByLfcId(id); respVO.setDetailList(detailRespVOS); + CommonResult> result = businessFileService.getBusinessFileList(id); + respVO.setBusinessFileRet(result.getData()); return respVO; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java index 383d23ca..524ba7a8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java @@ -199,9 +199,10 @@ public class MaterialProductServiceImpl implements MaterialProductService { if (prnCtg != null) { mtrl.setHazardous(prnCtg.getHazardous()) .setStandardMaterialFlag(prnCtg.getStandardMaterialFlag()) - .setStandardSolutionFlag(prnCtg.getStandardSolutionFlag()) - .setInventoryAlarmLevel(MaterialInventoryAlarmLevel.danger.name()); + .setStandardSolutionFlag(prnCtg.getStandardSolutionFlag()); } + if (mtrl.getInventoryAlarmFlag() != null && mtrl.getInventoryAlarmFlag() == 1) + mtrl.setInventoryAlarmLevel(MaterialInventoryAlarmLevel.danger.name()); materialProductMapper.insert(mtrl); // 更新 idPath @@ -341,35 +342,12 @@ public class MaterialProductServiceImpl implements MaterialProductService { for (MaterialProductRespVO vo : voList) { Long val = stockQuantityMap.get(vo.getId()); vo.setInventoryQuantity(BigDecimal.valueOf(val == null ? 0L : val)); - // vo.setInventoryAlarmLevel(getAlarmLevel(vo)); } } return new PageResult<>(voList, pageResult.getTotal()); } - private String getAlarmLevel(MaterialProductRespVO vo) { - String customConfig = vo.getCustomConfig(); - String alarmLevel = null; - if (StrUtil.isNotEmpty(customConfig) && vo.getInventoryAlarmFlag() == 1) { - JSONObject alarmRange = JSONUtil.parseObj(customConfig).getJSONObject("alarmRange"); - if (alarmRange != null) { - // BigDecimal[] safeRange = (BigDecimal[]) alarmRange.get(MaterialInventoryAlarmLevel.safe.name()); - List dangerRange = alarmRange.getJSONArray(MaterialInventoryAlarmLevel.danger.name()).toList(BigDecimal.class); - List warnRange = alarmRange.getJSONArray(MaterialInventoryAlarmLevel.warn.name()).toList(BigDecimal.class); - BigDecimal inventoryQuantity = vo.getInventoryQuantity(); - if (inventoryQuantity.compareTo(dangerRange.get(1)) <= 0) { - alarmLevel = MaterialInventoryAlarmLevel.danger.name(); - } else if (inventoryQuantity.compareTo(warnRange.get(1)) <= 0) { - alarmLevel = MaterialInventoryAlarmLevel.warn.name(); - } else { - alarmLevel = MaterialInventoryAlarmLevel.safe.name(); - } - } - } - return alarmLevel; - } - @Override public List getMaterialProductsByLikeIdPath(Long pdtId) { @@ -390,8 +368,10 @@ public class MaterialProductServiceImpl implements MaterialProductService { if (CollUtil.isEmpty(pdtIds)) return; List pdtDOs = materialProductMapper.selectByIds(pdtIds); if (CollUtil.isEmpty(pdtDOs)) return; + List alarmPdts = pdtDOs.stream().filter(m -> m.getInventoryAlarmFlag() == 1).toList(); + if (CollUtil.isEmpty(alarmPdts)) return; Map stockQuantityMap = materialProductMapper.getStockQuantityByPdtIds(pdtIds); - List updateAlarmLevelPdts = pdtDOs.stream().map(m -> { + List updateAlarmLevelPdts = alarmPdts.stream().map(m -> { String customConfig = m.getCustomConfig(); String alarmLevel = null; if (StrUtil.isNotEmpty(customConfig)) { 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 new file mode 100644 index 00000000..3cc13662 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java @@ -0,0 +1,70 @@ +package com.zt.plat.module.qms.resource.material.service; + +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.dal.dataobject.MaterialUseRecordDetailDO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 使用记录配置关系,用于处理危险品溶液配置关系 Service 接口 + * + * @author 后台管理 + */ +public interface MaterialUseRecordDetailService { + + /** + * 创建使用记录配置关系,用于处理危险品溶液配置关系 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + MaterialUseRecordDetailRespVO createMaterialUseRecordDetail(@Valid MaterialUseRecordDetailSaveReqVO createReqVO); + + /** + * 更新使用记录配置关系,用于处理危险品溶液配置关系 + * + * @param updateReqVO 更新信息 + */ + void updateMaterialUseRecordDetail(@Valid MaterialUseRecordDetailSaveReqVO updateReqVO); + + /** + * 删除使用记录配置关系,用于处理危险品溶液配置关系 + * + * @param id 编号 + */ + void deleteMaterialUseRecordDetail(Long id); + + /** + * 批量删除使用记录配置关系,用于处理危险品溶液配置关系 + * + * @param ids 编号 + */ + void deleteMaterialUseRecordDetailListByIds(List ids); + + /** + * 获得使用记录配置关系,用于处理危险品溶液配置关系 + * + * @param id 编号 + * @return 使用记录配置关系,用于处理危险品溶液配置关系 + */ + MaterialUseRecordDetailDO getMaterialUseRecordDetail(Long id); + + /** + * 获得使用记录配置关系,用于处理危险品溶液配置关系分页 + * + * @param pageReqVO 分页查询 + * @return 使用记录配置关系,用于处理危险品溶液配置关系分页 + */ + PageResult getMaterialUseRecordDetailPage(MaterialUseRecordDetailPageReqVO pageReqVO); + + /** + * 批量保存使用记录配置关系 + * + * @param recordDetailDOS 使用记录配置关系 + */ + void saveBatch(List recordDetailDOS); +} \ 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 new file mode 100644 index 00000000..0952941a --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java @@ -0,0 +1,96 @@ +package com.zt.plat.module.qms.resource.material.service; + +import cn.hutool.core.collection.CollUtil; +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.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.dal.dataobject.MaterialUseRecordDetailDO; +import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialUseRecordDetailMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +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_USE_RECORD_DETAIL_NOT_EXISTS; + +/** + * 使用记录配置关系,用于处理危险品溶液配置关系 Service 实现类 + * + * @author 后台管理 + */ +@Service +@Validated +public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDetailService { + + @Resource + private MaterialUseRecordDetailMapper materialUseRecordDetailMapper; + + @Override + public MaterialUseRecordDetailRespVO createMaterialUseRecordDetail(MaterialUseRecordDetailSaveReqVO createReqVO) { + // 插入 + MaterialUseRecordDetailDO materialUseRecordDetail = BeanUtils.toBean(createReqVO, MaterialUseRecordDetailDO.class); + materialUseRecordDetailMapper.insert(materialUseRecordDetail); + // 返回 + return BeanUtils.toBean(materialUseRecordDetail, MaterialUseRecordDetailRespVO.class); + } + + @Override + public void updateMaterialUseRecordDetail(MaterialUseRecordDetailSaveReqVO updateReqVO) { + // 校验存在 + validateMaterialUseRecordDetailExists(updateReqVO.getId()); + // 更新 + MaterialUseRecordDetailDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUseRecordDetailDO.class); + materialUseRecordDetailMapper.updateById(updateObj); + } + + @Override + public void deleteMaterialUseRecordDetail(Long id) { + // 校验存在 + validateMaterialUseRecordDetailExists(id); + // 删除 + materialUseRecordDetailMapper.deleteById(id); + } + + @Override + public void deleteMaterialUseRecordDetailListByIds(List ids) { + // 校验存在 + validateMaterialUseRecordDetailExists(ids); + // 删除 + materialUseRecordDetailMapper.deleteByIds(ids); + } + + private void validateMaterialUseRecordDetailExists(List ids) { + List list = materialUseRecordDetailMapper.selectByIds(ids); + if (CollUtil.isEmpty(list) || list.size() != ids.size()) { + throw exception(MATERIAL_USE_RECORD_DETAIL_NOT_EXISTS); + } + } + + private void validateMaterialUseRecordDetailExists(Long id) { + if (materialUseRecordDetailMapper.selectById(id) == null) { + throw exception(MATERIAL_USE_RECORD_DETAIL_NOT_EXISTS); + } + } + + @Override + public MaterialUseRecordDetailDO getMaterialUseRecordDetail(Long id) { + return materialUseRecordDetailMapper.selectById(id); + } + + @Override + public PageResult getMaterialUseRecordDetailPage(MaterialUseRecordDetailPageReqVO pageReqVO) { + return materialUseRecordDetailMapper.selectPage(pageReqVO); + } + + @Transactional + @Override + public void saveBatch(List recordDetailDOS) { + materialUseRecordDetailMapper.insertBatch(recordDetailDOS); + } + +} \ 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 new file mode 100644 index 00000000..c404d33e --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordService.java @@ -0,0 +1,69 @@ +package com.zt.plat.module.qms.resource.material.service; + +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.module.qms.resource.material.controller.vo.*; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 使用记录 Service 接口 + * + * @author 后台管理 + */ +public interface MaterialUseRecordService { + + /** + * 创建使用记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + MaterialUseRecordRespVO createMaterialUseRecord(@Valid MaterialUseRecordSaveReqVO createReqVO); + + /** + * 更新使用记录 + * + * @param updateReqVO 更新信息 + */ + void updateMaterialUseRecord(@Valid MaterialUseRecordSaveReqVO updateReqVO); + + /** + * 删除使用记录 + * + * @param id 编号 + */ + void deleteMaterialUseRecord(Long id); + + /** + * 批量删除使用记录 + * + * @param ids 编号 + */ + void deleteMaterialUseRecordListByIds(List ids); + + /** + * 获得使用记录 + * + * @param id 编号 + * @return 使用记录 + */ + MaterialUseRecordDO getMaterialUseRecord(Long id); + + /** + * 获得使用记录分页 + * + * @param pageReqVO 分页查询 + * @return 使用记录分页 + */ + PageResult getMaterialUseRecordPage(MaterialUseRecordPageReqVO pageReqVO); + + /** + * 配置危化品 + * + * @param makeReqVO 创建信息 + * @return 配置后的物料实例 + */ + MaterialInfomationRespVO makeHazardousMaterial(@Valid MaterialHazardousMakeSaveReqVO makeReqVO); +} \ 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 new file mode 100644 index 00000000..50e208e3 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordServiceImpl.java @@ -0,0 +1,192 @@ +package com.zt.plat.module.qms.resource.material.service; + +import cn.hutool.core.collection.CollUtil; +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.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.qms.core.code.SequenceUtil; +import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; +import com.zt.plat.module.qms.resource.material.controller.vo.*; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; +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.MaterialOutboundType; +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.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_USE_RECORD_NOT_EXISTS; + +/** + * 使用记录 Service 实现类 + * + * @author 后台管理 + */ +@Service +@Validated +public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { + + @Resource + private MaterialUseRecordMapper materialUseRecordMapper; + + @Autowired + private MaterialInfomationService materialInfomationService; + + @Autowired + private MaterialProductService materialProductService; + @Autowired + private SequenceUtil sequenceUtil; + @Autowired + private MaterialUseRecordDetailService materialUseRecordDetailService; + @Autowired + private MaterialInventoryOutboundService materialInventoryOutboundService; + + @Transactional + @Override + public MaterialUseRecordRespVO createMaterialUseRecord(MaterialUseRecordSaveReqVO createReqVO) { + Long infomationId = createReqVO.getInfomationId(); + BigDecimal operationQuantity = createReqVO.getOperationQuantity(); + MaterialInfomationDO infomationDO = materialInfomationService.getMaterialInfomation(infomationId); + if (infomationDO == null) throw new ServiceException(1_032_160_000, "物料实例不存在"); + // 使用量不能大于剩余量 + BigDecimal remainingVolume = infomationDO.getRemainingVolume(); + + if (operationQuantity.compareTo(remainingVolume) > 0) throw new ServiceException(1_032_160_000, "使用量不能大于剩余量"); + // 插入 + MaterialUseRecordDO recordDO = BeanUtils.toBean(createReqVO, MaterialUseRecordDO.class); + + Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); + String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); + + recordDO.setUseDate(LocalDateTime.now()).setUserId(loginUserId).setUserName(loginUserNickname); + + materialUseRecordMapper.insert(recordDO); + + // 更新物料剩余量 + infomationDO.setRemainingVolume(remainingVolume.subtract(operationQuantity)); + materialInfomationService.updateById(infomationDO); + // 返回 + return BeanUtils.toBean(recordDO, MaterialUseRecordRespVO.class); + } + + @Override + public void updateMaterialUseRecord(MaterialUseRecordSaveReqVO updateReqVO) { + // 校验存在 + validateMaterialUseRecordExists(updateReqVO.getId()); + // 更新 + MaterialUseRecordDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUseRecordDO.class); + materialUseRecordMapper.updateById(updateObj); + } + + @Transactional + @Override + public void deleteMaterialUseRecord(Long id) { + MaterialUseRecordDO recordDO = materialUseRecordMapper.selectById(id); + if (recordDO == null) throw exception(MATERIAL_USE_RECORD_NOT_EXISTS); + // 删除 + materialUseRecordMapper.deleteById(id); + // 恢复物料余量 + MaterialInfomationDO infomationDO = materialInfomationService.getMaterialInfomation(recordDO.getInfomationId()); + infomationDO.setRemainingVolume(infomationDO.getRemainingVolume().add(recordDO.getOperationQuantity())); + materialInfomationService.updateById(infomationDO); + } + + @Transactional + @Override + public void deleteMaterialUseRecordListByIds(List ids) { + List recordDOS = materialUseRecordMapper.selectByIds(ids); + if (CollUtil.isEmpty(recordDOS) || recordDOS.size() != ids.size()) throw exception(MATERIAL_USE_RECORD_NOT_EXISTS); + // 恢复物料剩余量 + Set infIds = recordDOS.stream().map(MaterialUseRecordDO::getInfomationId).collect(Collectors.toSet()); + List infomationDOS = materialInfomationService.getMaterialInfomationsByIds(new ArrayList<>(infIds)); + if (CollUtil.isEmpty(infomationDOS)) throw new ServiceException(1_032_160_000, "物料实例不存在"); + Map> groupRecordDOS = recordDOS.stream().collect(Collectors.groupingBy(MaterialUseRecordDO::getInfomationId)); + for (MaterialInfomationDO infomationDO : infomationDOS) { + List list = groupRecordDOS.get(infomationDO.getId()); + if (CollUtil.isEmpty(list)) continue; + BigDecimal sum = list.stream().map(MaterialUseRecordDO::getOperationQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + infomationDO.setRemainingVolume(infomationDO.getRemainingVolume().add(sum)); + } + materialInfomationService.updateBatch(infomationDOS); + // 删除 + materialUseRecordMapper.deleteByIds(ids); + } + + private void validateMaterialUseRecordExists(List ids) { + List list = materialUseRecordMapper.selectByIds(ids); + if (CollUtil.isEmpty(list) || list.size() != ids.size()) { + throw exception(MATERIAL_USE_RECORD_NOT_EXISTS); + } + } + + private void validateMaterialUseRecordExists(Long id) { + if (materialUseRecordMapper.selectById(id) == null) { + throw exception(MATERIAL_USE_RECORD_NOT_EXISTS); + } + } + + @Override + public MaterialUseRecordDO getMaterialUseRecord(Long id) { + return materialUseRecordMapper.selectById(id); + } + + @Override + public PageResult getMaterialUseRecordPage(MaterialUseRecordPageReqVO pageReqVO) { + return materialUseRecordMapper.selectPage(pageReqVO); + } + + @Transactional + @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) + .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, "配置的总容量超过了额定容量"); + // 生成物料实例 + MaterialInfomationDO infomationDO = BeanUtils.toBean(product, MaterialInfomationDO.class); + infomationDO + .setId(null).setRemainingVolume(totalOperationQuantity) + .setProductId(productId) + .setCode(sequenceUtil.genCode(MaterialConstants.SEQUENCE_INF_KEY)) + .setManufacturerDate(LocalDate.now()) + .setExpirationDate(LocalDate.now().plusDays(product.getDue())) + // 生成就领用 + .setUsageStatus(1) + .setUseEndFlag(0); + 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())) + .setSuperviseUser(recordDOS.get(0).getSupervisorName()) + .setSuperviseUserId(recordDOS.get(0).getSupervisorId()); + materialInventoryOutboundService.createMaterialInventoryOutbound(outboundSaveReqVO); + return materialInfomationService.getMaterialInfomationWithPdtInfoByInfId(infomationDO.getId()); + } + +} \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.xml new file mode 100644 index 00000000..7bda04e5 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordDetailMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.xml new file mode 100644 index 00000000..91bad766 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file