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 9fe01e7a..22333819 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 @@ -187,14 +187,11 @@ public interface ErrorCodeConstants { ErrorCode MATERIAL_BATCH_ASSIGN_END = new ErrorCode(1_032_160_000, "物料批次已拆分,不可操作"); ErrorCode GONGDUAN_BELONG_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段所属的物料批次不一致"); ErrorCode GONGDUAN_QUANTITY_MATERIAL_BATCH_NOT_EQUAL = new ErrorCode(1_032_160_000, "工段累加数量和批次数量不一致"); - ErrorCode MATERIAL_BATCH_NOT_ASSIGN_FOR_SUBMIT = new ErrorCode(1_032_160_000, "物料批次未拆分,不可提交"); - ErrorCode MATERIAL_BATCH_ASSIGN_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料批次分发不存在"); ErrorCode MATERIAL_INVENTORY_INBOUND_NOT_EXISTS = new ErrorCode(1_032_160_000, "入库,出库不存在"); ErrorCode MATERIAL_INVENTORY_INBOUND_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "入库明细,出库明细等不存在"); ErrorCode SYSTEM_VERSION_MANAGEMENT_NOT_EXISTS = new ErrorCode(1_032_160_000, "客户端版本管理不存在"); - ErrorCode MATERIAL_LOCATION_NOT_EXISTS = new ErrorCode(1_032_160_000, "存放位置不存在"); ErrorCode MATERIAL_INVENTORY_CHECK_NOT_EXISTS = new ErrorCode(1_032_160_000, "库存盘点不存在"); ErrorCode MATERIAL_INVENTORY_CHECK_BATCH_NOT_EXISTS = new ErrorCode(1_032_160_000, "库存盘点项不存在"); ErrorCode MATERIAL_INVENTORY_CHECK_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "库存盘点明细不存在"); @@ -204,6 +201,8 @@ public interface ErrorCodeConstants { 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, "使用配置明细不存在"); + ErrorCode MATERIAL_USE_END_REUSE_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料用完标记或清洗回收不存在"); + ErrorCode MATERIAL_USE_END_REUSE_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/MaterialUseEndReuseController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseEndReuseController.java new file mode 100644 index 00000000..6f5f83ab --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseEndReuseController.java @@ -0,0 +1,114 @@ +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.annotation.FileUploadController; +import com.zt.plat.framework.business.controller.AbstractFileUploadController; +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.MaterialUseEndReusePageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDO; +import com.zt.plat.module.qms.resource.material.service.MaterialUseEndReuseService; +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-end-reuse") +@Validated +@FileUploadController(source = "qms.materialuseendreuse") +public class MaterialUseEndReuseController extends AbstractFileUploadController implements BusinessControllerMarker{ + + static { + FileUploadController annotation = MaterialUseEndReuseController.class.getAnnotation(FileUploadController.class); + if (annotation != null) { + setFileUploadInfo(annotation); + } + } + + @Resource + private MaterialUseEndReuseService materialUseEndReuseService; + + @PostMapping("/add") + @Operation(summary = "新增物料用完标记或清洗回收") +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:create')") + public CommonResult addMaterialUseEndReuse(@Valid @RequestBody MaterialUseEndReuseSaveReqVO createReqVO) { + return success(materialUseEndReuseService.createMaterialUseEndReuse(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新物料用完标记或清洗回收") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:update')") + public CommonResult updateMaterialUseEndReuse(@Valid @RequestBody MaterialUseEndReuseSaveReqVO updateReqVO) { + materialUseEndReuseService.updateMaterialUseEndReuse(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除物料用完标记或清洗回收") + @Parameter(name = "id", description = "编号", required = true) +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:delete')") + public CommonResult deleteMaterialUseEndReuse(@RequestParam("id") Long id) { + materialUseEndReuseService.deleteMaterialUseEndReuse(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除物料用完标记或清洗回收") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:delete')") + public CommonResult deleteMaterialUseEndReuseList(@RequestBody BatchDeleteReqVO req) { + materialUseEndReuseService.deleteMaterialUseEndReuseListByIds(req.getIds()); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得物料用完标记或清洗回收") + @Parameter(name = "id", description = "编号", required = true, example = "1024") +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:query')") + public CommonResult getMaterialUseEndReuse(@RequestParam("id") Long id) { + MaterialUseEndReuseDO materialUseEndReuse = materialUseEndReuseService.getMaterialUseEndReuse(id); + return success(BeanUtils.toBean(materialUseEndReuse, MaterialUseEndReuseRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得物料用完标记或清洗回收分页") +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:query')") + public CommonResult> getMaterialUseEndReusePage(@Valid MaterialUseEndReusePageReqVO pageReqVO) { + PageResult pageResult = materialUseEndReuseService.getPageWithDetail(pageReqVO); + return success(pageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出物料用完标记或清洗回收 Excel") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMaterialUseEndReuseExcel(@Valid MaterialUseEndReusePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = materialUseEndReuseService.getMaterialUseEndReusePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "物料用完标记或清洗回收.xls", "数据", MaterialUseEndReuseRespVO.class, + BeanUtils.toBean(list, MaterialUseEndReuseRespVO.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/MaterialUseEndReuseDetailController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseEndReuseDetailController.java new file mode 100644 index 00000000..80d4f1fa --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialUseEndReuseDetailController.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.MaterialUseEndReuseDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO; +import com.zt.plat.module.qms.resource.material.service.MaterialUseEndReuseDetailService; +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-end-reuse-detail") +@Validated +public class MaterialUseEndReuseDetailController implements BusinessControllerMarker { + + + @Resource + private MaterialUseEndReuseDetailService materialUseEndReuseDetailService; + +// @PostMapping("/create") + @Operation(summary = "创建物料用完标记或清洗回收明细") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:create')") + public CommonResult createMaterialUseEndReuseDetail(@Valid @RequestBody MaterialUseEndReuseDetailSaveReqVO createReqVO) { + return success(materialUseEndReuseDetailService.createMaterialUseEndReuseDetail(createReqVO)); + } + +// @PutMapping("/update") + @Operation(summary = "更新物料用完标记或清洗回收明细") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:update')") + public CommonResult updateMaterialUseEndReuseDetail(@Valid @RequestBody MaterialUseEndReuseDetailSaveReqVO updateReqVO) { + materialUseEndReuseDetailService.updateMaterialUseEndReuseDetail(updateReqVO); + return success(true); + } + +// @DeleteMapping("/delete") + @Operation(summary = "删除物料用完标记或清洗回收明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:delete')") + public CommonResult deleteMaterialUseEndReuseDetail(@RequestParam("id") Long id) { + materialUseEndReuseDetailService.deleteMaterialUseEndReuseDetail(id); + return success(true); + } + +// @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除物料用完标记或清洗回收明细") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:delete')") + public CommonResult deleteMaterialUseEndReuseDetailList(@RequestBody BatchDeleteReqVO req) { + materialUseEndReuseDetailService.deleteMaterialUseEndReuseDetailListByIds(req.getIds()); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得物料用完标记或清洗回收明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:query')") + public CommonResult getMaterialUseEndReuseDetail(@RequestParam("id") Long id) { + MaterialUseEndReuseDetailDO materialUseEndReuseDetail = materialUseEndReuseDetailService.getMaterialUseEndReuseDetail(id); + return success(BeanUtils.toBean(materialUseEndReuseDetail, MaterialUseEndReuseDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得物料用完标记或清洗回收明细分页") +// @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:query')") + public CommonResult> getMaterialUseEndReuseDetailPage(@Valid MaterialUseEndReuseDetailPageReqVO pageReqVO) { + PageResult pageResult = materialUseEndReuseDetailService.getDetailPageWithParentInfoAndMaterialInfo(pageReqVO); + return success(pageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出物料用完标记或清洗回收明细 Excel") + @PreAuthorize("@ss.hasPermission('qms:material-use-end-reuse-detail:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMaterialUseEndReuseDetailExcel(@Valid MaterialUseEndReuseDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = materialUseEndReuseDetailService.getMaterialUseEndReuseDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "物料用完标记或清洗回收明细.xls", "数据", MaterialUseEndReuseDetailRespVO.class, + BeanUtils.toBean(list, MaterialUseEndReuseDetailRespVO.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/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 bc66cac4..5d2db5ab 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 @@ -10,6 +10,7 @@ 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.MaterialUseRecordDetailService; import com.zt.plat.module.qms.resource.material.service.MaterialUseRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -17,6 +18,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -36,6 +38,8 @@ public class MaterialUseRecordController implements BusinessControllerMarker { @Resource private MaterialUseRecordService materialUseRecordService; + @Autowired + private MaterialUseRecordDetailService materialUseRecordDetailService; @PostMapping("/add") @Operation(summary = "新增使用记录") @@ -48,7 +52,7 @@ public class MaterialUseRecordController implements BusinessControllerMarker { @Operation(summary = "配置危化品") // @PreAuthorize("@ss.hasPermission('qms:material-use-record:create')") public CommonResult makeHazardousMaterial(@Valid @RequestBody MaterialHazardousMakeSaveReqVO makeReqVO) { - return success(materialUseRecordService.makeHazardousMaterial(makeReqVO)); + return success(materialUseRecordDetailService.makeHazardousMaterial(makeReqVO)); } @PutMapping("/update") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailPageReqVO.java new file mode 100644 index 00000000..c824dd90 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailPageReqVO.java @@ -0,0 +1,48 @@ +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 MaterialUseEndReuseDetailPageReqVO extends PageParam { + + @Schema(description = "物料分类或大类id") + private Long productId; + + @Schema(description = "业务类型,用完标记,清洗回收", example = "1") + private String businessType; + + @Schema(description = "用完标记人或清洗回收人") + private String operator; + + @Schema(description = "操作人id", example = "6934") + private Long operatorId; + + @Schema(description = "标记日期或清洗回收日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] operatorDate; + + @Schema(description = "主表id", example = "24528") + private Long parentId; + + @Schema(description = "物料id", example = "7953") + private Long infomationId; + + @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/MaterialUseEndReuseDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailRespVO.java new file mode 100644 index 00000000..12d6d88c --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailRespVO.java @@ -0,0 +1,67 @@ +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 MaterialUseEndReuseDetailRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1785") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "主表id", example = "24528") + @ExcelProperty("主表id") + private Long parentId; + + @Schema(description = "业务类型,用完标记,清洗回收", example = "1") + @ExcelProperty("业务类型,用完标记,清洗回收") + private String businessType; + + @Schema(description = "用完标记人或清洗回收人") + @ExcelProperty("用完标记人或清洗回收人") + private String operator; + + @Schema(description = "操作人id", example = "6934") + @ExcelProperty("操作人id") + private Long operatorId; + + @Schema(description = "标记日期或清洗回收日期") + @ExcelProperty("标记日期或清洗回收日期") + private LocalDateTime operatorDate; + + @Schema(description = "物料id", example = "7953") + @ExcelProperty("物料id") + private Long infomationId; + + @Schema(description = "物料名称") + @ExcelProperty("物料名称") + private String infomationName; + + @Schema(description = "物料编号") + @ExcelProperty("物料编号") + private String infomationCode; + + @Schema(description = "型号") + @ExcelProperty("型号") + private String modelNo; + + @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/MaterialUseEndReuseDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailSaveReqVO.java new file mode 100644 index 00000000..e28a6b88 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseDetailSaveReqVO.java @@ -0,0 +1,25 @@ +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 MaterialUseEndReuseDetailSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1785") + private Long id; + + @Schema(description = "主表id", example = "24528") + private Long parentId; + + @Schema(description = "物料id", example = "7953") + private Long infomationId; + + @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/MaterialUseEndReusePageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReusePageReqVO.java new file mode 100644 index 00000000..70d91bd7 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReusePageReqVO.java @@ -0,0 +1,42 @@ +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 MaterialUseEndReusePageReqVO extends PageParam { + + @Schema(description = "物料分类或大类id") + private Long productId; + + @Schema(description = "业务类型,用完标记,清洗回收", example = "1") + private String businessType; + + @Schema(description = "用完标记人或清洗回收人") + private String operator; + + @Schema(description = "操作人id", example = "6934") + private Long operatorId; + + @Schema(description = "标记日期或清洗回收日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] operatorDate; + + @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/MaterialUseEndReuseRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseRespVO.java new file mode 100644 index 00000000..1de50809 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseRespVO.java @@ -0,0 +1,51 @@ +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; +import java.util.List; + +@Schema(description = "管理后台 - 物料用完标记或清洗回收 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MaterialUseEndReuseRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "24274") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "业务类型,用完标记,清洗回收", example = "1") + @ExcelProperty("业务类型,用完标记,清洗回收") + private String businessType; + + @Schema(description = "用完标记人或清洗回收人") + @ExcelProperty("用完标记人或清洗回收人") + private String operator; + + @Schema(description = "操作人id", example = "6934") + @ExcelProperty("操作人id") + private Long operatorId; + + @Schema(description = "标记日期或清洗回收日期") + @ExcelProperty("标记日期或清洗回收日期") + private LocalDateTime operatorDate; + + @Schema(description = "所属部门") + @ExcelProperty("所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "明细数据") + private List children; + +} \ 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/MaterialUseEndReuseSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseSaveReqVO.java new file mode 100644 index 00000000..484a4401 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialUseEndReuseSaveReqVO.java @@ -0,0 +1,41 @@ +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 MaterialUseEndReuseSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "24274") + private Long id; + + @Schema(description = "业务类型,用完标记,清洗回收", example = "1") + @NotNull + private String businessType; + + @Schema(description = "用完标记人或清洗回收人") + private String operator; + + @Schema(description = "操作人id", example = "6934") + private Long operatorId; + + @Schema(description = "标记日期或清洗回收日期") + private LocalDateTime operatorDate; + + @Schema(description = "所属部门") + private String systemDepartmentCode; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "物料ids") + @NotEmpty + private List infomationIds; + +} \ 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/MaterialUseEndReuseDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseEndReuseDO.java new file mode 100644 index 00000000..6fef51d0 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseEndReuseDO.java @@ -0,0 +1,64 @@ +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.time.LocalDateTime; +/** +* 物料用完标记或清洗回收 DO +* +* @author 后台管理 +*/ +@TableName("t_mtrl_use_end_ruse") +@KeySequence("t_mtrl_use_end_ruse_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** +* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO +*/ +public class MaterialUseEndReuseDO extends BusinessBaseDO { + + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 业务类型,用完标记,清洗回收 + */ + @TableField("BSN_TP") + private String businessType; + /** + * 用完标记人或清洗回收人 + */ + @TableField("OPTR") + private String operator; + /** + * 操作人id + */ + @TableField("OPTR_ID") + private Long operatorId; + /** + * 标记日期或清洗回收日期 + */ + @TableField("OPTR_DT") + private LocalDateTime operatorDate; + /** + * 所属部门 + */ + @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/MaterialUseEndReuseDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseEndReuseDetailDO.java new file mode 100644 index 00000000..f6bc23a0 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialUseEndReuseDetailDO.java @@ -0,0 +1,52 @@ +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_end_ruse_dtl") +@KeySequence("t_mtrl_use_end_ruse_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +/** +* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO +*/ +public class MaterialUseEndReuseDetailDO extends BusinessBaseDO { + + + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 主表id + */ + @TableField("PRN_ID") + private Long parentId; + /** + * 物料id + */ + @TableField("INF_ID") + private Long infomationId; + /** + * 所属部门 + */ + @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/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 a23cc9d0..e1d2b4e2 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 @@ -32,7 +32,7 @@ public class MaterialUseRecordDO extends BusinessBaseDO { @TableId(type = IdType.ASSIGN_ID) private Long id; /** - * 物料实例id,1-是;0-否 + * 物料实例id */ @TableField("INF_ID") private Long infomationId; 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 1d29c751..1c40503f 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 @@ -9,13 +9,13 @@ import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigWarehouseLoca 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 com.zt.plat.module.qms.resource.material.dal.dataobject.*; import org.apache.ibatis.annotations.Mapper; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 物料实例 Mapper @@ -152,4 +152,55 @@ public interface MaterialInfomationMapper extends BaseMapperX checkIsExistHazardousMakeInfo(List infIds) { + // 查询作为源物料的配置记录数量 + MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() + .select(MaterialInfomationDO::getId) + .selectCount(MaterialUseRecordDetailDO::getId, "count") + .leftJoin(MaterialUseRecordDetailDO.class, + MaterialUseRecordDetailDO::getInfomationId, + MaterialInfomationDO::getId) + .in(MaterialInfomationDO::getId, infIds) + .groupBy(MaterialInfomationDO::getId); + + // 查询作为目标物料的配置记录数量 + MPJLambdaWrapper wrapper2 = new MPJLambdaWrapper() + .select(MaterialInfomationDO::getId) + .selectCount(MaterialUseRecordDetailDO::getId, "count") + .leftJoin(MaterialUseRecordDetailDO.class, + MaterialUseRecordDetailDO::getTargetInfomationId, + MaterialInfomationDO::getId) + .in(MaterialInfomationDO::getId, infIds) + .groupBy(MaterialInfomationDO::getId); + + List> result1 = selectJoinMaps(wrapper1); + List> result2 = selectJoinMaps(wrapper2); + + // 合并两个查询结果 + Map totalCountMap = new HashMap<>(); + + // 处理第一组结果(作为源物料) + for (Map row : result1) { + Long infId = ((Number) row.get("ID")).longValue(); + Long count = ((Number) row.get("COUNT")).longValue(); + totalCountMap.put(infId, count); + } + + // 处理第二组结果(作为目标物料),累加到总计数中 + for (Map row : result2) { + Long infId = ((Number) row.get("ID")).longValue(); + Long count = ((Number) row.get("COUNT")).longValue(); + totalCountMap.merge(infId, count, Long::sum); + } + + // 构建最终结果 + Map resultMap = new HashMap<>(); + for (Long infId : infIds) { + Long totalCount = totalCountMap.getOrDefault(infId, 0L); + resultMap.put(infId, totalCount > 0); + } + + return resultMap; + } } \ 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/MaterialUseEndReuseDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseDetailMapper.java new file mode 100644 index 00000000..daa1b6f8 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseDetailMapper.java @@ -0,0 +1,63 @@ +package com.zt.plat.module.qms.resource.material.dal.mapper; + +import cn.hutool.core.collection.CollUtil; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailRespVO; +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.MaterialUseEndReuseDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 物料用完标记或清洗回收明细 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface MaterialUseEndReuseDetailMapper extends BaseMapperX { + + default PageResult selectPage(MaterialUseEndReuseDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MaterialUseEndReuseDetailDO::getParentId, reqVO.getParentId()) + .eqIfPresent(MaterialUseEndReuseDetailDO::getInfomationId, reqVO.getInfomationId()) + .eqIfPresent(MaterialUseEndReuseDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(MaterialUseEndReuseDetailDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseEndReuseDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseEndReuseDetailDO::getId)); + } + + default PageResult selectPageWithParentInfoAndMaterialInfo(MaterialUseEndReuseDetailPageReqVO reqVO, List pdtIds) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() + .select(MaterialUseEndReuseDetailDO::getId, MaterialUseEndReuseDetailDO::getCreateTime, + MaterialUseEndReuseDetailDO::getParentId, MaterialUseEndReuseDetailDO::getInfomationId) + .select(MaterialUseEndReuseDO::getBusinessType, MaterialUseEndReuseDO::getOperator, MaterialUseEndReuseDO::getOperatorId, + MaterialUseEndReuseDO::getOperatorDate, MaterialUseEndReuseDO::getRemark) + .selectAs(MaterialInfomationDO::getCode, MaterialUseEndReuseDetailRespVO::getInfomationCode) + .select(MaterialProductDO::getModelNo) + .selectAs(MaterialProductDO::getName, MaterialUseEndReuseDetailRespVO::getInfomationName) + .leftJoin(MaterialUseEndReuseDO.class, MaterialUseEndReuseDO::getId, MaterialUseEndReuseDetailDO::getParentId) + .leftJoin(MaterialInfomationDO.class, MaterialInfomationDO::getId, MaterialUseEndReuseDetailDO::getInfomationId) + .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialInfomationDO::getProductId) + .eqIfExists(MaterialUseEndReuseDetailDO::getParentId, reqVO.getParentId()) + .eqIfExists(MaterialUseEndReuseDetailDO::getInfomationId, reqVO.getInfomationId()) + + .eqIfExists(MaterialUseEndReuseDO::getBusinessType, reqVO.getBusinessType()) + .likeIfExists(MaterialUseEndReuseDO::getOperator, reqVO.getOperator()) + .eqIfExists(MaterialUseEndReuseDO::getOperatorId, reqVO.getOperatorId()) + // .between(MaterialUseEndReuseDO::getOperatorDate, reqVO.getOperatorDate()) + .likeIfExists(MaterialUseEndReuseDO::getRemark, reqVO.getRemark()) + + .in(CollUtil.isNotEmpty(pdtIds), MaterialUseEndReuseDetailDO::getInfomationId, pdtIds) + // .between(MaterialUseEndReuseDetailDO::getCreateTime, reqVO.getCreateTime()) + ; + return selectJoinPage(reqVO, MaterialUseEndReuseDetailRespVO.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/MaterialUseEndReuseMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseMapper.java new file mode 100644 index 00000000..5e2ba4d0 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseMapper.java @@ -0,0 +1,44 @@ +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.MaterialUseEndReusePageReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 物料用完标记或清洗回收 Mapper + * + * @author 后台管理 + */ +@Mapper +public interface MaterialUseEndReuseMapper extends BaseMapperX { + + default PageResult selectPage(MaterialUseEndReusePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MaterialUseEndReuseDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(MaterialUseEndReuseDO::getOperator, reqVO.getOperator()) + .eqIfPresent(MaterialUseEndReuseDO::getOperatorId, reqVO.getOperatorId()) + .betweenIfPresent(MaterialUseEndReuseDO::getOperatorDate, reqVO.getOperatorDate()) + .eqIfPresent(MaterialUseEndReuseDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(MaterialUseEndReuseDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseEndReuseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseEndReuseDO::getId)); + } + + default PageResult selectPage(MaterialUseEndReusePageReqVO reqVO, List pdtIds) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MaterialUseEndReuseDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(MaterialUseEndReuseDO::getOperator, reqVO.getOperator()) + .eqIfPresent(MaterialUseEndReuseDO::getOperatorId, reqVO.getOperatorId()) + .betweenIfPresent(MaterialUseEndReuseDO::getOperatorDate, reqVO.getOperatorDate()) + .eqIfPresent(MaterialUseEndReuseDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfPresent(MaterialUseEndReuseDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MaterialUseEndReuseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialUseEndReuseDO::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/enums/MaterialInfomationOrigin.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialInfomationOrigin.java index ba4d808a..ff555b9d 100644 --- 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 @@ -20,8 +20,8 @@ public enum MaterialInfomationOrigin { this.name = name; } - public static MaterialFlowType fromName(String name) { - for (MaterialFlowType type : MaterialFlowType.values()) { + public static MaterialInfomationOrigin fromName(String name) { + for (MaterialInfomationOrigin type : MaterialInfomationOrigin.values()) { if (type.getName().equals(name)) { return type; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialNormalOperationType.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialNormalOperationType.java new file mode 100644 index 00000000..1dc90c60 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/enums/MaterialNormalOperationType.java @@ -0,0 +1,31 @@ +package com.zt.plat.module.qms.resource.material.enums; + +import lombok.Getter; + +/** + * 物料通用操作类型 + * + */ +@Getter +public enum MaterialNormalOperationType { + usedMark("用完标记"), + + cleanRecycle("清洗回收"), + + ; + + private final String name; + + MaterialNormalOperationType(String name) { + this.name = name; + } + + public static MaterialNormalOperationType fromName(String name) { + for (MaterialNormalOperationType type : MaterialNormalOperationType.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 05ba60f8..8a7ad0de 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 @@ -105,14 +105,6 @@ public interface MaterialInfomationService { */ List getMaterialInfomationsByIds(List infomationIds); - /** - * 更新物料实例领用状态 - * - * @param infomationUpdate 修改 - * @param infIds id集合 - */ - void updateInfomationByInfIds(MaterialInfomationDO infomationUpdate, List infIds); - /** * 保存物料实例 * @@ -180,4 +172,12 @@ public interface MaterialInfomationService { * @return 物料信息 */ List saveMaterialInfomationsByBatInb(Long locationId, BigDecimal reqQuantity, Long gongduanId, MaterialProductDO product, MaterialBatchDO batch); + + /** + * 批量更新物料信息 + * + * @param infomationIds id集合 + * @param materialInfomationDO 批量更新 + */ + void updateByIds(List infomationIds, MaterialInfomationDO materialInfomationDO); } \ 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 3ac31dea..5aa42266 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 @@ -45,9 +45,6 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService private MaterialInfomationMapper materialInfomationMapper; @Autowired private SequenceUtil sequenceUtil; - @Lazy - @Autowired - private MaterialUseRecordDetailService materialUseRecordDetailService; @Override public MaterialInfomationRespVO createMaterialInfomation(MaterialInfomationSaveReqVO createReqVO) { @@ -134,15 +131,10 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService List infomationRespVOS = pageResult.getList(); if (CollUtil.isEmpty(infomationRespVOS)) return pageResult; List infIds = infomationRespVOS.stream().map(MaterialInfomationRespVO::getId).toList(); - List detailsByInfIds = materialUseRecordDetailService.getMaterialUseRecordDetailsByInfIds(infIds); - if (CollUtil.isEmpty(detailsByInfIds)) return pageResult; - Set relatedInfIds = detailsByInfIds.stream() - .flatMap(detail -> Stream.of(detail.getInfomationId(), detail.getTargetInfomationId())) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); + Map isExistHzrdMakeInfo = materialInfomationMapper.checkIsExistHazardousMakeInfo(infIds); for (MaterialInfomationRespVO infomationRespVO : infomationRespVOS) { - infomationRespVO.setExistHazardousMake(relatedInfIds.contains(infomationRespVO.getId())); + infomationRespVO.setExistHazardousMake(isExistHzrdMakeInfo.get(infomationRespVO.getId())); } pageResult.setList(infomationRespVOS); } @@ -160,13 +152,6 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService return materialInfomationMapper.selectByIds(infomationIds); } - @Override - public void updateInfomationByInfIds(MaterialInfomationDO infomationUpdate, List infIds) { - - materialInfomationMapper.update(infomationUpdate, Wrappers.lambdaQuery(MaterialInfomationDO.class) - .in(MaterialInfomationDO::getId, infIds)); - } - @Override public void save(MaterialInfomationDO infomationDO) { materialInfomationMapper.insert(infomationDO); @@ -255,4 +240,10 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService return infomationDOS; } + @Override + public void updateByIds(List infomationIds, MaterialInfomationDO materialInfomationDO) { + materialInfomationMapper.update(materialInfomationDO, Wrappers.lambdaQuery(MaterialInfomationDO.class) + .in(MaterialInfomationDO::getId, infomationIds)); + } + } \ 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/MaterialInventoryOutboundServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryOutboundServiceImpl.java index 5af85cd5..1b418ede 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryOutboundServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialInventoryOutboundServiceImpl.java @@ -11,7 +11,9 @@ import com.zt.plat.module.qms.resource.material.controller.vo.MaterialInventoryO import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryOutboundDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryOutboundDetailDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialInventoryOutboundMapper; +import com.zt.plat.module.qms.resource.material.enums.MaterialOutboundType; import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; import com.zt.plat.module.system.api.user.AdminUserApi; @@ -26,7 +28,9 @@ import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -55,6 +59,8 @@ public class MaterialInventoryOutboundServiceImpl implements MaterialInventoryOu private MaterialInventoryOutboundDetailService materialInventoryOutboundDetailService; @Autowired private MaterialProductService materialProductService; + @Autowired + private MaterialUseRecordService materialUseRecordService; @Transactional @Override @@ -94,9 +100,19 @@ public class MaterialInventoryOutboundServiceImpl implements MaterialInventoryOu .setUsageStatus(1) .setManagerUserId(outboundDO.getApplyUserId()).setManagerUserName(outboundDO.getApplyUser()) .setManagerDepartmentId(outboundDO.getApplyDepartmentId()).setManagerDepartmentName(outboundDO.getApplyDepartment()); - materialInfomationService.updateInfomationByInfIds(infomationUpdate, infIds); - // 更新大类预警级别 + materialInfomationService.updateByIds(infIds, infomationUpdate); + // 如果是危化品领用出库,保存使用记录 List pdtIds = infs.stream().map(MaterialInfomationDO::getProductId).collect(Collectors.toSet()).stream().toList(); + if (MaterialOutboundType.receiveOutbound.getName().equals(createReqVO.getBusinessType())) { + List pdts = materialProductService.getMaterialProductListByPdtIds(pdtIds); + Map productDOMapById = pdts.stream().collect(Collectors.toMap(MaterialProductDO::getId, Function.identity())); + List hzrdInfs = infs.stream().filter(inf -> productDOMapById.get(inf.getProductId()).getHazardous().equals(1)).toList(); + if (CollUtil.isNotEmpty(hzrdInfs)) { + materialUseRecordService.saveBatchByInfsOutb(outboundDO, hzrdInfs); + } + } + + // 更新大类预警级别 materialProductService.updateMaterialProductAlarmLevel(pdtIds); return BeanUtils.toBean(outboundDO, MaterialInventoryOutboundRespVO.class); } 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 524ba7a8..804c3b6c 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 @@ -214,12 +214,29 @@ public class MaterialProductServiceImpl implements MaterialProductService { boolean exists = materialProductMapper.exists(queryWrapperX); if (exists) throw exception(MATERIAL_PRODUCT_CODE_EXISTED); } + + businessFileService.deleteBusinessFileList(createReqVO.getDeleteFileIdList()); + Long newParentId = createReqVO.getParentId(); if (origDO.getParentId().equals(newParentId)) { materialProductMapper.updateById(mtrl); return BeanUtils.toBean(mtrl, MaterialProductRespVO.class); + } else { + // 父节点有变更,更新大类属性 + MaterialProductDO productDO = materialProductMapper.selectById(newParentId); + MaterialProductDO topParent; + if (productDO == null) throw new ServiceException(1_032_160_000, "父级分类不存在"); + if (productDO.getParentId().equals(0L)) { + topParent = productDO; + } else { + String[] pIds = productDO.getIdPath().split("/"); + topParent = materialProductMapper.selectById(pIds[1]); + } + if (topParent == null) throw new ServiceException(1_032_160_000, "顶级分类不存在"); + mtrl.setHazardous(topParent.getHazardous()) + .setStandardMaterialFlag(topParent.getStandardMaterialFlag()) + .setStandardSolutionFlag(topParent.getStandardSolutionFlag()); } - businessFileService.deleteBusinessFileList(createReqVO.getDeleteFileIdList()); // 父节点有变更时更新 idPath } String newIdPath = getIdPath(mtrl); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseDetailService.java new file mode 100644 index 00000000..19b31891 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseDetailService.java @@ -0,0 +1,78 @@ +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.MaterialUseEndReuseDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 物料用完标记或清洗回收明细 Service 接口 + * + * @author 后台管理 + */ +public interface MaterialUseEndReuseDetailService { + + /** + * 创建物料用完标记或清洗回收明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + MaterialUseEndReuseDetailRespVO createMaterialUseEndReuseDetail(@Valid MaterialUseEndReuseDetailSaveReqVO createReqVO); + + /** + * 更新物料用完标记或清洗回收明细 + * + * @param updateReqVO 更新信息 + */ + void updateMaterialUseEndReuseDetail(@Valid MaterialUseEndReuseDetailSaveReqVO updateReqVO); + + /** + * 删除物料用完标记或清洗回收明细 + * + * @param id 编号 + */ + void deleteMaterialUseEndReuseDetail(Long id); + + /** + * 批量删除物料用完标记或清洗回收明细 + * + * @param ids 编号 + */ + void deleteMaterialUseEndReuseDetailListByIds(List ids); + + /** + * 获得物料用完标记或清洗回收明细 + * + * @param id 编号 + * @return 物料用完标记或清洗回收明细 + */ + MaterialUseEndReuseDetailDO getMaterialUseEndReuseDetail(Long id); + + /** + * 获得物料用完标记或清洗回收明细分页 + * + * @param pageReqVO 分页查询 + * @return 物料用完标记或清洗回收明细分页 + */ + PageResult getMaterialUseEndReuseDetailPage(MaterialUseEndReuseDetailPageReqVO pageReqVO); + + /** + * 批量保存物料用完标记或清洗回收明细 + * + * @param detailDOS 物料用完标记或清洗回收明细 + */ + void saveBatch(List detailDOS); + + /** + * 获得物料用完标记或清洗回收明细分页 - 带父级信息和物料信息 + * + * @param pageReqVO 分页查询 + * @return 物料用完标记或清洗回收明细分页 + */ + PageResult getDetailPageWithParentInfoAndMaterialInfo(@Valid MaterialUseEndReuseDetailPageReqVO 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/MaterialUseEndReuseDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseDetailServiceImpl.java new file mode 100644 index 00000000..3211d62c --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseDetailServiceImpl.java @@ -0,0 +1,115 @@ +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.MaterialUseEndReuseDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO; +import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialUseEndReuseDetailMapper; +import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +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_END_REUSE_DETAIL_NOT_EXISTS; + +/** + * 物料用完标记或清洗回收明细 Service 实现类 + * + * @author 后台管理 + */ +@Service +@Validated +public class MaterialUseEndReuseDetailServiceImpl implements MaterialUseEndReuseDetailService { + + @Resource + private MaterialUseEndReuseDetailMapper materialUseEndReuseDetailMapper; + + @Autowired + private MaterialProductService materialProductService; + + @Override + public MaterialUseEndReuseDetailRespVO createMaterialUseEndReuseDetail(MaterialUseEndReuseDetailSaveReqVO createReqVO) { + // 插入 + MaterialUseEndReuseDetailDO materialUseEndReuseDetail = BeanUtils.toBean(createReqVO, MaterialUseEndReuseDetailDO.class); + materialUseEndReuseDetailMapper.insert(materialUseEndReuseDetail); + // 返回 + return BeanUtils.toBean(materialUseEndReuseDetail, MaterialUseEndReuseDetailRespVO.class); + } + + @Override + public void updateMaterialUseEndReuseDetail(MaterialUseEndReuseDetailSaveReqVO updateReqVO) { + // 校验存在 + validateMaterialUseEndReuseDetailExists(updateReqVO.getId()); + // 更新 + MaterialUseEndReuseDetailDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUseEndReuseDetailDO.class); + materialUseEndReuseDetailMapper.updateById(updateObj); + } + + @Override + public void deleteMaterialUseEndReuseDetail(Long id) { + // 校验存在 + validateMaterialUseEndReuseDetailExists(id); + // 删除 + materialUseEndReuseDetailMapper.deleteById(id); + } + + @Override + public void deleteMaterialUseEndReuseDetailListByIds(List ids) { + // 校验存在 + validateMaterialUseEndReuseDetailExists(ids); + // 删除 + materialUseEndReuseDetailMapper.deleteByIds(ids); + } + + private void validateMaterialUseEndReuseDetailExists(List ids) { + List list = materialUseEndReuseDetailMapper.selectByIds(ids); + if (CollUtil.isEmpty(list) || list.size() != ids.size()) { + throw exception(MATERIAL_USE_END_REUSE_DETAIL_NOT_EXISTS); + } + } + + private void validateMaterialUseEndReuseDetailExists(Long id) { + if (materialUseEndReuseDetailMapper.selectById(id) == null) { + throw exception(MATERIAL_USE_END_REUSE_DETAIL_NOT_EXISTS); + } + } + + @Override + public MaterialUseEndReuseDetailDO getMaterialUseEndReuseDetail(Long id) { + return materialUseEndReuseDetailMapper.selectById(id); + } + + @Override + public PageResult getMaterialUseEndReuseDetailPage(MaterialUseEndReuseDetailPageReqVO pageReqVO) { + return materialUseEndReuseDetailMapper.selectPage(pageReqVO); + } + + @Override + public void saveBatch(List detailDOS) { + materialUseEndReuseDetailMapper.insertBatch(detailDOS); + } + + @Override + public PageResult getDetailPageWithParentInfoAndMaterialInfo(MaterialUseEndReuseDetailPageReqVO pageReqVO) { + Long productId = pageReqVO.getProductId(); + PageResult pageResult; + if (productId == null) { + pageResult = materialUseEndReuseDetailMapper.selectPageWithParentInfoAndMaterialInfo(pageReqVO, null); + } else { + List products = materialProductService.getMaterialProductsByLikeIdPath(productId); + if (CollUtil.isEmpty(products)) + return materialUseEndReuseDetailMapper.selectPageWithParentInfoAndMaterialInfo(pageReqVO, null); + List pdtIds = products.stream().map(MaterialProductDO::getId).toList(); + pageResult = materialUseEndReuseDetailMapper.selectPageWithParentInfoAndMaterialInfo(pageReqVO, pdtIds); + } + return pageResult; + } + +} \ 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/MaterialUseEndReuseService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseService.java new file mode 100644 index 00000000..11d00e82 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseService.java @@ -0,0 +1,71 @@ +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.MaterialUseEndReusePageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseSaveReqVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 物料用完标记或清洗回收 Service 接口 + * + * @author 后台管理 + */ +public interface MaterialUseEndReuseService { + + /** + * 创建物料用完标记或清洗回收 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + MaterialUseEndReuseRespVO createMaterialUseEndReuse(@Valid MaterialUseEndReuseSaveReqVO createReqVO); + + /** + * 更新物料用完标记或清洗回收 + * + * @param updateReqVO 更新信息 + */ + void updateMaterialUseEndReuse(@Valid MaterialUseEndReuseSaveReqVO updateReqVO); + + /** + * 删除物料用完标记或清洗回收 + * + * @param id 编号 + */ + void deleteMaterialUseEndReuse(Long id); + + /** + * 批量删除物料用完标记或清洗回收 + * + * @param ids 编号 + */ + void deleteMaterialUseEndReuseListByIds(List ids); + + /** + * 获得物料用完标记或清洗回收 + * + * @param id 编号 + * @return 物料用完标记或清洗回收 + */ + MaterialUseEndReuseDO getMaterialUseEndReuse(Long id); + + /** + * 获得物料用完标记或清洗回收分页 + * + * @param pageReqVO 分页查询 + * @return 物料用完标记或清洗回收分页 + */ + PageResult getMaterialUseEndReusePage(MaterialUseEndReusePageReqVO pageReqVO); + + /** + * 获得物料用完标记或清洗回收分页 - 带明细数据 + * + * @param pageReqVO 分页查询 + * @return 物料用完标记或清洗回收分页 + */ + PageResult getPageWithDetail(@Valid MaterialUseEndReusePageReqVO 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/MaterialUseEndReuseServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseServiceImpl.java new file mode 100644 index 00000000..57f80e21 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseEndReuseServiceImpl.java @@ -0,0 +1,140 @@ +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.module.qms.resource.material.controller.vo.MaterialUseEndReusePageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseSaveReqVO; +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.MaterialUseEndReuseDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO; +import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialUseEndReuseMapper; +import com.zt.plat.module.qms.resource.material.enums.MaterialNormalOperationType; +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.List; + +import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_USE_END_REUSE_NOT_EXISTS; + +/** + * 物料用完标记或清洗回收 Service 实现类 + * + * @author 后台管理 + */ +@Service +@Validated +public class MaterialUseEndReuseServiceImpl implements MaterialUseEndReuseService { + + @Resource + private MaterialUseEndReuseMapper materialUseEndReuseMapper; + + @Autowired + private MaterialUseEndReuseDetailService materialUseEndReuseDetailService; + @Autowired + private MaterialInfomationService materialInfomationService; + @Autowired + private MaterialProductService materialProductService; + + @Transactional + @Override + public MaterialUseEndReuseRespVO createMaterialUseEndReuse(MaterialUseEndReuseSaveReqVO createReqVO) { + List infomationIds = createReqVO.getInfomationIds(); + List infomations = materialInfomationService.getMaterialInfomationsByIds(infomationIds); + if (CollUtil.isEmpty(infomations) || infomations.size() != infomationIds.size()) + throw new ServiceException(1_032_160_000, "物料实例不存在或与传入的数量不匹配"); + // 插入 + MaterialUseEndReuseDO useEndReuseDO = BeanUtils.toBean(createReqVO, MaterialUseEndReuseDO.class); + + // TODO 操作人信息 + + materialUseEndReuseMapper.insert(useEndReuseDO); + + // 保存明细 + List detailDOS = infomationIds.stream().map(infomationId -> + new MaterialUseEndReuseDetailDO().setParentId(useEndReuseDO.getId()).setInfomationId(infomationId)).toList(); + materialUseEndReuseDetailService.saveBatch(detailDOS); + + // 变更物料用完标记状态 + if (MaterialNormalOperationType.usedMark.getName().equals(createReqVO.getBusinessType())) { + materialInfomationService.updateByIds(infomationIds, new MaterialInfomationDO().setUseEndFlag(1)); + } + // 返回 + return BeanUtils.toBean(useEndReuseDO, MaterialUseEndReuseRespVO.class); + } + + @Override + public void updateMaterialUseEndReuse(MaterialUseEndReuseSaveReqVO updateReqVO) { + // 校验存在 + validateMaterialUseEndReuseExists(updateReqVO.getId()); + // 更新 + MaterialUseEndReuseDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUseEndReuseDO.class); + materialUseEndReuseMapper.updateById(updateObj); + } + + @Override + public void deleteMaterialUseEndReuse(Long id) { + // 校验存在 + validateMaterialUseEndReuseExists(id); + // 删除 + materialUseEndReuseMapper.deleteById(id); + } + + @Override + public void deleteMaterialUseEndReuseListByIds(List ids) { + // 校验存在 + validateMaterialUseEndReuseExists(ids); + // 删除 + materialUseEndReuseMapper.deleteByIds(ids); + } + + private void validateMaterialUseEndReuseExists(List ids) { + List list = materialUseEndReuseMapper.selectByIds(ids); + if (CollUtil.isEmpty(list) || list.size() != ids.size()) { + throw exception(MATERIAL_USE_END_REUSE_NOT_EXISTS); + } + } + + private void validateMaterialUseEndReuseExists(Long id) { + if (materialUseEndReuseMapper.selectById(id) == null) { + throw exception(MATERIAL_USE_END_REUSE_NOT_EXISTS); + } + } + + @Override + public MaterialUseEndReuseDO getMaterialUseEndReuse(Long id) { + return materialUseEndReuseMapper.selectById(id); + } + + @Override + public PageResult getMaterialUseEndReusePage(MaterialUseEndReusePageReqVO pageReqVO) { + return materialUseEndReuseMapper.selectPage(pageReqVO); + } + + @Override + public PageResult getPageWithDetail(MaterialUseEndReusePageReqVO pageReqVO) { + Long productId = pageReqVO.getProductId(); + PageResult pageResult; + if (productId == null) { + pageResult = materialUseEndReuseMapper.selectPage(pageReqVO); + } else { + List products = materialProductService.getMaterialProductsByLikeIdPath(productId); + if (CollUtil.isEmpty(products)) { + pageResult = materialUseEndReuseMapper.selectPage(pageReqVO); + } else { + List pdtIds = products.stream().map(MaterialProductDO::getId).toList(); + pageResult = materialUseEndReuseMapper.selectPage(pageReqVO, pdtIds); + } + } + + return null; + } + +} \ 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/MaterialUseRecordDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailService.java index 5986d62e..4af31c64 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 @@ -1,9 +1,7 @@ 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.controller.vo.*; 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; @@ -93,4 +91,12 @@ public interface MaterialUseRecordDetailService { * @return 使用记录详情 */ List getMaterialUseRecordDetailsByInfIds(List infIds); + + /** + * 配置危化品 + * + * @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/MaterialUseRecordDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialUseRecordDetailServiceImpl.java index e509c833..1fc11dcd 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 @@ -3,14 +3,19 @@ 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.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.resource.material.controller.vo.*; 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.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.MaterialUseRecordDetailMapper; +import com.zt.plat.module.qms.resource.material.enums.MaterialOutboundType; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -18,6 +23,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -39,10 +46,15 @@ public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDeta private MaterialUseRecordDetailMapper materialUseRecordDetailMapper; @Autowired private MaterialInfomationService materialInfomationService; - @Lazy @Autowired private MaterialUseRecordService materialUseRecordService; + @Autowired + private MaterialProductService materialProductService; + + @Autowired + private MaterialInventoryOutboundService materialInventoryOutboundService; + @Override public MaterialUseRecordDetailRespVO createMaterialUseRecordDetail(MaterialUseRecordDetailSaveReqVO createReqVO) { // 插入 @@ -176,4 +188,83 @@ public class MaterialUseRecordDetailServiceImpl implements MaterialUseRecordDeta .in(MaterialUseRecordDetailDO::getTargetInfomationId, infIds)); } + @Transactional + @Override + public MaterialInfomationRespVO makeHazardousMaterial(MaterialHazardousMakeSaveReqVO makeReqVO) { + + 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, "使用量不能大于剩余量"); + } + // 保存使用记录 + List recordDOS = saveMaterialUseRecordDOS(infomations, records); + + // 更新物料剩余量 + updateInfomationsRemainingVolume(recordDOS, infomations); + + // 生成物料实例 + MaterialInfomationDO infomationDO = materialInfomationService.saveMaterialInfomationByHzrdMtrlMake(product, totalOperationQuantity, productId); + // 保存配置明细 + List recordDetailDOS = recordDOS.stream().map(record -> new MaterialUseRecordDetailDO() + .setRecordId(record.getId()).setInfomationId(record.getInfomationId()) + .setTargetInfomationId(infomationDO.getId())).toList(); + this.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()); + } + + private void updateInfomationsRemainingVolume(List recordDOS, List infomations) { + 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); + } + + private List saveMaterialUseRecordDOS(List infomations, List records) { + 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(); + materialUseRecordService.saveBatch(recordDOS); + return recordDOS; + } + } \ 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 1631e0d7..0edea002 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 @@ -2,6 +2,8 @@ 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.MaterialInfomationDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInventoryOutboundDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseRecordDO; import jakarta.validation.Valid; @@ -60,14 +62,6 @@ public interface MaterialUseRecordService { */ PageResult getMaterialUseRecordPage(MaterialUseRecordPageReqVO pageReqVO); - /** - * 配置危化品 - * - * @param makeReqVO 创建信息 - * @return 配置后的物料实例 - */ - MaterialInfomationRespVO makeHazardousMaterial(@Valid MaterialHazardousMakeSaveReqVO makeReqVO); - /** * 获得使用记录分页 - 含物料信息 * @@ -83,4 +77,19 @@ public interface MaterialUseRecordService { * @return 使用记录列表 */ List getUseRecordsWithMaterialInfoByIds(List ids); + + /** + * 保存危化品使用记录 - 根据出库信息 + * + * @param outboundDO 出库信息 + * @param hzrdInfs 危化品信息 + */ + void saveBatchByInfsOutb(MaterialInventoryOutboundDO outboundDO, List hzrdInfs); + + /** + * 批量保存使用记录 + * + * @param recordDOS 使用记录 + */ + void saveBatch(List recordDOS); } \ 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 a7bb12f3..7b1cf580 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 @@ -8,10 +8,7 @@ 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.dataobject.*; 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; @@ -47,14 +44,6 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { @Autowired private MaterialInfomationService materialInfomationService; - @Autowired - private MaterialProductService materialProductService; - - @Autowired - private MaterialUseRecordDetailService materialUseRecordDetailService; - @Autowired - private MaterialInventoryOutboundService materialInventoryOutboundService; - @Transactional @Override public MaterialUseRecordRespVO createMaterialUseRecord(MaterialUseRecordSaveReqVO createReqVO) { @@ -156,86 +145,6 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { return materialUseRecordMapper.selectPage(pageReqVO); } - @Transactional - @Override - public MaterialInfomationRespVO makeHazardousMaterial(MaterialHazardousMakeSaveReqVO makeReqVO) { - - 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, "使用量不能大于剩余量"); - } - // 保存使用记录 - List recordDOS = saveMaterialUseRecordDOS(infomations, records); - - // 更新物料剩余量 - updateInfomationsRemainingVolume(recordDOS, infomations); - - // 生成物料实例 - MaterialInfomationDO infomationDO = materialInfomationService.saveMaterialInfomationByHzrdMtrlMake(product, totalOperationQuantity, productId); - // 保存配置明细 - 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()); - } - - - - private void updateInfomationsRemainingVolume(List recordDOS, List infomations) { - 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); - } - - private List saveMaterialUseRecordDOS(List infomations, List records) { - 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); - return recordDOS; - } @Override public PageResult getMaterialUseRecordPageWithInf(MaterialUseRecordPageReqVO pageReqVO) { @@ -248,4 +157,28 @@ public class MaterialUseRecordServiceImpl implements MaterialUseRecordService { return materialUseRecordMapper.selectListWithInf(ids); } + @Override + public void saveBatchByInfsOutb(MaterialInventoryOutboundDO outboundDO, List hzrdInfs) { + List recordDOS = hzrdInfs.stream().map(inf -> { + MaterialUseRecordDO recordDO = new MaterialUseRecordDO(); + recordDO.setInfomationId(inf.getId()) + .setHazardousMakeFlag(0) + .setUserId(outboundDO.getApplyUserId()) + .setUserName(outboundDO.getApplyUser()) + .setUseDate(LocalDateTime.now()) + .setSupervisorId(outboundDO.getSuperviseUserId()) + .setSupervisorName(outboundDO.getSuperviseUser()) + .setOperationQuantity(BigDecimal.ZERO) + .setBeforeQuantity(inf.getRemainingVolume()) + .setAfterQuantity(inf.getRemainingVolume()); + return recordDO; + }).toList(); + materialUseRecordMapper.insertBatch(recordDOS); + } + + @Override + public void saveBatch(List recordDOS) { + materialUseRecordMapper.insertBatch(recordDOS); + } + } \ 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/MaterialUseEndReuseDetailMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseDetailMapper.xml new file mode 100644 index 00000000..d9e582fe --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseDetailMapper.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/MaterialUseEndReuseMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseMapper.xml new file mode 100644 index 00000000..311e202e --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialUseEndReuseMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file