1
0
فهرست منبع

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

hyq 5 سال پیش
والد
کامیت
f5e2d4b855

+ 1 - 1
kmall-api/src/main/java/com/kmall/api/api/ApiCartController.java

@@ -85,7 +85,6 @@ public class ApiCartController extends ApiBaseAction {
         param.put("store_id", storeId);
         param.put("merchSn", getMerchSn());
         param.put("checkCart", checkCart);
-//        param.putAll(setIsStockShare(storeId));
         param.put("isStockShare", StockUtil.getIsStockShareByStore(storeId,apiStoreService,apiThirdMerchantBizService));
         List<CartVo> cartList = cartService.queryList(param);
         List<CartVo> validCartList = cartService.queryValidCartList(param);
@@ -788,6 +787,7 @@ public class ApiCartController extends ApiBaseAction {
             param.put("user_id", getUserId());
             Long storeId = getStoreId();
             param.put("store_id", storeId);
+            param.put("checkCart", checkCart);
             List<CartVo> list = cartService.queryValidCartList(param);
             for (CartVo cart: list) {
                 cartService.delete(cart.getId());

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/dao/ApiGoodsMapper.java

@@ -30,4 +30,6 @@ public interface ApiGoodsMapper extends BaseDao<GoodsVo> {
     void updateGoodsStock(GoodsVo goodsVo);
 
     Integer selectCountByCatalogProductList(Map<String, Object> params);
+
+    void updateByGoodsShareStock(GoodsVo goodsVo);
 }

+ 13 - 0
kmall-api/src/main/java/com/kmall/api/entity/GoodsVo.java

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

+ 1 - 0
kmall-api/src/main/java/com/kmall/api/service/ApiGoodsService.java

@@ -244,6 +244,7 @@ public class ApiGoodsService {
                 }
             }
         }
+        info.setStock_num(stockNum);
         resultObj.put("info", info);
 
         resultObj.put("attribute", attribute);

+ 45 - 21
kmall-api/src/main/java/com/kmall/api/service/ApiOrderService.java

@@ -135,13 +135,22 @@ public class ApiOrderService {
             if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
                 throw new RRException("订单提交失败:商品不存在");
             }
+            //普通、门店商品不受共享库存影响,直接取门店配置库存
 //            Integer stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
-//            String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
-            // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
-            //还原门店库存
-            resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);
-            //还原商户商品库存
+            String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
+            //还原商户商品总库存
             resetGoodsStock(goodsInfo.getGoods_number(), productInfo, goodsInfo, orderGoodsVo, userName);
+            //该商品所属第三方商户不是共享库存
+            if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);//还原门店库存
+            }else{
+                //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                if(!goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                    resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);//还原门店库存
+                }
+            }
+            //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+            updateGoodsByIsShareStock(isStockShare, goodsInfo);
         }
         update(order);
         // 判断是否有优惠券
