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 4a13dbde..620c5556 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 @@ -1,19 +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.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.time.LocalDateTime; -import javax.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -35,49 +29,42 @@ public class PurchasereceiptRequestDetailBaseVO { private String containerNumber; @Schema(description = "批次", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "批次不能为空") + @NotBlank(message = "批次不能为空") private String batch; @Schema(description = "替代批次") private String altBatch; @Schema(description = "到货日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "到货日期不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime arriveDate; @Schema(description = "生产日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "生产日期不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime produceDate; @Schema(description = "过期日期", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "过期日期不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime expireDate; @Schema(description = "库存状态", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "库存状态不能为空") private String inventoryStatus; @Schema(description = "从库位代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "从库位代码不能为空") private String fromLocationCode; @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "订单号不能为空") + @NotBlank(message = "订单号不能为空") private String poNumber; @Schema(description = "订单行", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "订单行不能为空") + @NotBlank(message = "订单行不能为空") private String poLine; @Schema(description = "标包数量", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "标包数量不能为空") private BigDecimal stdPackQty; @Schema(description = "标包单位", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "标包单位不能为空") private String stdPackUnit; @Schema(description = "供应商计量数量") @@ -87,14 +74,13 @@ public class PurchasereceiptRequestDetailBaseVO { private String supplierPackUnit; @Schema(description = "转换率", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "转换率不能为空") private BigDecimal convertRate; @Schema(description = "单据号") private String number; @Schema(description = "物品代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "物品代码不能为空") + @NotBlank(message = "物品代码不能为空") private String itemCode; @Schema(description = "备注") @@ -113,9 +99,11 @@ public class PurchasereceiptRequestDetailBaseVO { private String projectCode; @Schema(description = "数量") + @NotBlank(message = "数量不能为空") private BigDecimal qty; @Schema(description = "计量单位") + @NotBlank(message = "计量单位不能为空") private String uom; @Schema(description = "最后更新时间") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainBaseVO.java index e5458877..b2f17c52 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainBaseVO.java @@ -1,15 +1,13 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; +import com.win.framework.excel.core.annotations.OnlyOne; 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 javax.validation.constraints.*; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** @@ -22,15 +20,15 @@ public class PurchasereceiptRequestMainBaseVO { @Schema(description = "id", example = "id") private Long id; - @Schema(description = "发货单号") private String asnNumber; @Schema(description = "要货计划单号") private String ppNumber; + @OnlyOne @Schema(description = "供应商代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "供应商代码不能为空") + @NotBlank(message = "供应商代码不能为空") private String supplierCode; @Schema(description = "承运商") @@ -40,11 +38,9 @@ public class PurchasereceiptRequestMainBaseVO { private String transferMode; @Schema(description = "从仓库代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "从仓库代码不能为空") private String fromWarehouseCode; @Schema(description = "到仓库代码", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "到仓库代码不能为空") private String toWarehouseCode; @Schema(description = "从库位类型范围") @@ -63,11 +59,9 @@ public class PurchasereceiptRequestMainBaseVO { private String toDockCode; @Schema(description = "单据号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "单据号不能为空") private String number; @Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "业务类型不能为空") private String businessType; @Schema(description = "备注") @@ -89,7 +83,6 @@ public class PurchasereceiptRequestMainBaseVO { private LocalDateTime dueTime; @Schema(description = "部门", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "部门不能为空") private String departmentCode; @Schema(description = "最后更新时间") @@ -103,19 +96,15 @@ public class PurchasereceiptRequestMainBaseVO { private String status; @Schema(description = "自动提交", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "自动提交不能为空") private String autoCommit; @Schema(description = "自动通过", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "自动通过不能为空") private String autoAgree; @Schema(description = "自动执行", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "自动执行不能为空") private String autoExecute; @Schema(description = "直接生成记录", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "直接生成记录不能为空") private String directCreateRecord; @Schema(description = "车牌号") 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 a261ea49..56440b11 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,12 +1,12 @@ package com.win.module.wms.controller.purchasereceiptRequest.vo; import com.alibaba.excel.annotation.ExcelProperty; -import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import javax.validation.constraints.NotBlank; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -24,41 +24,48 @@ public class PurchasereceiptRequestMainImportVO { //主表数据 @ExcelProperty("供应商代码") - private String supplier_code; + private String supplierCode; + @NotBlank(message="订单号不能为空") @ExcelProperty("订单号") - private String po_number; + private String poNumber; + @NotBlank(message="订单行不能为空") @ExcelProperty("订单行") - private String po_line; + private String poLine; + @NotBlank(message="物品代码不能为空") @ExcelProperty("物品代码") - private String item_code; + private String itemCode; + @NotBlank(message="批次不能为空") @ExcelProperty("批次") private String batch; + @NotBlank(message="数量不能为空") @ExcelProperty("数量") - @ColumnWidth(value = 16) private String qty; + @NotBlank(message="计量单位不能为空") @ExcelProperty("计量单位") - @ColumnWidth(value = 16) private String uom; @ExcelProperty("到货日期") - private String isConsignment; + private LocalDateTime arriveDate; @ExcelProperty("生产日期") - private LocalDateTime dueDate; + private LocalDateTime produceDate; //子表数据 @ExcelProperty("过期日期") - private String itemCode; + private LocalDateTime expireDate; + @ExcelProperty("承运商") - private String orderQty; + private String carrierCode; + @ExcelProperty("运输方式") - private String aa; + private String transferMode; + @ExcelProperty("车牌号") - private BigDecimal overReceivingPercent; + private BigDecimal vehiclePlateNumber; } 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 d7bb9b49..990b1007 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 @@ -1,16 +1,15 @@ package com.win.module.wms.convert.purchasereceiptRequest; -import java.util.*; - import com.win.framework.common.pojo.PageResult; - -import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainCreateReqVO; -import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainExcelVO; -import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainRespVO; -import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainUpdateReqVO; +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 com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO; + +import java.util.List; /** * 采购收货申请主 Convert @@ -34,4 +33,9 @@ public interface PurchasereceiptRequestMainConvert { List convertList02(List list); + @Mappings({ + @Mapping(source = "mainVo.number", target = "number"), + }) + PurchasereceiptRequestMainImportErrorVO convert(PurchasereceiptRequestMainCreateReqVO mainVo, PurchasereceiptRequestDetailDO detailDo); + } 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 be0d1472..67cfc4bc 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 @@ -1,10 +1,17 @@ package com.win.module.wms.service.purchasereceiptRequest; import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.validation.ValidationUtils; import com.win.framework.dict.core.util.DictFrameworkUtils; +import com.win.module.system.api.serialnumber.SerialNumberApi; +import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.wms.controller.purchasereceiptRequest.vo.*; +import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert; import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestMainConvert; import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO; @@ -12,10 +19,15 @@ import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptR import com.win.module.wms.dal.mysql.purchasereceiptRequest.PurchasereceiptRequestDetailMapper; import com.win.module.wms.dal.mysql.purchasereceiptRequest.PurchasereceiptRequestMainMapper; import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.service.itembasic.ItembasicService; +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 org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.validation.Validator; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -35,9 +47,20 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq @Resource private PurchasereceiptRequestMainMapper purchasereceiptRequestMainMapper; - @Resource private PurchasereceiptRequestDetailMapper purchasereceiptRequestDetailMapper; + @Resource + private ItembasicService itembasicService; + @Resource + private SupplierService supplierService; + @Resource + private SupplieritemService supplieritemService; + @Resource + private RuleService ruleService; + @Resource + private SerialNumberApi serialNumberApi; + @Resource + private Validator validator; @Override public Long createPurchasereceiptRequestMain(PurchasereceiptRequestMainCreateReqVO createReqVO) { @@ -101,30 +124,90 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } List errorList = new ArrayList<>(); datas.forEach(createReqVO -> { - // 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList - boolean isError = false; -// try { -// if(mode != null){ -// validatePurchaseclaimRequestMainExists(null); -// } -// } catch (ServiceException ex) { -// isError = true; -// importRemark += ex.getMessage() + ","; -// } - - createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); - PurchasereceiptRequestMainDO createObj = PurchasereceiptRequestMainConvert.INSTANCE.convert(createReqVO); - purchasereceiptRequestMainMapper.insert(createObj); + PurchasereceiptRequestMainDO mainDo = PurchasereceiptRequestMainConvert.INSTANCE.convert(createReqVO); + String messageMain = this.validatePurchasereceiptRequestMainImport(mainDo); List subList = createReqVO.getSubList(); List subDOList = PurchasereceiptRequestDetailConvert.INSTANCE.convertList03(subList); - // 新增子表数据 + // 是否有错误数据 + boolean flag = true; for (PurchasereceiptRequestDetailDO detailDO : subDOList) { - // 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList - detailDO.setNumber(createReqVO.getNumber()); + String messageDetail = this.validatePurchasereceiptRequestDetailImport(detailDO); + if(!messageMain.isEmpty() || messageDetail.isEmpty()) { + PurchasereceiptRequestMainImportErrorVO importErrorVO = PurchasereceiptRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); + importErrorVO.setImportStatus("失败"); + messageMain = messageMain + messageDetail; + importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); + errorList.add(importErrorVO); + flag = false; + } + } + //写入数据 + if(flag) { + String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); + mainDo.setNumber(number); + mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); + purchasereceiptRequestMainMapper.insert(mainDo); + for (PurchasereceiptRequestDetailDO detailDO : subDOList) { + detailDO.setMasterId(mainDo.getId()); + detailDO.setNumber(number); + } + purchasereceiptRequestDetailMapper.insertBatch(subDOList); } - purchasereceiptRequestDetailMapper.insertBatch(subDOList); }); return errorList; } + /** + * 校验导入,并赋值一些参数,未完全实现 + * @param mainDo + * @return + */ + private String validatePurchasereceiptRequestMainImport(PurchasereceiptRequestMainDO mainDo) { + StringBuilder message = new StringBuilder(); + try { + ValidationUtils.validate(validator, mainDo); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } + try { + supplierService.selectSupplier(mainDo.getSupplierCode()); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } + RuleRespVO ruleRespVO = ruleService.deliverGoods(null, mainDo.getSupplierCode(), null); + if(ruleRespVO == null) { + message.append("未查找到供应商【").append(mainDo.getSupplierCode()).append("】送货策略"); + } 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 String validatePurchasereceiptRequestDetailImport(PurchasereceiptRequestDetailDO detailDo) { + StringBuilder message = new StringBuilder(); + try { + ValidationUtils.validate(validator, detailDo); + } catch (Exception ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java index 92dc4ff5..b28bc252 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java @@ -581,7 +581,7 @@ public class RuleServiceImpl implements RuleService { */ private boolean forEachParams(Map params, JSONArray conditionArray) { for(int i = 0; i < conditionArray.size(); i++) { - JSONObject conditionObject = conditionArray.getJSONObject(0); + JSONObject conditionObject = conditionArray.getJSONObject(i); for (String key : params.keySet()) { if(key.equals(conditionObject.get("ParamCode"))) { boolean result = this.checkCondition(conditionObject, key, params.get(key));