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 8d7a9091..0cd99d3a 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 @@ -519,9 +519,12 @@ public interface ErrorCodeConstants { //补料申请主ErrorCode ErrorCode REPLEINSH_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_086_000, "补料申请主不存在"); - //补料申请子ErrorCode ErrorCode REPLEINSH_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_086_001, "补料申请子不存在"); + ErrorCode REPLEINSH_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_086_002, "导入补料申请不能为空"); + ErrorCode REPLEINSH_REQUEST_STATUS_NOT_NEW = new ErrorCode(1_000_086_003, "补料申请不是新增状态"); + ErrorCode REPLEINSH_REQUEST_JOB_EXISTS = new ErrorCode(1_000_086_004, "补料申请存在补料任务"); + ErrorCode REPLEINSH_REQUEST_STATUS_ERROR = new ErrorCode(1_000_086_004, "补料申请状态错误"); //补料任务主ErrorCode ErrorCode REPLEINSH_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_087_000, "补料任务主不存在"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueJob/IssueJobMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueJob/IssueJobMainController.java index 4ead9632..481dd837 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueJob/IssueJobMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueJob/IssueJobMainController.java @@ -189,7 +189,7 @@ public class IssueJobMainController { return success(countByStatus); } - @GetMapping(value = "/accept") + @PutMapping(value = "/accept") @Operation(summary = "承接任务") @PreAuthorize("@ss.hasPermission('wms:issue-job-main:accept')") public CommonResult acceptIssueJobMain(@RequestParam("id") Long id) { @@ -197,7 +197,7 @@ public class IssueJobMainController { return success(result > 0); } - @GetMapping(value = "/abandon") + @PutMapping(value = "/abandon") @Operation(summary = "放弃任务") @PreAuthorize("@ss.hasPermission('wms:issue-job-main:abandon')") public CommonResult abandonIssueJobMain(@RequestParam("id") Long id) { @@ -205,7 +205,7 @@ public class IssueJobMainController { return success(result > 0); } - @GetMapping(value = "/close") + @PutMapping(value = "/close") @Operation(summary = "关闭任务") @PreAuthorize("@ss.hasPermission('wms:issue-job-main:close')") public CommonResult closeIssueJobMain(@RequestParam("id") Long id) { 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 68e2f689..e1170466 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 @@ -284,7 +284,7 @@ public class IssueRequestMainController { @GetMapping("/get-workshop-productionline-workstation") @Operation(summary = "获取车间生产线工位树结构") @PreAuthorize("@ss.hasPermission('wms:issue-request-main:create')") - public List getWorkshopProductionlineWorkstation() { + public CommonResult getWorkshopProductionlineWorkstation() { List list = new ArrayList(); List WorkshopList = workshopMapper.selectList(); WorkshopList.forEach(workshopItem -> { @@ -312,13 +312,39 @@ public class IssueRequestMainController { mapWorkstation.put("label", workstationItem.getName()); workstationCodeList.add(mapWorkstation); }); - if (workstationCodeList != null && workstationCodeList.size() > 0) mapProductionline.put("children",workstationCodeList); + if (workstationCodeList != null && workstationCodeList.size() > 0) { + mapProductionline.put("children", workstationCodeList); + } else { + Map mapworkstationNull = new HashMap<>(); + mapworkstationNull.put("value", ""); + mapworkstationNull.put("label", ""); + List WorkstationListNUll = new ArrayList(); + WorkstationListNUll.add(mapworkstationNull); + mapProductionline.put("children", WorkstationListNUll); + } ProductionlineCodeList.add(mapProductionline); }); - if (ProductionlineCodeList != null && ProductionlineCodeList.size() > 0) mapWorkshop.put("children",ProductionlineCodeList); + if (ProductionlineCodeList != null && ProductionlineCodeList.size() > 0) { + mapWorkshop.put("children", ProductionlineCodeList); + } else { + List productionlineListNUll = new ArrayList(); + Map productionlineMapNull = new HashMap<>(); + List workstationListNUll = new ArrayList(); + Map workstationMapNull = new HashMap<>(); + workstationMapNull.put("value", ""); + workstationMapNull.put("label", ""); + workstationListNUll.add(workstationMapNull); + + productionlineMapNull.put("value", ""); + productionlineMapNull.put("label", ""); + productionlineMapNull.put("children", workstationListNUll); + + productionlineListNUll.add(productionlineMapNull); + mapWorkshop.put("children", productionlineListNUll); + } list.add(mapWorkshop); }); - return list; + return success(list); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestDetailController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestDetailController.java index e8ecf5fb..a514bca3 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestDetailController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestDetailController.java @@ -103,22 +103,4 @@ public class RepleinshRequestDetailController { PageResult pageResult = repleinshRequestDetailService.getRepleinshRequestDetailPage(pageVO); return success(RepleinshRequestDetailConvert.INSTANCE.convertPage(pageResult)); } - - @GetMapping("/export-excel") - @Operation(summary = "导出补料申请子 Excel") - @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-detail:export')") - @OperateLog(type = EXPORT) - public void exportRepleinshRequestDetailExcel(@Valid RepleinshRequestDetailExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = repleinshRequestDetailService.getRepleinshRequestDetailList(exportReqVO); - // 导出 Excel - List datas = RepleinshRequestDetailConvert.INSTANCE.convertList02(list); - for(RepleinshRequestDetailExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } - ExcelUtils.write(response, "补料申请子.xls", "数据", RepleinshRequestDetailExcelVO.class, datas); - } - } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestMainController.java index 61d01c05..314da0e5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/RepleinshRequestMainController.java @@ -3,14 +3,22 @@ package com.win.module.wms.controller.repleinshRequest; import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; +import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.framework.excel.core.util.ConvertUtil; import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainExcelVO; import com.win.module.wms.controller.repleinshRequest.vo.*; +import com.win.module.wms.convert.issueRequest.IssueRequestMainConvert; import com.win.module.wms.convert.repleinshRequest.RepleinshRequestMainConvert; +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.repleinshRequest.RepleinshRequestDetailDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.service.repleinshRequest.RepleinshRequestDetailService; import com.win.module.wms.service.repleinshRequest.RepleinshRequestMainService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -38,6 +46,8 @@ import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Validated public class RepleinshRequestMainController { + @Resource + private RepleinshRequestDetailService repleinshRequestDetailService; @Resource private RepleinshRequestMainService repleinshRequestMainService; @@ -107,6 +117,23 @@ public class RepleinshRequestMainController { return success(RepleinshRequestMainConvert.INSTANCE.convertPage(pageResult)); } + @GetMapping("/export-excel-senior") + @Operation(summary = "导出补料申请主 Excel") + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:export')") + @OperateLog(type = EXPORT) + public void exportRepleinshRequestMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { + List list = repleinshRequestMainService.getRepleinshRequestMainList(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", "补料申请", RepleinshRequestMainExcelVO.class, resultList, mapDropDown); + } + @GetMapping("/export-excel") @Operation(summary = "导出补料申请主 Excel") @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:export')") @@ -114,14 +141,30 @@ public class RepleinshRequestMainController { public void exportRepleinshRequestMainExcel(@Valid RepleinshRequestMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = repleinshRequestMainService.getRepleinshRequestMainList(exportReqVO); - // 导出 Excel - List datas = RepleinshRequestMainConvert.INSTANCE.convertList02(list); - for(RepleinshRequestMainExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); + resultList.forEach(item -> { //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); + ExcelUtils.write(response, "补料申请.xls", "补料申请", RepleinshRequestMainExcelVO.class, resultList); + } + + private List getExcelVo(List list, Map mapDropDown) { +// String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); +// mapDropDown.put(13, available); + List resultList = new ArrayList<>(); + // 导出 + for(RepleinshRequestMainDO mainDO : list) { + List subList = repleinshRequestDetailService.selectList(mainDO.getId()); + for(RepleinshRequestDetailDO detailDO : subList) { + RepleinshRequestMainExcelVO vo = RepleinshRequestMainConvert.INSTANCE.convert(mainDO, detailDO); + resultList.add(vo); + } } - ExcelUtils.write(response, "补料申请主.xls", "数据", RepleinshRequestMainExcelVO.class, datas); + return resultList; } @GetMapping("/get-import-template") @@ -130,10 +173,8 @@ public class RepleinshRequestMainController { // 手动创建导出 demo List list = new ArrayList<>(); Map mapDropDown = new HashMap<>(); -// String[] purchaseReturnReason = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_RETURN_REASON); -// mapDropDown.put(16, purchaseReturnReason); -// String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); -// mapDropDown.put(25, uom); + String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); + mapDropDown.put(5, uom); // 输出 ExcelUtils.write(response, "补料申请信息导入模板.xlsx", "补料申请信息列表", RepleinshRequestMainImportVO.class, list, mapDropDown); } @@ -163,4 +204,58 @@ public class RepleinshRequestMainController { return success(returnMap); } + @PutMapping("/close") + @Operation(summary = "关闭") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:close')") + public CommonResult closeRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.closeRepleinshRequestMain(id); + return success(count > 0); + } + + @PutMapping("/reAdd") + @Operation(summary = "重新添加") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:reAdd')") + public CommonResult reAddRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.reAddRepleinshRequestMain(id); + return success(count > 0); + } + + @PutMapping("/submit") + @Operation(summary = "提交审批") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:submit')") + public CommonResult submitRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.submitRepleinshRequestMain(id); + return success(count > 0); + } + + @PutMapping("/refused") + @Operation(summary = "驳回") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:refused')") + public CommonResult refusedRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.refusedRepleinshRequestMain(id); + return success(count > 0); + } + + @PutMapping("/agree") + @Operation(summary = "审批通过") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:agree')") + public CommonResult agreeRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.agreeRepleinshRequestMain(id); + return success(count > 0); + } + + @PutMapping("/handle") + @Operation(summary = "处理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:repleinsh-request-main:handle')") + public CommonResult handleRepleinshRequestMain(@RequestParam("id") Long id) { + Integer count = repleinshRequestMainService.handleRepleinshRequestMain(id); + return success(count > 0); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java index 95fe9d46..5f1d45a1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java @@ -70,4 +70,7 @@ public class RepleinshRequestDetailPageReqVO 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/repleinshRequest/vo/RepleinshRequestMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainBaseVO.java index 581d162a..617605df 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainBaseVO.java @@ -1,5 +1,6 @@ package com.win.module.wms.controller.repleinshRequest.vo; +import com.win.framework.excel.core.annotations.OnlyOne; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -33,6 +34,7 @@ public class RepleinshRequestMainBaseVO { private String fromAreaCodes; @Schema(description = "单据号") + @OnlyOne private String number; @Schema(description = "业务类型") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainExcelVO.java index d5f385dd..79c24d33 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainExcelVO.java @@ -1,5 +1,6 @@ package com.win.module.wms.controller.repleinshRequest.vo; +import com.win.module.wms.enums.DictTypeConstants; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -69,22 +70,63 @@ public class RepleinshRequestMainExcelVO { private String toWarehouseCode; @ExcelProperty(value = "到库位类型范围", converter = DictConvert.class) - @DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.LOCATION_TYPE) private String toLocationTypes; @ExcelProperty("到库区代码范围") private String toAreaCodes; - @ExcelProperty("自动提交") + @ExcelProperty(value = "自动提交", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) private String autoCommit; - @ExcelProperty("自动通过") + @ExcelProperty(value = "自动通过", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) private String autoAgree; - @ExcelProperty("自动执行") + @ExcelProperty(value = "自动执行", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) private String autoExecute; - @ExcelProperty("直接生成记录") + @ExcelProperty(value = "直接生成记录", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) private String directCreateRecord; + @ExcelProperty(value = "库存状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.INVENTORY_STATUS) + private String inventoryStatus; + + @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(value = "计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String uom; + + @ExcelProperty("从货主代码") + private String fromOwnerCode; + + @ExcelProperty("到货主代码") + private String toOwnerCode; + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainImportVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainImportVO.java index f7a2b3a2..18cadfbf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainImportVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestMainImportVO.java @@ -2,17 +2,25 @@ package com.win.module.wms.controller.repleinshRequest.vo; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.annotations.OnlyOne; +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; + /** - * 采购索赔申请子 Excel VO + * 补料申请 Excel VO * * @author 超级管理员 */ @@ -23,42 +31,24 @@ import java.time.LocalDateTime; public class RepleinshRequestMainImportVO { //主表数据 - @ExcelProperty("订单类型") - private String type; - @ExcelProperty("单据号") private String number; - - @ExcelProperty("行号") - private String hang; - - @ExcelProperty("供应商代码") - private String supplierCode; - - @ExcelProperty("联系人姓名") - private String contactName; - - @ExcelProperty("联系人电话") - @ColumnWidth(value = 16) - private String contactPhone; - - @ExcelProperty("联系人电子邮件") - @ColumnWidth(value = 16) - private String contactEmail; - - @ExcelProperty("是否寄存订单") - private String isConsignment; - - @ExcelProperty("截止日期") - private LocalDateTime dueDate; + @ExcelProperty("截止时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime dueTime; //子表数据 + @ExcelProperty("到库位代码") + private String toLocationCode; + @ExcelProperty("物品代码") private String itemCode; + @ExcelProperty("数量") - private BigDecimal orderQty; - @ExcelProperty("计量单位") + private String qty; + + @ExcelProperty(value = "计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) private String uom; - @ExcelProperty("超收百分比") - private BigDecimal overReceivingPercent; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshRequest/RepleinshRequestMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshRequest/RepleinshRequestMainConvert.java index 693ad0a3..f8f0ed46 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshRequest/RepleinshRequestMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/repleinshRequest/RepleinshRequestMainConvert.java @@ -4,11 +4,11 @@ import java.util.*; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainCreateReqVO; -import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainExcelVO; -import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainRespVO; -import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainUpdateReqVO; +import com.win.module.wms.controller.repleinshRequest.vo.*; +import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestDetailDO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; @@ -34,4 +34,18 @@ public interface RepleinshRequestMainConvert { List convertList02(List list); + @Mappings({ + @Mapping(source = "mainVo.number", target = "number"), + }) + RepleinshRequestMainImportErrorVO convert(RepleinshRequestMainCreateReqVO mainVo, RepleinshRequestDetailDO 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"), + }) + RepleinshRequestMainExcelVO convert(RepleinshRequestMainDO mainDO, RepleinshRequestDetailDO detailDO); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java index c62af5e0..69822438 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshJob/RepleinshJobMainMapper.java @@ -9,8 +9,10 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainExportReqVO; import com.win.module.wms.controller.repleinshJob.vo.RepleinshJobMainPageReqVO; +import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO; import com.win.module.wms.dal.dataobject.productputawayJob.ProductputawayJobMainDO; import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; +import com.win.module.wms.enums.order.OrderStatusEnum; import org.apache.ibatis.annotations.Mapper; /** @@ -107,6 +109,12 @@ public interface RepleinshJobMainMapper extends BaseMapperX .orderByDesc(RepleinshJobMainDO::getId)); } + default Long selectByRequestNumber(String requestNumber) { + return selectCount(new LambdaQueryWrapperX() + .eq(RepleinshJobMainDO::getRequestNumber, requestNumber) + .ne(RepleinshJobMainDO::getStatus, OrderStatusEnum.CLOSED.getCode())); + } + /** *根据类型数组查询任务数量 * @param types 类型组合 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestDetailMapper.java index 61457b17..afd561c5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestDetailMapper.java @@ -9,6 +9,7 @@ import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailExportReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailPageReqVO; +import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestDetailDO; import org.apache.ibatis.annotations.Mapper; @@ -22,6 +23,7 @@ public interface RepleinshRequestDetailMapper extends BaseMapperX selectPage(RepleinshRequestDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RepleinshRequestDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(RepleinshRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) .eqIfPresent(RepleinshRequestDetailDO::getToLocationCode, reqVO.getToLocationCode()) .eqIfPresent(RepleinshRequestDetailDO::getNumber, reqVO.getNumber()) @@ -44,26 +46,32 @@ public interface RepleinshRequestDetailMapper extends BaseMapperX selectSenior(CustomConditions conditions) { return selectPage(conditions, QueryWrapperUtils.structure(conditions)); } - default List selectList(RepleinshRequestDetailExportReqVO reqVO) { + + default List selectList(Long masterId) { return selectList(new LambdaQueryWrapperX() - .eqIfPresent(RepleinshRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) - .eqIfPresent(RepleinshRequestDetailDO::getToLocationCode, reqVO.getToLocationCode()) - .eqIfPresent(RepleinshRequestDetailDO::getNumber, reqVO.getNumber()) - .eqIfPresent(RepleinshRequestDetailDO::getItemCode, reqVO.getItemCode()) - .eqIfPresent(RepleinshRequestDetailDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(RepleinshRequestDetailDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(RepleinshRequestDetailDO::getCreator, reqVO.getCreator()) - .likeIfPresent(RepleinshRequestDetailDO::getItemName, reqVO.getItemName()) - .eqIfPresent(RepleinshRequestDetailDO::getItemDesc1, reqVO.getItemDesc1()) - .eqIfPresent(RepleinshRequestDetailDO::getItemDesc2, reqVO.getItemDesc2()) - .eqIfPresent(RepleinshRequestDetailDO::getProjectCode, reqVO.getProjectCode()) - .eqIfPresent(RepleinshRequestDetailDO::getQty, reqVO.getQty()) - .eqIfPresent(RepleinshRequestDetailDO::getUom, reqVO.getUom()) - .betweenIfPresent(RepleinshRequestDetailDO::getUpdateTime, reqVO.getUpdateTime()) - .eqIfPresent(RepleinshRequestDetailDO::getUpdater, reqVO.getUpdater()) - .eqIfPresent(RepleinshRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode()) - .eqIfPresent(RepleinshRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode()) - .orderByDesc(RepleinshRequestDetailDO::getId)); + .eq(RepleinshRequestDetailDO::getMasterId, masterId)); } +// default List selectList(RepleinshRequestDetailExportReqVO reqVO) { +// return selectList(new LambdaQueryWrapperX() +// .eqIfPresent(RepleinshRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) +// .eqIfPresent(RepleinshRequestDetailDO::getToLocationCode, reqVO.getToLocationCode()) +// .eqIfPresent(RepleinshRequestDetailDO::getNumber, reqVO.getNumber()) +// .eqIfPresent(RepleinshRequestDetailDO::getItemCode, reqVO.getItemCode()) +// .eqIfPresent(RepleinshRequestDetailDO::getRemark, reqVO.getRemark()) +// .betweenIfPresent(RepleinshRequestDetailDO::getCreateTime, reqVO.getCreateTime()) +// .eqIfPresent(RepleinshRequestDetailDO::getCreator, reqVO.getCreator()) +// .likeIfPresent(RepleinshRequestDetailDO::getItemName, reqVO.getItemName()) +// .eqIfPresent(RepleinshRequestDetailDO::getItemDesc1, reqVO.getItemDesc1()) +// .eqIfPresent(RepleinshRequestDetailDO::getItemDesc2, reqVO.getItemDesc2()) +// .eqIfPresent(RepleinshRequestDetailDO::getProjectCode, reqVO.getProjectCode()) +// .eqIfPresent(RepleinshRequestDetailDO::getQty, reqVO.getQty()) +// .eqIfPresent(RepleinshRequestDetailDO::getUom, reqVO.getUom()) +// .betweenIfPresent(RepleinshRequestDetailDO::getUpdateTime, reqVO.getUpdateTime()) +// .eqIfPresent(RepleinshRequestDetailDO::getUpdater, reqVO.getUpdater()) +// .eqIfPresent(RepleinshRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode()) +// .eqIfPresent(RepleinshRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode()) +// .orderByDesc(RepleinshRequestDetailDO::getId)); +// } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestMainMapper.java index fbf351bb..3166f48d 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/repleinshRequest/RepleinshRequestMainMapper.java @@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainExportReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestMainPageReqVO; +import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; import org.apache.ibatis.annotations.Mapper; @@ -78,4 +79,7 @@ public interface RepleinshRequestMainMapper extends BaseMapperX 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/IssueRequestDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestDetailServiceImpl.java index b5320a08..561028a4 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 @@ -136,9 +136,6 @@ public class IssueRequestDetailServiceImpl implements IssueRequestDetailService 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()); // 基础信息 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 173b3934..6db1f602 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 @@ -261,10 +261,16 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { mainDo.setNumber(number); mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); issueRequestMainMapper.insert(mainDo); + //增加操作记录 + trendsApi.createTrends(mainDo.getId(), "issueRequestMain", "导入了发料申请", TrendsTypeEnum.CREATE); for (IssueRequestDetailDO detailDO : subDOList) { detailDO.setMasterId(mainDo.getId()); detailDO.setNumber(number); } + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDo.getStatus())) { + this.generateJob(mainDo, subDOList); + } issueRequestDetailMapper.insertBatch(subDOList); } }); @@ -559,7 +565,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { throw new ServiceException(ISSUE_REQUEST_MAIN_CANNOT_REFUSED); } mainDO.setStatus(requestStatusState.getState().getCode()); - trendsApi.createTrends(id, "issueRequest", "驳回了采购发料申请", TrendsTypeEnum.UPDATE); + trendsApi.createTrends(id, "issueRequest", "驳回了发料申请", TrendsTypeEnum.UPDATE); return issueRequestMainMapper.updateById(mainDO); } @@ -666,7 +672,6 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService { List issueJobDetailDOList = new ArrayList<>(); List expectinCreateReqVOList = new ArrayList<>(); List expectoutCreateReqVOList = new ArrayList<>(); - JobUtils jobUtils = new JobUtils(); // 根据发料申请子表数据进行分析 detailDO.forEach(item -> { // 根据批次策略/下架策略 返回 库存余额DO diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailService.java index 9c3ff69c..311d1ebf 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailService.java @@ -8,6 +8,7 @@ import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailC import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailExportReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailPageReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailUpdateReqVO; +import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestDetailDO; import com.win.framework.common.pojo.PageResult; @@ -37,7 +38,7 @@ public interface RepleinshRequestDetailService { * * @param updateReqVO 更新信息 */ - void updateRepleinshRequestDetail(@Valid RepleinshRequestDetailUpdateReqVO updateReqVO); + Integer updateRepleinshRequestDetail(@Valid RepleinshRequestDetailUpdateReqVO updateReqVO); /** * 删除补料申请子 @@ -70,12 +71,6 @@ public interface RepleinshRequestDetailService { */ PageResult getRepleinshRequestDetailPage(RepleinshRequestDetailPageReqVO pageReqVO); - /** - * 获得补料申请子列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 补料申请子列表 - */ - List getRepleinshRequestDetailList(RepleinshRequestDetailExportReqVO exportReqVO); + List selectList(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailServiceImpl.java index a0abfa17..caec7a61 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestDetailServiceImpl.java @@ -5,8 +5,19 @@ import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailC import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailExportReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailPageReqVO; import com.win.module.wms.controller.repleinshRequest.vo.RepleinshRequestDetailUpdateReqVO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +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.productionlineitem.ProductionlineitemDO; +import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; +import com.win.module.wms.service.businesstype.BusinesstypeService; +import com.win.module.wms.service.itembasic.ItembasicService; +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.*; @@ -29,25 +40,37 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*; @Validated public class RepleinshRequestDetailServiceImpl implements RepleinshRequestDetailService { + @Resource + private JobUtils jobUtils; + @Resource + private ItembasicService itembasicService; + @Resource + private BusinesstypeService businesstypeService; + @Resource + private RepleinshRequestMainService repleinshRequestMainService; @Resource private RepleinshRequestDetailMapper repleinshRequestDetailMapper; @Override + @Transactional public Long createRepleinshRequestDetail(RepleinshRequestDetailCreateReqVO createReqVO) { // 插入 RepleinshRequestDetailDO repleinshRequestDetail = RepleinshRequestDetailConvert.INSTANCE.convert(createReqVO); + validatorDetail(repleinshRequestDetail); repleinshRequestDetailMapper.insert(repleinshRequestDetail); // 返回 return repleinshRequestDetail.getId(); } @Override - public void updateRepleinshRequestDetail(RepleinshRequestDetailUpdateReqVO updateReqVO) { + @Transactional + public Integer updateRepleinshRequestDetail(RepleinshRequestDetailUpdateReqVO updateReqVO) { // 校验存在 validateRepleinshRequestDetailExists(updateReqVO.getId()); // 更新 RepleinshRequestDetailDO updateObj = RepleinshRequestDetailConvert.INSTANCE.convert(updateReqVO); - repleinshRequestDetailMapper.updateById(updateObj); + validatorDetail(updateObj); + return repleinshRequestDetailMapper.updateById(updateObj); } @Override @@ -56,6 +79,7 @@ public class RepleinshRequestDetailServiceImpl implements RepleinshRequestDetail } @Override + @Transactional public void deleteRepleinshRequestDetail(Long id) { // 校验存在 validateRepleinshRequestDetailExists(id); @@ -85,8 +109,49 @@ public class RepleinshRequestDetailServiceImpl implements RepleinshRequestDetail } @Override - public List getRepleinshRequestDetailList(RepleinshRequestDetailExportReqVO exportReqVO) { - return repleinshRequestDetailMapper.selectList(exportReqVO); + public List selectList(Long masterId) { + return repleinshRequestDetailMapper.selectList(masterId); + } + + //子表校验 + private RepleinshRequestDetailDO validatorDetail(RepleinshRequestDetailDO repleinshRequestDetailDO) { + ItembasicDO itembasicDO = this.validateItem(repleinshRequestDetailDO); + if(!itembasicDO.getUom().equals(itembasicDO.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, itembasicDO.getUom(), itembasicDO.getUom()); + } + this.validateBusinesstype(itembasicDO.getType(),itembasicDO.getCode(),repleinshRequestDetailDO.getToLocationCode(), repleinshRequestDetailDO); + return repleinshRequestDetailDO; + } + + /** + * 校验物品信息并赋值 + * @param detailDo + * @return + */ + private ItembasicDO validateItem(RepleinshRequestDetailDO detailDo) { + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); + detailDo.setItemName(itembasicDO.getName()); + detailDo.setItemDesc1(itembasicDO.getDesc1()); + detailDo.setItemDesc2(itembasicDO.getDesc2()); + detailDo.setProjectCode(itembasicDO.getProject()); + return itembasicDO; + } + + /** + * 校验业务类型并赋值 + * @param itemType + * @param itemCode + * @param locationCode + * @param detailDo + */ + private void validateBusinesstype(String itemType,String itemCode,String locationCode, RepleinshRequestDetailDO detailDo) { + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRequest"); + jobUtils.ifInType(itemType, businesstypeDO); + detailDo.setInventoryStatus(businesstypeDO.getInInventoryStatuses()); + //校验物品类型 + jobUtils.selectItembasicExist(itemCode,businesstypeDO); + //校验到库位 + jobUtils.ifInFromLocationType(locationCode,businesstypeDO); } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainService.java index f17efc10..9303826a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainService.java @@ -36,7 +36,7 @@ public interface RepleinshRequestMainService { * * @param updateReqVO 更新信息 */ - void updateRepleinshRequestMain(@Valid RepleinshRequestMainUpdateReqVO updateReqVO); + Integer updateRepleinshRequestMain(@Valid RepleinshRequestMainUpdateReqVO updateReqVO); /** * 删除补料申请主 @@ -85,4 +85,17 @@ public interface RepleinshRequestMainService { */ public List importRepleinshRequestMainList(List datas, Integer mode, boolean updatePart); + List getRepleinshRequestMainList(CustomConditions conditions); + + Integer handleRepleinshRequestMain(Long id); + + Integer agreeRepleinshRequestMain(Long id); + + Integer refusedRepleinshRequestMain(Long id); + + Integer submitRepleinshRequestMain(Long id); + + Integer reAddRepleinshRequestMain(Long id); + + Integer closeRepleinshRequestMain(Long id); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainServiceImpl.java index 5fc7eb63..8742f234 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/repleinshRequest/RepleinshRequestMainServiceImpl.java @@ -4,37 +4,61 @@ import cn.hutool.core.collection.CollUtil; 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.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.repleinshRequest.vo.*; import com.win.module.wms.convert.repleinshRequest.RepleinshRequestDetailConvert; import com.win.module.wms.convert.repleinshRequest.RepleinshRequestMainConvert; +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.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; +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.repleinshJob.RepleinshJobDetailDO; +import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestDetailDO; import com.win.module.wms.dal.dataobject.repleinshRequest.RepleinshRequestMainDO; import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; +import com.win.module.wms.dal.mysql.repleinshJob.RepleinshJobDetailMapper; +import com.win.module.wms.dal.mysql.repleinshJob.RepleinshJobMainMapper; import com.win.module.wms.dal.mysql.repleinshRequest.RepleinshRequestDetailMapper; import com.win.module.wms.dal.mysql.repleinshRequest.RepleinshRequestMainMapper; import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.job.JobStatusEnum; +import com.win.module.wms.enums.request.RequestStatusEnum; +import com.win.module.wms.enums.request.RequestStatusState; 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.itempackaging.ItempackagingService; +import com.win.module.wms.service.jobsetting.JobsettingService; import com.win.module.wms.service.requestsetting.RequestsettingService; import com.win.module.wms.service.shift.ShiftService; import com.win.module.wms.service.supplieritem.SupplieritemService; 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.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.validation.Validator; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY; -import static com.win.module.wms.enums.ErrorCodeConstants.REPLEINSH_REQUEST_MAIN_NOT_EXISTS; +import static com.win.module.wms.enums.ErrorCodeConstants.*; /** * 补料申请主 Service 实现类 @@ -44,6 +68,22 @@ import static com.win.module.wms.enums.ErrorCodeConstants.REPLEINSH_REQUEST_MAIN @Service @Validated public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainService { + @Resource + private ExpectoutService expectoutService; + @Resource + private ExpectinService expectinService; + @Resource + private RepleinshJobDetailMapper repleinshJobDetailMapper; + @Resource + private JobsettingService jobsettingService; + @Resource + private RepleinshJobMainMapper repleinshJobMainMapper; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private TrendsApi trendsApi; + @Resource + private Validator validator; @Resource private RepleinshRequestMainMapper repleinshRequestMainMapper; @Resource @@ -65,12 +105,39 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ @Override + @Transactional public Long createRepleinshRequestMain(RepleinshRequestMainCreateReqVO createReqVO) { // 插入 - RepleinshRequestMainDO repleinshRequestMain = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); - repleinshRequestMainMapper.insert(repleinshRequestMain); - // 返回 - return repleinshRequestMain.getId(); + RepleinshRequestMainDO mainDO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); + // 主表暂无校验 + // this.validateRepleinshRequestMainCreate(mainDO); + List subDOList = RepleinshRequestDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + for (RepleinshRequestDetailDO detailDO : subDOList) { + this.validateRepleinshRequestDetailCreate(mainDO, detailDO); + } + String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_REQUEST.getCode()); + mainDO.setNumber(number); + RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("RepleinmentRequest"); + RequestStatusState requestStatusState = new RequestStatusState(); + requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); + mainDO.setStatus(requestStatusState.getState().getCode()); + mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); + mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); + mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); + mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); + repleinshRequestMainMapper.insert(mainDO); + for (RepleinshRequestDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + detailDO.setInventoryStatus("OK"); // 默认合格 + } + repleinshRequestDetailMapper.insertBatch(subDOList); + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, subDOList); + } + trendsApi.createTrends(mainDO.getId(), "repleinshRequestMain", "增加了补料申请", TrendsTypeEnum.CREATE); + return mainDO.getId(); } @Override @@ -79,12 +146,18 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ } @Override - public void updateRepleinshRequestMain(RepleinshRequestMainUpdateReqVO updateReqVO) { + @Transactional + public Integer updateRepleinshRequestMain(RepleinshRequestMainUpdateReqVO updateReqVO) { // 校验存在 - validateRepleinshRequestMainExists(updateReqVO.getId()); + RepleinshRequestMainDO repleinshRequestMainDO = validateRepleinshRequestMainExists(updateReqVO.getId()); + if(!repleinshRequestMainDO.getStatus().equals(RequestStatusEnum.NEW.getCode())) { + throw exception(REPLEINSH_REQUEST_STATUS_NOT_NEW); + } + //增加操作记录 + trendsApi.createTrends(updateReqVO.getId(), "repleinshRequestMain", "修改了补料申请", TrendsTypeEnum.UPDATE); // 更新 RepleinshRequestMainDO updateObj = RepleinshRequestMainConvert.INSTANCE.convert(updateReqVO); - repleinshRequestMainMapper.updateById(updateObj); + return repleinshRequestMainMapper.updateById(updateObj); } @Override @@ -95,10 +168,12 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ repleinshRequestMainMapper.deleteById(id); } - private void validateRepleinshRequestMainExists(Long id) { - if (repleinshRequestMainMapper.selectById(id) == null) { + private RepleinshRequestMainDO validateRepleinshRequestMainExists(Long id) { + RepleinshRequestMainDO repleinshRequestMainDO = repleinshRequestMainMapper.selectById(id); + if (repleinshRequestMainDO == null) { throw exception(REPLEINSH_REQUEST_MAIN_NOT_EXISTS); } + return repleinshRequestMainDO; } @Override @@ -121,113 +196,401 @@ public class RepleinshRequestMainServiceImpl implements RepleinshRequestMainServ return repleinshRequestMainMapper.selectList(exportReqVO); } + /** + * 校验创建 + * @param mainDo + * @param detailDo + * @return + */ + private void validateRepleinshRequestDetailCreate(RepleinshRequestMainDO mainDo, RepleinshRequestDetailDO detailDo) { + ItembasicDO itembasicDO = this.validateItem(detailDo); + if(!itembasicDO.getUom().equals(itembasicDO.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, itembasicDO.getUom(), itembasicDO.getUom()); + } + this.validateBusinesstype(itembasicDO.getType(),itembasicDO.getCode(),detailDo.getToLocationCode(), mainDo,detailDo); + } + @Override + @Transactional public List importRepleinshRequestMainList(List datas, Integer mode, boolean updatePart) { if (CollUtil.isEmpty(datas)) { - throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); + throw exception(REPLEINSH_REQUEST_IMPORT_LIST_IS_EMPTY); } List errorList = new ArrayList<>(); datas.forEach(createReqVO -> { - // 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList - String messageMain = ""; - //主表的验证 - //校验供应商基础信息 -// try { -// ShiftDO shiftDO = shiftService.selectShiftExist(createReqVO.getSupplierCode()); -// BeanUtils.copyProperties(createReqVO, shiftDO); -// } catch (ServiceException ex) { -// messageMain += ex.getMessage() + ","; -// } - //子表的验证 + RepleinshRequestMainDO mainDO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); + String messageMain = validateRepleinshRequestMainImport(mainDO); List subList = createReqVO.getSubList(); List subDOList = RepleinshRequestDetailConvert.INSTANCE.convertList03(subList); - for (RepleinshRequestDetailDO purchaseDetailDO : subDOList) { - String messageDetail = ""; - // 校验物品基础信息 - try { - ItembasicDO itembasicDO = itembasicService.selectItembasic(purchaseDetailDO.getItemCode()); - purchaseDetailDO.setItemDesc1(itembasicDO.getDesc1()); - purchaseDetailDO.setItemDesc2(itembasicDO.getDesc2()); - purchaseDetailDO.setItemName(itembasicDO.getName()); - purchaseDetailDO.setProjectCode(itembasicDO.getProject()); - if (itembasicDO.getUom() != purchaseDetailDO.getUom()) { - messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + purchaseDetailDO.getUom() + ","; - } - } catch (ServiceException ex) { - messageDetail += ex.getMessage() + ","; - } - - // 校验业务类型相关属性 - try { - BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRequest"); - jobUtils.selectItembasicExist(purchaseDetailDO.getItemCode(), businesstypeDO); - businesstypeService.selectBusinesstypeExist(purchaseDetailDO.getToLocationCode()); - if (businesstypeDO != null) { - createReqVO.setBusinessType(businesstypeDO.getCode()); - } - createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); - createReqVO.setToLocationTypes(businesstypeDO.getInLocationTypes()); - createReqVO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); - createReqVO.setToAreaCodes(businesstypeDO.getInAreaCodes()); - } catch (ServiceException ex) { - messageDetail += ex.getMessage() + ","; - } - - RepleinshRequestDetailCreateReqVO purchaseDetailCreateReqVO = RepleinshRequestDetailConvert.INSTANCE.convert1(purchaseDetailDO); - RepleinshRequestMainImportErrorVO importVO = RepleinshRequestDetailConvert.INSTANCE.convert(createReqVO, purchaseDetailCreateReqVO); - //进行子表的错误统计 - //主表没有错误 写入库里 - if (!messageMain.equals("") || !messageDetail.equals("")) { - importVO.setImportStatus("失败"); + // 是否有错误数据 + boolean flag = true; + for (RepleinshRequestDetailDO detailDO : subDOList) { + String messageDetail = this.validateRepleinshRequestDetailImport(mainDO, detailDO); + if(!messageMain.isEmpty() || !messageDetail.isEmpty()) { + RepleinshRequestMainImportErrorVO importErrorVO = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); + importErrorVO.setImportStatus("失败"); messageMain = messageMain + messageDetail; - importVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); - errorList.add(importVO); - } else { - purchaseDetailDO.setNumber(createReqVO.getNumber()); - purchaseDetailDO.setMasterId(createReqVO.getId()); - purchaseDetailDO.setInventoryStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.INVENTORY_STATUS, "新增")); + importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); + errorList.add(importErrorVO); + flag = false; } } - if (errorList.isEmpty()) { - // 判断如果不存在,在进行插入 - if (mode != 3) { - createReqVO.setNumber(""); - createReqVO.setStatus(null); - createReqVO.setFomWarehouseCode(null); - createReqVO.setToWarehouseCode(null); - RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); - if (requestsettingDO != null) { - createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); - createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); - createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); - createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); - } - RepleinshRequestMainDO createObj = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); - repleinshRequestMainMapper.insert(createObj); - repleinshRequestDetailMapper.insertBatch(subDOList); - } else if (mode != 2) { - createReqVO.setNumber(""); - createReqVO.setStatus(null); - createReqVO.setFomWarehouseCode(null); - createReqVO.setToWarehouseCode(null); - RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); - if (requestsettingDO != null) { - createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); - createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); - createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); - createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); - } - RepleinshRequestMainDO createObj = RepleinshRequestMainConvert.INSTANCE.convert(createReqVO); - repleinshRequestMainMapper.updateById(createObj); - repleinshRequestDetailMapper.updateBatch(subDOList); + //写入数据 + if(flag) { + String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_REQUEST.getCode()); + mainDO.setNumber(number); + RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("RepleinmentRequest"); + RequestStatusState requestStatusState = new RequestStatusState(); + requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); + mainDO.setStatus(requestStatusState.getState().getCode()); + mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); + mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); + mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); + mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); + repleinshRequestMainMapper.insert(mainDO); + //增加操作记录 + trendsApi.createTrends(mainDO.getId(), "repleinshRequestMain", "导入了补料申请", TrendsTypeEnum.CREATE); + for (RepleinshRequestDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + detailDO.setInventoryStatus("OK"); // 默认合格 } + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, subDOList); + } + repleinshRequestDetailMapper.insertBatch(subDOList); } }); //错误不为空并非部分更新,手工回滚 - if (!errorList.isEmpty() && !updatePart) { + if(!errorList.isEmpty() && !updatePart) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return errorList; } + @Override + public List getRepleinshRequestMainList(CustomConditions conditions) { + return repleinshRequestMainMapper.selectSeniorList(conditions); + } + + @Override + @Transactional + public Integer closeRepleinshRequestMain(Long id) { + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.close(); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "repleinshRequest", "关闭了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer reAddRepleinshRequestMain(Long id) { + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.reAdd(); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录 + trendsApi.createTrends(id, "repleinshRequest", "打开了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer submitRepleinshRequestMain(Long id) { + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); + } + trendsApi.createTrends(id, "repleinshRequest", "提交了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer refusedRepleinshRequestMain(Long id) { + // 校验存在 + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.refused(); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + trendsApi.createTrends(id, "repleinshRequest", "驳回了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer agreeRepleinshRequestMain(Long id) { + // 校验存在 + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用自动执行方法 + if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { + this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); + } + trendsApi.createTrends(id, "repleinshRequest", "审批通过了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer handleRepleinshRequestMain(Long id) { + // 校验存在 + RepleinshRequestMainDO mainDO = validateRepleinshRequestMainExists(id); + // 校验存在存在下级单据 + Long count = repleinshJobMainMapper.selectByRequestNumber(mainDO.getNumber()); + if(count > 0) { + throw new ServiceException(REPLEINSH_REQUEST_JOB_EXISTS); + } + RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); + boolean flag = requestStatusState.handle(); + if(!flag) { + throw new ServiceException(REPLEINSH_REQUEST_STATUS_ERROR); + } + mainDO.setStatus(requestStatusState.getState().getCode()); + //调用执行方法 + this.generateJob(mainDO, repleinshRequestDetailMapper.selectList(mainDO.getId())); + trendsApi.createTrends(id, "repleinshRequest", "执行了补料申请", TrendsTypeEnum.UPDATE); + return repleinshRequestMainMapper.updateById(mainDO); + } + + /** + * 导入校验主 + * @param mainDo + * @return + */ + private String validateRepleinshRequestMainImport (RepleinshRequestMainDO mainDo) { + StringBuilder message = new StringBuilder(); + try { + ValidationUtils.validate(validator, mainDo); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + + /** + * 导入校验子 + * @param mainDo + * @param detailDo + * @return + */ + private String validateRepleinshRequestDetailImport(RepleinshRequestMainDO mainDo,RepleinshRequestDetailDO detailDo) { + StringBuilder message = new StringBuilder(); + try { + ValidationUtils.validate(validator, detailDo); + } catch (Exception e) { + message.append(e.getMessage()).append(","); + } + ItembasicDO itembasicDO = null; + try { + itembasicDO = this.validateItem(detailDo); + } catch (Exception e) { + message.append(e.getMessage()).append(","); + } + if(!detailDo.getUom().equals(itembasicDO.getUom())) { + message.append("计量单位【").append(detailDo.getUom()).append("】错误,应该是【").append(itembasicDO.getUom()).append("】").append(","); + } + try { + this.validateBusinesstype(itembasicDO.getType(),itembasicDO.getCode(),detailDo.getToLocationCode(), mainDo,detailDo); + } catch (Exception e) { + message.append(e.getMessage()).append(","); + } + // 校验零件库位关系 +// try { +// jobUtils.getItemCodeLocationCode(itembasicDO.getCode(),detailDo.getToLocationCode()); +// } catch (Exception e) { +// message.append(e.getMessage()).append(","); +// } + return message.toString(); + } + + /** + * 校验物品信息并赋值 + * @param detailDo + * @return + */ + private ItembasicDO validateItem(RepleinshRequestDetailDO detailDo) { + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); + detailDo.setItemName(itembasicDO.getName()); + detailDo.setItemDesc1(itembasicDO.getDesc1()); + detailDo.setItemDesc2(itembasicDO.getDesc2()); + detailDo.setProjectCode(itembasicDO.getProject()); + return itembasicDO; + } + + /** + * 校验业务类型并赋值 + * @param itemType + * @param mainDo + * @return + */ + private void validateBusinesstype(String itemType,String itemCode,String locationCode, RepleinshRequestMainDO mainDo,RepleinshRequestDetailDO detailDo) { + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("RepleinmentRequest"); + jobUtils.ifInType(itemType, businesstypeDO); + mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); + mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); + mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); + mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); + mainDo.setBusinessType(businesstypeDO.getCode()); + detailDo.setInventoryStatus(businesstypeDO.getInInventoryStatuses()); + //校验物品类型 + jobUtils.selectItembasicExist(itemCode,businesstypeDO); + //校验到库位 + jobUtils.ifInFromLocationType(locationCode,businesstypeDO); + } + + /** + * 生成任务 OR 记录 + * @param mainDO + * @param detailDO + */ + private void generateJob(RepleinshRequestMainDO mainDO, List detailDO) { + //跳过任务直接生成记录 + if("TRUE".equals(mainDO.getDirectCreateRecord())) { +// TODO: 发料申请 跳过任务直接生成记录 未做!! + } + // 任务主表信息 + RepleinshJobMainDO repleinshJobMainDO = new RepleinshJobMainDO(); + repleinshJobMainDO.setRequestNumber(mainDO.getNumber()); + repleinshJobMainDO.setFromWarehouseCode(mainDO.getFomWarehouseCode()); + repleinshJobMainDO.setToWarehouseCode(mainDO.getToWarehouseCode()); + repleinshJobMainDO.setRequestTime(mainDO.getRequestTime()); + repleinshJobMainDO.setRequestDueTime(mainDO.getDueTime()); + repleinshJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); + repleinshJobMainDO.setDepartmentCode(mainDO.getDepartmentCode()); + repleinshJobMainDO.setFromLocationTypes(mainDO.getFromLocationTypes()); + repleinshJobMainDO.setToLocationTypes(mainDO.getToLocationTypes()); + String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_JOB.getCode()); + repleinshJobMainDO.setNumber(number); + repleinshJobMainDO.setBusinessType(mainDO.getBusinessType()); + repleinshJobMainDO.setCreateTime(LocalDateTime.now()); + repleinshJobMainDO.setFromAreaCodes(mainDO.getFromAreaCodes()); + repleinshJobMainDO.setToAreaCodes(mainDO.getToAreaCodes()); + repleinshJobMainDO.setId(null); + repleinshJobMainDO.setCreateTime(null); + repleinshJobMainDO.setCreator(null); + repleinshJobMainDO.setUpdateTime(null); + repleinshJobMainDO.setUpdater(null); + // 获取任务单据设置 + JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("RepleinmentJob"); + repleinshJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); + repleinshJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); + repleinshJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); + repleinshJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); + repleinshJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); + repleinshJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); + repleinshJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); + repleinshJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); + repleinshJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); + repleinshJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); + repleinshJobMainMapper.insert(repleinshJobMainDO); + + List repleinshJobDetailDOList = new ArrayList<>(); + List expectinCreateReqVOList = new ArrayList<>(); + List expectoutCreateReqVOList = new ArrayList<>(); + // 根据发料申请子表数据进行分析 + detailDO.forEach(item -> { + // 根据批次策略/下架策略 返回 库存余额DO + List balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),item.getInventoryStatus(),item.getProjectCode(),item.getQty()); + // 根据 查询出所需数据 解析成 任务子表数据 + balanceDOListJob.forEach(balanceDOItem -> { + RepleinshJobDetailDO repleinshJobDetailDO = new RepleinshJobDetailDO(); + repleinshJobDetailDO.setId(null); + repleinshJobDetailDO.setCreateTime(null); + repleinshJobDetailDO.setCreator(null); + repleinshJobDetailDO.setUpdateTime(null); + repleinshJobDetailDO.setUpdater(null); + repleinshJobDetailDO.setPackingNumber(balanceDOItem.getPackingNumber()); + repleinshJobDetailDO.setContainerNumber(balanceDOItem.getContainerNumber()); + repleinshJobDetailDO.setBatch(balanceDOItem.getBatch()); + repleinshJobDetailDO.setFromLocationCode(balanceDOItem.getLocationCode()); + repleinshJobDetailDO.setToLocationCode(item.getToLocationCode()); + repleinshJobDetailDO.setItemCode(item.getItemCode()); + repleinshJobDetailDO.setItemName(item.getItemName()); + repleinshJobDetailDO.setItemDesc1(item.getItemDesc1()); + repleinshJobDetailDO.setItemDesc2(item.getItemDesc2()); + repleinshJobDetailDO.setProjectCode(item.getProjectCode()); + repleinshJobDetailDO.setQty(item.getQty()); + repleinshJobDetailDO.setUom(item.getUom()); + repleinshJobDetailDO.setToOwnerCode(item.getToOwnerCode()); + repleinshJobDetailDO.setFromOwnerCode(item.getFromOwnerCode()); + repleinshJobDetailDO.setNumber(repleinshJobMainDO.getNumber()); + repleinshJobDetailDO.setMasterId(repleinshJobMainDO.getId()); + repleinshJobDetailDO.setInventoryStatus(item.getInventoryStatus()); + repleinshJobDetailDOList.add(repleinshJobDetailDO); + //预计入 + ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO(); + BeanUtils.copyProperties(repleinshJobDetailDO, expectinCreateReqVO); + expectinCreateReqVO.setJobNumber(number); + expectinCreateReqVO.setBusinessType(repleinshJobMainDO.getBusinessType()); + expectinCreateReqVO.setLocationCode(repleinshJobDetailDO.getFromLocationCode()); + expectinCreateReqVO.setOwnerCode(repleinshJobDetailDO.getFromOwnerCode()); + expectinCreateReqVOList.add(expectinCreateReqVO); + //预计出 + ExpectoutCreateReqVO expectoutCreateReqVO = new ExpectoutCreateReqVO(); + BeanUtils.copyProperties(repleinshJobDetailDO, expectoutCreateReqVO); + expectoutCreateReqVO.setJobNumber(number); + expectoutCreateReqVO.setBusinessType(repleinshJobMainDO.getBusinessType()); + expectoutCreateReqVO.setLocationCode(repleinshJobDetailDO.getFromLocationCode()); + expectoutCreateReqVO.setOwnerCode(repleinshJobDetailDO.getFromOwnerCode()); + expectoutCreateReqVOList.add(expectoutCreateReqVO); + }); + }); + repleinshJobDetailMapper.insertBatch(repleinshJobDetailDOList); + //增加预计入 + expectinService.createExpectin(expectinCreateReqVOList); + //增加预计出 + expectoutService.createExpectout(expectoutCreateReqVOList); + trendsApi.createTrends(repleinshJobMainDO.getId(), "repleinshJob", "补料申请生成补料任务", TrendsTypeEnum.CREATE); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java index 8c16e992..cd639fcc 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java @@ -475,6 +475,7 @@ public class RuleServiceImpl implements RuleService { @Override public RuleRespVO batch(String supplierCode, String customerCode, String abcClass, String itemType, String itemGroup, String project, String itemCode) { + System.out.println("99999999:" + itemCode); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("strategy_code", "S010"); queryWrapper.orderByDesc("priority"); @@ -511,6 +512,7 @@ public class RuleServiceImpl implements RuleService { return RuleConvert.INSTANCE.convert(ruleDO); } } + return null; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java index dea2a649..137d4b53 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java @@ -258,6 +258,7 @@ public class JobUtils { } /** + * SQ-------G * 零件库位关系有效 * * @param pitemCode 物品代码 @@ -881,4 +882,21 @@ public class JobUtils { return balanceDOListJob; } + /** + * SQ------VI&L + * 校验零件库位关系(VI&L) + * @param pItemCode + * @param PlocationCode + * @return + */ + public Boolean getItemCodeLocationCode(String pItemCode,String PlocationCode) { + RuleRespVO ruleRespVO = this.selectLocationAndModRelation(pItemCode); + JSONObject json = JSONUtil.parseObj(ruleRespVO.getConfiguration()); + String locationCode = json.get("LocationCode").toString(); + if (locationCode != null && locationCode.equals(PlocationCode)) { + return true; + } else { + throw exception(LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS); + } + } }