Browse Source

E10采购导入调整

fgd 1 year ago
parent
commit
1d121b9d3e

+ 2 - 3
sd-business/src/main/java/com/sd/business/controller/purchase/PurchaseController.java

@@ -103,8 +103,7 @@ public class PurchaseController {
      */
     @PostMapping("/purchaseImport")
     public void purchaseImport(MultipartFile file) {
-        List<PurchaseImportDataDto> list = ExcelUtil.read(file, 0, PurchaseImportDataDto.class);
-        List<PurchaseBomImportDataDto> bomImportDataList = ExcelUtil.read(file, 1, PurchaseBomImportDataDto.class);
-        purchaseService.purchaseImport(list, bomImportDataList);
+        List<PurchaseBomImportDataDto> list = ExcelUtil.read(file, PurchaseBomImportDataDto.class);
+        purchaseService.purchaseImport(list);
     }
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/controller/purchase/PurchasePendingStorageController.java

@@ -70,7 +70,7 @@ public class PurchasePendingStorageController {
      */
     @PostMapping("/purchaseArrivalImport")
     public PurchasePendingStorageVo purchaseArrivalImport(MultipartFile file) {
-        List<PurchaseArrivalImportDataDto> list = ExcelUtil.read(file, 1, PurchaseArrivalImportDataDto.class);
+        List<PurchaseArrivalImportDataDto> list = ExcelUtil.read(file, PurchaseArrivalImportDataDto.class);
         return purchasePendingStorageService.purchaseArrivalImport(list);
     }
 

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/in/po/InOutStorage.java

@@ -7,6 +7,7 @@ import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * <p>
@@ -62,6 +63,11 @@ public class InOutStorage extends BasePo {
     private String applicant;
 
     /**
+     * 入库时间
+     */
+    private Date inOutStorageTime;
+
+    /**
      * 备注
      */
     private String remark;

+ 18 - 4
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseArrivalImportDataDto.java

@@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 
 /**
  * 采购到货单导入入参实体
@@ -15,24 +17,36 @@ public class PurchaseArrivalImportDataDto {
     /**
      * 到货单号
      */
-    @ExcelProperty("PURCHASE_ARRIVAL__DOC_NO")
+    @ExcelProperty("到货单号")
     private String arrivalCode;
 
     /**
+     * 到货日期
+     */
+    @ExcelProperty("到货日期")
+    private Date arrivalDate;
+
+    /**
      * 采购合同编号
      */
-    @ExcelProperty("PURCHASE_ORD_DOC_NO")
+    @ExcelProperty("订单单号")
     private String purchaseCode;
 
     /**
+     * 采购合同编号-PUR
+     */
+    @ExcelProperty("备注")
+    private String remarkCode;
+
+    /**
      * bom规格编码
      */
-    @ExcelProperty("ITEM_ID_CODE")
+    @ExcelProperty("品号")
     private String bomSpecCode;
 
     /**
      * 到货数量
      */
-    @ExcelProperty("BUSINESS_QTY")
+    @ExcelProperty("业务数量")
     private String arrivalQuantity;
 }

+ 15 - 7
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseBomImportDataDto.java

@@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * E10采购合同bom 导入入参实体
  */
@@ -13,36 +15,42 @@ public class PurchaseBomImportDataDto {
     /**
      * 采购单号
      */
-    @ExcelProperty("PURCHASE_ORDER__DOC_NO")
+    @ExcelProperty("单号")
     private String purchaseCode;
 
     /**
+     * 供应商编码
+     */
+    @ExcelProperty("供应商编号")
+    private String supplierCode;
+
+    /**
      * bom品号
      */
-    @ExcelProperty("ITEM_ID_CODE")
+    @ExcelProperty("品号")
     private String bomSpecCode;
 
     /**
      * 数量
      */
-    @ExcelProperty("BUSINESS_QTY")
+    @ExcelProperty("业务数量")
     private String quantity;
 
     /**
      * 含税单价
      */
-    @ExcelProperty("DISCOUNTED_PRICE")
+    @ExcelProperty("折扣后单价")
     private String unitPrice;
 
     /**
      * 总金额
      */
-    @ExcelProperty("AMOUNT")
+    @ExcelProperty("金额")
     private String totalAmount;
 
     /**
      * 交付日期
      */
-    @ExcelProperty("PLAN_ARRIVAL_DATE")
-    private String deliveryDate;
+    @ExcelProperty("预到货日")
+    private Date deliveryDate;
 }

+ 0 - 26
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchaseImportDataDto.java

@@ -1,26 +0,0 @@
-package com.sd.business.entity.purchase.dto;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * E10采购合同导入入参实体
- */
-@Getter
-@Setter
-public class PurchaseImportDataDto {
-
-    /**
-     * 采购单号
-     */
-    @ExcelProperty("DOC_NO")
-    private String code;
-
-
-    /**
-     * 供应商编码
-     */
-    @ExcelProperty("SUPPLIER_ID_CODE")
-    private String supplierCode;
-}

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/dto/PurchasePendingStorageDto.java

@@ -7,6 +7,7 @@ import lombok.Setter;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -20,6 +21,11 @@ import java.util.List;
 public class PurchasePendingStorageDto extends PurchasePendingStorage {
 
     /**
+     * 到货日期
+     */
+    private Date arrivalDate;
+
+    /**
      * 采购待入库详情数据
      */
     @Valid

+ 6 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/vo/PurchasePendingStorageVo.java

@@ -4,6 +4,7 @@ import com.sd.business.entity.purchase.po.PurchasePendingStorage;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -17,6 +18,11 @@ import java.util.List;
 public class PurchasePendingStorageVo extends PurchasePendingStorage {
 
     /**
+     * 到货日期
+     */
+    private Date arrivalDate;
+
+    /**
      * 采购合同编号
      */
     private String purchaseCode;

+ 4 - 0
sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageServiceImpl.java

@@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -99,6 +100,9 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
             // 更新库存
             inventoryService.out(inOutStorageDto.getDepartmentId(), inOutStorageDto.getWarehouseId(), inOutStorageBomList, inOutStorageDto.getLockStorage());
         }
+        if (inOutStorageDto.getInOutStorageTime() == null) {
+            inOutStorageDto.setInOutStorageTime(new Date());
+        }
 
         // 保存出入库信息
         this.save(inOutStorageDto);

+ 1 - 2
sd-business/src/main/java/com/sd/business/service/purchase/PurchaseService.java

@@ -73,7 +73,6 @@ public interface PurchaseService extends BaseService<Purchase> {
     /**
      * 导入E10采购合同
      * @param list
-     * @param bomImportDataList
      */
-    void purchaseImport(List<PurchaseImportDataDto> list, List<PurchaseBomImportDataDto> bomImportDataList);
+    void purchaseImport(List<PurchaseBomImportDataDto> list);
 }

+ 15 - 8
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchasePendingStorageServiceImpl.java

@@ -3,6 +3,7 @@ package com.sd.business.service.purchase.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -155,6 +156,7 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
             inOutStorageDto.setWarehouseId(warehouseId);
             inOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
             inOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+            inOutStorageDto.setInOutStorageTime(dto.getArrivalDate());
             inOutStorageDto.setInOutStorageBomList(inOutStorageBomList);
             inOutStorageService.add(inOutStorageDto);
         }
@@ -179,7 +181,7 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
         // 采购合同数据
         List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getCode, purchaseCodes).or().in(Purchase::getErpCode, purchaseCodes));
         if (purchaseList.isEmpty()) {
-            throw new ServiceException("未知采购合同号");
+            throw new ServiceException("未知采购合同订单单号");
         }
         Map<String, Purchase> purchaseMap = purchaseList.stream().collect(Collectors.toMap(Purchase::getCode, Function.identity()));
         Map<String, Purchase> erpPurchaseMap = purchaseList.stream().collect(Collectors.toMap(Purchase::getErpCode, Function.identity(), (v1, v2) -> v2));
