From 9ef6b923dabd4197b3da5bf75cf6afa786ae5dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=96=AA=E5=90=8D?= <942005050@qq.com> Date: Mon, 20 Nov 2023 08:07:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E6=96=99=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wms/enums/ErrorCodeConstants.java | 7 + .../PreparetoissueDetailController.java | 17 - .../PreparetoissueMainController.java | 162 ++++++++-- .../vo/PreparetoissueDetailBaseVO.java | 4 +- .../vo/PreparetoissueDetailPageReqVO.java | 3 + .../vo/PreparetoissueMainCreateReqVO.java | 8 + .../vo/PreparetoissueMainExcelVO.java | 34 +- .../production/ProductionMainController.java | 26 +- .../PreparetoissueDetailConvert.java | 4 + .../PreparetoissueMainConvert.java | 16 +- .../PreparetoissueDetailMapper.java | 37 ++- .../PreparetoissueMainMapper.java | 4 + .../PreparetoissueDetailService.java | 15 +- .../PreparetoissueDetailServiceImpl.java | 89 ++++- .../PreparetoissueMainService.java | 33 +- .../PreparetoissueMainServiceImpl.java | 304 +++++++++++++++++- .../production/ProductionMainServiceImpl.java | 33 +- 17 files changed, 684 insertions(+), 112 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 a23be87c..abd9d77f 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 @@ -499,6 +499,13 @@ public interface ErrorCodeConstants { //备料计划子ErrorCode ErrorCode PREPARETOISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_000_085_001, "备料计划子不存在"); ErrorCode PREPARETOISSUE_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_085_002, "导入备料计划不能为空"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_CLOSE = new ErrorCode(1_000_085_003, "备料计划状态不支持关闭"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_SUBMIT = new ErrorCode(1_000_085_004, "备料计划状态不支持提交"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_OPEN = new ErrorCode(1_000_085_005, "备料计划状态不支持打开"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_REJECT = new ErrorCode(1_000_085_006, "备料计划状态不支持驳回"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_AGREE = new ErrorCode(1_000_085_007, "备料计划状态不支持审批通过"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_PUBLISH = new ErrorCode(1_000_085_008, "备料计划状态不支持发布"); + ErrorCode PREPARETOISSUE_MAIN_CANNOT_RESETTING = new ErrorCode(1_000_085_009, "备料计划状态不支持重置"); //补料申请主ErrorCode ErrorCode REPLEINSH_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_086_000, "补料申请主不存在"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueDetailController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueDetailController.java index a806644d..1aee8d48 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueDetailController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueDetailController.java @@ -90,23 +90,6 @@ public class PreparetoissueDetailController { return success(PreparetoissueDetailConvert.INSTANCE.convertPage(pageResult)); } - @GetMapping("/export-excel") - @Operation(summary = "导出备料计划子 Excel") - @PreAuthorize("@ss.hasPermission('wms:preparetoissue-detail:export')") - @OperateLog(type = EXPORT) - public void exportPreparetoissueDetailExcel(@Valid PreparetoissueDetailExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = preparetoissueDetailService.getPreparetoissueDetailList(exportReqVO); - // 导出 Excel - List datas = PreparetoissueDetailConvert.INSTANCE.convertList02(list); - for(PreparetoissueDetailExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } - ExcelUtils.write(response, "备料计划子.xls", "数据", PreparetoissueDetailExcelVO.class, datas); - } - @PostMapping("/senior") @Operation(summary = "高级搜索获得备料计划子分页") @PreAuthorize("@ss.hasPermission('wms:preparetoissue-detail:query')") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueMainController.java index b295f232..ab3c18da 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/PreparetoissueMainController.java @@ -3,14 +3,26 @@ package com.win.module.wms.controller.preparetoissue; 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.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.preparetoissue.vo.*; +import com.win.module.wms.controller.production.vo.ProductionMainExcelVO; +import com.win.module.wms.controller.production.vo.ProductionMainImportVO; +import com.win.module.wms.convert.preparetoissue.PreparetoissueDetailConvert; import com.win.module.wms.convert.preparetoissue.PreparetoissueMainConvert; +import com.win.module.wms.convert.production.ProductionMainConvert; +import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; +import com.win.module.wms.dal.mysql.production.ProductionDetailMapper; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.service.preparetoissue.PreparetoissueDetailService; import com.win.module.wms.service.preparetoissue.PreparetoissueMainService; +import com.win.module.wms.service.production.ProductionMainService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -22,8 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; -import java.util.Collection; -import java.util.List; +import java.util.*; import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -34,10 +45,16 @@ import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Validated public class PreparetoissueMainController { + @Resource + private PreparetoissueDetailService preparetoissueDetailService; @Resource private PreparetoissueMainService preparetoissueMainService; @Resource private AdminUserApi userApi; + @Resource + private ProductionMainService productionMainService; + @Resource + private ProductionDetailMapper productionDetailMapper; @PostMapping("/create") @Operation(summary = "创建备料计划主") @@ -89,6 +106,35 @@ public class PreparetoissueMainController { return success(PreparetoissueMainConvert.INSTANCE.convertPage(pageResult)); } + @PostMapping("/senior") + @Operation(summary = "高级搜索获得备料计划主分页") + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:query')") + public CommonResult> getPreparetoissueMainSenior(@Valid @RequestBody CustomConditions conditions) { + PageResult pageResult = preparetoissueMainService.getPreparetoissueMainSenior(conditions); + PageResult result = PreparetoissueMainConvert.INSTANCE.convertPage(pageResult); + for(PreparetoissueMainRespVO vo : result.getList()) { + AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); + //后端创建个字段作为前端展示的虚拟字段 + vo.setCreator(user.getNickname()); + } + 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(PreparetoissueMainDO mainDO : list) { + List subList = preparetoissueDetailService.selectList(mainDO.getId()); + for(PreparetoissueDetailDO detailDO : subList) { + PreparetoissueMainExcelVO vo = PreparetoissueMainConvert.INSTANCE.convert(mainDO, detailDO); + resultList.add(vo); + } + } + return resultList; + } + @GetMapping("/export-excel") @Operation(summary = "导出备料计划主 Excel") @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:export')") @@ -96,28 +142,108 @@ public class PreparetoissueMainController { public void exportPreparetoissueMainExcel(@Valid PreparetoissueMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = preparetoissueMainService.getPreparetoissueMainList(exportReqVO); - // 导出 Excel - List datas = PreparetoissueMainConvert.INSTANCE.convertList02(list); - for(PreparetoissueMainExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); + for(PreparetoissueMainExcelVO vo : resultList) { //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); + vo.setCreator(userApi.getUser(Long.valueOf(vo.getCreator())).getNickname()); + //后端创建个字段作为前端展示的虚拟字段 + vo.setUpdater(userApi.getUser(Long.valueOf(vo.getUpdater())).getNickname()); } - ExcelUtils.write(response, "备料计划主.xls", "数据", PreparetoissueMainExcelVO.class, datas); + ExcelUtils.write(response, "备料计划主.xls", "备料计划主", PreparetoissueMainExcelVO.class, resultList); } - @PostMapping("/senior") - @Operation(summary = "高级搜索获得备料计划主分页") - @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:query')") - public CommonResult> getPreparetoissueMainSenior(@Valid @RequestBody CustomConditions conditions) { - PageResult pageResult = preparetoissueMainService.getPreparetoissueMainSenior(conditions); - PageResult result = PreparetoissueMainConvert.INSTANCE.convertPage(pageResult); - for(PreparetoissueMainRespVO vo : result.getList()) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); + @GetMapping("/export-excel-senior") + @Operation(summary = "导出备料计划主 Excel") + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:export')") + @OperateLog(type = EXPORT) + public void exportProductionMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { + List list = preparetoissueMainService.getPreparetoissueMainList(conditions); + //组装vo + Map mapDropDown = new HashMap<>(); + List resultList = this.getExcelVo(list, mapDropDown); + for(PreparetoissueMainExcelVO vo : resultList) { //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); + vo.setCreator(userApi.getUser(Long.valueOf(vo.getCreator())).getNickname()); + //后端创建个字段作为前端展示的虚拟字段 + vo.setUpdater(userApi.getUser(Long.valueOf(vo.getUpdater())).getNickname()); } - return success(result); + ExcelUtils.write(response, "生产计划.xlsx", "生产计划", PreparetoissueMainExcelVO.class, resultList, mapDropDown); + } + + @GetMapping("/getBomDisassemble") + @Operation(summary = "关闭") + @Parameter(name = "id", description = "编号", required = true) + public CommonResult> getBomDisassemble(@RequestParam("id") Long id) { + ProductionMainDO productionMainDO = productionMainService.getProductionMain(id); + List list = preparetoissueMainService.BomDisassemble(productionMainDO, productionDetailMapper.selectList(productionMainDO.getId())); + return success(PreparetoissueDetailConvert.INSTANCE.convertList03(list)); } + @PutMapping("/close") + @Operation(summary = "关闭") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:close')") + public CommonResult closePreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.closeProductionMain(id); + return success(count > 0); + } + + @PutMapping("/submit") + @Operation(summary = "提交") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:submit')") + public CommonResult submitPreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.submitProductionMain(id); + return success(count > 0); + } + + @PutMapping("/open") + @Operation(summary = "打开") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:open')") + public CommonResult openPreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.openProductionMain(id); + return success(count > 0); + } + + @PutMapping("/reject") + @Operation(summary = "驳回") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:reject')") + public CommonResult rejectPreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.rejectProductionMain(id); + return success(count > 0); + } + + @PutMapping("/agree") + @Operation(summary = "审批通过") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:agree')") + public CommonResult agreePreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.agreeProductionMain(id); + return success(count > 0); + } + + @PutMapping("/publish") + @Operation(summary = "发布") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:publish')") + public CommonResult publishPreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.publishProductionMain(id); + return success(count > 0); + } + + @PutMapping("/resetting") + @Operation(summary = "重置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:preparetoissue-main:resetting')") + public CommonResult resettingPreparetoissueMain(@RequestParam("id") Long id) { + Integer count = preparetoissueMainService.resettingProductionMain(id); + return success(count > 0); + } + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailBaseVO.java index 9d0936dd..e3cb357e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailBaseVO.java @@ -44,7 +44,6 @@ public class PreparetoissueDetailBaseVO { private String remark; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "创建时间不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime createTime; @@ -69,4 +68,7 @@ public class PreparetoissueDetailBaseVO { @Schema(description = "是否可用") private String available; + @Schema(description = "主表ID") + private Long masterId; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailPageReqVO.java index fd210744..0a150f1a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueDetailPageReqVO.java @@ -36,6 +36,9 @@ public class PreparetoissueDetailPageReqVO extends PageParam { @Schema(description = "备注") private String remark; + @Schema(description = "主表ID") + private String masterId; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainCreateReqVO.java index c50a4f00..58a8fb07 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainCreateReqVO.java @@ -1,12 +1,20 @@ package com.win.module.wms.controller.preparetoissue.vo; +import com.win.framework.excel.core.annotations.SubObject; +import com.win.module.wms.controller.production.vo.ProductionDetailCreateReqVO; import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + @Schema(description = "管理后台 - 备料计划主创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class PreparetoissueMainCreateReqVO extends PreparetoissueMainBaseVO { + @SubObject + @Schema(description = "子表数据") + private List subList; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainExcelVO.java index 43adbf70..5a0a483f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/preparetoissue/vo/PreparetoissueMainExcelVO.java @@ -1,7 +1,10 @@ package com.win.module.wms.controller.preparetoissue.vo; +import com.win.module.wms.enums.DictTypeConstants; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + +import java.math.BigDecimal; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; @@ -65,14 +68,39 @@ public class PreparetoissueMainExcelVO { @DictFormat("plan_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 private String status; + @ExcelProperty("是否可用") + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + @ExcelProperty("最后更新时间") private LocalDateTime updateTime; @ExcelProperty("最后更新者用户名") private String updater; - @ExcelProperty(value = "是否可用", converter = DictConvert.class) - @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - private String available; + @ExcelProperty("物品代码") + private String itemCode; + + @ExcelProperty("目标库位") + private String toLocationCode; + + @ExcelProperty("工位") + private String workStation; + + @ExcelProperty("截止时间") + private LocalDateTime dueTime; + + @ExcelProperty("计划数量") + private BigDecimal planQty; + + @ExcelProperty("计量单位") + private String uom; + + @ExcelProperty("是否可用") + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String availableDetail; + + @ExcelProperty("备注") + private String remarkDetail; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java index a6df9a38..0225a7f2 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java @@ -100,7 +100,14 @@ public class ProductionMainController { @PreAuthorize("@ss.hasPermission('wms:production-main:query')") public CommonResult> getProductionMainPage(@Valid ProductionMainPageReqVO pageVO) { PageResult pageResult = productionMainService.getProductionMainPage(pageVO); - return success(ProductionMainConvert.INSTANCE.convertPage(pageResult)); +// return success(ProductionMainConvert.INSTANCE.convertPage(pageResult)); + PageResult result = ProductionMainConvert.INSTANCE.convertPage(pageResult); + result.getList().forEach(item -> { + //后端创建个字段作为前端展示的虚拟字段 + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); + return success(result); } @PostMapping("/senior") @@ -109,11 +116,11 @@ public class ProductionMainController { public CommonResult> getProductionMainSenior(@Valid @RequestBody CustomConditions conditions) { PageResult pageResult = productionMainService.getProductionMainSenior(conditions); PageResult result = ProductionMainConvert.INSTANCE.convertPage(pageResult); - for(ProductionMainRespVO vo : result.getList()) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); + result.getList().forEach(item -> { //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); - } + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); return success(result); } @@ -142,12 +149,11 @@ public class ProductionMainController { //组装vo Map mapDropDown = new HashMap<>(); List resultList = this.getExcelVo(list, mapDropDown); - for(ProductionMainExcelVO vo : resultList) { + resultList.forEach(item -> { //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(userApi.getUser(Long.valueOf(vo.getCreator())).getNickname()); - //后端创建个字段作为前端展示的虚拟字段 - vo.setUpdater(userApi.getUser(Long.valueOf(vo.getUpdater())).getNickname()); - } + item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname()); + item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname()); + }); ExcelUtils.write(response, "生产计划.xls", "生产计划", ProductionMainExcelVO.class, resultList); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueDetailConvert.java index 89988239..ba9f8f91 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueDetailConvert.java @@ -8,6 +8,8 @@ import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailCreat import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailExcelVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailRespVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailUpdateReqVO; +import com.win.module.wms.controller.production.vo.ProductionDetailCreateReqVO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; @@ -34,4 +36,6 @@ public interface PreparetoissueDetailConvert { List convertList02(List list); + List convertList03(List list); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueMainConvert.java index aab7bca9..d20efad1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/preparetoissue/PreparetoissueMainConvert.java @@ -8,7 +8,10 @@ import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainCreateR import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainExcelVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainRespVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainUpdateReqVO; +import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; @@ -33,5 +36,16 @@ public interface PreparetoissueMainConvert { PageResult convertPage(PageResult page); List convertList02(List list); - + @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 = "mainDO.available", target = "available"), + @Mapping(source = "detailDO.available", target = "availableDetail"), + @Mapping(source = "detailDO.remark", target = "remarkDetail"), + }) + PreparetoissueMainExcelVO convert(PreparetoissueMainDO mainDO, PreparetoissueDetailDO detailDO); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueDetailMapper.java index c57c7f06..caa84241 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueDetailMapper.java @@ -10,6 +10,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailExportReqVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailPageReqVO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; import org.apache.ibatis.annotations.Mapper; /** @@ -22,6 +23,7 @@ public interface PreparetoissueDetailMapper extends BaseMapperX selectPage(PreparetoissueDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(PreparetoissueDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(PreparetoissueDetailDO::getToLocationCode, reqVO.getToLocationCode()) .eqIfPresent(PreparetoissueDetailDO::getWorkStation, reqVO.getWorkStation()) .betweenIfPresent(PreparetoissueDetailDO::getDueTime, reqVO.getDueTime()) @@ -42,22 +44,27 @@ public interface PreparetoissueDetailMapper extends BaseMapperX selectList(PreparetoissueDetailExportReqVO reqVO) { + default List selectList(Long masterId) { return selectList(new LambdaQueryWrapperX() - .eqIfPresent(PreparetoissueDetailDO::getToLocationCode, reqVO.getToLocationCode()) - .eqIfPresent(PreparetoissueDetailDO::getWorkStation, reqVO.getWorkStation()) - .betweenIfPresent(PreparetoissueDetailDO::getDueTime, reqVO.getDueTime()) - .eqIfPresent(PreparetoissueDetailDO::getNumber, reqVO.getNumber()) - .eqIfPresent(PreparetoissueDetailDO::getItemCode, reqVO.getItemCode()) - .eqIfPresent(PreparetoissueDetailDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(PreparetoissueDetailDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(PreparetoissueDetailDO::getCreator, reqVO.getCreator()) - .eqIfPresent(PreparetoissueDetailDO::getPlanQty, reqVO.getPlanQty()) - .eqIfPresent(PreparetoissueDetailDO::getUom, reqVO.getUom()) - .betweenIfPresent(PreparetoissueDetailDO::getUpdateTime, reqVO.getUpdateTime()) - .eqIfPresent(PreparetoissueDetailDO::getUpdater, reqVO.getUpdater()) - .eqIfPresent(PreparetoissueDetailDO::getAvailable, reqVO.getAvailable()) - .orderByDesc(PreparetoissueDetailDO::getId)); + .eq(PreparetoissueDetailDO::getMasterId, masterId)); } +// default List selectList(PreparetoissueDetailExportReqVO reqVO) { +// return selectList(new LambdaQueryWrapperX() +// .eqIfPresent(PreparetoissueDetailDO::getToLocationCode, reqVO.getToLocationCode()) +// .eqIfPresent(PreparetoissueDetailDO::getWorkStation, reqVO.getWorkStation()) +// .betweenIfPresent(PreparetoissueDetailDO::getDueTime, reqVO.getDueTime()) +// .eqIfPresent(PreparetoissueDetailDO::getNumber, reqVO.getNumber()) +// .eqIfPresent(PreparetoissueDetailDO::getItemCode, reqVO.getItemCode()) +// .eqIfPresent(PreparetoissueDetailDO::getRemark, reqVO.getRemark()) +// .betweenIfPresent(PreparetoissueDetailDO::getCreateTime, reqVO.getCreateTime()) +// .eqIfPresent(PreparetoissueDetailDO::getCreator, reqVO.getCreator()) +// .eqIfPresent(PreparetoissueDetailDO::getPlanQty, reqVO.getPlanQty()) +// .eqIfPresent(PreparetoissueDetailDO::getUom, reqVO.getUom()) +// .betweenIfPresent(PreparetoissueDetailDO::getUpdateTime, reqVO.getUpdateTime()) +// .eqIfPresent(PreparetoissueDetailDO::getUpdater, reqVO.getUpdater()) +// .eqIfPresent(PreparetoissueDetailDO::getAvailable, reqVO.getAvailable()) +// .orderByDesc(PreparetoissueDetailDO::getId)); +// } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueMainMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueMainMapper.java index 185b3b63..8f318b78 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueMainMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/preparetoissue/PreparetoissueMainMapper.java @@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainExportReqVO; import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainPageReqVO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -68,4 +69,7 @@ public interface PreparetoissueMainMapper 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/preparetoissue/PreparetoissueDetailService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailService.java index ee3d3b1f..a1de9517 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailService.java @@ -2,11 +2,11 @@ package com.win.module.wms.service.preparetoissue; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailCreateReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailExportReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailPageReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailUpdateReqVO; +import com.win.module.wms.controller.preparetoissue.vo.*; +import com.win.module.wms.controller.production.vo.ProductionMainExportReqVO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; +import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; import javax.validation.Valid; import java.util.Collection; @@ -32,14 +32,14 @@ public interface PreparetoissueDetailService { * * @param updateReqVO 更新信息 */ - void updatePreparetoissueDetail(@Valid PreparetoissueDetailUpdateReqVO updateReqVO); + Integer updatePreparetoissueDetail(@Valid PreparetoissueDetailUpdateReqVO updateReqVO); /** * 删除备料计划子 * * @param id 编号 */ - void deletePreparetoissueDetail(Long id); + Integer deletePreparetoissueDetail(Long id); /** * 获得备料计划子 @@ -71,7 +71,7 @@ public interface PreparetoissueDetailService { * @param exportReqVO 查询条件 * @return 备料计划子列表 */ - List getPreparetoissueDetailList(PreparetoissueDetailExportReqVO exportReqVO); +// List getPreparetoissueDetailList(PreparetoissueDetailExportReqVO exportReqVO); /** * 获得用高级搜索户分页列表 @@ -82,4 +82,5 @@ public interface PreparetoissueDetailService { PageResult getPreparetoissueDetailSenior(CustomConditions conditions); + List selectList(Long masterId); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailServiceImpl.java index b50b7d7f..1e675185 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueDetailServiceImpl.java @@ -2,14 +2,26 @@ package com.win.module.wms.service.preparetoissue; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailCreateReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailExportReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailPageReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailUpdateReqVO; +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.enums.serialNumber.RuleCodeEnum; +import com.win.module.wms.controller.preparetoissue.vo.*; import com.win.module.wms.convert.preparetoissue.PreparetoissueDetailConvert; +import com.win.module.wms.convert.preparetoissue.PreparetoissueMainConvert; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; +import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; import com.win.module.wms.dal.mysql.preparetoissue.PreparetoissueDetailMapper; +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.shift.ShiftService; +import com.win.module.wms.service.team.TeamService; +import com.win.module.wms.service.workshop.WorkshopService; +import com.win.module.wms.service.workstation.WorkstationService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -17,6 +29,7 @@ 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.ITEMBASIC_UOM_EXCEPTION; import static com.win.module.wms.enums.ErrorCodeConstants.PREPARETOISSUE_DETAIL_NOT_EXISTS; /** @@ -28,6 +41,26 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PREPARETOISSUE_DETAIL_ @Validated public class PreparetoissueDetailServiceImpl implements PreparetoissueDetailService { + @Resource + private PreparetoissueMainService preparetoissueMainService; + @Resource + private WorkstationService workstationService; + @Resource + private DictDataApi dictDataApi; + @Resource + private ItembasicService itembasicService; + @Resource + private ProductionlineitemService productionlineitemService; + @Resource + private ShiftService shiftService; + @Resource + private TeamService teamService; + @Resource + private ProductionlineService productionlineService; + @Resource + private WorkshopService workshopService; + @Resource + private TrendsApi trendsApi; @Resource private PreparetoissueDetailMapper preparetoissueDetailMapper; @@ -35,26 +68,35 @@ public class PreparetoissueDetailServiceImpl implements PreparetoissueDetailServ public Long createPreparetoissueDetail(PreparetoissueDetailCreateReqVO createReqVO) { // 插入 PreparetoissueDetailDO preparetoissueDetail = PreparetoissueDetailConvert.INSTANCE.convert(createReqVO); + validatePreparetoissueDetailCreate(preparetoissueDetail); preparetoissueDetailMapper.insert(preparetoissueDetail); + //增加操作记录 + trendsApi.createTrends(preparetoissueDetail.getId(), "preparetoissueDetail", "增加了备料计划子表", TrendsTypeEnum.CREATE); // 返回 return preparetoissueDetail.getId(); } @Override - public void updatePreparetoissueDetail(PreparetoissueDetailUpdateReqVO updateReqVO) { + public Integer updatePreparetoissueDetail(PreparetoissueDetailUpdateReqVO updateReqVO) { // 校验存在 validatePreparetoissueDetailExists(updateReqVO.getId()); // 更新 PreparetoissueDetailDO updateObj = PreparetoissueDetailConvert.INSTANCE.convert(updateReqVO); - preparetoissueDetailMapper.updateById(updateObj); + validatePreparetoissueDetailCreate(updateObj); + //增加操作记录 + trendsApi.createTrends(updateObj.getId(), "preparetoissueDetail", "更新了备料计划子表", TrendsTypeEnum.UPDATE); + return preparetoissueDetailMapper.updateById(updateObj); } @Override - public void deletePreparetoissueDetail(Long id) { + @Transactional + public Integer deletePreparetoissueDetail(Long id) { // 校验存在 validatePreparetoissueDetailExists(id); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueDetail", "删除了备料计划子表", TrendsTypeEnum.DELETE); // 删除 - preparetoissueDetailMapper.deleteById(id); + return preparetoissueDetailMapper.deleteById(id); } private void validatePreparetoissueDetailExists(Long id) { @@ -78,14 +120,37 @@ public class PreparetoissueDetailServiceImpl implements PreparetoissueDetailServ return preparetoissueDetailMapper.selectPage(pageReqVO); } - @Override - public List getPreparetoissueDetailList(PreparetoissueDetailExportReqVO exportReqVO) { - return preparetoissueDetailMapper.selectList(exportReqVO); - } +// @Override +// public List getPreparetoissueDetailList(PreparetoissueDetailExportReqVO exportReqVO) { +// return preparetoissueDetailMapper.selectList(exportReqVO); +// } @Override public PageResult getPreparetoissueDetailSenior(CustomConditions conditions) { return preparetoissueDetailMapper.selectSenior(conditions); } + @Override + public List selectList(Long masterId) { + return preparetoissueDetailMapper.selectList(masterId); + } + + /** + * 新增校验 + * @param detailDo + * @return + */ + private void validatePreparetoissueDetailCreate(PreparetoissueDetailDO detailDo) { + // 校验物品代码 + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); + if (!itembasicDO.getUom().equals(detailDo.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, dictDataApi.selectDictValue(detailDo.getUom()).getLabel(), dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel()); + } + PreparetoissueMainDO mainDo = preparetoissueMainService.getPreparetoissueMain(detailDo.getMasterId()); + // 校验工位基础信息 + workstationService.selectWorkstationExist(detailDo.getWorkStation(),mainDo.getWorkshop(),mainDo.getProdLine()); + // 校验生产线和物品关系 + productionlineitemService.productionLineCodeAndpItemCodeExist(mainDo.getProdLine(), detailDo.getItemCode()); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainService.java index ef743889..47904795 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainService.java @@ -2,11 +2,10 @@ package com.win.module.wms.service.preparetoissue; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainCreateReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainExportReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainPageReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainUpdateReqVO; +import com.win.module.wms.controller.preparetoissue.vo.*; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; import javax.validation.Valid; import java.util.Collection; @@ -32,7 +31,7 @@ public interface PreparetoissueMainService { * * @param updateReqVO 更新信息 */ - void updatePreparetoissueMain(@Valid PreparetoissueMainUpdateReqVO updateReqVO); + Integer updatePreparetoissueMain(@Valid PreparetoissueMainUpdateReqVO updateReqVO); /** * 删除备料计划主 @@ -57,6 +56,14 @@ public interface PreparetoissueMainService { */ List getPreparetoissueMainList(Collection ids); + /** + * 获得备料计划主列表, 用于 Excel 导出 + * + * @param conditions 查询条件 + * @return 备料计划主列表 + */ + List getPreparetoissueMainList(CustomConditions conditions); + /** * 获得备料计划主分页 * @@ -82,4 +89,20 @@ public interface PreparetoissueMainService { */ List getPreparetoissueMainList(PreparetoissueMainExportReqVO exportReqVO); + List BomDisassemble(ProductionMainDO mainDO, List detailDOList); + + Integer closeProductionMain(Long id); + + Integer submitProductionMain(Long id); + + Integer openProductionMain(Long id); + + Integer rejectProductionMain(Long id); + + Integer agreeProductionMain(Long id); + + Integer publishProductionMain(Long id); + + Integer resettingProductionMain(Long id); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java index 3d74539e..40be6bc2 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java @@ -1,23 +1,46 @@ package com.win.module.wms.service.preparetoissue; +import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainCreateReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainExportReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainPageReqVO; -import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainUpdateReqVO; +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.bom.vo.BomExportReqVO; +import com.win.module.wms.controller.preparetoissue.vo.*; +import com.win.module.wms.convert.preparetoissue.PreparetoissueDetailConvert; import com.win.module.wms.convert.preparetoissue.PreparetoissueMainConvert; +import com.win.module.wms.convert.production.ProductionDetailConvert; +import com.win.module.wms.convert.production.ProductionMainConvert; +import com.win.module.wms.dal.dataobject.bom.BomDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO; import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; +import com.win.module.wms.dal.dataobject.production.ProductionMainDO; +import com.win.module.wms.dal.mysql.preparetoissue.PreparetoissueDetailMapper; import com.win.module.wms.dal.mysql.preparetoissue.PreparetoissueMainMapper; +import com.win.module.wms.enums.plan.PlanStatusState; +import com.win.module.wms.service.bom.BomService; +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.shift.ShiftService; +import com.win.module.wms.service.team.TeamService; +import com.win.module.wms.service.workshop.WorkshopService; +import com.win.module.wms.service.workstation.WorkstationService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.win.module.wms.enums.ErrorCodeConstants.PREPARETOISSUE_MAIN_NOT_EXISTS; +import static com.win.module.wms.enums.ErrorCodeConstants.*; /** * 备料计划主 Service 实现类 @@ -27,26 +50,68 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PREPARETOISSUE_MAIN_NO @Service @Validated public class PreparetoissueMainServiceImpl implements PreparetoissueMainService { - + @Resource + private BomService bomService; + @Resource + private WorkstationService workstationService; + @Resource + private DictDataApi dictDataApi; + @Resource + private ItembasicService itembasicService; + @Resource + private ProductionlineitemService productionlineitemService; + @Resource + private ShiftService shiftService; + @Resource + private TeamService teamService; + @Resource + private ProductionlineService productionlineService; + @Resource + private WorkshopService workshopService; @Resource private PreparetoissueMainMapper preparetoissueMainMapper; + @Resource + private PreparetoissueDetailMapper preparetoissueDetailMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private SerialNumberApi serialNumberApi; @Override + @Transactional public Long createPreparetoissueMain(PreparetoissueMainCreateReqVO createReqVO) { // 插入 - PreparetoissueMainDO preparetoissueMain = PreparetoissueMainConvert.INSTANCE.convert(createReqVO); - preparetoissueMainMapper.insert(preparetoissueMain); + PreparetoissueMainDO mainDO = PreparetoissueMainConvert.INSTANCE.convert(createReqVO); + List subDOList = PreparetoissueDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + for (PreparetoissueDetailDO detailDO : subDOList) { + this.validatePreparetoissueDetailCreate(mainDO, detailDO); + } + String number = serialNumberApi.generateCode(RuleCodeEnum.MATERIAL_PREPARE_PLAN.getCode()); + mainDO.setNumber(number); + mainDO.setBusinessType("Issue"); // 业务类型:发料 + preparetoissueMainMapper.insert(mainDO); + for (PreparetoissueDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDO.getId()); + detailDO.setNumber(number); + } + preparetoissueDetailMapper.insertBatch(subDOList); + //增加操作记录 + trendsApi.createTrends(mainDO.getId(), "preparetoissueMain", "增加了备料计划", TrendsTypeEnum.CREATE); // 返回 - return preparetoissueMain.getId(); + return mainDO.getId(); } @Override - public void updatePreparetoissueMain(PreparetoissueMainUpdateReqVO updateReqVO) { + @Transactional + public Integer updatePreparetoissueMain(PreparetoissueMainUpdateReqVO updateReqVO) { // 校验存在 validatePreparetoissueMainExists(updateReqVO.getId()); // 更新 PreparetoissueMainDO updateObj = PreparetoissueMainConvert.INSTANCE.convert(updateReqVO); - preparetoissueMainMapper.updateById(updateObj); + this.validatePreparetoissueMainUpdate(updateObj); + //增加操作记录 + trendsApi.createTrends(updateObj.getId(), "preparetoissueMain", "更新了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(updateObj); } @Override @@ -57,10 +122,12 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService preparetoissueMainMapper.deleteById(id); } - private void validatePreparetoissueMainExists(Long id) { - if (preparetoissueMainMapper.selectById(id) == null) { + private PreparetoissueMainDO validatePreparetoissueMainExists(Long id) { + PreparetoissueMainDO existPreparetoissueMainDO = preparetoissueMainMapper.selectById(id); + if (existPreparetoissueMainDO == null) { throw exception(PREPARETOISSUE_MAIN_NOT_EXISTS); } + return existPreparetoissueMainDO; } @Override @@ -73,6 +140,11 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService return preparetoissueMainMapper.selectBatchIds(ids); } + @Override + public List getPreparetoissueMainList(CustomConditions conditions) { + return preparetoissueMainMapper.selectSeniorList(conditions); + } + @Override public PageResult getPreparetoissueMainPage(PreparetoissueMainPageReqVO pageReqVO) { return preparetoissueMainMapper.selectPage(pageReqVO); @@ -88,4 +160,206 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService return preparetoissueMainMapper.selectList(exportReqVO); } + @Override + @Transactional + public Integer closeProductionMain(Long id) { + // 校验存在存在下级单据 + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.close(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_CLOSE); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "关闭了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer submitProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.submit(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_SUBMIT); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "提交了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer openProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.open(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_OPEN); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "打开了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer rejectProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.reject(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_REJECT); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "驳回了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer agreeProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.agree(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_AGREE); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "审批通过了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer publishProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.publish(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_PUBLISH); + } + mainDO.setStatus(planStatusState.getState().getCode()); + // 生成申请单据 +// this.generateRequest(mainDO, productionDetailMapper.selectList(mainDO.getId())); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "发布了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer resettingProductionMain(Long id) { + PreparetoissueMainDO mainDO = validatePreparetoissueMainExists(id); + PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus()); + boolean flag = planStatusState.resetting(); + if(!flag) { + throw new ServiceException(PREPARETOISSUE_MAIN_CANNOT_RESETTING); + } + mainDO.setStatus(planStatusState.getState().getCode()); + //增加操作记录 + trendsApi.createTrends(id, "preparetoissueMain", "重置了备料计划", TrendsTypeEnum.UPDATE); + return preparetoissueMainMapper.updateById(mainDO); + } + + /** + * 新增校验 + * @param detailDo + * @return + */ + private void validatePreparetoissueDetailCreate(PreparetoissueMainDO mainDo, PreparetoissueDetailDO detailDo) { + // 校验物品代码 + ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode()); + if (!itembasicDO.getUom().equals(detailDo.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, dictDataApi.selectDictValue(detailDo.getUom()).getLabel(), dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel()); + } + // 校验车间 基础信息 + workshopService.selectWorkshopExist(mainDo.getWorkshop()); + // 校验生产线基础信息 + productionlineService.productionLineCodeExist(mainDo.getProdLine()); + // 校验班组基础信息 + teamService.selectTeamExist(mainDo.getTeam()); + // 校验班次基础信息 + shiftService.selectShiftExist(mainDo.getShift()); + // 校验工位基础信息 + if (detailDo.getWorkStation() != null) { + workstationService.selectWorkstationExist(detailDo.getWorkStation(),mainDo.getWorkshop(),mainDo.getProdLine()); + } + // 校验生产线和物品关系 +// productionlineitemService.productionLineCodeAndpItemCodeExist(mainDo.getProdLine(), detailDo.getItemCode()); + } + + /** + * 编辑校验 + * @param mainDo + */ + public void validatePreparetoissueMainUpdate(PreparetoissueMainDO mainDo) { + // 校验车间 基础信息 + workshopService.selectWorkshopExist(mainDo.getWorkshop()); + // 校验生产线基础信息 + productionlineService.productionLineCodeExist(mainDo.getProdLine()); + // 校验班组基础信息 + teamService.selectTeamExist(mainDo.getTeam()); + // 校验班次基础信息 + shiftService.selectShiftExist(mainDo.getShift()); + } + + + /** + * bom拆解 + * @param mainDO + * @param detailDOList + * @return + */ + @Override + public List BomDisassemble(ProductionMainDO mainDO, List detailDOList ) { + List subList = new ArrayList<>(); + detailDOList.forEach(item -> { + List> list = new ArrayList<>(); + this.BomRecursion(item.getItemCode(), list); + list.forEach(itemBom -> { + PreparetoissueDetailCreateReqVO preparetoissueDetailCreateReqVO = new PreparetoissueDetailCreateReqVO(); + preparetoissueDetailCreateReqVO.setAvailable(item.getAvailable()); + preparetoissueDetailCreateReqVO.setToLocationCode(productionlineitemService.productionLineCodeAndpItemCodeExist(mainDO.getProductionLine(), item.getItemCode()).getRawLocationCode()); + preparetoissueDetailCreateReqVO.setMasterId(item.getMasterId()); + preparetoissueDetailCreateReqVO.setItemCode(itemBom.get("itemCode").toString()); + preparetoissueDetailCreateReqVO.setPlanQty(new BigDecimal(itemBom.get("qty").toString()).multiply(item.getPlanQty())); + preparetoissueDetailCreateReqVO.setUom(itemBom.get("uom").toString()); + subList.add(preparetoissueDetailCreateReqVO); + }); + }); + return subList; + } + + /** + * bom解析递归 + * @param itemCode + * @param list + */ + private void BomRecursion (String itemCode,List> list) { + BomExportReqVO bomExportReqVO = new BomExportReqVO(); + bomExportReqVO.setProductItemCode(itemCode); + bomExportReqVO.setAvailable("TRUE"); + List bomDOList = bomService.getBomList(bomExportReqVO); + bomDOList.forEach(item -> { + // 判断物品是否是虚零件 + if (itembasicService.selectItembasic(item.getComponentItemCode()).getIsPhantom().equals("TRUE")) { + this.BomRecursion(item.getComponentItemCode(),list); + } else { + Map map = new HashMap<>(); + map.put("itemCode",item.getComponentItemCode()); + map.put("uom",item.getComponentUom()); + map.put("qty",item.getComponentQty()); + list.add(map); + } + }); + } + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java index 91277ca3..20d019ea 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java @@ -15,6 +15,10 @@ 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.bom.vo.BomBaseVO; +import com.win.module.wms.controller.bom.vo.BomExportReqVO; +import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueDetailCreateReqVO; +import com.win.module.wms.controller.preparetoissue.vo.PreparetoissueMainCreateReqVO; import com.win.module.wms.controller.production.vo.*; import com.win.module.wms.controller.work.vo.WorkDetailCreateReqVO; import com.win.module.wms.controller.work.vo.WorkMainImportErrorVO; @@ -23,6 +27,7 @@ import com.win.module.wms.convert.production.ProductionMainConvert; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; import com.win.module.wms.convert.work.WorkDetailConvert; import com.win.module.wms.convert.work.WorkMainConvert; +import com.win.module.wms.dal.dataobject.bom.BomDO; 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.production.ProductionDetailDO; @@ -42,6 +47,7 @@ import com.win.module.wms.dal.mysql.production.ProductionMainMapper; import com.win.module.wms.dal.mysql.productreceiptJob.ProductreceiptJobDetailMapper; import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestMainMapper; import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.plan.PlanStatusEnum; import com.win.module.wms.enums.plan.PlanStatusState; import com.win.module.wms.enums.request.RequestStatusEnum; import com.win.module.wms.enums.request.RequestStatusState; @@ -71,10 +77,7 @@ import javax.validation.Validator; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; +import java.util.*; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.framework.common.pojo.CommonResult.success; @@ -99,9 +102,13 @@ public class ProductionMainServiceImpl implements ProductionMainService { private SerialNumberApi serialNumberApi; @Resource private Validator validator; - @Resource private BomService bomService; + + @Resource + PreparetoissueMainService preparetoissueMainService; + @Resource + private ItembasicService itembasicService; @Resource private ProductionMainMapper productionMainMapper; @Resource @@ -111,8 +118,6 @@ public class ProductionMainServiceImpl implements ProductionMainService { @Resource private ShiftService shiftService; @Resource - private ItembasicService itembasicService; - @Resource private SupplieritemService supplieritemService; @Resource private JobUtils jobUtils; @@ -519,7 +524,19 @@ public class ProductionMainServiceImpl implements ProductionMainService { private void generateRequest(ProductionMainDO mainDO, List detailDOList ) { // 判断单据设置:该计划发布后 是否创建 备料计划 if(switchMapper.selectByCode("CreatePrepareToIssuePlanAfterProductionPlanPublished").getEffectiveSetValue().equals("TRUE")) { -// TODO:先做备料计划导入新增编辑 之后再补充这里 + PreparetoissueMainCreateReqVO preparetoissueMainCreateReqVO = new PreparetoissueMainCreateReqVO(); + preparetoissueMainCreateReqVO.setBeginTime(mainDO.getBeginTime()); + preparetoissueMainCreateReqVO.setEndTime(mainDO.getEndTime()); + preparetoissueMainCreateReqVO.setProductionPlanNumber(mainDO.getNumber()); + preparetoissueMainCreateReqVO.setWorkshop(mainDO.getWorkshop()); + preparetoissueMainCreateReqVO.setProdLine(mainDO.getProductionLine()); + preparetoissueMainCreateReqVO.setShift(mainDO.getShift()); + preparetoissueMainCreateReqVO.setTeam(mainDO.getTeam()); + preparetoissueMainCreateReqVO.setPlanDate(mainDO.getPlanDate()); + preparetoissueMainCreateReqVO.setAvailable(mainDO.getAvailable()); + preparetoissueMainCreateReqVO.setStatus(PlanStatusEnum.NEW.getCode()); + preparetoissueMainCreateReqVO.setSubList(preparetoissueMainService.BomDisassemble(mainDO,detailDOList)); + preparetoissueMainService.createPreparetoissueMain(preparetoissueMainCreateReqVO); } // 判断单据设置:该计划发布后 是否创建 制品收货申请 if(switchMapper.selectByCode("CreateProductReciptRequestAfterProductionPlanPublished").getEffectiveSetValue().equals("TRUE")) {