From c812430d7b93af65e36776bce26064d8146eca7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=96=AA=E5=90=8D?= <942005050@qq.com> Date: Tue, 21 Nov 2023 15:17:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E6=96=99=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wms/enums/ErrorCodeConstants.java | 8 + .../IssueRequestDetailController.java | 17 - .../IssueRequestMainController.java | 117 ++++- .../vo/IssueRequestDetailBaseVO.java | 7 +- .../vo/IssueRequestDetailPageReqVO.java | 3 + .../issueRequest/vo/IssueRequestImportVO.java | 14 +- .../vo/IssueRequestMainExcelVO.java | 49 ++ .../issueRequest/IssueRequestMainConvert.java | 14 + .../issueRequest/IssueRequestDetailDO.java | 3 - .../issueRequest/IssueRequestMainDO.java | 4 - .../mysql/issueJob/IssueJobMainMapper.java | 8 + .../IssueRequestDetailMapper.java | 56 +- .../issueRequest/IssueRequestMainMapper.java | 5 + .../IssueRequestDetailService.java | 12 +- .../IssueRequestDetailServiceImpl.java | 93 +++- .../issueRequest/IssueRequestMainService.java | 20 + .../IssueRequestMainServiceImpl.java | 491 ++++++++++++++++-- 17 files changed, 802 insertions(+), 119 deletions(-) diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java index acd8f72f..98287379 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java @@ -552,6 +552,13 @@ public interface ErrorCodeConstants { //发料申请子ErrorCode ErrorCode ISSUE_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_090_001, "发料申请子不存在"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_CLOSE = new ErrorCode(1_000_090_002, "发料申请状态不支持关闭"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_READD = new ErrorCode(1_000_090_003, "发料申请状态不支持重新添加"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_SUBMIT = new ErrorCode(1_000_090_004, "发料申请状态不支持提交"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_REFUSED = new ErrorCode(1_000_090_005, "发料申请状态不支持驳回"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_AGREE = new ErrorCode(1_000_090_006, "发料申请状态不支持审批通过"); + ErrorCode ISSUE_REQUEST_MAIN_CANNOT_HANDLE = new ErrorCode(1_000_090_007, "发料申请状态不支持处理"); + ErrorCode ISSUE_REQUEST_JOB_EXISTS = new ErrorCode(1_000_090_008, "发料申请存在发料任务单"); //发料任务主ErrorCode ErrorCode ISSUE_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_091_000, "发料任务主不存在"); @@ -565,6 +572,7 @@ public interface ErrorCodeConstants { //发料记录子ErrorCode ErrorCode ISSUE_RECORD_DETAIL_NOT_EXISTS = new ErrorCode(1_000_092_001, "发料记录子不存在"); + //生产收料任务主ErrorCode ErrorCode PRODUCTIONRECEIPT_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_093_000, "生产收料任务主不存在"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestDetailController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestDetailController.java index 257ab3c6..98e0d62a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestDetailController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestDetailController.java @@ -105,22 +105,5 @@ public class IssueRequestDetailController { } return success(result); } - - @GetMapping("/export-excel") - @Operation(summary = "导出发料申请子 Excel") - @PreAuthorize("@ss.hasPermission('wms:issue-request-detail:export')") - @OperateLog(type = EXPORT) - public void exportIssueRequestDetailExcel(@Valid IssueRequestDetailExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = issueRequestDetailService.getIssueRequestDetailList(exportReqVO); - // 导出 Excel - List datas = IssueRequestDetailConvert.INSTANCE.convertList02(list); - for(IssueRequestDetailExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } - ExcelUtils.write(response, "发料申请子.xls", "数据", IssueRequestDetailExcelVO.class, datas); - } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java index 91f07a63..eb134ec0 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java @@ -118,6 +118,38 @@ public class IssueRequestMainController { } return success(result); } + + private List getExcelVo(List list, Map mapDropDown) { + String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(13, available); + List resultList = new ArrayList<>(); + // 导出 + for(IssueRequestMainDO mainDO : list) { + List subList = issueRequestDetailService.selectList(mainDO.getId()); + for(IssueRequestDetailDO detailDO : subList) { + IssueRequestMainExcelVO vo = IssueRequestMainConvert.INSTANCE.convert(mainDO, detailDO); + resultList.add(vo); + } + } + return resultList; + } + + @GetMapping("/export-excel-senior") + @Operation(summary = "导出生产计划主 Excel") + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:export')") + @OperateLog(type = EXPORT) + public void exportIssueRequestMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { + List list = issueRequestMainService.getIssueRequestMainList(conditions); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); + resultList.forEach(item -> { + //后端创建个字段作为前端展示的虚拟字段 + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); + ExcelUtils.write(response, "发料申请.xlsx", "发料申请", IssueRequestMainExcelVO.class, resultList, mapDropDown); + } @GetMapping("/export-excel") @Operation(summary = "导出发料申请主 Excel") @@ -126,17 +158,15 @@ public class IssueRequestMainController { public void exportIssueRequestMainExcel(@Valid IssueRequestMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = issueRequestMainService.getIssueRequestMainList(exportReqVO); - // 导出 Excel - List datas = IssueRequestMainConvert.INSTANCE.convertList02(list); - for(IssueRequestMainExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } + //组装vo Map mapDropDown = new HashMap<>(); - String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); - mapDropDown.put(7, uom); - ExcelUtils.write(response, "发料申请主.xls", "数据", IssueRequestMainExcelVO.class, datas,mapDropDown); + List resultList = this.getExcelVo(list, mapDropDown); + resultList.forEach(item -> { + //后端创建个字段作为前端展示的虚拟字段 + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); + ExcelUtils.write(response, "发料申请.xls", "发料申请", IssueRequestMainExcelVO.class, resultList); } @GetMapping("/get-import-template") @@ -146,7 +176,9 @@ public class IssueRequestMainController { List list = new ArrayList<>(); Map mapDropDown = new HashMap<>(); String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); - mapDropDown.put(7, uom); + mapDropDown.put(8, uom); + String[] useOnTheWayLocation = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); + mapDropDown.put(2, useOnTheWayLocation); // 输出 ExcelUtils.write(response, "检验发料申请导入模板.xlsx", "发料申请信息列表", IssueRequestImportVO.class, list, mapDropDown); } @@ -171,12 +203,67 @@ public class IssueRequestMainController { Map returnMap = new HashMap<>(); returnMap.put("errorCount", errorList.size()); if(!errorList.isEmpty()) { - String url = ExcelUtils.writeLocalFile("发料申请基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); + String url = ExcelUtils.writeLocalFile("发料申请信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); returnMap.put("errorFile", url); } return success(returnMap); } + @PutMapping("/close") + @Operation(summary = "关闭") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:close')") + public CommonResult closeIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.closeIssueRequestMain(id); + return success(count > 0); + } + + @PutMapping("/reAdd") + @Operation(summary = "重新添加") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:reAdd')") + public CommonResult reAddIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.reAddIssueRequestMain(id); + return success(count > 0); + } + + @PutMapping("/submit") + @Operation(summary = "提交审批") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:submit')") + public CommonResult submitIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.submitIssueRequestMain(id); + return success(count > 0); + } + + @PutMapping("/refused") + @Operation(summary = "驳回") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:refused')") + public CommonResult refusedIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.refusedIssueRequestMain(id); + return success(count > 0); + } + + @PutMapping("/agree") + @Operation(summary = "审批通过") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:agree')") + public CommonResult agreeIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.agreeIssueRequestMain(id); + return success(count > 0); + } + + @PutMapping("/handle") + @Operation(summary = "处理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:issue-request-main:handle')") + public CommonResult handleIssueRequestMain(@RequestParam("id") Long id) { + Integer count = issueRequestMainService.handleIssueRequestMain(id); + return success(count > 0); + } + + @GetMapping("/getIssueRequestById") @Operation(summary = "APP获得发料申请主子表明细列表") @Parameter(name = "id", description = "编号", required = true, example = "1024") @@ -187,9 +274,9 @@ public class IssueRequestMainController { if(result==null) { return success(result); }; - IssueRequestDetailExportReqVO reqVO = new IssueRequestDetailExportReqVO(); - reqVO.setMasterId(result.getId()); - List issueRequestDetailList = issueRequestDetailService.getIssueRequestDetailList(reqVO); +// IssueRequestDetailExportReqVO reqVO = new IssueRequestDetailExportReqVO(); +// reqVO.setMasterId(result.getId()); + List issueRequestDetailList = issueRequestDetailService.selectList(result.getId()); List vos = IssueRequestDetailConvert.INSTANCE.convertList02(issueRequestDetailList); result.setSubList(vos); return success(result); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailBaseVO.java index 170ffd12..425b3be1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailBaseVO.java @@ -28,22 +28,18 @@ public class IssueRequestDetailBaseVO { private String workStationCode; @Schema(description = "库存状态", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "库存状态不能为空") private String inventoryStatus; @Schema(description = "包装号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "包装号不能为空") private String packingNumber; @Schema(description = "器具号") private String containerNumber; @Schema(description = "批次", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "批次不能为空") private String batch; @Schema(description = "到库位代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "到库位代码不能为空") private String toLocationCode; @Schema(description = "单据号") @@ -93,4 +89,7 @@ public class IssueRequestDetailBaseVO { @Schema(description = "到货主代码") private String toOwnerCode; + @Schema(description = "主表ID") + private Long masterId; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailPageReqVO.java index 3ed5dcfa..1e38142f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestDetailPageReqVO.java @@ -85,4 +85,7 @@ public class IssueRequestDetailPageReqVO extends PageParam { @Schema(description = "到货主代码") private String toOwnerCode; + @Schema(description = "主表ID") + private String masterId; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestImportVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestImportVO.java index cfd7ce2b..f8d7e5ac 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestImportVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestImportVO.java @@ -4,12 +4,17 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; import com.win.module.wms.enums.DictTypeConstants; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** @@ -29,9 +34,14 @@ public class IssueRequestImportVO { @ExcelProperty("车间代码") private String workshopCode; - @ExcelProperty("使用在途库") + @ExcelProperty(value = "使用在途库", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) private String useOnTheWayLocation; + @ExcelProperty("截止时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime dueTime; + @ExcelProperty("生产线代码") private String productionLineCode; @@ -47,4 +57,6 @@ public class IssueRequestImportVO { @ExcelProperty(value = "计量单位", converter = DictConvert.class) @DictFormat(DictTypeConstants.UOM) private String uom; + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java index 028732b2..bc17529c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java @@ -1,5 +1,6 @@ package com.win.module.wms.controller.issueRequest.vo; +import com.win.module.wms.enums.DictTypeConstants; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -93,4 +94,52 @@ public class IssueRequestMainExcelVO { @ExcelProperty("直接生成记录") private String directCreateRecord; + // 子表数据 + @ExcelProperty("生产线代码") + private String productionLineCode; + + @ExcelProperty("工位代码") + private String workStationCode; + + @ExcelProperty("库存状态") + @DictFormat(DictTypeConstants.INVENTORY_STATUS) + private String inventoryStatus; + + @ExcelProperty("包装号") + private String packingNumber; + + @ExcelProperty("器具号") + private String containerNumber; + + @ExcelProperty("批次") + private String batch; + + @ExcelProperty("到库位代码") + private String toLocationCode; + + @ExcelProperty("物品代码") + private String itemCode; + + @ExcelProperty("物品名称") + private String itemName; + + @ExcelProperty("物品描述1") + private String itemDesc1; + + @ExcelProperty("物品描述2") + private String itemDesc2; + + @ExcelProperty("项目代码") + private String projectCode; + + @ExcelProperty("数量") + private String qty; + + @ExcelProperty("计量单位") + private String uom; + + @ExcelProperty("备注子") + private String remarkDetail; + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/issueRequest/IssueRequestMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/issueRequest/IssueRequestMainConvert.java index 29948fce..2c711a00 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/issueRequest/IssueRequestMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/issueRequest/IssueRequestMainConvert.java @@ -2,8 +2,11 @@ package com.win.module.wms.convert.issueRequest; import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.issueRequest.vo.*; +import com.win.module.wms.controller.production.vo.ProductionMainExcelVO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; @@ -42,4 +45,15 @@ public interface IssueRequestMainConvert { }) IssueRequestImportErrorVO convert(IssueRequestMainCreateReqVO mainVo, IssueRequestDetailDO detailDo); + @Mappings({ + @Mapping(source = "mainDO.number", target = "number"), + @Mapping(source = "mainDO.remark", target = "remark"), + @Mapping(source = "mainDO.createTime", target = "createTime"), + @Mapping(source = "mainDO.creator", target = "creator"), + @Mapping(source = "mainDO.updateTime", target = "updateTime"), + @Mapping(source = "mainDO.updater", target = "updater"), + @Mapping(source = "detailDO.remark", target = "remarkDetail"), + }) + IssueRequestMainExcelVO convert(IssueRequestMainDO mainDO, IssueRequestDetailDO detailDO); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestDetailDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestDetailDO.java index 4567b0ca..b9243a42 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestDetailDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestDetailDO.java @@ -43,12 +43,10 @@ public class IssueRequestDetailDO extends BaseDO { * * 枚举 {@link TODO inventory_status 对应的类} */ - @NotBlank private String inventoryStatus; /** * 包装号 */ - @NotBlank private String packingNumber; /** * 器具号 @@ -57,7 +55,6 @@ public class IssueRequestDetailDO extends BaseDO { /** * 批次 */ - @NotBlank private String batch; /** * 到库位代码 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestMainDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestMainDO.java index c03bb3bb..65700fac 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestMainDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/issueRequest/IssueRequestMainDO.java @@ -38,26 +38,22 @@ public class IssueRequestMainDO extends BaseDO { /** * 从仓库代码 */ - @NotBlank private String fromWarehouseCode; /** * 到仓库代码 */ - @NotBlank private String toWarehouseCode; /** * 从库位类型范围 * * 枚举 {@link TODO location_type 对应的类} */ - @NotBlank private String fromLocationTypes; /** * 到库位类型范围 * * 枚举 {@link TODO location_type 对应的类} */ - @NotBlank private String toLocationTypes; /** * 从库区代码范围 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueJob/IssueJobMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueJob/IssueJobMainMapper.java index 9563004a..10eb94a7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueJob/IssueJobMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueJob/IssueJobMainMapper.java @@ -10,7 +10,9 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.issueJob.vo.IssueJobMainExportReqVO; import com.win.module.wms.controller.issueJob.vo.IssueJobMainPageReqVO; import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO; import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; +import com.win.module.wms.enums.order.OrderStatusEnum; import org.apache.ibatis.annotations.Mapper; /** @@ -119,4 +121,10 @@ public interface IssueJobMainMapper extends BaseMapperX { } + default Long selectByRequestNumber(String requestNumber) { + return selectCount(new LambdaQueryWrapperX() + .eq(IssueJobMainDO::getRequestNumber, requestNumber) + .ne(IssueJobMainDO::getStatus, OrderStatusEnum.CLOSED.getCode())); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestDetailMapper.java index 797c63f8..efc08cff 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestDetailMapper.java @@ -10,6 +10,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailExportReqVO; import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailPageReqVO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; import org.apache.ibatis.annotations.Mapper; /** @@ -22,6 +23,7 @@ public interface IssueRequestDetailMapper extends BaseMapperX selectPage(IssueRequestDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(IssueRequestDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(IssueRequestDetailDO::getProductionLineCode, reqVO.getProductionLineCode()) .eqIfPresent(IssueRequestDetailDO::getWorkStationCode, reqVO.getWorkStationCode()) .eqIfPresent(IssueRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) @@ -49,32 +51,36 @@ public interface IssueRequestDetailMapper extends BaseMapperX selectSenior(CustomConditions conditions) { return selectPage(conditions, QueryWrapperUtils.structure(conditions)); } - default List selectList(IssueRequestDetailExportReqVO reqVO) { + default List selectList(Long masterId) { return selectList(new LambdaQueryWrapperX() - .eqIfPresent(IssueRequestDetailDO::getMasterId, reqVO.getMasterId()) - .eqIfPresent(IssueRequestDetailDO::getProductionLineCode, reqVO.getProductionLineCode()) - .eqIfPresent(IssueRequestDetailDO::getWorkStationCode, reqVO.getWorkStationCode()) - .eqIfPresent(IssueRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) - .eqIfPresent(IssueRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) - .eqIfPresent(IssueRequestDetailDO::getContainerNumber, reqVO.getContainerNumber()) - .eqIfPresent(IssueRequestDetailDO::getBatch, reqVO.getBatch()) - .eqIfPresent(IssueRequestDetailDO::getToLocationCode, reqVO.getToLocationCode()) - .eqIfPresent(IssueRequestDetailDO::getNumber, reqVO.getNumber()) - .eqIfPresent(IssueRequestDetailDO::getItemCode, reqVO.getItemCode()) - .eqIfPresent(IssueRequestDetailDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(IssueRequestDetailDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(IssueRequestDetailDO::getCreator, reqVO.getCreator()) - .likeIfPresent(IssueRequestDetailDO::getItemName, reqVO.getItemName()) - .eqIfPresent(IssueRequestDetailDO::getItemDesc1, reqVO.getItemDesc1()) - .eqIfPresent(IssueRequestDetailDO::getItemDesc2, reqVO.getItemDesc2()) - .eqIfPresent(IssueRequestDetailDO::getProjectCode, reqVO.getProjectCode()) - .eqIfPresent(IssueRequestDetailDO::getQty, reqVO.getQty()) - .eqIfPresent(IssueRequestDetailDO::getUom, reqVO.getUom()) - .betweenIfPresent(IssueRequestDetailDO::getUpdateTime, reqVO.getUpdateTime()) - .eqIfPresent(IssueRequestDetailDO::getUpdater, reqVO.getUpdater()) - .eqIfPresent(IssueRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode()) - .eqIfPresent(IssueRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode()) - .orderByDesc(IssueRequestDetailDO::getId)); + .eq(IssueRequestDetailDO::getMasterId, masterId)); } +// default List selectList(IssueRequestDetailExportReqVO reqVO) { +// return selectList(new LambdaQueryWrapperX() +// .eqIfPresent(IssueRequestDetailDO::getMasterId, reqVO.getMasterId()) +// .eqIfPresent(IssueRequestDetailDO::getProductionLineCode, reqVO.getProductionLineCode()) +// .eqIfPresent(IssueRequestDetailDO::getWorkStationCode, reqVO.getWorkStationCode()) +// .eqIfPresent(IssueRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) +// .eqIfPresent(IssueRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) +// .eqIfPresent(IssueRequestDetailDO::getContainerNumber, reqVO.getContainerNumber()) +// .eqIfPresent(IssueRequestDetailDO::getBatch, reqVO.getBatch()) +// .eqIfPresent(IssueRequestDetailDO::getToLocationCode, reqVO.getToLocationCode()) +// .eqIfPresent(IssueRequestDetailDO::getNumber, reqVO.getNumber()) +// .eqIfPresent(IssueRequestDetailDO::getItemCode, reqVO.getItemCode()) +// .eqIfPresent(IssueRequestDetailDO::getRemark, reqVO.getRemark()) +// .betweenIfPresent(IssueRequestDetailDO::getCreateTime, reqVO.getCreateTime()) +// .eqIfPresent(IssueRequestDetailDO::getCreator, reqVO.getCreator()) +// .likeIfPresent(IssueRequestDetailDO::getItemName, reqVO.getItemName()) +// .eqIfPresent(IssueRequestDetailDO::getItemDesc1, reqVO.getItemDesc1()) +// .eqIfPresent(IssueRequestDetailDO::getItemDesc2, reqVO.getItemDesc2()) +// .eqIfPresent(IssueRequestDetailDO::getProjectCode, reqVO.getProjectCode()) +// .eqIfPresent(IssueRequestDetailDO::getQty, reqVO.getQty()) +// .eqIfPresent(IssueRequestDetailDO::getUom, reqVO.getUom()) +// .betweenIfPresent(IssueRequestDetailDO::getUpdateTime, reqVO.getUpdateTime()) +// .eqIfPresent(IssueRequestDetailDO::getUpdater, reqVO.getUpdater()) +// .eqIfPresent(IssueRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode()) +// .eqIfPresent(IssueRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode()) +// .orderByDesc(IssueRequestDetailDO::getId)); +// } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestMainMapper.java index da6b06f2..e59cd184 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/issueRequest/IssueRequestMainMapper.java @@ -10,6 +10,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainExportReqVO; import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainPageReqVO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; import org.apache.ibatis.annotations.Mapper; /** @@ -81,4 +82,8 @@ public interface IssueRequestMainMapper extends BaseMapperX default IssueRequestMainDO selectWorkShopCodeAndUseOnTheWayLocation(String workshopCode, String useOnTheWayLocation){ return selectOne(IssueRequestMainDO::getWorkshopCode,workshopCode, IssueRequestMainDO::getUseOnTheWayLocation,useOnTheWayLocation); }; + + default List selectSeniorList(CustomConditions conditions) { + return selectList(QueryWrapperUtils.structure(conditions)); + } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailService.java index 60822cdc..4cd07182 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailService.java @@ -31,7 +31,7 @@ public interface IssueRequestDetailService { * * @param updateReqVO 更新信息 */ - void updateIssueRequestDetail(@Valid IssueRequestDetailUpdateReqVO updateReqVO); + Integer updateIssueRequestDetail(@Valid IssueRequestDetailUpdateReqVO updateReqVO); /** * 删除发料申请子 @@ -72,12 +72,8 @@ public interface IssueRequestDetailService { */ PageResult getIssueRequestDetailSenior(CustomConditions conditions); - /** - * 获得发料申请子列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 发料申请子列表 - */ - List getIssueRequestDetailList(IssueRequestDetailExportReqVO exportReqVO); +// List getIssueRequestDetailList(IssueRequestDetailExportReqVO exportReqVO); + + List selectList(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailServiceImpl.java index 202525a3..b5320a08 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailServiceImpl.java @@ -1,12 +1,29 @@ package com.win.module.wms.service.issueRequest; +import cn.hutool.core.exceptions.UtilException; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.win.framework.common.pojo.CustomConditions; -import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailCreateReqVO; -import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailExportReqVO; -import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailPageReqVO; -import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailUpdateReqVO; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.issueRequest.vo.*; +import com.win.module.wms.controller.rule.vo.RuleRespVO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; +import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO; +import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; +import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; +import com.win.module.wms.service.businesstype.BusinesstypeService; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.productionline.ProductionlineService; +import com.win.module.wms.service.productionlineitem.ProductionlineitemService; +import com.win.module.wms.service.workstation.WorkstationService; +import com.win.module.wms.util.JobUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; + +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.*; @@ -28,26 +45,43 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Service @Validated public class IssueRequestDetailServiceImpl implements IssueRequestDetailService { - + @Resource + private ProductionlineitemService productionlineitemService; + @Resource + private WorkstationService workstationService; + @Resource + private ProductionlineService productionlineService; + @Resource + private BusinesstypeService businesstypeService; + @Resource + private IssueRequestMainService issueRequestMainService; + @Resource + private JobUtils jobUtils; + @Resource + private ItembasicService itembasicService; @Resource private IssueRequestDetailMapper issueRequestDetailMapper; @Override + @Transactional public Long createIssueRequestDetail(IssueRequestDetailCreateReqVO createReqVO) { // 插入 IssueRequestDetailDO issueRequestDetail = IssueRequestDetailConvert.INSTANCE.convert(createReqVO); + validatorDetail(issueRequestDetail); issueRequestDetailMapper.insert(issueRequestDetail); // 返回 return issueRequestDetail.getId(); } @Override - public void updateIssueRequestDetail(IssueRequestDetailUpdateReqVO updateReqVO) { + @Transactional + public Integer updateIssueRequestDetail(IssueRequestDetailUpdateReqVO updateReqVO) { // 校验存在 validateIssueRequestDetailExists(updateReqVO.getId()); // 更新 IssueRequestDetailDO updateObj = IssueRequestDetailConvert.INSTANCE.convert(updateReqVO); - issueRequestDetailMapper.updateById(updateObj); + validatorDetail(updateObj); + return issueRequestDetailMapper.updateById(updateObj); } @Override @@ -82,9 +116,50 @@ public class IssueRequestDetailServiceImpl implements IssueRequestDetailService public PageResult getIssueRequestDetailSenior(CustomConditions conditions) { return issueRequestDetailMapper.selectSenior(conditions); } +// @Override +// public List getIssueRequestDetailList(IssueRequestDetailExportReqVO exportReqVO) { +// return issueRequestDetailMapper.selectList(exportReqVO); +// } + @Override - public List getIssueRequestDetailList(IssueRequestDetailExportReqVO exportReqVO) { - return issueRequestDetailMapper.selectList(exportReqVO); + public List selectList(Long masterId) { + return issueRequestDetailMapper.selectList(masterId); + } + + private void ifUomSuccess(String itemUom, String uom) { + if (!itemUom.equals(uom)) { + throw new UtilException("提示单位" + uom + "错误,应该是" + itemUom); + } + } + + //子表校验 + private IssueRequestDetailDO validatorDetail(IssueRequestDetailDO issueRequestDetailDO) { + // 主表信息 + IssueRequestMainDO issueRequestMainDO = issueRequestMainService.getIssueRequestMain(issueRequestDetailDO.getMasterId()); + System.out.println("00000000000000:" + issueRequestDetailDO.toString()); + System.out.println("111111111111111:" + issueRequestDetailDO.getMasterId()); + System.out.println("222222222222222:" + issueRequestMainDO.toString()); + // 业务信息 + BusinesstypeDO businesstypeDO = businesstypeService.selectBusinesstypeExist(issueRequestMainDO.getBusinessType()); + // 基础信息 + ItembasicDO itembasicDO = itembasicService.selectItembasic(issueRequestDetailDO.getItemCode()); + // 基础信息赋值 + issueRequestDetailDO.setItemName(itembasicDO.getName()); + issueRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); + issueRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); + issueRequestDetailDO.setProjectCode(itembasicDO.getProject()); + // 校验 业务类型 + jobUtils.ifInType(itembasicDO.getType(), businesstypeDO); + // 检验 计量单位 + this.ifUomSuccess(itembasicDO.getUom(), issueRequestDetailDO.getUom()); + // 检验 生产线 + productionlineService.productionLineCodeExist(issueRequestDetailDO.getProductionLineCode()); + // 检验 工位 + workstationService.selectWorkstationExist(issueRequestDetailDO.getWorkStationCode(), issueRequestMainDO.getWorkshopCode(), issueRequestDetailDO.getProductionLineCode()); + ProductionlineitemDO productionlineitemDO = productionlineitemService.productionLineCodeAndpItemCodeExist(issueRequestDetailDO.getProductionLineCode(), issueRequestDetailDO.getItemCode()); + // 赋值 目标库位代码 + issueRequestDetailDO.setToLocationCode(productionlineitemDO.getRawLocationCode()); + return issueRequestDetailDO; } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainService.java index b583395a..08733817 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainService.java @@ -7,6 +7,7 @@ import com.win.framework.common.pojo.CustomConditions; import com.win.module.wms.controller.issueRequest.vo.*; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; import com.win.framework.common.pojo.PageResult; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; /** * 发料申请主 Service 接口 @@ -79,4 +80,23 @@ public interface IssueRequestMainService { public List importIssueRequestList(List datas, Integer mode, boolean updatePart); + /** + * 获得发料申请主列表, 用于 Excel 导出 + * + * @param conditions 查询条件 + * @return 发料申请列表 + */ + List getIssueRequestMainList(CustomConditions conditions); + + Integer closeIssueRequestMain(Long id); + + Integer reAddIssueRequestMain(Long id); + + Integer submitIssueRequestMain(Long id); + + Integer refusedIssueRequestMain(Long id); + + Integer agreeIssueRequestMain(Long id); + + Integer handleIssueRequestMain(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java index 43af6e44..acb1019a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java @@ -4,30 +4,60 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.exceptions.UtilException; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; import com.win.framework.common.util.validation.ValidationUtils; import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.infra.api.trends.TrendsApi; import com.win.module.infra.enums.TrendsTypeEnum; +import com.win.module.system.api.dict.DictDataApi; import com.win.module.system.api.serialnumber.SerialNumberApi; import com.win.module.system.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO; +import com.win.module.wms.controller.expectout.vo.ExpectoutCreateReqVO; import com.win.module.wms.controller.issueRequest.vo.*; +import com.win.module.wms.controller.purchasereceiptRecord.vo.PurchasereceiptRecordDetailCreateReqVO; +import com.win.module.wms.controller.purchasereceiptRecord.vo.PurchasereceiptRecordMainCreateReqVO; import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.convert.issueRequest.IssueRequestDetailConvert; import com.win.module.wms.convert.issueRequest.IssueRequestMainConvert; +import com.win.module.wms.convert.purchasereceiptRecord.PurchasereceiptRecordDetailConvert; +import com.win.module.wms.convert.purchasereceiptRecord.PurchasereceiptRecordMainConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO; +import com.win.module.wms.dal.dataobject.issueJob.IssueJobDetailDO; +import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO; import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; +import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobDetailDO; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; +import com.win.module.wms.dal.mysql.balance.BalanceMapper; +import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; +import com.win.module.wms.dal.mysql.issueJob.IssueJobDetailMapper; +import com.win.module.wms.dal.mysql.issueJob.IssueJobMainMapper; import com.win.module.wms.dal.mysql.issueRequest.IssueRequestDetailMapper; import com.win.module.wms.dal.mysql.issueRequest.IssueRequestMainMapper; import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.job.JobStatusEnum; +import com.win.module.wms.enums.job.JobStatusState; import com.win.module.wms.enums.request.RequestStatusEnum; +import com.win.module.wms.enums.request.RequestStatusState; +import com.win.module.wms.service.balance.BalanceService; +import com.win.module.wms.service.businesstype.BusinesstypeService; +import com.win.module.wms.service.expectin.ExpectinService; +import com.win.module.wms.service.expectout.ExpectoutService; import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.jobsetting.JobsettingService; import com.win.module.wms.service.productionline.ProductionlineService; import com.win.module.wms.service.productionlineitem.ProductionlineitemService; import com.win.module.wms.service.requestsetting.RequestsettingService; @@ -35,12 +65,15 @@ import com.win.module.wms.service.rule.RuleService; import com.win.module.wms.service.workshop.WorkshopService; import com.win.module.wms.service.workstation.WorkstationService; import com.win.module.wms.util.JobUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.validation.Validator; +import javax.xml.crypto.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; @@ -58,6 +91,24 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class IssueRequestMainServiceImpl implements IssueRequestMainService { + @Resource + private ExpectoutService expectoutService; + @Resource + private ExpectinService expectinService; + @Resource + private IssueJobDetailMapper issueJobDetailMapper; + @Resource + private JobsettingService jobsettingService; + @Resource + private ExpectoutMapper expectoutMapper; + @Resource + private BalanceMapper balanceMapper; + @Resource + private IssueJobMainMapper issueJobMainMapper; + @Resource + private DictDataApi dictDataApi; + @Resource + private BusinesstypeService businesstypeService; @Resource private IssueRequestMainMapper issueRequestMainMapper; @Resource @@ -86,27 +137,29 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { private TrendsApi trendsApi; @Override + @Transactional public Long createIssueRequestMain(IssueRequestMainCreateReqVO createReqVO) { RequestsettingDO requestsettingDO = new RequestsettingDO(); IssueRequestMainDO issueRequestMainDO = validatorToCreate(createReqVO,requestsettingDO); //调用自动执行方法 if(RequestStatusEnum.HANDLING.getCode().equals(issueRequestMainDO.getStatus())) { - + this.generateJob(issueRequestMainDO, issueRequestDetailMapper.selectList(issueRequestMainDO.getId())); } - trendsApi.createTrends(requestsettingDO.getId(), "IssueRequest", "增加了发料申请", TrendsTypeEnum.CREATE); + trendsApi.createTrends(issueRequestMainDO.getId(), "IssueRequest", "增加了发料申请", TrendsTypeEnum.CREATE); return issueRequestMainDO.getId(); } @Override + @Transactional public void updateIssueRequestMain(IssueRequestMainUpdateReqVO updateReqVO) { RequestsettingDO requestsettingDO = new RequestsettingDO(); // 校验存在 validateIssueRequestMainExists(updateReqVO.getId()); IssueRequestMainDO issueRequestMainDO = validatorToUpdate(updateReqVO, requestsettingDO); if(RequestStatusEnum.HANDLING.getCode().equals(issueRequestMainDO.getStatus())) { - + this.generateJob(issueRequestMainDO, issueRequestDetailMapper.selectList(issueRequestMainDO.getId())); } - trendsApi.createTrends(requestsettingDO.getId(), "IssueRequest", "增加了发料申请", TrendsTypeEnum.CREATE); + trendsApi.createTrends(issueRequestMainDO.getId(), "IssueRequest", "更新了发料申请", TrendsTypeEnum.UPDATE); } @Override @@ -117,10 +170,12 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { issueRequestMainMapper.deleteById(id); } - private void validateIssueRequestMainExists(Long id) { - if (issueRequestMainMapper.selectById(id) == null) { + private IssueRequestMainDO validateIssueRequestMainExists(Long id) { + IssueRequestMainDO issueRequestMainDO = issueRequestMainMapper.selectById(id); + if (issueRequestMainDO == null) { throw exception(ISSUE_REQUEST_MAIN_NOT_EXISTS); } + return issueRequestMainDO; } private void validateIssueRequestDetailExists(Long id) { @@ -180,9 +235,9 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { if (CollUtil.isEmpty(datas)) { throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); } + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest"); List errorList = new ArrayList<>(); datas.forEach(createReqVO -> { - BusinesstypeDO businesstypeDO = new BusinesstypeDO(); IssueRequestMainDO mainDo = IssueRequestMainConvert.INSTANCE.convert(createReqVO); String messageMain = validateIssueRequestMainImport(mainDo, businesstypeDO); List subList = createReqVO.getSubList(); @@ -191,7 +246,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { boolean flag = true; for (IssueRequestDetailDO detailDO : subDOList) { String messageDetail = validateIssueRequestDetailImport(detailDO, mainDo, businesstypeDO); - if (!messageMain.isEmpty() || messageDetail.isEmpty()) { + if (!messageMain.isEmpty() || !messageDetail.isEmpty()) { IssueRequestImportErrorVO importErrorVO = IssueRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); importErrorVO.setImportStatus("失败"); messageMain = messageMain + messageDetail; @@ -216,6 +271,11 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { return errorList; } + @Override + public List getIssueRequestMainList(CustomConditions conditions) { + return issueRequestMainMapper.selectSeniorList(conditions); + } + /** * 主表校验导入,并赋值一些参数 * @@ -268,8 +328,16 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { StringBuilder message = new StringBuilder(); try { ItembasicDO itembasicDO = this.validatorItembasic(detailDo.getItemCode()); + // 赋值物品相关信息 + detailDo.setItemName(itembasicDO.getName()); + detailDo.setItemDesc1(itembasicDO.getDesc1()); + detailDo.setItemDesc2(itembasicDO.getDesc2()); + detailDo.setProjectCode(itembasicDO.getProject()); try { this.validatorIfInType(itembasicDO.getType(), businesstypeDO); + if (!itembasicDO.getUom().equals(detailDo.getUom())) { + message.append("计量单位【").append(dictDataApi.selectDictValue(detailDo.getUom()).getLabel()).append("】错误,应该是【").append(dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel()).append("】").append(","); + } } catch (Exception ex) { message.append(ex.getMessage()).append(","); } @@ -302,7 +370,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { if (grounding == null) { message.append("未查找到该条上架策略"); } else { - JSONObject json = JSONUtil.parseObj(grounding); + JSONObject json = JSONUtil.parseObj(grounding.getConfiguration()); String locationCode = json.get("LocationCode").toString(); try { this.ifLocationCodeInRule(detailDo.getItemCode(), detailDo.getToLocationCode(), locationCode); @@ -320,7 +388,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { //新增方法(主和子) private IssueRequestMainDO validatorToCreate(IssueRequestMainCreateReqVO createReqVO,RequestsettingDO requestsettingDO) { - BusinesstypeDO businesstypeDO = new BusinesstypeDO(); + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest"); IssueRequestMainDO issueRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); //子表校验 List subList = createReqVO.getSubList(); @@ -334,23 +402,24 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { for (IssueRequestDetailDO issueRequestDetailDO : subDOList) { issueRequestDetailDO.setMasterId(issueRequestMainDO.getId()); issueRequestDetailDO.setNumber(issueRequestMainDO.getNumber()); + issueRequestDetailDO.setInventoryStatus(businesstypeDO.getOutInventoryStatuses()); } issueRequestDetailMapper.insertBatch(subDOList); return issueRequestMainDO; } - //修改方法(主和子) + //修改方法(主) private IssueRequestMainDO validatorToUpdate(IssueRequestMainUpdateReqVO updateReqVO,RequestsettingDO requestsettingDO) { - BusinesstypeDO businesstypeDO = new BusinesstypeDO(); + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest"); IssueRequestMainDO issueRequestMainDO = validateMainMethod(updateReqVO,businesstypeDO,requestsettingDO); //子表校验 - List subList = updateReqVO.getSubList(); - List subDOList = IssueRequestDetailConvert.INSTANCE.convertList05(subList); - for (IssueRequestDetailDO issueRequestDetailDO : subDOList) { - validateDetailMethod(issueRequestDetailDO,businesstypeDO,issueRequestMainDO); - } +// List subList = updateReqVO.getSubList(); +// List subDOList = IssueRequestDetailConvert.INSTANCE.convertList05(subList); +// for (IssueRequestDetailDO issueRequestDetailDO : subDOList) { +// validateDetailMethod(issueRequestDetailDO,businesstypeDO,issueRequestMainDO); +// } issueRequestMainMapper.updateById(issueRequestMainDO); - issueRequestDetailMapper.updateBatch(subDOList); +// issueRequestDetailMapper.updateBatch(subDOList); return issueRequestMainDO; } @@ -376,21 +445,25 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { //校验子表公共方法(适用于新增/修改) private void validateDetailMethod(IssueRequestDetailDO issueRequestDetailDO,BusinesstypeDO businesstypeDO,IssueRequestMainDO issueRequestMainDO) { ItembasicDO itembasicDO = validatorItembasic(issueRequestDetailDO.getItemCode()); + // 基础信息赋值 + issueRequestDetailDO.setItemName(itembasicDO.getName()); + issueRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); + issueRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); + issueRequestDetailDO.setProjectCode(itembasicDO.getProject()); this.validatorIfInType(itembasicDO.getType(), businesstypeDO); this.ifUomSuccess(itembasicDO.getUom(), issueRequestDetailDO.getUom()); - ProductionlineDO productionlineDO = validatorProductionLineCode(issueRequestDetailDO.getProductionLineCode()); - issueRequestDetailDO.setToLocationCode(productionlineDO.getRawLocationCode()); - WorkstationDO workstationDO = validatorWorkstation(issueRequestDetailDO.getWorkStationCode(), issueRequestMainDO.getWorkshopCode(), issueRequestDetailDO.getProductionLineCode()); - issueRequestDetailDO.setToLocationCode(workstationDO.getRawLocationCode()); - this.validatorProductionLineCodeAndpItemCodeExist(issueRequestDetailDO.getProductionLineCode(), issueRequestDetailDO.getItemCode()); - RuleRespVO grounding = ruleService.grounding(null, null, null, null, null, null, issueRequestDetailDO.getItemCode(), null, null, null, null, null, null); - if (grounding == null) { - throw exception(555, "未查找到该条上架策略"); - } else { - JSONObject json = JSONUtil.parseObj(grounding); - String locationCode = json.get("LocationCode").toString(); - this.ifLocationCodeInRule(issueRequestDetailDO.getItemCode(), issueRequestDetailDO.getToLocationCode(), locationCode); - } + validatorProductionLineCode(issueRequestDetailDO.getProductionLineCode()); + validatorWorkstation(issueRequestDetailDO.getWorkStationCode(), issueRequestMainDO.getWorkshopCode(), issueRequestDetailDO.getProductionLineCode()); + ProductionlineitemDO productionlineitemDO = this.validatorProductionLineCodeAndpItemCodeExist(issueRequestDetailDO.getProductionLineCode(), issueRequestDetailDO.getItemCode()); + issueRequestDetailDO.setToLocationCode(productionlineitemDO.getRawLocationCode()); +// RuleRespVO grounding = ruleService.grounding(null, null, null, null, null, null, issueRequestDetailDO.getItemCode(), null, null, null, null, null, null); +// if (grounding == null) { +// throw exception(555, "未查找到该条上架策略"); +// } else { +// JSONObject json = JSONUtil.parseObj(grounding.getConfiguration()); +// String locationCode = json.get("LocationCode").toString(); +// this.ifLocationCodeInRule(issueRequestDetailDO.getItemCode(), issueRequestDetailDO.getToLocationCode(), locationCode); +// } } private void validatorWorkshop(String workshopCode) { @@ -414,7 +487,359 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { return workstationService.selectWorkstationExist(workStationCode, workshopCode, productionLineCode); } - private void validatorProductionLineCodeAndpItemCodeExist(String productionLineCode, String itemCode) { - productionlineitemService.productionLineCodeAndpItemCodeExist(productionLineCode, itemCode); + private ProductionlineitemDO validatorProductionLineCodeAndpItemCodeExist(String productionLineCode, String itemCode) { + return productionlineitemService.productionLineCodeAndpItemCodeExist(productionLineCode, itemCode); + } + + @Override + @Transactional + public Integer closeIssueRequestMain(Long id) { + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + // 校验存在存在下级单据 + Long count = issueJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(ISSUE_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.close(); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_CLOSE); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "issueRequest", "关闭了发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer reAddIssueRequestMain(Long id) { + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + // 校验存在存在下级单据 + Long count = issueJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(ISSUE_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.reAdd(); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_READD); + } + mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录 + trendsApi.createTrends(id, "issueRequest", "打开了发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer submitIssueRequestMain(Long id) { + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_SUBMIT); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, issueRequestDetailMapper.selectList(mainDO.getId())); + } + trendsApi.createTrends(id, "issueRequest", "提交了发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer refusedIssueRequestMain(Long id) { + // 校验存在 + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.refused(); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_REFUSED); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + trendsApi.createTrends(id, "issueRequest", "驳回了采购发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer agreeIssueRequestMain(Long id) { + // 校验存在 + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_AGREE); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, issueRequestDetailMapper.selectList(mainDO.getId())); + } + trendsApi.createTrends(id, "issueRequest", "审批通过了发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer handleIssueRequestMain(Long id) { + // 校验存在 + IssueRequestMainDO mainDO = validateIssueRequestMainExists(id); + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.handle(); + if(!flag) { + throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_HANDLE); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用执行方法 + this.generateJob(mainDO, issueRequestDetailMapper.selectList(mainDO.getId())); + trendsApi.createTrends(id, "issueRequest", "执行了发料申请", TrendsTypeEnum.UPDATE); + return issueRequestMainMapper.updateById(mainDO); + } + + /** + * 创建任务 OR 创建记录 + * @param mainDO + * @param detailDO + */ + private void generateJob (IssueRequestMainDO mainDO, List detailDO) { + //跳过任务直接生成记录 + if("TRUE".equals(mainDO.getDirectCreateRecord())) { +// PurchasereceiptRecordMainCreateReqVO purchasereceiptRecordMainCreateReqVO = new PurchasereceiptRecordMainCreateReqVO(); +// BeanUtils.copyProperties(mainDO, purchasereceiptRecordMainCreateReqVO); +// purchasereceiptRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); +// String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_RECORD.getCode()); +// purchasereceiptRecordMainCreateReqVO.setNumber(number); +// //增加业务类型 +// BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchaseReceiptRecord"); +// purchasereceiptRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); +// purchasereceiptRecordMainMapper.insert(PurchasereceiptRecordMainConvert.INSTANCE.convert(purchasereceiptRecordMainCreateReqVO)); +// for(PurchasereceiptRequestDetailDO purchasereceiptRequestDetailDO : detailDOList) { +// PurchasereceiptRecordDetailCreateReqVO purchasereceiptRecordDetailCreateReqVO = new PurchasereceiptRecordDetailCreateReqVO(); +// BeanUtils.copyProperties(purchasereceiptRequestDetailDO, purchasereceiptRecordDetailCreateReqVO); +// purchasereceiptRecordDetailCreateReqVO.setNumber(number); +// purchasereceiptRecordDetailMapper.insert(PurchasereceiptRecordDetailConvert.INSTANCE.convert(purchasereceiptRecordDetailCreateReqVO)); +// } +// return; + } + // 任务主表信息 + IssueJobMainDO issueJobMainDO = new IssueJobMainDO(); + issueJobMainDO.setRequestNumber(mainDO.getNumber()); + issueJobMainDO.setWorkShopCode(mainDO.getWorkshopCode()); + issueJobMainDO.setUseOnTheWayLocation(mainDO.getUseOnTheWayLocation()); + issueJobMainDO.setFromWarehouseCode(mainDO.getFromWarehouseCode()); + issueJobMainDO.setToWarehouseCode(mainDO.getToWarehouseCode()); + issueJobMainDO.setRequestTime(mainDO.getRequestTime()); + issueJobMainDO.setRequestDueTime(mainDO.getDueTime()); + issueJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); + issueJobMainDO.setDepartmentCode(mainDO.getDepartmentCode()); + issueJobMainDO.setFromLocationTypes(mainDO.getFromLocationTypes()); + issueJobMainDO.setToLocationTypes(mainDO.getToLocationTypes()); + String number = serialNumberApi.generateCode(RuleCodeEnum.ISSUE_JOB.getCode()); + issueJobMainDO.setNumber(number); + issueJobMainDO.setBusinessType(mainDO.getBusinessType()); + issueJobMainDO.setCreateTime(LocalDateTime.now()); + issueJobMainDO.setFromAreaCodes(mainDO.getFromAreaCodes()); + issueJobMainDO.setToAreaCodes(mainDO.getToAreaCodes()); + issueJobMainDO.setId(null); + // 获取任务单据设置 + JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("IssueJob"); + issueJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); + issueJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); + issueJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); + issueJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); + issueJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); + issueJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); + issueJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); + issueJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); + issueJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); + issueJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); + issueJobMainMapper.insert(issueJobMainDO); + + List issueJobDetailDOList = new ArrayList<>(); + List expectinCreateReqVOList = new ArrayList<>(); + List expectoutCreateReqVOList = new ArrayList<>(); + // 根据发料申请子表数据进行分析 + detailDO.forEach(item -> { + // 批次策略 + RuleRespVO ruleRespVOBatch = ruleService.batch(null, null,null,null,null,item.getProjectCode(),item.getItemCode()); + JSONObject jsonObjectBatch = JSONUtil.parseObj(ruleRespVOBatch.getConfiguration()); + // 下架策略 + RuleRespVO ruleRespVOOffShelf = ruleService.offShelf(null,null,null,null,null,item.getProjectCode(),item.getItemCode(),null,null,null); + JSONObject jsonObjectOffShelf = JSONUtil.parseObj(ruleRespVOOffShelf.getConfiguration()); + // 查询库存余额 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("item_code", "batch", "SUM(qty) as qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "produce_date", "arrive_date"); + queryWrapper.eq("item_code", item.getItemCode()); + queryWrapper.eq("inventory_status", item.getInventoryStatus()); + // 根据下架策略 作为查询库存余额条件 + // 仓库 + if (jsonObjectOffShelf.get("WarehouseCode") != null && !jsonObjectOffShelf.get("WarehouseCode").equals("")) { + queryWrapper.eq("warehouse_code", jsonObjectOffShelf.get("WarehouseCode")); + } + // 库区 + if (jsonObjectOffShelf.get("AreaCode") != null && !jsonObjectOffShelf.get("AreaCode").equals("")) { + queryWrapper.eq("area_code", jsonObjectOffShelf.get("AreaCode")); + } + // 库位组 + if (jsonObjectOffShelf.get("LocationGroupCode") != null && !jsonObjectOffShelf.get("LocationGroupCode").equals("")) { + queryWrapper.eq("location_group_code", jsonObjectOffShelf.get("LocationGroupCode")); + } + // 库位 + if (jsonObjectOffShelf.get("LocationCode") != null && !jsonObjectOffShelf.get("LocationCode").equals("")) { + queryWrapper.eq("location_code", jsonObjectOffShelf.get("LocationCode")); + } + // 根据下架策略 作为查询库存余额分组 + // 发料包装类型——按 包装 + if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("1")) { + queryWrapper.groupBy("packing_number"); + } + // 发料包装类型——按 容器 + if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("2")) { + queryWrapper.groupBy("container_number"); + } + // 发料包装类型——按 单件 + if (jsonObjectOffShelf.get("IssueStorageType") != null && jsonObjectOffShelf.get("IssueStorageType").equals("3")) { + queryWrapper.groupBy("item_code", "batch", "qty", "packing_number", "container_number", "warehouse_code", "area_code", "location_group_code", "location_code", "expire_date", "produce_date", "arrive_date"); + } + // 根据批次策略 作为查询库存余额排序 + // 批次类型——按 生产时间 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("0")) { + // ASC = 0,正向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) { + queryWrapper.orderByAsc("produce_date"); + } + // DESC = 1,逆向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) { + queryWrapper.orderByDesc("produce_date"); + } + } + // 批次类型——按 到货时间 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("1")) { + // ASC = 0,正向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) { + queryWrapper.orderByAsc("arrive_date"); + } + // DESC = 1,逆向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) { + queryWrapper.orderByDesc("arrive_date"); + } + } + // 批次类型——按 失效时间 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("2")) { + // ASC = 0,正向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) { + queryWrapper.orderByAsc("expire_date"); + } + // DESC = 1,逆向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) { + queryWrapper.orderByDesc("expire_date"); + } + } + // 批次类型——按 供应商批次 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("3")) { +// TODO: 供应商批次 ??? 不知道怎么搞了 + } + // 批次类型——按 供应商优先级 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("4")) { +// TODO: 供应商优先级 ??? 不知道怎么搞了 + } + // 批次类型——按 其它批次 + if (jsonObjectBatch.get("BatchType") != null && jsonObjectBatch.get("BatchType").equals("5")) { + // ASC = 0,正向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("0")) { + queryWrapper.orderByAsc("batch"); + } + // DESC = 1,逆向 + if (jsonObjectBatch.get("BatchDirection") != null && jsonObjectBatch.get("BatchDirection").equals("1")) { + queryWrapper.orderByDesc("batch"); + } + } + // 数量排序方向 正向 + if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("ASC")) { + queryWrapper.orderByAsc("qty"); + } + // 数量排序方向 逆向 + if (jsonObjectOffShelf.get("QtyOrderDirection") != null && jsonObjectOffShelf.get("QtyOrderDirection").equals("DESC")) { + queryWrapper.orderByDesc("qty"); + } + + // 任务子表数据 + List balanceDOListJob = new ArrayList<>(); + List balanceDOList = balanceMapper.selectList(queryWrapper); + BigDecimal countQty = new BigDecimal(0.000000); + for (BalanceDO balanceDO: balanceDOList) { + // 查询 预计出 求和 数量 +// TODO: 后续完善 根据 管理精度查询 + QueryWrapper queryWrapperExpectout = new QueryWrapper(); + queryWrapperExpectout.select("SUM(qty) as qty"); + queryWrapperExpectout.eq("item_code", balanceDO.getItemCode()); + if (balanceDO.getPackingNumber() != null && !balanceDO.getPackingNumber().equals("")) queryWrapperExpectout.eq("packing_number", balanceDO.getPackingNumber()); + if (balanceDO.getBatch() != null && !balanceDO.getBatch().equals("")) queryWrapperExpectout.eq("batch", balanceDO.getBatch()); + queryWrapperExpectout.groupBy("item_code","packing_number", "batch"); + ExpectoutDO expectoutDO = expectoutMapper.selectOne(queryWrapperExpectout); + BigDecimal countQtyExpectout = new BigDecimal(0.000000); + if (expectoutDO != null) { + countQtyExpectout = expectoutDO.getQty(); + } + // balanceDO.getQty().subtract(countQtyExpectout) 扣减预计出数量 + countQty = countQty.add(balanceDO.getQty().subtract(countQtyExpectout)); + balanceDOListJob.add(balanceDO); + // 数据列表循环累加 直到总和大于等于当前物品的qty {countQty >= balanceDO.getQty()} + if (countQty.compareTo(item.getQty()) != -1) { + break; + } + } + // 根据 查询出所需数据 解析成 任务子表数据 + balanceDOListJob.forEach(balanceDOItem -> { + IssueJobDetailDO issueJobDetailDO = new IssueJobDetailDO(); + issueJobDetailDO.setId(null); + issueJobDetailDO.setProductionLineCode(item.getProductionLineCode()); + issueJobDetailDO.setWorkStationCode(item.getWorkStationCode()); + issueJobDetailDO.setOnTheWayLocationCode(issueJobDetailDO.getOnTheWayLocationCode()); + issueJobDetailDO.setPackingNumber(balanceDOItem.getPackingNumber()); + issueJobDetailDO.setContainerNumber(balanceDOItem.getContainerNumber()); + issueJobDetailDO.setBatch(balanceDOItem.getBatch()); + issueJobDetailDO.setFromLocationCode(balanceDOItem.getLocationCode()); + issueJobDetailDO.setToLocationCode(item.getToLocationCode()); + issueJobDetailDO.setItemCode(item.getItemCode()); + issueJobDetailDO.setItemName(item.getItemName()); + issueJobDetailDO.setItemDesc1(item.getItemDesc1()); + issueJobDetailDO.setItemDesc2(item.getItemDesc2()); + issueJobDetailDO.setProjectCode(item.getProjectCode()); + issueJobDetailDO.setQty(balanceDOItem.getQty()); + issueJobDetailDO.setUom(item.getUom()); + issueJobDetailDO.setToOwnerCode(item.getToOwnerCode()); + issueJobDetailDO.setFromOwnerCode(item.getFromOwnerCode()); + issueJobDetailDO.setNumber(issueJobMainDO.getNumber()); + issueJobDetailDO.setMasterId(issueJobMainDO.getId()); + issueJobDetailDO.setInventoryStatus(item.getInventoryStatus()); + issueJobDetailDOList.add(issueJobDetailDO); + //预计入 + ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO(); + BeanUtils.copyProperties(issueJobDetailDO, expectinCreateReqVO); + expectinCreateReqVO.setJobNumber(number); + expectinCreateReqVO.setBusinessType(issueJobMainDO.getBusinessType()); + expectinCreateReqVO.setLocationCode(issueJobDetailDO.getFromLocationCode()); + expectinCreateReqVO.setOwnerCode(issueJobDetailDO.getFromOwnerCode()); + expectinCreateReqVOList.add(expectinCreateReqVO); + //预计出 + ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); + BeanUtils.copyProperties(issueJobDetailDO, expectoutCreateReqVO); + expectoutCreateReqVO.setJobNumber(number); + expectoutCreateReqVO.setBusinessType(issueJobMainDO.getBusinessType()); + expectoutCreateReqVO.setLocationCode(issueJobDetailDO.getFromLocationCode()); + expectoutCreateReqVO.setOwnerCode(issueJobDetailDO.getFromOwnerCode()); + expectoutCreateReqVOList.add(expectoutCreateReqVO); + }); + }); + issueJobDetailMapper.insertBatch(issueJobDetailDOList); + //增加预计入 + expectinService.createExpectin(expectinCreateReqVOList); + //增加预计出 + expectoutService.createExpectout(expectoutCreateReqVOList); + trendsApi.createTrends(issueJobMainDO.getId(), "issueJob", "发料申请生成发料任务", TrendsTypeEnum.CREATE); } }