@@ -199,7 +201,7 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
             if (purchase == null) {
                 purchase = erpPurchaseMap.get(dto.getPurchaseCode());
                 if (purchase == null) {
-                    throw new ServiceException("未知采购合同号:" + dto.getPurchaseCode());
+                    throw new ServiceException("未知采购合同订单单号:" + dto.getPurchaseCode());
                 }
             }
             // 判断采购合同是否存在当前bom
@@ -242,21 +244,26 @@ public class PurchasePendingStorageServiceImpl extends ServiceImpl<PurchasePendi
             if (purchasePendingStorageVo.getArrivalCode() == null) {
                 purchasePendingStorageVo.setArrivalCode(dto.getArrivalCode());
             }
+            if (purchasePendingStorageVo.getArrivalDate() == null) {
+                purchasePendingStorageVo.setArrivalDate(dto.getArrivalDate());
+            }
         }
         purchasePendingStorageVo.setPurchasePendingStorageBomList(purchasePendingStorageBomList);
         return purchasePendingStorageVo;
     }
 
     private void validatedImportData(List<PurchaseArrivalImportDataDto> list) {
-        // 删除第一行表头字段
-        list.remove(0);
         Assert.notEmpty(list, "到货明细不能为空");
         for (PurchaseArrivalImportDataDto dto : list) {
-            Assert.notNull(dto.getPurchaseCode(), "采购合同编号不能为空");
-            Assert.notNull(dto.getBomSpecCode(), "bom品号不能为空");
+            if (StrUtil.isBlank(dto.getPurchaseCode())) {
+                dto.setPurchaseCode(dto.getRemarkCode());
+            }
+            Assert.notBlank(dto.getPurchaseCode(), "采购订单单号不能为空");
+            Assert.notBlank(dto.getBomSpecCode(), "bom品号不能为空");
             Assert.notNull(dto.getArrivalCode(), "到货单号不能为空");
-            Assert.eqTrue(NumberUtil.isInteger(dto.getArrivalQuantity()), "到货数量格式不正确");
-            Assert.gtZero(new BigDecimal(dto.getArrivalQuantity()), "到货数量必须大于0");
+            Assert.notNull(dto.getArrivalDate(), "到货日期不能为空");
+            Assert.eqTrue(NumberUtil.isNumber(dto.getArrivalQuantity()), "业务数量格式不正确");
+            Assert.gtZero(new BigDecimal(dto.getArrivalQuantity()), "业务数量必须大于0");
         }
     }
 }

