浏览代码

小程序管理端库存查询逻辑修改,新增同步商品总库存逻辑

hyq 5 年之前
父节点
当前提交
30275fe102

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -421,8 +421,8 @@ public class OrderController {
                 orderRefundService.update(orderRefund);//退款记录
             }
             OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
-            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
             mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
             mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
             mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getErr_code_des());
             mallOrderExceptionRecord.setCreateTime(new Date());
@@ -447,8 +447,8 @@ public class OrderController {
             OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
             OrderRefundEntity orderRefund = new OrderRefundEntity();
             orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
-            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
             orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
 //            orderRefund.setOutRefundNo(result.getOut_refund_no());
             orderRefund.setModTime(new Date());
             if (mallOrderRefund != null) {

+ 3 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -52,7 +52,8 @@ public class ProductStoreRelaController {
         Query query = new Query(params);
 
         List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryList(query);
-        /*for (ProductStoreRelaEntity pro: productStoreRelaList) {
+        //共享库存以商品总库存为准
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
             if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
                 if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
                     if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
@@ -62,7 +63,7 @@ public class ProductStoreRelaController {
                     }
                 }
             }
-        }*/
+        }
         int total = productStoreRelaService.queryTotal(query);
 
         PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java

@@ -63,4 +63,10 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
      * @return 总数
      */
     int queryGoodsRealListByTopicIdTotal(Map<String, Object> map);
+
+    /**
+     * 共享库存商品库存变化,修改该商品的所有库存信息
+     * @param productStoreRelaEntity
+     */
+    void updateStockNumByGoodsId(ProductStoreRelaEntity productStoreRelaEntity);
 }

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java

@@ -192,6 +192,19 @@ public class GoodsEntity implements Serializable {
     private String goodsIsStockShare;
     private String isStockShareBySuppler;
 
+    /**
+     * 商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+     */
+    private String isGoodsShareStock;
+
+    public String getIsGoodsShareStock() {
+        return isGoodsShareStock;
+    }
+
+    public void setIsGoodsShareStock(String isGoodsShareStock) {
+        this.isGoodsShareStock = isGoodsShareStock;
+    }
+
     public String getIsSupplierGoods() {
         return isSupplierGoods;
     }

+ 36 - 23
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -58,6 +58,8 @@ public class GoodsServiceImpl implements GoodsService {
     private MngChangeDao mngChangeDao;
     @Autowired
     private MerchUserDao merchUserDao;
+    @Autowired
+    private StoreMngChangeDao storeMngChangeDao;
 
     @Override
     public GoodsEntity queryObject(Integer id) {
@@ -407,29 +409,6 @@ public class GoodsServiceImpl implements GoodsService {
         if (productStoreRelaEntityList != null && productStoreRelaEntityList.size() > 0) {
             for (int i = 0; i < productStoreRelaEntityList.size(); i++) {
                 //修改该商品的所属商户信息,如在该商户门店中有该上架的商品信息,则提示该商品不能修改
-                /*if(org.apache.commons.lang3.StringUtils.isNotEmpty(productStoreRela.getMerchSn()) && productStoreRela.getMerchSn().equalsIgnoreCase(goods.getMerchSn())
-                        && goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_1.getItem())) {
-                    if (goods.getRetailPrice() != null) {
-                        productStoreRela.setRetailPrice(goods.getRetailPrice());
-                    }
-                    if (goods.getMarketPrice() != null) {
-                        productStoreRela.setMarketPrice(goods.getMarketPrice());
-                    }
-                    productStoreRelaDao.update(productStoreRela);
-                }else {
-                    if (goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_0.getItem())) {
-                        if (goods.getRetailPrice() != null) {
-                            productStoreRela.setRetailPrice(goods.getRetailPrice());
-                        }
-                        if (goods.getMarketPrice() != null) {
-                            productStoreRela.setMarketPrice(goods.getMarketPrice());
-                        }
-                        productStoreRela.setMerchSn("");
-                        productStoreRelaDao.update(productStoreRela);
-                    } else {
-                        throw new RRException("商品编码为【" + goods.getGoodsSn() + "】的商品已上架在商户编号为【" + productStoreRela.getMerchSn() + "】的门店中,可先将该商品下架后再进行修改!");
-                    }
-                }*/
                 ProductStoreRelaEntity relaEntity = productStoreRelaEntityList.get(i);
                 if(org.apache.commons.lang3.StringUtils.isNotEmpty(relaEntity.getMerchSn()) && relaEntity.getMerchSn().equalsIgnoreCase(goods.getMerchSn())
                         && goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_1.getItem())) {
@@ -446,6 +425,40 @@ public class GoodsServiceImpl implements GoodsService {
             if (goodsNumber < storeTotalGoodsNumber) {
                 throw new RRException("该商品已在各门店分配库存" + storeTotalGoodsNumber + ",当前商品总库存不能小于分配库存总额!请先修改门店库存!");
             }
+        }else{
+            //共享库存商品库存变化,修改该商品的所有库存信息
+            ProductStoreRelaEntity productStoreRelaEntity = new ProductStoreRelaEntity();
+            productStoreRelaEntity.setStockNum(goodsNumber);
+            productStoreRelaEntity.setGoodsId(goods.getId());
+            productStoreRelaDao.updateStockNumByGoodsId(productStoreRelaEntity);
+
+            for (int i = 0; i < productStoreRelaEntityList.size(); i++) {
+                ProductStoreRelaEntity relaEntity = productStoreRelaEntityList.get(i);
+                //新增库存操作记录
+                StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
+                storeMngChangeEntity.setChangeReason("共享库存变更,更新门店商品库存");
+                storeMngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(relaEntity.getGoodsId())));
+                storeMngChangeEntity.setStoreId(Integer.parseInt(String.valueOf(relaEntity.getStoreId())));
+                storeMngChangeEntity.setMerchSn(goods.getMerchSn());
+                storeMngChangeEntity.setCreateTime(new Date());
+                storeMngChangeEntity.setModTime(new Date());
+                storeMngChangeEntity.setCreaterSn(user.getUsername());
+                storeMngChangeEntity.setModerSn(user.getUsername());
+                storeMngChangeEntity.setIsValid(0);
+                Integer orginalNum = relaEntity.getStockNum()==null?0:relaEntity.getStockNum();//原有库存
+                if(goodsNumber != orginalNum) {
+                    if (orginalNum > goodsNumber) {
+                        storeMngChangeEntity.setChangeType(Dict.changeType.item_4.getItem());
+                        storeMngChangeEntity.setStoreChangeNum(orginalNum - goodsNumber);//变化数
+                    } else {
+                        storeMngChangeEntity.setChangeType(Dict.changeType.item_3.getItem());
+                        storeMngChangeEntity.setStoreChangeNum(goodsNumber - orginalNum);//变化数
+                    }
+                    storeMngChangeEntity.setStoreOriginalNum(orginalNum);//原库存数
+                    storeMngChangeEntity.setStoreValidNum(goodsNumber);//可用数
+                    storeMngChangeDao.save(storeMngChangeEntity);
+                }
+            }
         }
 
         Map cartMap = Maps.newHashMap();

+ 31 - 7
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -428,7 +428,7 @@ public class OrderServiceImpl implements OrderService {
     }
 
     private void updateStock(OrderEntity order, String changeReason){
-        Map<String, Object> map = new HashMap<String, Object>();
+        Map<String, Object> map = new HashMap();
         SysUserEntity user = ShiroUtils.getUserEntity();
         map.put("orderId", order.getId());
         List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
@@ -444,22 +444,46 @@ public class OrderServiceImpl implements OrderService {
             }
 
             Integer stockNum = 0;
-            // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
-            if (null != storeRelaEntity.getStockNum()) {
-                stockNum = storeRelaEntity.getStockNum();
-                //还原门店库存
-                resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
-            }
             GoodsEntity goodsEntity = goodsDao.queryObject(orderGoodsEntity.getGoodsId());
             if(goodsEntity != null){
                 stockNum = goodsEntity.getGoodsNumber();
                 //还原商户商品库存
                 resetGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
             }
+            if (null != storeRelaEntity.getStockNum()) {
+                stockNum = storeRelaEntity.getStockNum();
+                //普通商品不受共享库存影响,直接取门店配置库存
+                //该商品所属第三方商户不是共享库存
+                if(goodsEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                    resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);//还原门店库存
+                }else{
+                    //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                    if(!goodsEntity.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                        resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);//还原门店库存
+                    }
+                }
+            }
+            //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+            updateGoodsByIsShareStock(goodsEntity);
         }
     }
 
     /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param goodsInfo
+     */
+    private void updateGoodsByIsShareStock(GoodsEntity goodsInfo){
+        //该商品所属第三方商户为共享库存,且是保税备货商品
+        if(goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            GoodsEntity goodsVo = new GoodsEntity();
+            goodsVo.setId(goodsInfo.getId());
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款触发)
+            goodsVo.setIsGoodsShareStock(Dict.isGoodsShareStock.item_0.getItem());
+            goodsDao.update(goodsVo);
+        }
+    }
+    /**
      * 还原商品总库存
      * @param stockNum
      * @param storeRelaEntity

+ 4 - 0
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -66,6 +66,7 @@
         <result column="isStockShare" property="isStockShare" />
         <result column="gross_weight" property="grossWeight" />
         <result column="net_weight" property="netWeight" />
+        <result property="isGoodsShareStock" column="is_goods_share_stock"/>
 
     </resultMap>
 
@@ -386,6 +387,7 @@
 			`is_app_exclusive`,
             `gross_weight`,
             `net_weight`,
+            is_goods_share_stock,
 			`is_limited`,
 			`is_hot`,
 			`creater_sn`,
@@ -433,6 +435,7 @@
 			#{isAppExclusive},
             #{grossWeight},
             #{netWeight},
+            #{isGoodsShareStock},
 			#{isLimited},
 			#{isHot},
 			#{createrSn},
@@ -484,6 +487,7 @@
             <if test="isAppExclusive != null">`is_app_exclusive` = #{isAppExclusive}, </if>
             <if test="grossWeight != null">`gross_weight` = #{grossWeight}, </if>
             <if test="netWeight != null">`net_weight` = #{netWeight}, </if>
+            <if test="isGoodsShareStock != null">`is_goods_share_stock` = #{isGoodsShareStock}, </if>
             <if test="isLimited != null">`is_limited` = #{isLimited}, </if>
             <if test="isHot != null">`is_hot` = #{isHot}, </if>
             <if test="createrSn != null">`creater_sn` = #{createrSn}, </if>

+ 8 - 0
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -671,4 +671,12 @@
         </if>
     </select>
 
+    <update id="updateStockNumByGoodsId" parameterType="com.kmall.admin.entity.ProductStoreRelaEntity">
+        update mall_product_store_rela a
+        <set>
+            <if test="stockNum != null">a.`stock_num` = #{stockNum},</if>
+        </set>
+        where a.goods_id = #{goodsId}
+    </update>
+
 </mapper>

+ 5 - 5
kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html

@@ -52,15 +52,15 @@
         <Row :gutter="16">
             <div class="search-group">
                 <i-col span="3">
-                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
-                        <i-option v-for="store in stores" :value="store.id"
-                                  :key="store.id">{{store.storeName}}
+                    <i-select v-model="q.thirdPartyMerchCode" placeholder="所属三方商户" filterable >
+                        <i-option v-for="thirdMerchant in thirdMerchantBizShowList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}
                         </i-option>
                     </i-select>
                 </i-col>
                 <i-col span="3">
-                    <i-select v-model="q.thirdPartyMerchCode" placeholder="所属三方商户" filterable >
-                        <i-option v-for="thirdMerchant in thirdMerchantBizShowList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
                         </i-option>
                     </i-select>
                 </i-col>

+ 8 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/storemngchange.html

@@ -9,9 +9,16 @@
 	<div v-show="showList">
         <Row :gutter="16">
             <div class="search-group">
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value @on-change="changeGoods">
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
                 <i-col span="4">
                     <i-select v-model="q.goodsId" filterable placeholder="商品" label-in-value>
-                        <i-option v-for="goods in goodss" :value="goods.id" :key="goods.id">{{goods.name}}</i-option>
+                        <i-option v-for="goods in goodss" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}</i-option>
                     </i-select>
                 </i-col>
                 <i-col span="4">

+ 16 - 5
kmall-admin/src/main/webapp/js/shop/storemngchange.js

@@ -84,9 +84,11 @@ let vm = new Vue({
 		},
 		q: {
             goodsId: '',
-            changeType: ''
+            changeType: '',
+            storeId: ''
 		},
         goodss: [],
+        stores: [],
         macros: []
 	},
 	methods: {
@@ -155,10 +157,19 @@ let vm = new Vue({
                 vm.storeMngChange = r.storeMngChange;
             });
 		},
+        changeGoods:function (opt) {
+		    var storeId = opt.value;
+		    if(storeId){
+                $.get("../productstorerela/queryAll?storeId=" + storeId, function (r) {
+                    vm.goodss = r.list;
+                });
+            }
+        },
         reloadSearch: function() {
             vm.q = {
                 goodsId: '',
-                changeType: ''
+                changeType: '',
+                storeId: ''
             }
             vm.reload();
 		},
@@ -166,7 +177,7 @@ let vm = new Vue({
 			vm.showList = true;
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType},
+                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType,'storeId':vm.q.storeId},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -185,8 +196,8 @@ let vm = new Vue({
         /*$.get("../category/getCategorySelect", function (r) {
             vm.queryCategories = r.list;
         });*/
-        $.get("../goods/queryAll", function (r) {
-            vm.goodss = r.list;
+        $.get("../store/queryAll", function (r) {
+            vm.stores = r.list;
         });
 
         $.get("../sys/macro/queryMacrosByValue?value=changeType", function (r) {