Browse Source

采购收货导入,未完成校验

master
刘忱 2 years ago
parent
commit
03f498ed57
  1. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestDetailBaseVO.java
  2. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainBaseVO.java
  3. 33
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasereceiptRequest/vo/PurchasereceiptRequestMainImportVO.java
  4. 20
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasereceiptRequest/PurchasereceiptRequestMainConvert.java
  5. 119
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java
  6. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/rule/RuleServiceImpl.java

34
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 = "最后更新时间")

25
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 = "车牌号")

33
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;
}

20
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<PurchasereceiptRequestMainExcelVO> convertList02(List<PurchasereceiptRequestMainDO> list);
@Mappings({
@Mapping(source = "mainVo.number", target = "number"),
})
PurchasereceiptRequestMainImportErrorVO convert(PurchasereceiptRequestMainCreateReqVO mainVo, PurchasereceiptRequestDetailDO detailDo);
}

119
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<PurchasereceiptRequestMainImportErrorVO> 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<PurchasereceiptRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<PurchasereceiptRequestDetailDO> 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);
}
});
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();
}
}

2
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<String, String> 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));

Loading…
Cancel
Save