+ 29 - 42
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseServiceImpl.java

@@ -1,7 +1,6 @@
 package com.sd.business.service.purchase.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -18,7 +17,6 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.apply.po.ApplyBuyBom;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.in.po.InOutStorageBom;
-import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.purchase.dto.*;
 import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
 import com.sd.business.entity.purchase.po.Purchase;
@@ -310,7 +308,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
         // 采购入库查询排除胜德塑胶供应商
         if (ObjectUtil.equals(dto.getQueryType(), 1)) {
             wrapper.ne("s", Supplier::getName, "福清市胜德塑胶制品有限公司");
-            wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE);
+            wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
         }
         wrapper.orderByDesc("p", Purchase::getId);
 
@@ -319,38 +317,37 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
     }
 
     @Override
-    public void purchaseImport(List<PurchaseImportDataDto> list, List<PurchaseBomImportDataDto> bomImportDataList) {
+    public void purchaseImport(List<PurchaseBomImportDataDto> list) {
         // 验证导入数据
-        validatedImportData(list, bomImportDataList);
+        validatedImportData(list);
 
-        Map<String, List<PurchaseBomImportDataDto>> bomMap = bomImportDataList.stream().collect(Collectors.groupingBy(PurchaseBomImportDataDto::getPurchaseCode));
+        Map<String, List<PurchaseBomImportDataDto>> bomMap = list.stream().collect(Collectors.groupingBy(PurchaseBomImportDataDto::getPurchaseCode));
+        Map<String, Long> purchaseMap = this.mapKV(Purchase::getErpCode, BaseIdPo::getId, q -> q.in(Purchase::getErpCode, bomMap.keySet()));
 
-        List<String> purchaseCodes = list.stream().map(PurchaseImportDataDto::getCode).collect(Collectors.toList());
-        Map<String, Long> purchaseMap = this.mapKV(Purchase::getErpCode, BaseIdPo::getId, q -> q.in(Purchase::getErpCode, purchaseCodes));
-
-        List<String> supplierCodes = list.stream().map(PurchaseImportDataDto::getSupplierCode).collect(Collectors.toList());
+        Set<String> supplierCodes = list.stream().map(PurchaseBomImportDataDto::getSupplierCode).collect(Collectors.toSet());
         Map<String, Long> supplierMap = supplierService.mapKV(Supplier::getCode, BaseIdPo::getId, q -> q.in(Supplier::getCode, supplierCodes));
-        List<String> bomSpecCodes = bomImportDataList.stream().map(PurchaseBomImportDataDto::getBomSpecCode).collect(Collectors.toList());
+
+        List<String> bomSpecCodes = list.stream().map(PurchaseBomImportDataDto::getBomSpecCode).collect(Collectors.toList());
         Map<String, Long> bomSpecMap = bomSpecService.mapKV(BomSpec::getCode, BaseIdPo::getId, q -> q.in(BomSpec::getCode, bomSpecCodes));
 
         List<Purchase> purchaseList = new ArrayList<>();
         List<PurchaseBom> purchaseBomList = new ArrayList<>();
-        for (PurchaseImportDataDto importDataDto : list) {
+        for (Map.Entry<String, List<PurchaseBomImportDataDto>> entry : bomMap.entrySet()) {
+            String purchaseCode = entry.getKey();
+            List<PurchaseBomImportDataDto> bomList = entry.getValue();
+            if (ObjectUtil.isEmpty(bomList)) {
+                continue;
+            }
+
             // 判断是否存在重复编号
-            Long purchaseId = purchaseMap.get(importDataDto.getCode());
+            Long purchaseId = purchaseMap.get(purchaseCode);
             if (purchaseId != null) {
-                throw new ServiceException("采购合同编号:" + importDataDto.getCode() + " 已存在");
+                throw new ServiceException("采购合同编号:" + purchaseCode + " 已存在");
             }
 
-            Long supplierId = supplierMap.get(importDataDto.getSupplierCode());
+            Long supplierId = supplierMap.get(bomList.get(0).getSupplierCode());
             if (supplierId == null) {
-                throw new ServiceException("未知供应商编号:" + importDataDto.getSupplierCode());
-            }
-
-            List<PurchaseBomImportDataDto> bomList = bomMap.get(importDataDto.getCode());
-
-            if (ObjectUtil.isEmpty(bomList)) {
-                continue;
+                throw new ServiceException("未知供应商编号:" + bomList.get(0).getSupplierCode());
             }
 
             // 保存采购合同
@@ -360,7 +357,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
             purchase.setSupplierId(supplierId);
             purchase.setStatus(PurchaseStatusEnum.UNDER_PURCHASE.getKey());
             purchase.setFlowStatus(FlowStatusEnum.PASS.getKey());
-            purchase.setErpCode(importDataDto.getCode());
+            purchase.setErpCode(purchaseCode);
             purchase.setReceiveGoodsType(1);
             purchase.setAdvancePayment(BigDecimal.ZERO);
             purchase.setReturnAmount(BigDecimal.ZERO);
@@ -370,11 +367,8 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
             purchase.setStorageStatus(StatusConstant.NO);
             purchase.setTotalAmountIncludingTax(BigDecimal.ZERO);
             purchase.setTotalAmountExcludingTax(BigDecimal.ZERO);
-            try {
-                purchase.setDeliveryDate(DateUtil.parse(bomList.get(0).getDeliveryDate()));
-            } catch (Exception e) {
-                throw new ServiceException("交付日期格式异常");
-            }
+            purchase.setDeliveryDate(bomList.get(0).getDeliveryDate());
+
 
             List<PurchaseBom> bomData = bomList.stream().map(item -> {
                 Long bomSpecId = bomSpecMap.get(item.getBomSpecCode());
@@ -399,26 +393,19 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
             }).collect(Collectors.toList());
             purchaseList.add(purchase);
             purchaseBomList.addAll(bomData);
-            purchaseMap.put(importDataDto.getCode(), purchase.getId());
+            purchaseMap.put(purchaseCode, purchase.getId());
         }
 
         this.saveBatch(purchaseList);
         purchaseBomService.saveBatch(purchaseBomList);
     }
 
-    private void validatedImportData(List<PurchaseImportDataDto> list, List<PurchaseBomImportDataDto> bomImportDataList) {
-        // 删除第一行表头字段
-        list.remove(0);
-        bomImportDataList.remove(0);
-        Assert.notEmpty(list, "采购合同不能为空");
-        Assert.notEmpty(bomImportDataList, "采购合同明细不能为空");
-        for (PurchaseImportDataDto dto : list) {
-            Assert.notNull(dto.getCode(), "采购合同编号不能为空");
-            Assert.notNull(dto.getSupplierCode(), "供应商编号不能为空");
-        }
-        for (PurchaseBomImportDataDto dto : bomImportDataList) {
-            Assert.notNull(dto.getPurchaseCode(), "采购合同编号不能为空");
-            Assert.notNull(dto.getBomSpecCode(), "bom品号不能为空");
+    private void validatedImportData(List<PurchaseBomImportDataDto> list) {
+        Assert.notEmpty(list, "采购合同明细不能为空");
+        for (PurchaseBomImportDataDto dto : list) {
+            Assert.notBlank(dto.getPurchaseCode(), "采购合同编号不能为空");
+            Assert.notBlank(dto.getSupplierCode(), "供应商编号不能为空");
+            Assert.notBlank(dto.getBomSpecCode(), "bom品号不能为空");
             Assert.eqTrue(NumberUtil.isNumber(dto.getQuantity()), "采购数量格式不正确");
             Assert.eqTrue(NumberUtil.isNumber(dto.getUnitPrice()), "采购单价格式不正确");
             Assert.eqTrue(NumberUtil.isNumber(dto.getTotalAmount()), "采购金额合计格式不正确");