@@ -566,7 +575,7 @@ public class ApiOrderService {
         mngChangeVo.setChangeType(Dict.changeType.item_1.getItem());
         mngChangeVo.setChangeNum(goodsItem.getNumber());//变化数
         mngChangeVo.setOriginalNum(goodsVo.getGoods_number());//原库存数
-        mngChangeVo.setValidNum(goodsVo.getGoods_number() - goodsItem.getNumber());//可用数
+        mngChangeVo.setValidNum(goodsVo.getGoods_number());//可用数
         mngChangeVo.setCreateTime(new Date());
         mngChangeVo.setModTime(new Date());
         mngChangeVo.setCreaterSn("小程序用户"+userName);
@@ -592,7 +601,6 @@ public class ApiOrderService {
         //修改门店商品销量
         productInfo.setSell_volume(productInfo.getSell_volume() + goodsItem.getNumber());
         productInfo.setGoods_id(goodsVo.getId());
-//        productVos.add(productInfo);
         apiProductMapper.updateStockNum(productInfo);
         
         StoreMngChangeVo storeMngChangeVo = new StoreMngChangeVo();
@@ -603,7 +611,7 @@ public class ApiOrderService {
         storeMngChangeVo.setMerchSn(goodsVo.getMerchSn());
         storeMngChangeVo.setStoreChangeNum(goodsItem.getNumber());
         storeMngChangeVo.setStoreOriginalNum(stockNum);
-        storeMngChangeVo.setStoreValidNum(stockNum - goodsItem.getNumber());
+        storeMngChangeVo.setStoreValidNum(productInfo.getStock_num());
         storeMngChangeVo.setCreateTime(new Date());
         storeMngChangeVo.setModTime(new Date());
         storeMngChangeVo.setCreaterSn("小程序用户"+userName);
@@ -613,6 +621,23 @@ public class ApiOrderService {
     }
 
     /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param isStockShare
+     * @param goodsInfo
+     */
+    private void updateGoodsByIsShareStock(String isStockShare, GoodsVo goodsInfo){
+        //该商品为共享库存,且是保税备货商品
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            GoodsVo goodsVo = new GoodsVo();
+            goodsVo.setId(goodsInfo.getId());
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款触发)
+            goodsVo.setIsGoodsShareStock(Dict.isGoodsShareStock.item_0.getItem());
+            apiGoodsMapper.updateByGoodsShareStock(goodsVo);
+        }
+    }
+
+    /**
      * 检查库存和更新库存
      * @param checkedGoodsList
      * @param storeId
@@ -633,19 +658,9 @@ public class ApiOrderService {
                     logger.error("订单提交失败:商品已下架");
                     throw new RRException("订单提交失败:商品已下架");
                 }
-//                String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
+                String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
                 // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
                 stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
-                /*if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
-                    if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
-                        stockNum = goodsInfo.getGoods_number();
-                    }
-                    if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
-                        stockNum = productInfo.getStock_num();
-                    }
-                }else {
-                    stockNum = productInfo.getStock_num();
-                }*/
                 if (null == stockNum || stockNum < goodsItem.getNumber() || stockNum <= 0) {
                     logger.error("订单提交失败:库存不足,仅剩余" + stockNum);
                     throw new RRException("订单提交失败:库存不足,仅剩余" + stockNum);
@@ -653,8 +668,17 @@ public class ApiOrderService {
                     productInfo.setStore_id(storeId);
                     //扣减商户商品总库存
                     updateGoodsStock(goodsInfo, goodsItem, userName);
-                    //扣减门店库存
-                    updateStock(productInfo,goodsInfo,stockNum,goodsItem,storeId,userName);
+                    //该商品所属第三方商户不是共享库存
+                    if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                        updateStock(productInfo, goodsInfo, stockNum, goodsItem, storeId, userName);//扣减门店库存
+                    }else{
+                        //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                        if(!goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                            updateStock(productInfo, goodsInfo, stockNum, goodsItem, storeId, userName);//扣减门店库存
+                        }
+                    }
+                    //该商品所属第三方商户为共享库存,且是保税备货商品,下单时改变
+                    updateGoodsByIsShareStock(isStockShare, goodsInfo);
                 }
             }
         }

+ 5 - 52
kmall-api/src/main/resources/mybatis/mapper/ApiCartMapper.xml

@@ -79,24 +79,8 @@
         LEFT JOIN mk_store_camp_minus_goods g ON g.store_rela_id = psr.id
         AND apply_type != '02'
         LEFT JOIN mk_store_camp_minus m ON m.camp_minus_id = g.camp_minus_id
-        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and psr.stock_num > 0
-        <!--<if test="checkCart == null">
-            <if test="isStockShare == 1 and goodsBizType == 00">
-                and b.goods_number > 0
-            </if>
-            <if test="isStockShare == 1 and goodsBizType != 00">
-                and psr.stock_num > 0
-            </if>
-            <if test="isStockShare == 0">
-                and psr.stock_num > 0
-            </if>
-        </if>-->
-        <!--<if test="isStockShare == 1 and (checkCart != null and checkCart != '11')">-->
-            <!--and b.goods_number > 0-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and (checkCart != null and checkCart != '11')">-->
-            <!--and psr.stock_num > 0-->
-        <!--</if>-->
+        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and b.goods_number > 0
+        and psr.stock_num > 0
         <if test="checkCart != null and checkCart == '11'">
             and b.goods_biz_type = '11'
         </if>
@@ -152,22 +136,10 @@
         LEFT JOIN mall_store s ON s.id = psr.store_id
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code
         LEFT JOIN third_merchant_biz mb2 ON b.third_party_merch_code = mb2.third_party_merch_code
