Browse Source

完成出入库记录获取的功能

yujia 7 years ago
parent
commit
8a14233219

+ 17 - 4
src/main/java/com/uas/platform/b2c/prod/commodity/controller/CommodityInOutboundController.java

@@ -1,9 +1,12 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
+import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -31,8 +34,8 @@ public class CommodityInOutboundController {
      * @return
      */
     @RequestMapping(value = "/inBound/other", method = RequestMethod.POST)
-    public ResultMap inBound(@RequestBody String detail) {
-        return commodityInOutboundService.inOutBound(detail, InOutBoundType.OTHER_INBOUND);
+    public ResultMap inBound(@RequestBody String detail, String enName) {
+        return commodityInOutboundService.inOutBound(detail, InOutBoundType.OTHER_INBOUND, enName);
     }
 
     /**
@@ -40,7 +43,17 @@ public class CommodityInOutboundController {
      * @return
      */
     @RequestMapping(value = "/outBound/other", method = RequestMethod.POST)
-    public ResultMap outBound(@RequestBody String detail) {
-        return commodityInOutboundService.inOutBound(detail, InOutBoundType.OTHER_OUTBOUND);
+    public ResultMap outBound(@RequestBody String detail, String enName) {
+        return commodityInOutboundService.inOutBound(detail, InOutBoundType.OTHER_OUTBOUND, enName);
+    }
+
+    /**
+     * 分页获取
+     * @param params
+     * @return
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<CommodityInOutbound> getCommodityInOutboundByPage(PageParams params, String keyword, String type, Long fromDate, Long toDate) {
+        return commodityInOutboundService.getCommodityInOutboundByPage(params, keyword, type, fromDate, toDate);
     }
 }

+ 16 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/CommodityInOutboundService.java

@@ -3,6 +3,8 @@ package com.uas.platform.b2c.prod.commodity.service;
 import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
 import java.util.Set;
@@ -41,8 +43,21 @@ public interface CommodityInOutboundService {
      * 入库动作,传入入库明细,生成入库信息
      * @param detail 传入的明细
      * @param type 其他出库,还是其他出库
+     * @param enName 关联公司
      * @return ResultMap
      * @return
      */
-    ResultMap inOutBound(String detail, String type);
+    ResultMap inOutBound(String detail, String type, String enName);
+
+
+    /**
+     * 出入库的记录
+     * @param params 分页信息
+     * @param keyword 关键字
+     * @param type 类型
+     * @param fromDate 开始时间
+     * @param toDate 结束时间
+     * @return
+     */
+    Page<CommodityInOutbound> getCommodityInOutboundByPage(PageParams params, String keyword, String type, Long fromDate, Long toDate);
 }

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

@@ -805,4 +805,19 @@ public interface GoodsService {
      * @param goods 物料信息
      */
     void bindGoodsToProduct(Goods goods);
+
+
+    /**
+     * 保存goods
+     * @param goodses
+     * @return
+     */
+    List<Goods> save(List<Goods> goodses);
+
+    /**
+     * 保存goods
+     * @param goods
+     * @return
+     */
+    Goods save(Goods goods);
 }

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

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.service.impl;
 
+import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
@@ -10,19 +11,29 @@ 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.InOutboundDetailService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 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;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
 
 /**
  * description
@@ -110,7 +121,7 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
      * @return
      */
     @Override
-    public ResultMap inOutBound(String detail, String type) {
+    public ResultMap inOutBound(String detail, String type, String enName) {
         if (StringUtilB2C.isEmpty(detail)) {
             return new ResultMap(CodeType.NO_INFO, "传入的信息为空");
         } else {
@@ -135,13 +146,26 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
             CommodityInOutbound inOutbound = new CommodityInOutbound(type);
             inOutbound.setInOutId(inOutboundId);
             Short i = 1;
+            Set<InOutboundDetail> set = new HashSet<>();
             if (CollectionUtils.isNotEmpty(prids)) {
                 List<Product> products = productService.findByProductId(prids);
                 for (InOutboundDetail inOutboundDetail : detaiList) {
-                    inOutboundDetail.setDetno(i++);
-                    inOutboundDetail.setCommodityInOutbound(inOutbound);
                     for (Product product : products) {
                         if (inOutboundDetail.getProductId().longValue() == product.getId().longValue()) {
+                            if (InOutBoundType.INBOUND.equals(type) || InOutBoundType.OTHER_INBOUND.equals(type) || InOutBoundType.PURCHASE_INBOUND.equals(type)) {
+                                product.setErpReserve(NumberUtil.add(product.getErpReserve(), inOutboundDetail.getQty()));
+                            } else {
+                                //出库
+                                if (NumberUtil.compare(product.getErpReserve(), DoubleConstant.zero) == 0) {
+                                    break;
+                                } else if (NumberUtil.compare(product.getErpReserve(), inOutboundDetail.getQty()) > 0) {
+                                    product.setErpReserve(NumberUtil.sub(product.getErpReserve(), inOutboundDetail.getQty()));
+                                } else {
+                                    inOutboundDetail.setQty(product.getErpReserve());
+                                    product.setErpReserve(DoubleConstant.zero);
+                                }
+
+                            }
                             inOutboundDetail.setBrandCn(product.getPbrand());
                             inOutboundDetail.setBrandEn(product.getPbranden());
                             inOutboundDetail.setBrandId(product.getPbrandid());
@@ -151,18 +175,74 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
                             inOutboundDetail.setKindId(product.getKindid());
                             inOutboundDetail.setKindName(product.getKind());
                             inOutboundDetail.setSpec(product.getSpec());
+                            set.add(inOutboundDetail);
+                            inOutboundDetail.setDetno(i++);
+                            inOutboundDetail.setCommodityInOutbound(inOutbound);
+                            break;
                         }
                     }
                 }
             } else {
                 throw new IllegalOperatorException("没有需要操作的信息");
             }
-            Set<InOutboundDetail> details = new HashSet<>();
-            details.addAll(detaiList);
-            inOutbound.setInOutboundDetails(details);
+            if (CollectionUtils.isNotEmpty(set)) {
+                return ResultMap.success("剩余库存为0,不能出库");
+            }
+            inOutbound.setInOutboundDetails(set);
+            inOutbound.setAffiliatedEnterprise(enName);
             CommodityInOutbound commodityInOutbound = commodityInOutboundDao.save(inOutbound);
             //重新计算成本价、在售产品的库存信息需要更新
+            List<Long> pridList = new ArrayList<>();
+            pridList.addAll(prids);
+            productService.updateProductsByInBound(pridList);
             return ResultMap.success(commodityInOutbound);
         }
     }
+
+    /**
+     * 出入库的记录
+     *
+     * @param params   分页信息
+     * @param keyword  关键字
+     * @param type     类型
+     * @param fromDate 开始时间
+     * @param toDate   结束时间
+     * @return
+     */
+    @Override
+    public Page<CommodityInOutbound> getCommodityInOutboundByPage(PageParams params, String keyword, String type, Long fromDate, Long toDate) {
+        final PageInfo info = new PageInfo(params);
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        info.filter("enuu", enuu);
+        if (fromDate != null) {
+            info.expression(PredicateUtils.gte("createTime", new Date(fromDate), false));
+        }
+        if (toDate != null) {
+            info.expression(PredicateUtils.lte("createTime", new Date(toDate), false));
+        }
+        if (org.apache.commons.lang.StringUtils.isNotEmpty(keyword)) {
+            SimpleExpression[] simpArrs = new SimpleExpression[3];
+            simpArrs[0] = new SimpleExpression("affiliatedEnterprise", keyword, CriterionExpression.Operator.LIKE, true);
+            simpArrs[1] = new SimpleExpression("inOutId", keyword, CriterionExpression.Operator.LIKE, true);
+            simpArrs[2] = new SimpleExpression("operaterUserName", keyword, CriterionExpression.Operator.LIKE, true);
+            LogicalExpression logical = new LogicalExpression(simpArrs, CriterionExpression.Operator.OR);
+            info.expression(logical);
+
+        }
+        if (org.apache.commons.lang.StringUtils.isNotEmpty(type)) {
+            SimpleExpression[] simpArrs = new SimpleExpression[2];
+            simpArrs[0] = new SimpleExpression("opertatorType", type, CriterionExpression.Operator.EQ, true);
+            simpArrs[1] = new SimpleExpression("type", type, CriterionExpression.Operator.EQ, true);
+            LogicalExpression logical = new LogicalExpression(simpArrs, CriterionExpression.Operator.OR);
+            info.expression(logical);
+
+        }
+        return commodityInOutboundDao.findAll(new Specification<CommodityInOutbound>() {
+            @Override
+            public Predicate toPredicate(Root<CommodityInOutbound> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+    }
 }

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

@@ -4275,4 +4275,34 @@ public class GoodsServiceImpl implements GoodsService {
             goods.setProductid(product1.getId());
         }
     }
+
+    /**
+     * 保存goods
+     *
+     * @param goodses
+     * @return
+     */
+    @Override
+    public List<Goods> save(List<Goods> goodses) {
+        if (CollectionUtils.isNotEmpty(goodses)) {
+            return goodsDao.save(goodses);
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 保存goods
+     *
+     * @param goods
+     * @return
+     */
+    @Override
+    public Goods save(Goods goods) {
+        if (goods != null) {
+            return goodsDao.save(goods);
+        } else {
+            return null;
+        }
+    }
 }

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

@@ -2413,13 +2413,16 @@ public class ProductServiceImpl implements ProductService {
             Double qtyContainPrice = 0.0d;
             Double qty = 0.0d;
             Double totalPrice = 0.0d;
+            List<Double> doubleList = null;
             for (InOutboundDetail inOutboundDetail : inOutboundDetails) {
-                List<Double> doubleList = map.get(inOutboundDetail.getProductId());
+                doubleList = map.get(inOutboundDetail.getProductId());
+                qtyContainPrice = 0.0d; qty = 0.0d; totalPrice = 0.0d;
                 if (doubleList == null) {
                     doubleList = new ArrayList<>();
-                    doubleList.add(0.0d);
-                    doubleList.add(0.0d);
-                    doubleList.add(0.0d);
+                } else {
+                    qtyContainPrice = doubleList.get(0);
+                    qty = doubleList.get(1);
+                    totalPrice = doubleList.get(2);
                 }
                 if (InOutBoundType.INBOUND.equals(inOutboundDetail.getCommodityInOutbound().getType())) {
                     qty = NumberUtil.add(doubleList.get(0), inOutboundDetail.getQty());
@@ -2430,7 +2433,37 @@ public class ProductServiceImpl implements ProductService {
                 } else {
                     qty = NumberUtil.sub(qty, inOutboundDetail.getQty());
                 }
+                doubleList.set(0, qtyContainPrice);
+                doubleList.set(1, qty);
+                doubleList.set(2, totalPrice);
+                map.put(inOutboundDetail.getProductId(), doubleList);
+            }
+
+            for (Product product : products) {
+                List<Double> list = map.get(product.getId());
+                if (CollectionUtils.isNotEmpty(list)) {
+                    qty = list.get(1);
+                    if (NumberUtil.compare(qty, DoubleConstant.zero) < 1) {
+                        product.setErpReserve(DoubleConstant.zero);
+                    } else {
+                        product.setErpReserve(qty);
+                    }
+                    double price = NumberUtil.div(list.get(2), list.get(0));
+                    product.setPrice(price);
+                }
+            }
+
+            List<Goods> goodsList = goodsService.findByProductids(prids);
+            for (Product product : products) {
+                for (Goods goods : goodsList) {
+                    if ((goods.getProductid() != null) && (goods.getProductid().longValue() == product.getId().longValue())) {
+                        goods.setReserve(product.getErpReserve());
+                        goods.setStatus();
+                    }
+                }
             }
+            goodsService.save(goodsList);
+            productDao.save(products);
         }
     }
 }