ソースを参照

调整出入库的逻辑

yujia 7 年 前
コミット
72da9ad767

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/dao/InOutboundDetailDao.java

@@ -21,6 +21,6 @@ public interface InOutboundDetailDao extends JpaRepository<InOutboundDetail, Lon
      * @param productIds
      * @return
      */
-    @Query(value = "select i from InOutboundDetail where i.productId in (:productIds)")
+    @Query(value = "select i from InOutboundDetail i where i.productId in (:productIds)")
     List<InOutboundDetail> findByProductId(@Param("productIds") Set<Long> productIds);
 }

+ 0 - 14
src/main/java/com/uas/platform/b2c/prod/commodity/model/InOutboundDetail.java

@@ -82,12 +82,6 @@ public class InOutboundDetail implements Serializable {
     @Column(name = "iobd_price")
     private Double price;
 
-    /**
-     * 出库明细的主键
-     */
-    @Column(name = "iobd_ciobid")
-    private Long ciobid;
-
     /**
      * 序号
      */
@@ -193,14 +187,6 @@ public class InOutboundDetail implements Serializable {
         this.price = price;
     }
 
-    public Long getCiobid() {
-        return ciobid;
-    }
-
-    public void setCiobid(Long ciobid) {
-        this.ciobid = ciobid;
-    }
-
     public Short getDetno() {
         return detno;
     }

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -240,6 +240,13 @@ public interface ProductService {
      */
     List<Product> findByProductId(List<Long> ids);
 
+    /**
+     * 批量获物料信息
+     * @param ids
+     * @return
+     */
+    List<Product> findByProductId(Set<Long> ids);
+
     /**
      * 验证物料申请是否为标准物料
      * @return
@@ -354,4 +361,11 @@ public interface ProductService {
      * @param inOutMap 出入库的map
      */
     void updateProductsByReleaseProductByBatch(Set<ReleaseProductByBatch> reList, Integer ignoreImport, Set<InOutboundDetail> newInOutboundDetail, Map<String, Set<InOutboundDetail>> inOutMap);
+
+
+    /**
+     * 因入库,需要修改物料信息
+     * @param prids
+     */
+    void updateProductsByInBound(List<Long> prids);
 }

+ 22 - 18
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/CommodityInOutboundServiceImpl.java

@@ -6,9 +6,10 @@ import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.dao.CommodityInOutboundDao;
 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.V_ProductPrivate;
+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.V_ProductPrivateService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -35,13 +36,16 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
 
     private final CreateNumberService createNumberService;
 
-    private final V_ProductPrivateService v_ProductPrivateService;
+    private final ProductService productService;
+
+    private final InOutboundDetailService inOutboundDetailService;
 
     @Autowired
-    public CommodityInOutboundServiceImpl(CommodityInOutboundDao commodityInOutboundDao, CreateNumberService createNumberService, V_ProductPrivateService v_productPrivateService) {
+    public CommodityInOutboundServiceImpl(CommodityInOutboundDao commodityInOutboundDao, CreateNumberService createNumberService, ProductService productService, InOutboundDetailService inOutboundDetailService) {
         this.commodityInOutboundDao = commodityInOutboundDao;
         this.createNumberService = createNumberService;
-        v_ProductPrivateService = v_productPrivateService;
+        this.inOutboundDetailService = inOutboundDetailService;
+        this.productService = productService;
     }
 
     /**
@@ -132,21 +136,21 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
             inOutbound.setInOutId(inOutboundId);
             Short i = 1;
             if (CollectionUtils.isNotEmpty(prids)) {
-                List<V_ProductPrivate> v_productPrivates = v_ProductPrivateService.findByProductIds(prids);
+                List<Product> products = productService.findByProductId(prids);
                 for (InOutboundDetail inOutboundDetail : detaiList) {
                     inOutboundDetail.setDetno(i++);
                     inOutboundDetail.setCommodityInOutbound(inOutbound);
-                    for (V_ProductPrivate v_productPrivate : v_productPrivates) {
-                        if (inOutboundDetail.getProductId().longValue() == v_productPrivate.getId().longValue()) {
-                            inOutboundDetail.setBrandCn(v_productPrivate.getPbrand());
-                            inOutboundDetail.setBrandEn(v_productPrivate.getPbranden());
-                            inOutboundDetail.setBrandId(v_productPrivate.getPbrandid());
-                            inOutboundDetail.setBranduuid(v_productPrivate.getPbranduuid());
-                            inOutboundDetail.setCmpCode(v_productPrivate.getPcmpcode());
-                            inOutboundDetail.setCmpuuid(v_productPrivate.getCmpUuId());
-                            inOutboundDetail.setKindId(v_productPrivate.getKindid());
-                            inOutboundDetail.setKindName(v_productPrivate.getKind());
-                            inOutboundDetail.setSpec(v_productPrivate.getSpec());
+                    for (Product product : products) {
+                        if (inOutboundDetail.getProductId().longValue() == product.getId().longValue()) {
+                            inOutboundDetail.setBrandCn(product.getPbrand());
+                            inOutboundDetail.setBrandEn(product.getPbranden());
+                            inOutboundDetail.setBrandId(product.getPbrandid());
+                            inOutboundDetail.setBranduuid(product.getPbranduuid());
+                            inOutboundDetail.setCmpCode(product.getPcmpcode());
+                            inOutboundDetail.setCmpuuid(product.getCmpUuId());
+                            inOutboundDetail.setKindId(product.getKindid());
+                            inOutboundDetail.setKindName(product.getKind());
+                            inOutboundDetail.setSpec(product.getSpec());
                         }
                     }
                 }
@@ -157,7 +161,7 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
             details.addAll(detaiList);
             inOutbound.setInOutboundDetails(details);
             CommodityInOutbound commodityInOutbound = commodityInOutboundDao.save(inOutbound);
-            //如果入库,需要
+            //重新计算成本价、在售产品的库存信息需要更新
             return ResultMap.success(commodityInOutbound);
         }
     }

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

@@ -1514,6 +1514,17 @@ public class ProductServiceImpl implements ProductService {
         }
     }
 
+    /**
+     * 批量获物料信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<Product> findByProductId(Set<Long> ids) {
+        return findByProductId(ids);
+    }
+
     @Override
     public ResultMap validitonStandard(JSONObject jsonObject) {
         Component component = (Component)jsonObject.get("component");
@@ -2382,5 +2393,45 @@ public class ProductServiceImpl implements ProductService {
             }
         }
     }
+
+
+    /**
+     * 因入库,需要修改物料信息
+     *
+     * @param prids
+     */
+    @Override
+    public void updateProductsByInBound(List<Long> prids) {
+        if (CollectionUtils.isEmpty(prids)) {
+            return;
+        } else {
+            List<Product> products = productDao.findProductInId(prids);
+            Set<Long> idSet = new HashSet<>();
+            idSet.addAll(prids);
+            List<InOutboundDetail> inOutboundDetails = inOutboundDetailService.findByProductId(idSet);
+            Map<Long, List<Double>> map = new HashMap<>();
+            Double qtyContainPrice = 0.0d;
+            Double qty = 0.0d;
+            Double totalPrice = 0.0d;
+            for (InOutboundDetail inOutboundDetail : inOutboundDetails) {
+                List<Double> doubleList = map.get(inOutboundDetail.getProductId());
+                if (doubleList == null) {
+                    doubleList = new ArrayList<>();
+                    doubleList.add(0.0d);
+                    doubleList.add(0.0d);
+                    doubleList.add(0.0d);
+                }
+                if (InOutBoundType.INBOUND.equals(inOutboundDetail.getCommodityInOutbound().getType())) {
+                    qty = NumberUtil.add(doubleList.get(0), inOutboundDetail.getQty());
+                    if (inOutboundDetail.getPrice() != null) {
+                        qtyContainPrice = NumberUtil.add(qtyContainPrice, inOutboundDetail.getQty());
+                        totalPrice = NumberUtil.add(totalPrice, NumberUtil.mul(inOutboundDetail.getPrice(), inOutboundDetail.getQty()));
+                    }
+                } else {
+                    qty = NumberUtil.sub(qty, inOutboundDetail.getQty());
+                }
+            }
+        }
+    }
 }