Преглед изворни кода

采购验收单上传物料存储方法处理

hejq пре 7 година
родитељ
комит
6a1c955b76

+ 0 - 5
src/main/java/com/uas/platform/b2b/erp/controller/PurchaseProdInOutController.java

@@ -3,9 +3,7 @@ package com.uas.platform.b2b.erp.controller;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.model.PurchaseProdInOut;
 import com.uas.platform.b2b.erp.service.PurchaseProdInOutService;
-import com.uas.platform.b2b.erp.service.PurchaseService;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
-import com.uas.platform.b2b.model.PurchaseAcceptItem;
 import com.uas.platform.b2b.service.*;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
@@ -49,9 +47,6 @@ public class PurchaseProdInOutController {
 	@Autowired
 	private PurchaseReturnService returnService;
 
-	@Autowired
-	private PurchaseService purchaseService;
-
 	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
 
 	/**

+ 10 - 0
src/main/java/com/uas/platform/b2b/erp/exception/ExceptionNote.java

@@ -28,6 +28,16 @@ public enum ExceptionNote {
      */
     SALE_PRODUCT_NOTFOUND("采购单物料"),
 
+    /**
+     * 采购验收单物料未找到
+     */
+    SALE_ACCEPT_PRODUCT_NOTFOUND("采购验收单物料"),
+
+    /**
+     * 采购验退单物料未找到
+     */
+    SALE_RETURN_PRODUCT_NOTFOUND("采购验退单物料"),
+
     /**
      * 委外单物料未找到
      */

+ 173 - 118
src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseProdInOutServiceImpl.java

@@ -11,6 +11,7 @@ import com.uas.platform.b2b.erp.service.PurchaseService;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.ps.ProductUtils;
 import com.uas.platform.b2b.service.NotExistOrderService;
+import com.uas.platform.b2b.service.NotExistProductService;
 import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.SystemSession;
 import org.apache.axis.utils.StringUtils;
@@ -51,10 +52,10 @@ public class PurchaseProdInOutServiceImpl implements PurchaseProdInOutService {
 	private EnterpriseDao enterpriseDao;
 
 	@Autowired
-	private ProductDao productDao;
+	private NotExistOrderService orderService;
 
 	@Autowired
-	private NotExistOrderService orderService;
+    private NotExistProductService productService;
 
 	@Autowired
     private PurchaseService purchaseService;
@@ -68,125 +69,173 @@ public class PurchaseProdInOutServiceImpl implements PurchaseProdInOutService {
         Map<String, ProductInfo> products = ProductUtils.findByEnUUAndCodes(enUU, productCodes);
 		for (PurchaseProdInOut prodInOut : prodInOuts) {
 			PurchaseAccept accept = prodInOut.convent();
-			List<PurchaseAccept> accepts2 = purchaseAcceptDao.findByEnUUAndCode(enUU, accept.getCode());
+			List<PurchaseAccept> existAccepts = purchaseAcceptDao.findByEnUUAndCode(enUU, accept.getCode());
 			Enterprise vendor = enterpriseDao.findEnterpriseByUu(accept.getVendUU());
 			// 采购验收单不存在,供应商UU号存在对应供应商
-			if (accepts2.size() == 0 && vendor != null) {
-				// 设置明细对应的采购单明细
-                List<NotExistOrders> ordersList = new ArrayList<>();
-                String sign = "";
-				for (Iterator<PurchaseAcceptItem> it = accept.getAcceptItems().iterator(); it.hasNext();) {
-					PurchaseAcceptItem item = it.next();
-					if (item.getOrderItem() != null) {
-						List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderItemDao
-								.findByEnUUAndOrderCodeAndNumber(enUU, item.getOrderItem().getOrder().getCode(),
-										item.getOrderItem().getNumber());
-						// 对应的采购单存在
-						if (purchaseOrderItems.size() > 0) {
-							// 对应的采购单明细set进去
-							item.setOrderItem(purchaseOrderItems.get(0));
-							item.setOrderItemId(purchaseOrderItems.get(0).getId());
-							// 设置主记录
-							item.setAccept(accept);
-							item.setErpDate(new Date());
-							item.setProdcode(purchaseOrderItems.get(0).getProduct().getCode());
-							item.setProdId(purchaseOrderItems.get(0).getProductId());
-							acceptItems.add(item);
-						} else {
-							if (StringUtils.isEmpty(sign)) {
-							    sign = StringUtil.uuid();
-                            }
-                            ordersList.add(new NotExistOrders(enUU, item.getOrderItem().getOrder().getCode(),
-                                    com.uas.platform.b2b.temporary.model.OrderType.saleItem.name(), item.getOrderItem().getNumber(), sign));
-						}
-					} else {
-						ProductInfo productInfo = products.get(item.getProdcode());
-						if (null != productInfo) {
-							item.setProduct(productInfo);
-							item.setProdId(productInfo.getId());
-						} else {
-						    // 物料不存在先进行存储
-							Product product = new Product();
-							product.setCode(item.getProdcode());
-							product.setEnUU(enUU);
-							Long proId = ProductUtils.updateOne(product);
-							item.setProdId(proId);
-						}
-						item.setAccept(accept);
-						item.setErpDate(new Date());
-						acceptItems.add(item);
-					}
-				}
-				if (!CollectionUtils.isEmpty(ordersList)) {
-				    orderService.batchSave(ordersList, ExceptionNote.SALEITEM_NOTFOUND.getPhrase(), sign);
-                }
-			} else if (accepts2.size() > 0 && vendor != null) {
-				Set<PurchaseAcceptItem> haditems = accepts2.get(0).getAcceptItems();
-				List<String> haditemsBatchCode = new ArrayList<String>();
-				for (Iterator<PurchaseAcceptItem> itHaditems = haditems.iterator(); itHaditems.hasNext();) {
-					PurchaseAcceptItem hadItem = itHaditems.next();
-					haditemsBatchCode.add(hadItem.getBatchCode());
-				}
-				// 设置明细对应的采购单明细
-				for (Iterator<PurchaseAcceptItem> it = accept.getAcceptItems().iterator(); it.hasNext();) {
-					PurchaseAcceptItem item = it.next();
-					if (haditemsBatchCode.contains(item.getBatchCode())) {
-						//已上传的明细不要
-						it.remove();
-					} else {
-						if (item.getOrderItem() != null) {
-							List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderItemDao
-									.findByEnUUAndOrderCodeAndNumber(enUU, item.getOrderItem().getOrder().getCode(),
-											item.getOrderItem().getNumber());
-							// 对应的采购单存在
-							if (purchaseOrderItems.size() > 0) {
-								// 对应的采购单明细set进去
-								item.setOrderItem(purchaseOrderItems.get(0));
-								item.setOrderItemId(purchaseOrderItems.get(0).getId());
-								// 设置主记录
-								item.setAccept(accepts2.get(0));
-								item.setErpDate(new Date());
-								item.setProdcode(purchaseOrderItems.get(0).getProduct().getCode());
-								item.setProdId(purchaseOrderItems.get(0).getProductId());
-								acceptItems.add(item);
-							} else {
-								it.remove();
-							}
-						} else {
-							List<Product> prods = ProductUtils.findByEnUUAndCode(enUU, item.getProdcode());
-							if (prods.size() > 0) {
-								item.setProdId(prods.get(0).getId());
-							} else {
-								// 物料不存在先进行存储
-								Product product = new Product();
-								product.setCode(item.getProdcode());
-								product.setEnUU(enUU);
-								Long proId = ProductUtils.updateOne(product);
-								item.setProdId(proId);
-							}
-							item.setAccept(accepts2.get(0));
-							item.setErpDate(new Date());
-							acceptItems.add(item);
-						}
-					}
-				}
+			if (existAccepts.size() == 0 && vendor != null) {
+                acceptItems = notExistAccept(accept, products, enUU);
+			} else if (existAccepts.size() > 0 && vendor != null) {
+				acceptItems = existAccept(accept, existAccepts.get(0), products, enUU);
 			}
 		}
 		return acceptItems;
 	}
 
-	@Override
+    /**
+     * B2B验收单存在时处理方法
+     *
+     * @param accept ERP上传的单据转成之后的采购验收单数据
+     * @param existAccept B2B已存在的采购验收单数据
+     * @param products 查询的物料信息
+     * @param enUU 企业UU
+     * @return
+     */
+    private List<PurchaseAcceptItem> existAccept(PurchaseAccept accept, PurchaseAccept existAccept, Map<String, ProductInfo> products, long enUU) {
+        List<PurchaseAcceptItem> acceptItems = new ArrayList<>();
+        Set<PurchaseAcceptItem> hadItems = existAccept.getAcceptItems();
+        List<String> hadItemsBatchCode = new ArrayList<String>();
+        for (Iterator<PurchaseAcceptItem> itHaditems = hadItems.iterator(); itHaditems.hasNext();) {
+            PurchaseAcceptItem hadItem = itHaditems.next();
+            hadItemsBatchCode.add(hadItem.getBatchCode());
+        }
+        List<NotExistProduct> notExistProducts = new ArrayList<>();
+        List<NotExistOrders> ordersList = new ArrayList<>();
+        String uuid = "";
+        // 设置明细对应的采购单明细
+        for (Iterator<PurchaseAcceptItem> it = accept.getAcceptItems().iterator(); it.hasNext();) {
+            PurchaseAcceptItem item = it.next();
+            if (hadItemsBatchCode.contains(item.getBatchCode())) {
+                //已上传的明细不要
+                it.remove();
+            } else {
+                if (item.getOrderItem() != null) {
+                    List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderItemDao
+                            .findByEnUUAndOrderCodeAndNumber(enUU, item.getOrderItem().getOrder().getCode(),
+                                    item.getOrderItem().getNumber());
+                    // 对应的采购单存在
+                    if (purchaseOrderItems.size() > 0) {
+                        // 对应的采购单明细set进去
+                        item.setOrderItem(purchaseOrderItems.get(0));
+                        item.setOrderItemId(purchaseOrderItems.get(0).getId());
+                        // 设置主记录
+                        item.setAccept(existAccept);
+                        item.setErpDate(new Date(System.currentTimeMillis()));
+                        item.setProdcode(purchaseOrderItems.get(0).getProduct().getCode());
+                        ProductInfo productInfo = products.get(item.getProdcode());
+                        item.setProduct(productInfo);
+                        item.setProdId(purchaseOrderItems.get(0).getProductId());
+                        acceptItems.add(item);
+                    } else {
+                        if (StringUtils.isEmpty(uuid)) {
+                            uuid = StringUtil.uuid();
+                        }
+                        ordersList.add(new NotExistOrders(enUU, item.getOrderItem().getOrder().getCode(),
+                                com.uas.platform.b2b.temporary.model.OrderType.saleItem.name(), item.getOrderItem().getNumber(), uuid));
+                    }
+                } else {
+                    ProductInfo productInfo = products.get(item.getProdcode());
+                    if (null != productInfo) {
+                        item.setProduct(productInfo);
+                        item.setProdId(productInfo.getId());
+                    } else {
+                        if (StringUtils.isEmpty(uuid)) {
+                            uuid = StringUtil.uuid();
+                        }
+                        notExistProducts.add(new NotExistProduct(item.getProductCode(), enUU, OrderType.saleaccept.name(), item.getAccept().getCode(), item.getNumber(), uuid));
+                    }
+                    item.setAccept(existAccept);
+                    item.setErpDate(new Date(System.currentTimeMillis()));
+                    acceptItems.add(item);
+                }
+            }
+        }
+        if (!CollectionUtils.isEmpty(ordersList)) {
+            orderService.batchSave(ordersList, ExceptionNote.SALEITEM_NOTFOUND.getPhrase(), uuid);
+        }
+        if (!CollectionUtils.isEmpty(notExistProducts)) {
+            productService.batchSave(notExistProducts, ExceptionNote.SALE_ACCEPT_PRODUCT_NOTFOUND.getPhrase(), uuid);
+        }
+        return acceptItems;
+    }
+
+    /**
+     * B2B采购验收单不存在时处理方法
+     *
+     * @param accept ERP上传的单据转成之后的采购验收单数据
+     * @param products 通过物料编号查询的物料信息
+     * @param enUU 企业UU
+     * @return
+     */
+    private List<PurchaseAcceptItem> notExistAccept(PurchaseAccept accept, Map<String, ProductInfo> products, Long enUU) {
+        List<PurchaseAcceptItem> acceptItems = new ArrayList<>();
+        List<NotExistProduct> notExistProducts = new ArrayList<>();
+        List<NotExistOrders> ordersList = new ArrayList<>();
+        String uuid = "";
+        for (Iterator<PurchaseAcceptItem> it = accept.getAcceptItems().iterator(); it.hasNext();) {
+            PurchaseAcceptItem item = it.next();
+            if (item.getOrderItem() != null) {
+                List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderItemDao
+                        .findByEnUUAndOrderCodeAndNumber(enUU, item.getOrderItem().getOrder().getCode(),
+                                item.getOrderItem().getNumber());
+                // 对应的采购单存在
+                if (purchaseOrderItems.size() > 0) {
+                    // 对应的采购单明细set进去
+                    item.setOrderItem(purchaseOrderItems.get(0));
+                    item.setOrderItemId(purchaseOrderItems.get(0).getId());
+                    // 设置主记录
+                    item.setAccept(accept);
+                    item.setErpDate(new Date());
+                    item.setProdcode(purchaseOrderItems.get(0).getProduct().getCode());
+                    item.setProdId(purchaseOrderItems.get(0).getProductId());
+                    acceptItems.add(item);
+                } else {
+                    if (StringUtils.isEmpty(uuid)) {
+                        uuid = StringUtil.uuid();
+                    }
+                    ordersList.add(new NotExistOrders(enUU, item.getOrderItem().getOrder().getCode(),
+                            com.uas.platform.b2b.temporary.model.OrderType.saleItem.name(), item.getOrderItem().getNumber(), uuid));
+                }
+            } else {
+                ProductInfo productInfo = products.get(item.getProdcode());
+                if (null != productInfo) {
+                    item.setProduct(productInfo);
+                    item.setProdId(productInfo.getId());
+                } else {
+                    if (StringUtils.isEmpty(uuid)) {
+                        uuid = StringUtil.uuid();
+                    }
+                    notExistProducts.add(new NotExistProduct(item.getProductCode(), enUU, OrderType.saleaccept.name(), item.getAccept().getCode(), item.getNumber(), uuid));
+                }
+                item.setAccept(accept);
+                item.setErpDate(new Date());
+                acceptItems.add(item);
+            }
+        }
+        if (!CollectionUtils.isEmpty(ordersList)) {
+            orderService.batchSave(ordersList, ExceptionNote.SALEITEM_NOTFOUND.getPhrase(), uuid);
+        }
+        if (!CollectionUtils.isEmpty(notExistProducts)) {
+            productService.batchSave(notExistProducts, ExceptionNote.SALE_ACCEPT_PRODUCT_NOTFOUND.getPhrase(), uuid);
+        }
+        return acceptItems;
+    }
+
+    @Override
 	public List<PurchaseReturnItem> convertReturns(List<PurchaseProdInOut> prodInOuts) throws Exception {
 		List<PurchaseReturnItem> returnItems = new ArrayList<PurchaseReturnItem>();
 		long enUU = SystemSession.getUser().getEnterprise().getUu();
+		Set<String> codeStr = CollectionUtil.getProductCodeCollection(prodInOuts);
+		Map<String, ProductInfo> products = ProductUtils.findByEnUUAndCodes(enUU, codeStr);
+        List<NotExistProduct> notExistProducts = new ArrayList<>();
+        String uuid = "";
 		for (PurchaseProdInOut prodInOut : prodInOuts) {
-			PurchaseReturn returnn = prodInOut.conventToReturn();
-			List<PurchaseReturn> returns2 = purchaseReturnDao.findByEnUUAndCode(enUU, returnn.getCode());
-			Enterprise vendor = enterpriseDao.findEnterpriseByUu(returnn.getVendUU());
+			PurchaseReturn purchaseReturn = prodInOut.conventToReturn();
+			List<PurchaseReturn> existReturn = purchaseReturnDao.findByEnUUAndCode(enUU, purchaseReturn.getCode());
+			Enterprise vendor = enterpriseDao.findEnterpriseByUu(purchaseReturn.getVendUU());
 			// 采购验收单不存在,供应商UU号存在对应供应商
-			if (returns2.size() == 0 && vendor != null) {
+			if (existReturn.size() == 0 && vendor != null) {
 				// 设置明细对应的采购单明细
-				for (PurchaseReturnItem returnItem : returnn.getReturnItems()) {
+				for (PurchaseReturnItem returnItem : purchaseReturn.getReturnItems()) {
 					if (null != returnItem.getOrderDetno() && null != returnItem.getOrderCode()) {
 						List<PurchaseOrderItem> purchaseOrderItems = purchaseOrderItemDao
 								.findByEnUUAndOrderCodeAndNumber(enUU, returnItem.getOrderCode(), returnItem.getOrderDetno());
@@ -194,28 +243,34 @@ public class PurchaseProdInOutServiceImpl implements PurchaseProdInOutService {
 						if (purchaseOrderItems.size() > 0) {
 							returnItem.setOrderItemId(purchaseOrderItems.get(0).getId());
 							returnItem.setProdId(purchaseOrderItems.get(0).getProductId());
+							ProductInfo productInfo = products.get(returnItem.getProdCode());
+							returnItem.setProduct(productInfo);
 							returnItem.setProdCode(purchaseOrderItems.get(0).getProduct().getCode());
 						}
 					} else {
-						List<Product> prod = ProductUtils.findByEnUUAndCode(enUU, returnItem.getProdCode());
-						if (prod.size() > 0) {
-							returnItem.setProdId(prod.get(0).getId());
+                        ProductInfo productInfo = products.get(returnItem.getProdCode());
+						if (null != productInfo) {
+							returnItem.setProdId(productInfo.getId());
+                            returnItem.setProduct(productInfo);
+                            returnItem.setProdCode(productInfo.getCode());
 						} else {
-							// 物料不存在先进行存储
-							Product product = new Product();
-							product.setCode(returnItem.getProdCode());
-							product.setEnUU(enUU);
-							Long proId = ProductUtils.updateOne(product);
-							returnItem.setProdId(proId);
+							if (StringUtils.isEmpty(uuid)) {
+							    uuid = StringUtil.uuid();
+                            }
+                            notExistProducts.add(new NotExistProduct(returnItem.getProdCode(), enUU, OrderType.salereturn.name(),
+                                    returnItem.getPurchaseReturn().getCode(), returnItem.getNumber(), uuid));
 						}
 					}
 					// 设置主记录
-					returnItem.setPurchaseReturn(returnn);
+					returnItem.setPurchaseReturn(purchaseReturn);
 					returnItem.setErpDate(new Date());
 					returnItems.add(returnItem);
 				}
 			}
 		}
+        if (!CollectionUtils.isEmpty(notExistProducts)) {
+            productService.batchSave(notExistProducts, ExceptionNote.SALE_RETURN_PRODUCT_NOTFOUND.getPhrase(), uuid);
+        }
 		return returnItems;
 	}