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

调整出货时根据物料编号获取物料的方法

yujia пре 7 година
родитељ
комит
0a7d5afe53

+ 5 - 1
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java

@@ -24,6 +24,7 @@ import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
@@ -92,6 +93,9 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 	@Autowired
 	private InOutboundDetailService inOutboundDetailService;
 
+	@Autowired
+	private GoodsService goodsService;
+
 	@Autowired
 	public InvoiceFPurchaseServiceImpl(InvoiceFPurchaseDao inFpuDao, CreateNumberService createNumberService,
 									   EnterpriseDao enterpriseDao, PurchaseDao purchaseDao, OrderDao orderDao, SysConf sysConf, LogisticsOldService logisticsService, ProductService productService, EnterpriseService enterpriseService) {
@@ -275,7 +279,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 			if ((Status.TOBESHIPPED.value() != puDetail.getStatus() && Status.CONFIRMED.value() != puDetail.getStatus()) || NumberUtil.compare(qty, DoubleConstant.zero) < 1) {
 				continue;
 			}
-			product = productService.findProductByProdNum(puDetail.getGoodsnumber());
+			product = goodsService.getProductByPurchaseDetail(puDetail);
 			if (product == null) {
 				throw new IllegalOperatorException("找不到物料信息");
 			}

+ 12 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java

@@ -212,6 +212,18 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      */
     List<Goods> findByEnUUAndCodeAndOriginal(Long enUU, String code, Integer original);
 
+
+    /**
+     * 根据企业UU、商品型号和品牌获取产品
+     *
+     * @param enUU     卖家企业UU
+     * @param code     商品型号
+     * @param brandNameEn 品牌
+     * @return 商品列表 list
+     */
+    @Query(value = "select g from Goods g where g.enUU = :enUU and g.code = :code and g.brandNameEn = :brandNameEn")
+    List<Goods> findByEnUUAndCodeAndBrandNameEn(@Param("enUU") Long enUU, @Param("code") String code, @Param("brandNameEn") String brandNameEn);
+
     /**
      * 获取器件型号的有效样品数量
      *

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java

@@ -5,6 +5,7 @@ import com.uas.api.b2c_erp.seller.model.GoodsSimpleUas;
 import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.b2c.trade.presale.model.Cart;
 import com.uas.platform.b2c.trade.presale.model.GoodsBrowsingHistory;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -820,4 +821,11 @@ public interface GoodsService {
      * @return
      */
     Goods save(Goods goods);
+
+    /**
+     * 根据销售单明细,获取物料信息
+     * @param detail 销售单明细
+     * @return  Product
+     */
+    Product getProductByPurchaseDetail(PurchaseDetail detail);
 }

+ 19 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -3,7 +3,6 @@ package com.uas.platform.b2c.prod.commodity.service;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
-import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -329,7 +328,6 @@ public interface ProductService {
      */
     Product findProductByProdNum(String prodNum);
 
-
     /**
      * 批量保存
      * @param list
@@ -368,4 +366,23 @@ public interface ProductService {
      * @return
      */
     List<Product> getProductByIds(String ids);
+
+
+    /**
+     * 根据物料编号或主键获取物料信息
+     * @param productNum 物料编号
+     * @param id 主键id
+     * @return 返回物料信息
+     */
+    Product getProductByProductNumAndProductid(String productNum, Long id);
+
+
+    /**
+     * 根据企业enuu、型号、品牌获取物料信息
+     * @param enuu
+     * @param cmpCode
+     * @param branden
+     * @return
+     */
+    Product getProductByEnuuAndCodeAndBrand(Long enuu, String cmpCode, String branden);
 }

+ 60 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -50,6 +50,7 @@ import com.uas.platform.b2c.trade.order.dao.ProofingDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
+import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.b2c.trade.order.model.TradeProofing;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
@@ -4243,4 +4244,63 @@ public class GoodsServiceImpl implements GoodsService {
             return null;
         }
     }
