From 6ee8b8d398e27cd3f9e26ed9d6acb6810d66fa98 Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Fri, 10 Nov 2023 10:17:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=87=E8=B4=AD=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wms/enums/ErrorCodeConstants.java | 1 + .../vo/PurchasereceiptJobMainCreateReqVO.java | 11 +- .../PurchasereceiptRequestMainController.java | 39 ++- .../PurchasereceiptRequestDetailBaseVO.java | 3 + .../PurchasereceiptRequestDetailExcelVO.java | 20 +- ...rchasereceiptRequestDetailExportReqVO.java | 11 +- ...PurchasereceiptRequestDetailPageReqVO.java | 14 +- .../vo/PurchasereceiptRequestMainExcelVO.java | 130 +++++++-- .../PurchasereceiptRequestMainImportVO.java | 6 + .../PurchasereceiptJobDetailConvert.java | 15 +- .../PurchasereceiptJobMainConvert.java | 15 +- .../PurchasereceiptRequestMainConvert.java | 13 + .../PurchasereceiptRequestDetailDO.java | 19 +- .../PurchasereceiptRequestDetailMapper.java | 48 +--- .../PurchasereceiptRequestDetailService.java | 11 + ...rchasereceiptRequestDetailServiceImpl.java | 93 ++++++- ...PurchasereceiptRequestMainServiceImpl.java | 251 +++++++++++++++--- 17 files changed, 537 insertions(+), 163 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 7fbe5648..02434cf7 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 @@ -26,6 +26,7 @@ public interface ErrorCodeConstants { ErrorCode ITEMBASIC_AVAIABLE_NOT_EXISTS = new ErrorCode(1_000_020_014, "是否可用不存在"); ErrorCode ITEMBASIC_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_020_015, "导入物品基础信息不能为空"); ErrorCode ITEMBASIC_EXCEPTION = new ErrorCode(1_000_020_016, "物品基础信息错误:【{}】"); + ErrorCode ITEMBASIC_UOM_EXCEPTION = new ErrorCode(1_000_020_017, "计量单位【{}】错误,应该是【{}】"); //物品包装信息ErrorCode ErrorCode ITEMPACKAGING_NOT_EXISTS = new ErrorCode(1_000_021_000, "物品包装信息 不存在"); ErrorCode ITEMPACKAGING_ITEM_CODE_NOT_EXISTS = new ErrorCode(1_000_021_001, "code不存在"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptJob/vo/PurchasereceiptJobMainCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptJob/vo/PurchasereceiptJobMainCreateReqVO.java index c27d2298..c10ebace 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptJob/vo/PurchasereceiptJobMainCreateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptJob/vo/PurchasereceiptJobMainCreateReqVO.java @@ -1,9 +1,12 @@ package com.win.module.wms.controller.purchasereceiptJob.vo; -import lombok.*; -import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; -import javax.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.Valid; +import java.util.List; @Schema(description = "管理后台 - 采购收货任务主创建 Request VO") @Data @@ -11,4 +14,6 @@ import javax.validation.constraints.*; @ToString(callSuper = true) public class PurchasereceiptJobMainCreateReqVO extends PurchasereceiptJobMainBaseVO { + @Schema(description = "子表数据") + private List<@Valid PurchasereceiptJobDetailCreateReqVO> subList; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/PurchasereceiptRequestMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/PurchasereceiptRequestMainController.java index 3297475e..fffedaa0 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/PurchasereceiptRequestMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/PurchasereceiptRequestMainController.java @@ -3,6 +3,7 @@ package com.win.module.wms.controller.purchasereceiptRequest; 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; @@ -10,7 +11,10 @@ import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.controller.purchasereceiptRequest.vo.*; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestMainConvert; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; +import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.service.purchasereceiptRequest.PurchasereceiptRequestDetailService; import com.win.module.wms.service.purchasereceiptRequest.PurchasereceiptRequestMainService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -40,6 +44,8 @@ public class PurchasereceiptRequestMainController { @Resource private PurchasereceiptRequestMainService purchasereceiptRequestMainService; + @Resource + private PurchasereceiptRequestDetailService purchasereceiptRequestDetailService; @Resource private AdminUserApi userApi; @@ -115,14 +121,33 @@ public class PurchasereceiptRequestMainController { public void exportPurchasereceiptRequestMainExcel(@Valid PurchasereceiptRequestMainExportReqVO exportReqVO, HttpServletResponse response) throws IOException { List list = purchasereceiptRequestMainService.getPurchasereceiptRequestMainList(exportReqVO); - // 导出 Excel - List datas = PurchasereceiptRequestMainConvert.INSTANCE.convertList02(list); - for(PurchasereceiptRequestMainExcelVO vo : datas) { - AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator())); - //后端创建个字段作为前端展示的虚拟字段 - vo.setCreator(user.getNickname()); + //组装vo + Map mapDropDown = new HashMap<>(); + String[] transferMode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRANSFER_MODE); + mapDropDown.put(4, transferMode); + String[] locationType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE); + mapDropDown.put(7, locationType); + mapDropDown.put(8, locationType); + String[] requestStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.REQUEST_STATUS); + mapDropDown.put(18, requestStatus); + String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS); + mapDropDown.put(31, inventoryStatus); + String[] packUnit = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PACK_UNIT); + mapDropDown.put(36, packUnit); + String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); + mapDropDown.put(38, uom); + mapDropDown.put(47, uom); + List resultList = new ArrayList<>(); + // 导出 + for(PurchasereceiptRequestMainDO mainDO : list) { + List subList = purchasereceiptRequestDetailService.selectList(mainDO.getId()); + for(PurchasereceiptRequestDetailDO detailDO : subList) { + PurchasereceiptRequestMainExcelVO vo = PurchasereceiptRequestMainConvert.INSTANCE.convert(mainDO, detailDO); + resultList.add(vo); + } } - ExcelUtils.write(response, "采购收货申请主.xls", "数据", PurchasereceiptRequestMainExcelVO.class, datas); + // 导出 Excel + ExcelUtils.write(response, "采购收货申请主.xlsx", "数据", PurchasereceiptRequestMainExcelVO.class, resultList, mapDropDown); } @GetMapping("/get-import-template") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailBaseVO.java index bd70d4b0..3b800281 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailBaseVO.java @@ -53,6 +53,9 @@ public class PurchasereceiptRequestDetailBaseVO { @Schema(description = "从库位代码", requiredMode = Schema.RequiredMode.REQUIRED) private String fromLocationCode; + @Schema(description = "默认库位代码", requiredMode = Schema.RequiredMode.REQUIRED) + private String defaultToLocationCode; + @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) @NotBlank(message = "订单号不能为空") private String poNumber; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExcelVO.java index f214d718..7a35e123 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExcelVO.java @@ -1,21 +1,12 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; - import com.alibaba.excel.annotation.ExcelProperty; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; /** @@ -54,6 +45,9 @@ public class PurchasereceiptRequestDetailExcelVO { @ExcelProperty("从库位代码") private String fromLocationCode; + @ExcelProperty("默认库位代码") + private String defaultToLocationCode; + @ExcelProperty("订单号") private String poNumber; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExportReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExportReqVO.java index b9bce06b..006e7273 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExportReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailExportReqVO.java @@ -1,13 +1,11 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; -import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; -import com.win.framework.common.pojo.PageParam; import java.time.LocalDateTime; -import org.springframework.format.annotation.DateTimeFormat; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -45,6 +43,9 @@ public class PurchasereceiptRequestDetailExportReqVO { @Schema(description = "从库位代码") private String fromLocationCode; + @Schema(description = "默认库位代码") + private String defaultToLocationCode; + @Schema(description = "订单号") private String poNumber; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailPageReqVO.java index 15b87299..910af587 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailPageReqVO.java @@ -1,12 +1,13 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; -import lombok.*; - -import java.math.BigDecimal; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; 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; @@ -17,6 +18,9 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY @ToString(callSuper = true) public class PurchasereceiptRequestDetailPageReqVO extends PageParam { + @Schema(description = "主表ID") + private Long masterId; + @Schema(description = "包装号") private String packingNumber; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainExcelVO.java index aadb3b82..106dd441 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainExcelVO.java @@ -1,16 +1,13 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; - import com.alibaba.excel.annotation.ExcelProperty; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; /** @@ -34,7 +31,7 @@ public class PurchasereceiptRequestMainExcelVO { private String carrierCode; @ExcelProperty(value = "运输方式", converter = DictConvert.class) - @DictFormat("transfer_mode") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.TRANSFER_MODE) // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 private String transferMode; @ExcelProperty("从仓库代码") @@ -44,11 +41,11 @@ public class PurchasereceiptRequestMainExcelVO { private String toWarehouseCode; @ExcelProperty(value = "从库位类型范围", converter = DictConvert.class) - @DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.LOCATION_TYPE) private String fromLocationTypes; @ExcelProperty(value = "到库位类型范围", converter = DictConvert.class) - @DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.LOCATION_TYPE) private String toLocationTypes; @ExcelProperty("从库区代码范围") @@ -69,12 +66,6 @@ public class PurchasereceiptRequestMainExcelVO { @ExcelProperty("备注") private String remark; - @ExcelProperty("创建时间") - private LocalDateTime createTime; - - @ExcelProperty("创建者用户名") - private String creator; - @ExcelProperty("申请时间") private LocalDateTime requestTime; @@ -84,14 +75,8 @@ public class PurchasereceiptRequestMainExcelVO { @ExcelProperty("部门") private String departmentCode; - @ExcelProperty("最后更新时间") - private LocalDateTime updateTime; - - @ExcelProperty("最后更新者用户名") - private String updater; - @ExcelProperty(value = "状态", converter = DictConvert.class) - @DictFormat("request_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @DictFormat(DictTypeConstants.REQUEST_STATUS) private String status; @ExcelProperty("自动提交") @@ -106,8 +91,101 @@ public class PurchasereceiptRequestMainExcelVO { @ExcelProperty("直接生成记录") private String directCreateRecord; - @ExcelProperty(value = "车牌号", converter = DictConvert.class) - @DictFormat("vehicle_plate_number") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + @ExcelProperty(value = "车牌号") private String vehiclePlateNumber; + @ExcelProperty("包装号") + private String packingNumber; + + @ExcelProperty("器具号") + private String containerNumber; + + @ExcelProperty("批次") + private String batch; + + @ExcelProperty("替代批次") + private String altBatch; + + @ExcelProperty("到货日期") + private LocalDateTime arriveDate; + + @ExcelProperty("生产日期") + private LocalDateTime produceDate; + + @ExcelProperty("过期日期") + private LocalDateTime expireDate; + + @ExcelProperty(value = "库存状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.INVENTORY_STATUS) + private String inventoryStatus; + + @ExcelProperty("从库位代码") + private String fromLocationCode; + + @ExcelProperty("订单号") + private String poNumber; + + @ExcelProperty("订单行") + private String poLine; + + @ExcelProperty("标包数量") + private BigDecimal stdPackQty; + + @ExcelProperty(value = "标包单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PACK_UNIT) + private String stdPackUnit; + + @ExcelProperty("供应商计量数量") + private BigDecimal supplierPackQty; + + @ExcelProperty(value = "供应商计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String supplierPackUnit; + + @ExcelProperty("转换率") + private BigDecimal convertRate; + + @ExcelProperty("物品代码") + private String itemCode; + + @ExcelProperty("备注2") + private String remarkDetail; + + @ExcelProperty("物品名称") + private String itemName; + + @ExcelProperty("物品描述1") + private String itemDesc1; + + @ExcelProperty("物品描述2") + private String itemDesc2; + + @ExcelProperty("项目代码") + private String projectCode; + + @ExcelProperty("数量") + private BigDecimal qty; + + @ExcelProperty(value = "计量单位", converter = DictConvert.class) + @DictFormat(DictTypeConstants.UOM) + private String uom; + + @ExcelProperty("从货主代码") + private String fromOwnerCode; + + @ExcelProperty("到货主代码") + private String toOwnerCode; + + @ExcelProperty("最后更新时间") + private LocalDateTime updateTime; + + @ExcelProperty("最后更新者用户名") + private String updater; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @ExcelProperty("创建者用户名") + private String creator; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainImportVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainImportVO.java index 56440b11..e2602d85 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainImportVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainImportVO.java @@ -1,6 +1,7 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -30,6 +31,11 @@ public class PurchasereceiptRequestMainImportVO { @ExcelProperty("订单号") private String poNumber; + @NotBlank(message="订单号不能为空") + @ExcelProperty("订单号") + @Schema(description = "默认库位代码") + private String defaultToLocationCode; + @NotBlank(message="订单行不能为空") @ExcelProperty("订单行") private String poLine; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobDetailConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobDetailConvert.java index 6e50e2eb..2fe3ea40 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobDetailConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobDetailConvert.java @@ -1,13 +1,16 @@ package com.win.module.wms.convert.purchasereceiptJob; -import java.util.*; - import com.win.framework.common.pojo.PageResult; - +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobDetailCreateReqVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobDetailExcelVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobDetailRespVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobDetailUpdateReqVO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobDetailDO; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import com.win.module.wms.controller.purchasereceiptJob.vo.*; -import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobDetailDO; + +import java.util.List; /** * 采购收货任务子 Convert @@ -31,4 +34,6 @@ public interface PurchasereceiptJobDetailConvert { List convertList02(List list); + PurchasereceiptJobDetailCreateReqVO convert(PurchasereceiptRequestDetailDO bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobMainConvert.java index 1a6b0997..063ba76f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptJob/PurchasereceiptJobMainConvert.java @@ -1,13 +1,16 @@ package com.win.module.wms.convert.purchasereceiptJob; -import java.util.*; - import com.win.framework.common.pojo.PageResult; - +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobMainCreateReqVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobMainExcelVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobMainRespVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobMainUpdateReqVO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO; +import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import com.win.module.wms.controller.purchasereceiptJob.vo.*; -import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO; + +import java.util.List; /** * 采购收货任务主 Convert @@ -31,4 +34,6 @@ public interface PurchasereceiptJobMainConvert { List convertList02(List list); + PurchasereceiptJobMainCreateReqVO convert(PurchasereceiptRequestMainDO bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptRequest/PurchasereceiptRequestMainConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptRequest/PurchasereceiptRequestMainConvert.java index d06e7f47..03d55ddc 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptRequest/PurchasereceiptRequestMainConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptRequest/PurchasereceiptRequestMainConvert.java @@ -5,6 +5,8 @@ import com.win.module.wms.controller.purchasereceiptRequest.vo.*; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import java.util.List; @@ -33,4 +35,15 @@ public interface PurchasereceiptRequestMainConvert { PurchasereceiptRequestMainImportErrorVO convert(PurchasereceiptRequestMainCreateReqVO mainVo, PurchasereceiptRequestDetailDO detailDo); + @Mappings({ + @Mapping(source = "mainDO.number", target = "number"), + @Mapping(source = "mainDO.remark", target = "remark"), + @Mapping(source = "detailDO.remark", target = "remarkDetail"), + @Mapping(source = "mainDO.createTime", target = "createTime"), + @Mapping(source = "mainDO.creator", target = "creator"), + @Mapping(source = "mainDO.updateTime", target = "updateTime"), + @Mapping(source = "mainDO.updater", target = "updater"), + }) + PurchasereceiptRequestMainExcelVO convert(PurchasereceiptRequestMainDO mainDO, PurchasereceiptRequestDetailDO detailDO); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasereceiptRequest/PurchasereceiptRequestDetailDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasereceiptRequest/PurchasereceiptRequestDetailDO.java index 303d0473..5312bbdd 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasereceiptRequest/PurchasereceiptRequestDetailDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasereceiptRequest/PurchasereceiptRequestDetailDO.java @@ -1,18 +1,13 @@ package com.win.module.wms.dal.dataobject.purchasereceiptRequest; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.sun.xml.bind.v2.TODO; +import com.win.framework.mybatis.core.dataobject.BaseDO; import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; + import java.math.BigDecimal; import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import com.win.framework.mybatis.core.dataobject.BaseDO; /** * 采购收货申请子 DO @@ -71,6 +66,10 @@ public class PurchasereceiptRequestDetailDO extends BaseDO { * 从库位代码 */ private String fromLocationCode; + /** + * 默认库位代码 + */ + private String defaultToLocationCode; /** * 订单号 */ diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasereceiptRequest/PurchasereceiptRequestDetailMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasereceiptRequest/PurchasereceiptRequestDetailMapper.java index 915cb103..5d8c6121 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasereceiptRequest/PurchasereceiptRequestDetailMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasereceiptRequest/PurchasereceiptRequestDetailMapper.java @@ -1,17 +1,16 @@ package com.win.module.wms.dal.mysql.purchasereceiptRequest; -import java.util.*; - import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; -import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; -import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestDetailExportReqVO; import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestDetailPageReqVO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 采购收货申请子 Mapper * @@ -22,6 +21,7 @@ public interface PurchasereceiptRequestDetailMapper extends BaseMapperX selectPage(PurchasereceiptRequestDetailPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(PurchasereceiptRequestDetailDO::getMasterId, reqVO.getMasterId()) .eqIfPresent(PurchasereceiptRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) .eqIfPresent(PurchasereceiptRequestDetailDO::getContainerNumber, reqVO.getContainerNumber()) .eqIfPresent(PurchasereceiptRequestDetailDO::getBatch, reqVO.getBatch()) @@ -52,46 +52,16 @@ public interface PurchasereceiptRequestDetailMapper extends BaseMapperX selectSenior(CustomConditions conditions) { return selectPage(conditions, QueryWrapperUtils.structure(conditions)); } - default List selectList(PurchasereceiptRequestDetailExportReqVO reqVO) { + + default List selectList(Long masterId) { return selectList(new LambdaQueryWrapperX() - .eqIfPresent(PurchasereceiptRequestDetailDO::getPackingNumber, reqVO.getPackingNumber()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getContainerNumber, reqVO.getContainerNumber()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getBatch, reqVO.getBatch()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getAltBatch, reqVO.getAltBatch()) - .betweenIfPresent(PurchasereceiptRequestDetailDO::getArriveDate, reqVO.getArriveDate()) - .betweenIfPresent(PurchasereceiptRequestDetailDO::getProduceDate, reqVO.getProduceDate()) - .betweenIfPresent(PurchasereceiptRequestDetailDO::getExpireDate, reqVO.getExpireDate()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getInventoryStatus, reqVO.getInventoryStatus()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getFromLocationCode, reqVO.getFromLocationCode()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getPoNumber, reqVO.getPoNumber()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getPoLine, reqVO.getPoLine()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getStdPackQty, reqVO.getStdPackQty()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getStdPackUnit, reqVO.getStdPackUnit()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getSupplierPackQty, reqVO.getSupplierPackQty()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getSupplierPackUnit, reqVO.getSupplierPackUnit()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getConvertRate, reqVO.getConvertRate()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getNumber, reqVO.getNumber()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getItemCode, reqVO.getItemCode()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getRemark, reqVO.getRemark()) - .likeIfPresent(PurchasereceiptRequestDetailDO::getItemName, reqVO.getItemName()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getItemDesc1, reqVO.getItemDesc1()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getItemDesc2, reqVO.getItemDesc2()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getProjectCode, reqVO.getProjectCode()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getQty, reqVO.getQty()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getUom, reqVO.getUom()) - .betweenIfPresent(PurchasereceiptRequestDetailDO::getUpdateTime, reqVO.getUpdateTime()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getUpdater, reqVO.getUpdater()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode()) - .betweenIfPresent(PurchasereceiptRequestDetailDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(PurchasereceiptRequestDetailDO::getCreator, reqVO.getCreator()) - .orderByDesc(PurchasereceiptRequestDetailDO::getId)); + .eq(PurchasereceiptRequestDetailDO::getMasterId, masterId)); } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailService.java index 1154e13d..80d9a382 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailService.java @@ -8,6 +8,7 @@ import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRe import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import javax.validation.Valid; +import java.util.List; /** * 采购收货申请子 Service 接口 @@ -23,6 +24,7 @@ public interface PurchasereceiptRequestDetailService { * @return 编号 */ Long createPurchasereceiptRequestDetail(@Valid PurchasereceiptRequestDetailCreateReqVO createReqVO); + /** * 获得用高级搜索户分页列表 * @@ -30,6 +32,7 @@ public interface PurchasereceiptRequestDetailService { * @return 分页列表 */ PageResult getPurchasereceiptRequestDetailSenior(CustomConditions conditions); + /** * 更新采购收货申请子 * @@ -60,4 +63,12 @@ public interface PurchasereceiptRequestDetailService { */ PageResult getPurchasereceiptRequestDetailPage(PurchasereceiptRequestDetailPageReqVO pageReqVO); + /** + * 根据主表id查询 + * + * @param masterId 主表id + * @return + */ + List selectList(Long masterId); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailServiceImpl.java index f8d42512..da83fb9b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestDetailServiceImpl.java @@ -2,18 +2,29 @@ package com.win.module.wms.service.purchasereceiptRequest; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.api.trends.TrendsApi; +import com.win.module.infra.enums.TrendsTypeEnum; import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestDetailCreateReqVO; import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestDetailPageReqVO; import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestDetailUpdateReqVO; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; +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.itempackaging.ItempackagingDO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import com.win.module.wms.dal.mysql.purchasereceiptRequest.PurchasereceiptRequestDetailMapper; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.itempackaging.ItempackagingService; +import com.win.module.wms.util.JobUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +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.PURCHASERECEIPT_REQUEST_DETAIL_NOT_EXISTS; /** @@ -27,14 +38,25 @@ public class PurchasereceiptRequestDetailServiceImpl implements PurchasereceiptR @Resource private PurchasereceiptRequestDetailMapper purchasereceiptRequestDetailMapper; + @Resource + private TrendsApi trendsApi; + @Resource + private JobUtils jobUtils; + @Resource + private ItembasicService itembasicService; + @Resource + private ItempackagingService itempackagingService; @Override + @Transactional public Long createPurchasereceiptRequestDetail(PurchasereceiptRequestDetailCreateReqVO createReqVO) { // 插入 - PurchasereceiptRequestDetailDO purchasereceiptRequestDetail = PurchasereceiptRequestDetailConvert.INSTANCE.convert(createReqVO); - purchasereceiptRequestDetailMapper.insert(purchasereceiptRequestDetail); + PurchasereceiptRequestDetailDO purchasereceiptRequestDetailDO = PurchasereceiptRequestDetailConvert.INSTANCE.convert(createReqVO); + validatePurchasereceiptRequestDetailCreate(purchasereceiptRequestDetailDO); + purchasereceiptRequestDetailMapper.insert(purchasereceiptRequestDetailDO); + trendsApi.createTrends(purchasereceiptRequestDetailDO.getId(), "purchasereceiptRequestDetail", "增加了采购收货子表", TrendsTypeEnum.CREATE); // 返回 - return purchasereceiptRequestDetail.getId(); + return purchasereceiptRequestDetailDO.getId(); } @Override @@ -43,26 +65,32 @@ public class PurchasereceiptRequestDetailServiceImpl implements PurchasereceiptR } @Override + @Transactional public Integer updatePurchasereceiptRequestDetail(PurchasereceiptRequestDetailUpdateReqVO updateReqVO) { // 校验存在 validatePurchasereceiptRequestDetailExists(updateReqVO.getId()); // 更新 PurchasereceiptRequestDetailDO updateObj = PurchasereceiptRequestDetailConvert.INSTANCE.convert(updateReqVO); + trendsApi.createTrends(updateObj.getId(), "purchasereceiptRequestDetail", updateObj.toString(), TrendsTypeEnum.UPDATE); return purchasereceiptRequestDetailMapper.updateById(updateObj); } @Override + @Transactional public Integer deletePurchasereceiptRequestDetail(Long id) { // 校验存在 - validatePurchasereceiptRequestDetailExists(id); + PurchasereceiptRequestDetailDO purchasereceiptRequestDetailDO = validatePurchasereceiptRequestDetailExists(id); + trendsApi.createTrends(id, "purchasereceiptRequestDetail", purchasereceiptRequestDetailDO.toString(), TrendsTypeEnum.DELETE); // 删除 return purchasereceiptRequestDetailMapper.deleteById(id); } - private void validatePurchasereceiptRequestDetailExists(Long id) { - if (purchasereceiptRequestDetailMapper.selectById(id) == null) { + private PurchasereceiptRequestDetailDO validatePurchasereceiptRequestDetailExists(Long id) { + PurchasereceiptRequestDetailDO purchasereceiptRequestDetailDO = purchasereceiptRequestDetailMapper.selectById(id); + if (purchasereceiptRequestDetailDO == null) { throw exception(PURCHASERECEIPT_REQUEST_DETAIL_NOT_EXISTS); } + return purchasereceiptRequestDetailDO; } @Override @@ -75,4 +103,57 @@ public class PurchasereceiptRequestDetailServiceImpl implements PurchasereceiptR return purchasereceiptRequestDetailMapper.selectPage(pageReqVO); } + @Override + public List selectList(Long masterId) { + return purchasereceiptRequestDetailMapper.selectList(masterId); + } + + /** + * 校验创建,并赋值一些参数 + * @param detailDo + * @return + */ + private void validatePurchasereceiptRequestDetailCreate(PurchasereceiptRequestDetailDO detailDo) { + ItembasicDO itembasicDO = this.validateItem(detailDo); + if(!itembasicDO.getUom().equals(itembasicDO.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, itembasicDO.getUom(), itembasicDO.getUom()); + } + this.validateItemPacking(detailDo); + this.validateBusinesstype(itembasicDO.getType()); + } + + /** + * 校验物品信息并赋值 + * @param detailDo + * @return + */ + private ItembasicDO validateItem(PurchasereceiptRequestDetailDO 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 detailDo + */ + private void validateItemPacking(PurchasereceiptRequestDetailDO detailDo) { + ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode()); + detailDo.setStdPackQty(itempackagingDO.getStdPackQty()); + detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit()); + } + + /** + * 校验业务类型 + * @param itemType + * @return + */ + private void validateBusinesstype(String itemType) { + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchaseReceiptRequest"); + jobUtils.ifInType(itemType, businesstypeDO); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java index c7f289c9..30c5521e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java @@ -12,24 +12,37 @@ 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.purchasereceiptJob.vo.PurchasereceiptJobDetailCreateReqVO; +import com.win.module.wms.controller.purchasereceiptJob.vo.PurchasereceiptJobMainCreateReqVO; import com.win.module.wms.controller.purchasereceiptRequest.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; +import com.win.module.wms.convert.purchasereceiptJob.PurchasereceiptJobDetailConvert; +import com.win.module.wms.convert.purchasereceiptJob.PurchasereceiptJobMainConvert; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestMainConvert; +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.itempackaging.ItempackagingDO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobDetailDO; +import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; +import com.win.module.wms.dal.mysql.purchasereceiptJob.PurchasereceiptJobDetailMapper; import com.win.module.wms.dal.mysql.purchasereceiptJob.PurchasereceiptJobMainMapper; import com.win.module.wms.dal.mysql.purchasereceiptRequest.PurchasereceiptRequestDetailMapper; import com.win.module.wms.dal.mysql.purchasereceiptRequest.PurchasereceiptRequestMainMapper; import com.win.module.wms.enums.request.RequestStatusEnum; import com.win.module.wms.enums.request.RequestStatusState; import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.itempackaging.ItempackagingService; import com.win.module.wms.service.requestsetting.RequestsettingService; import com.win.module.wms.service.rule.RuleService; import com.win.module.wms.service.supplier.SupplierService; import com.win.module.wms.service.supplieritem.SupplieritemService; +import com.win.module.wms.util.JobUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; @@ -56,6 +69,8 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq @Resource private ItembasicService itembasicService; @Resource + private ItempackagingService itempackagingService; + @Resource private SupplierService supplierService; @Resource private SupplieritemService supplieritemService; @@ -71,15 +86,20 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq private RequestsettingService requestsettingService; @Resource private PurchasereceiptJobMainMapper purchasereceiptJobMainMapper; + @Resource + private PurchasereceiptJobDetailMapper purchasereceiptJobDetailMapper; + @Resource + private JobUtils jobUtils; @Override + @Transactional public Long createPurchasereceiptRequestMain(PurchasereceiptRequestMainCreateReqVO createReqVO) { // 插入 PurchasereceiptRequestMainDO mainDO = PurchasereceiptRequestMainConvert.INSTANCE.convert(createReqVO); this.validatePurchasereceiptRequestMainCreate(mainDO); List subDOList = PurchasereceiptRequestDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); for (PurchasereceiptRequestDetailDO detailDO : subDOList) { - this.validatePurchasereceiptRequestDetailCreate(detailDO); + this.validatePurchasereceiptRequestDetailCreate(mainDO, detailDO); } String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); mainDO.setNumber(number); @@ -92,7 +112,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); //调用自动执行方法 if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { - + this.generateJob(mainDO, subDOList); } purchasereceiptRequestMainMapper.insert(mainDO); for (PurchasereceiptRequestDetailDO detailDO : subDOList) { @@ -101,20 +121,21 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } purchasereceiptRequestDetailMapper.insertBatch(subDOList); //增加操作记录 - trendsApi.createTrends(requestsettingDO.getId(), "purchasereceiptRequest", "增加了采购收货", TrendsTypeEnum.CREATE); + trendsApi.createTrends(requestsettingDO.getId(), "purchasereceiptRequestMain", "增加了采购收货", TrendsTypeEnum.CREATE); // 返回 return mainDO.getId(); } @Override + @Transactional public Integer updatePurchasereceiptRequestMain(PurchasereceiptRequestMainUpdateReqVO updateReqVO) { // 校验存在 PurchasereceiptRequestMainDO existPurchasereceiptRequestMainDO = validatePurchasereceiptRequestMainExists(updateReqVO.getId()); if(existPurchasereceiptRequestMainDO.getStatus().equals(RequestStatusEnum.NEW.getCode())) { - throw new ServiceException(PURCHASERECEIPT_REQUEST_STATUS_NOT_NEW); + throw exception(PURCHASERECEIPT_REQUEST_STATUS_NOT_NEW); } //增加操作记录 - trendsApi.createTrends(updateReqVO.getId(), "purchasereceiptRequest", existPurchasereceiptRequestMainDO.toString(), TrendsTypeEnum.UPDATE); + trendsApi.createTrends(updateReqVO.getId(), "purchasereceiptRequestMain", existPurchasereceiptRequestMainDO.toString(), TrendsTypeEnum.UPDATE); // 更新 PurchasereceiptRequestMainDO updateObj = PurchasereceiptRequestMainConvert.INSTANCE.convert(updateReqVO); return purchasereceiptRequestMainMapper.updateById(updateObj); @@ -126,6 +147,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } @Override + @Transactional public Integer deletePurchasereceiptRequestMain(Long id) { // 校验存在 PurchasereceiptRequestMainDO existPurchasereceiptRequestMainDO = validatePurchasereceiptRequestMainExists(id); @@ -134,7 +156,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq throw new ServiceException(PURCHASERECEIPT_REQUEST_JOB_EXISTS); } //增加操作记录 - trendsApi.createTrends(id, "purchasereceiptRequest", existPurchasereceiptRequestMainDO.toString(), TrendsTypeEnum.DELETE); + trendsApi.createTrends(id, "purchasereceiptRequestMain", existPurchasereceiptRequestMainDO.toString(), TrendsTypeEnum.DELETE); // 删除子表数据 Map map = new HashMap<>(); map.put("master_id", id); @@ -173,6 +195,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } @Override + @Transactional public List importPurchasereceiptRequestMainList(List datas, Integer mode, boolean updatePart) { if (CollUtil.isEmpty(datas)) { throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); @@ -186,7 +209,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq // 是否有错误数据 boolean flag = true; for (PurchasereceiptRequestDetailDO detailDO : subDOList) { - String messageDetail = this.validatePurchasereceiptRequestDetailImport(detailDO); + String messageDetail = this.validatePurchasereceiptRequestDetailImport(mainDO, detailDO); if(!messageMain.isEmpty() || messageDetail.isEmpty()) { PurchasereceiptRequestMainImportErrorVO importErrorVO = PurchasereceiptRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); importErrorVO.setImportStatus("失败"); @@ -203,7 +226,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq //if(existPurchasereceiptRequestMainDO == null && mode != 3) {//新增 purchasereceiptRequestMainMapper.insert(mainDO); //增加操作记录 - trendsApi.createTrends(mainDO.getId(), "purchasereceiptRequest", "导入了采购收货", TrendsTypeEnum.CREATE); + trendsApi.createTrends(mainDO.getId(), "purchasereceiptRequestMain", "导入了采购收货", TrendsTypeEnum.CREATE); String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); mainDO.setNumber(number); RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); @@ -219,7 +242,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } //调用自动执行方法 if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { - + this.generateJob(mainDO, subDOList); } purchasereceiptRequestDetailMapper.insertBatch(subDOList); //} else if(existPurchasereceiptRequestMainDO != null && existPurchasereceiptRequestMainDO.getStatus().equals(RequestStatusEnum.NEW.getCode()) && mode != 2) {//修改 @@ -248,6 +271,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } @Override + @Transactional public Integer closePurchasereceiptRequestMain(Long id) { // 校验存在存在下级单据 PurchasereceiptRequestMainDO mainDO = validatePurchasereceiptRequestMainExists(id); @@ -260,11 +284,13 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq if(!flag) { throw new ServiceException(PURCHASERECEIPT_REQUEST_CANNOT_CLOSE); } - mainDO.setStatus(requestStatusState.getState().getCode()); + mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录 + trendsApi.createTrends(id, "purchasereceiptRequest", "关闭了采购收货", TrendsTypeEnum.UPDATE); return purchasereceiptRequestMainMapper.updateById(mainDO); } @Override + @Transactional public Integer submitPurchasereceiptRequestMain(Long id) { PurchasereceiptRequestMainDO mainDO = validatePurchasereceiptRequestMainExists(id); RequestStatusState requestStatusState = new RequestStatusState(); @@ -275,12 +301,14 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq mainDO.setStatus(requestStatusState.getState().getCode()); //调用自动执行方法 if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { - + this.generateJob(mainDO, purchasereceiptRequestDetailMapper.selectList(mainDO.getId())); } + trendsApi.createTrends(id, "purchasereceiptRequest", "提交了采购收货", TrendsTypeEnum.UPDATE); return purchasereceiptRequestMainMapper.updateById(mainDO); } @Override + @Transactional public Integer agreePurchasereceiptRequestMain(Long id) { // 校验存在 PurchasereceiptRequestMainDO mainDO = validatePurchasereceiptRequestMainExists(id); @@ -292,12 +320,14 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq mainDO.setStatus(requestStatusState.getState().getCode()); //调用自动执行方法 if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { - + this.generateJob(mainDO, purchasereceiptRequestDetailMapper.selectList(mainDO.getId())); } + trendsApi.createTrends(id, "purchasereceiptRequest", "审批同意了采购收货", TrendsTypeEnum.UPDATE); return purchasereceiptRequestMainMapper.updateById(mainDO); } @Override + @Transactional public Integer abortPurchasereceiptRequestMain(Long id) { // 校验存在 PurchasereceiptRequestMainDO mainDO = validatePurchasereceiptRequestMainExists(id); @@ -307,6 +337,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq throw new ServiceException(PURCHASERECEIPT_REQUEST_CANNOT_CLOSE); } mainDO.setStatus(requestStatusState.getState().getCode()); + trendsApi.createTrends(id, "purchasereceiptRequest", "审批拒绝了采购收货", TrendsTypeEnum.UPDATE); return purchasereceiptRequestMainMapper.updateById(mainDO); } @@ -337,6 +368,82 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } } + /** + * 生成采购收货任务 + * @param mainDO 采购收货主 + * @param detailDOList 采购收货子 + */ + @Transactional + private void generateJob(PurchasereceiptRequestMainDO mainDO, List detailDOList) { + RuleRespVO ruleRespVO = ruleService.deliveryGoods(null, mainDO.getSupplierCode()); + JSONObject jsonObject = JSONUtil.parseObj(ruleRespVO.getConfiguration()); + Map> listMap = new HashMap<>(); + List purchasereceiptJobMainCreateReqVOList = new ArrayList<>(); + // 获取拆分类型,如果够为FALSE则不拆分 + String key = ""; + if ("TRUE".equals(jsonObject.get("ByItem"))) {//按零件拆分 + key = "item"; + } else if ("TRUE".equals(jsonObject.get("ByContainer"))) {//按器具拆分 + key = "container"; + } else if ("TRUE".equals(jsonObject.get("ByLocation"))) {//按库位拆分 + key = "location"; + } else { + key = "null"; + } + // 每个任务单最多任务数 + int count = Integer.parseInt(String.valueOf(jsonObject.get("JobDetailCount"))); + if(count == 0) { + count = Integer.MAX_VALUE; + } + for(PurchasereceiptRequestDetailDO detailDO : detailDOList) { + List list; + switch (key) { + case "item": + list = listMap.get(detailDO.getItemCode()); + case "container": + list = listMap.get(detailDO.getContainerNumber()); + case "location": + list = listMap.get(detailDO.getFromLocationCode()); + default: + list = listMap.get(key); + } + if(list == null) { + list = new ArrayList<>(); + } + list.add(detailDO); + listMap.put(key, list); + } + for(String mapKey : listMap.keySet()) { + List purchasereceiptRequestDetailDOList = listMap.get(mapKey); + for(int i = 0; i < purchasereceiptRequestDetailDOList.size(); i++) { + PurchasereceiptJobMainCreateReqVO purchasereceiptJobMainCreateReqVO; + List subList = null; + if(i % count == 0) { + purchasereceiptJobMainCreateReqVO = PurchasereceiptJobMainConvert.INSTANCE.convert(mainDO); + subList = new ArrayList<>(); + purchasereceiptJobMainCreateReqVO.setSubList(subList); + purchasereceiptJobMainCreateReqVOList.add(purchasereceiptJobMainCreateReqVO); + } + PurchasereceiptJobDetailCreateReqVO purchasereceiptJobDetailCreateReqVO = PurchasereceiptJobDetailConvert.INSTANCE.convert(purchasereceiptRequestDetailDOList.get(i)); + subList.add(purchasereceiptJobDetailCreateReqVO); + } + } + //插入数据库 + for(PurchasereceiptJobMainCreateReqVO purchasereceiptJobMainCreateReqVO : purchasereceiptJobMainCreateReqVOList) { + PurchasereceiptJobMainDO purchasereceiptJobMainDO = PurchasereceiptJobMainConvert.INSTANCE.convert(purchasereceiptJobMainCreateReqVO); + String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_JOB.getCode()); + purchasereceiptJobMainDO.setNumber(number); + purchasereceiptJobMainMapper.insert(purchasereceiptJobMainDO); + trendsApi.createTrends(purchasereceiptJobMainDO.getId(), "purchasereceiptJob", "采购收货申请生成采购收货任务", TrendsTypeEnum.CREATE); + for(PurchasereceiptJobDetailCreateReqVO purchasereceiptJobDetailCreateReqVO : purchasereceiptJobMainCreateReqVO.getSubList()) { + PurchasereceiptJobDetailDO purchasereceiptJobDetailDO = PurchasereceiptJobDetailConvert.INSTANCE.convert(purchasereceiptJobDetailCreateReqVO); + purchasereceiptJobDetailDO.setNumber(number); + purchasereceiptJobDetailDO.setMasterId(purchasereceiptJobMainDO.getId()); + purchasereceiptJobDetailMapper.insert(purchasereceiptJobDetailDO); + } + } + } + /** * 校验导入,并赋值一些参数,未完全实现 * @param mainDo @@ -348,40 +455,26 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq ValidationUtils.validate(validator, mainDo); } catch (Exception ex) { message.append(ex.getMessage()).append(","); - } - try { - supplierService.selectSupplier(mainDo.getSupplierCode()); + }try { + this.validateSupplier(mainDo); } catch (Exception ex) { message.append(ex.getMessage()).append(","); } - RuleRespVO ruleRespVO = ruleService.deliverGoods(null, mainDo.getSupplierCode(), null); - if(ruleRespVO == null) { - message.append(STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS.getMsg()); - } else { - JSONArray conditionArray = JSONUtil.parseArray(ruleRespVO.getConfiguration()); - for (int i = 0; i < conditionArray.size(); i++) { - JSONObject conditionObject = conditionArray.getJSONObject(i); - if ("WarehouseCode".equals(conditionObject.get("ParamCode"))) { - mainDo.setFromWarehouseCode(String.valueOf(conditionObject.get("Value"))); - } - if ("DockCode".equals(conditionObject.get("ParamCode"))) { - mainDo.setToDockCode(String.valueOf(conditionObject.get("Value"))); - } - if ("OnTheWayLocationCode".equals(conditionObject.get("ParamCode"))) { - mainDo.setToWarehouseCode(String.valueOf(conditionObject.get("Value"))); - } - } - } return message.toString(); } /** - * 校验导入,并赋值一些参数,未完全实现 + * 校验创建,并赋值一些参数 * @param detailDo * @return */ - private void validatePurchasereceiptRequestDetailCreate(PurchasereceiptRequestDetailDO detailDo) { - + private void validatePurchasereceiptRequestDetailCreate(PurchasereceiptRequestMainDO mainDo, PurchasereceiptRequestDetailDO detailDo) { + ItembasicDO itembasicDO = this.validateItem(detailDo); + if(!itembasicDO.getUom().equals(itembasicDO.getUom())) { + throw exception(ITEMBASIC_UOM_EXCEPTION, itembasicDO.getUom(), itembasicDO.getUom()); + } + this.validateItemPacking(detailDo); + this.validateBusinesstype(itembasicDO.getType(), mainDo); } /** @@ -389,14 +482,94 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq * @param detailDo * @return */ - private String validatePurchasereceiptRequestDetailImport(PurchasereceiptRequestDetailDO detailDo) { + private String validatePurchasereceiptRequestDetailImport(PurchasereceiptRequestMainDO mainDo, PurchasereceiptRequestDetailDO detailDo) { StringBuilder message = new StringBuilder(); try { ValidationUtils.validate(validator, detailDo); - } catch (Exception ex) { - message.append(ex.getMessage()).append(","); + } 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(!itembasicDO.getUom().equals(itembasicDO.getUom())) { + message.append("计量单位【").append(itembasicDO.getUom()).append("】错误,应该是【").append(itembasicDO.getUom()).append("】").append(","); + } + try { + this.validateItemPacking(detailDo); + } catch (Exception e) { + message.append(e.getMessage()).append(","); + } + try { + this.validateBusinesstype(itembasicDO.getType(), mainDo); + } catch (Exception e) { + message.append(e.getMessage()).append(","); } return message.toString(); } + /** + * 校验供应商并赋值策略 + * @param mainDo + */ + private void validateSupplier(PurchasereceiptRequestMainDO mainDo) { + supplierService.selectSupplier(mainDo.getSupplierCode()); + RuleRespVO ruleRespVO = ruleService.deliverGoods(null, mainDo.getSupplierCode(), null); + JSONArray conditionArray = JSONUtil.parseArray(ruleRespVO.getConfiguration()); + for (int i = 0; i < conditionArray.size(); i++) { + JSONObject conditionObject = conditionArray.getJSONObject(i); + if ("WarehouseCode".equals(conditionObject.get("ParamCode"))) { + mainDo.setFromWarehouseCode(String.valueOf(conditionObject.get("Value"))); + } + if ("DockCode".equals(conditionObject.get("ParamCode"))) { + mainDo.setToDockCode(String.valueOf(conditionObject.get("Value"))); + } + if ("OnTheWayLocationCode".equals(conditionObject.get("ParamCode"))) { + mainDo.setToWarehouseCode(String.valueOf(conditionObject.get("Value"))); + } + } + } + + /** + * 校验物品信息并赋值 + * @param detailDo + * @return + */ + private ItembasicDO validateItem(PurchasereceiptRequestDetailDO 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 detailDo + */ + private void validateItemPacking(PurchasereceiptRequestDetailDO detailDo) { + ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode()); + detailDo.setStdPackQty(itempackagingDO.getStdPackQty()); + detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit()); + } + + /** + * 校验业务类型并赋值 + * @param itemType + * @param mainDo + * @return + */ + private void validateBusinesstype(String itemType, PurchasereceiptRequestMainDO mainDo) { + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchaseReceiptRequest"); + jobUtils.ifInType(itemType, businesstypeDO); + mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); + mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); + mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); + mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); + } + }