-        where 1 = 1
-        <!--<if test="isStockShare == 1 and checkCart != null and checkCart != '11'">-->
-        <!--and (b.goods_number = 0 or b.is_on_sale = 0)-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and checkCart != null and checkCart != '11'">-->
-        <!--and (psr.stock_num = 0 or b.is_on_sale = 0)-->
-        <!--</if>-->
+        where 1 = 1 and (b.goods_number = 0 or psr.stock_num = 0 or b.is_on_sale = 0)
         <if test="checkCart != null and checkCart != '11'">
             and b.goods_biz_type != '11'
         </if>
-        <if test="checkCart != null and checkCart != '11'">
-            and (psr.stock_num = 0 or b.is_on_sale = 0)
-        </if>
-        <if test="checkCart != null and checkCart == '11'">
-            and (psr.stock_num = 0 or b.is_on_sale = 0)
-        </if>
         <if test="checkCart != null and checkCart == '11'">
             and b.goods_biz_type = '11'
         </if>
@@ -217,27 +189,8 @@
         LEFT JOIN mk_store_camp_minus_goods g ON g.store_rela_id = psr.id
         AND apply_type != '02'
         LEFT JOIN mk_store_camp_minus m ON m.camp_minus_id = g.camp_minus_id
-        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1
-        <if test="checkCart == null">
-            <if test="isStockShare == 1 and goodsBizType == 00">
-                and b.goods_number > 0
-            </if>
-            <if test="isStockShare == 1 and goodsBizType != 00">
-                and psr.stock_num > 0
-            </if>
-            <if test="isStockShare == 0">
-                and psr.stock_num > 0
-            </if>
-        </if>
-        <!--<if test="isStockShare == 1 and (checkCart != null and checkCart != '11')">-->
-        <!--and b.goods_number > 0-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and (checkCart != null and checkCart != '11')">-->
-        <!--and psr.stock_num > 0-->
-        <!--</if>-->
-        <if test="checkCart != null and checkCart == '11'">
-            and psr.stock_num > 0 and b.goods_biz_type = '11'
-        </if>
+        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and b.goods_number > 0
+        and psr.stock_num > 0
         <if test="checkCart != null and checkCart != '11'">
             and b.goods_biz_type != '11'
         </if>

+ 2 - 5
kmall-api/src/main/resources/mybatis/mapper/ApiFootprintMapper.xml

@@ -35,12 +35,9 @@
         left join mall_goods g on f.goods_id = g.id
         LEFT JOIN mall_product_store_rela psr ON psr.goods_id = g.id and g.merch_sn = psr.merch_sn
         <where>
-            1=1 and g.is_delete = 0 and g.is_on_sale = 1
+            1=1 and g.is_delete = 0 and g.is_on_sale = 1 and g.goods_number > 0
             <if test="bizType == true">
-                <if test="isStockShare == 1 and (checkCart != null and checkCart == '00')">
-                    and g.goods_number > 0
-                </if>
-                <if test="isStockShare == 0 and (checkCart != null and checkCart == '00')">
+                <if test="isStockShare == 0">
                     and psr.stock_num > 0
                 </if>
                 <if test="checkCart != null and checkCart == '11'">

+ 11 - 4
kmall-api/src/main/resources/mybatis/mapper/ApiGoodsMapper.xml

@@ -52,6 +52,7 @@
         <result column="third_party_merch_code" property="thirdPartyMerchCode" />
         <result column="isStockShare" property="isStockShare" />
         <result property="goods_sell_volume" column="goods_sell_volume"/>
+        <result property="isGoodsShareStock" column="is_goods_share_stock"/>
 
     </resultMap>
 
@@ -245,10 +246,7 @@
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code AND mb.merch_sn = s.merch_sn
         LEFT JOIN mall_product b ON b.id = psr1.product_id
         LEFT JOIN mall_category c ON psr1.category_id = c.id
-        where 1 = 1
-        <if test="isStockShare == 1">
-            and (a.goods_number > 0  or psr1.stock_num > 0 )
-        </if>
+        where 1 = 1 and a.goods_number > 0
         <if test="isStockShare == 0">
             and psr1.stock_num > 0
         </if>
@@ -502,4 +500,13 @@
         </set>
         where a.id = #{id}
     </update>
+
+
+    <update id="updateByGoodsShareStock" parameterType="com.kmall.api.entity.GoodsVo">
+        update mall_goods
+        <set>
+            <if test="isGoodsShareStock != null">`is_goods_share_stock` = #{isGoodsShareStock} </if>
+        </set>
+        where id = #{id}
+    </update>
 </mapper>