+
+    /**
+     * 根据销售单明细,获取物料信息
+     *
+     * @param detail 销售单明细
+     * @return Product
+     */
+    @Override
+    public Product getProductByPurchaseDetail(PurchaseDetail detail) {
+        if (detail == null) {
+            return null;
+        }
+        Product product = productService.getProductByProductNumAndProductid(detail.getGoodsnumber(), detail.getProductid());
+        if (product != null) {
+            return product;
+        }
+        if (org.apache.commons.lang.StringUtils.isNotEmpty(detail.getBatchCode())) {
+            GoodsHistory goodsHistory = goodsHistoryDao.findNewByBatchCode(detail.getBatchCode());
+            if (goodsHistory != null) {
+                product = productService.getProductByProductNumAndProductid(goodsHistory.getProdNum(), goodsHistory.getProductid());
+            } else {
+                product = productService.getProductByEnuuAndCodeAndBrand(detail.getPurchase().getSellerenuu(), detail.getCmpCode(), detail.getBrName());
+            }
+        } else {
+            product = productService.getProductByEnuuAndCodeAndBrand(detail.getPurchase().getSellerenuu(), detail.getCmpCode(), detail.getBrName());
+        }
+
+        if (product != null) {
+            if (StringUtils.isEmpty(detail.getGoodsnumber())) {
+                detail.setGoodsnumber(product.getProdNum());
+            }
+            if (detail.getProductid() == null) {
+                detail.setProductid(product.getId());
+            }
+            List<Goods> goodsList = goodsDao.findByEnUUAndCodeAndBrandNameEn(detail.getPurchase().getSellerenuu(), detail.getCmpCode(), detail.getBrName());
+            List<Goods> goodses = new ArrayList<>();
+            List<GoodsHistory> goodsHistoryList = new ArrayList<>();
+            for (Goods goods : goodsList) {
+                if (StringUtils.isEmpty(goods.getProdNum()) || goods.getProductid() == null) {
+                    if (goods.getProductid() == null) {
+                        product.setErpReserve(NumberUtil.add(product.getErpReserve(), goods.getReserve()));
+                    }
+                    goods.setProdNum(product.getProdNum());
+                    goods.setProductid(product.getId());
+                    GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.Update.getPhrase(), Boolean.FALSE);
+                    goodsHistoryList.add(goodsHistory);
+                    goodses.add(goods);
+                }
+            }
+            if (CollectionUtils.isNotEmpty(goodses)) {
+                goodsDao.save(goodses);
+            }
+            if (CollectionUtils.isNotEmpty(goodsHistoryList)) {
+                goodsHistoryService.save(goodsHistoryList);
+            }
+            product = productDao.save(product);
+        }
+        return product;
+    }
 }

+ 50 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -2384,5 +2384,54 @@ public class ProductServiceImpl implements ProductService {
             return productDao.findAll(idList);
         }
     }
-}
 
+    /**
+     * 根据物料编号或主键获取物料信息
+     *
+     * @param productNum 物料编号
+     * @param id         主键id
+     * @return 返回物料信息
+     */
+    @Override
+    public Product getProductByProductNumAndProductid(String productNum, Long id) {
+        if (id != null) {
+            Product product = productDao.findOne(id);
+            if (product != null) {
+                return product;
+            }
+        }
+        if (org.apache.commons.lang.StringUtils.isNotEmpty(productNum)) {
+            List<Product> products = productDao.findByProdNum(productNum);
+            if (CollectionUtils.isNotEmpty(products)) {
+                return products.get(0);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 根据企业enuu、型号、品牌获取物料信息
+     *
+     * @param enuu
+     * @param cmpCode
+     * @param branden
+     * @return
+     */
+    @Override
+    public Product getProductByEnuuAndCodeAndBrand(Long enuu, String cmpCode, String branden) {
+        if (StringUtils.isEmpty(cmpCode) || StringUtils.isEmpty(branden) || enuu == null) {
+            return null;
+        }
+        String sql = "select p.pr_id from products p join product$private pp on p.pr_id = pp.pr_id and pp.pr_b2cenabled = 1 where p.pr_enuu = %d and p.pr_pcmpcode = '%s' and pr_pbranden = '%s';";
+        Object [] obj = new Object[] {enuu, cmpCode, branden};
+        String querySql = String.format(sql, obj);
+        List<Long> productId = jdbcTemplate.queryForList(querySql, Long.class);
+        if (CollectionUtils.isNotEmpty(productId)) {
+            List<Product> products = productDao.findProductInId(productId);
+            if (CollectionUtils.isNotEmpty(products)) {
+                return products.get(0);
+            }
+        }
+        return null;
+    }
+}