1
0
Переглянути джерело

定时任务新增同步门店商品总库存功能,逻辑修改

hyq 5 роки тому
батько
коміт
52e94869f0

+ 6 - 0
kmall-schedule/src/main/java/com/kmall/schedule/dao/QzOrderMapper.java

@@ -94,4 +94,10 @@ public interface QzOrderMapper {
     List<Map> queryOrderIdByOrderGoodsList();
 
     Map queryOrderCountByIdAndPayStatus(@Param("storeRelaId") Integer storeRelaId);
+
+    List<Map> queryGoodsListByIsShareStock();
+
+    List<Map> queryStoreRelaListByGoodsId(@Param("goodsId") Integer goodsId);
+
+    void updateByGoodsShareStock(Map map);
 }

+ 28 - 17
kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java

@@ -48,7 +48,7 @@ public class OrderTask {
      * 方法描述:更新过期未支付订单
      * 二分钟更新未付款订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 2)
+//    @Scheduled(fixedRate = 1000 * 60 * 2)
     public void unpayPastUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>unpayPastUpdate is start ");
         qzOrderService.unpayPastUpdate();
@@ -59,7 +59,7 @@ public class OrderTask {
      * 方法描述:查询已申请退款订单以及退款中订单,查询微信退款更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void refundUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is start ");
         qzOrderService.refundUpdate();
@@ -70,7 +70,7 @@ public class OrderTask {
      * 方法描述:查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单信息更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void orderQueryUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is start ");
         qzOrderService.orderQueryUpdate();
@@ -81,7 +81,7 @@ public class OrderTask {
      * 方法描述:查询支付中的订单以及小程序更新支付信息异常订单,查询平安订单信息更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void pinganOrderQueryUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>pinganOrderQueryUpdate is start ");
         qzOrderService.pinganOrderQueryUpdate();
@@ -91,7 +91,7 @@ public class OrderTask {
     /**
      * 方法描述:商品发货后7天自动确认收货
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void shipmentOrderAutoTakeGoods() {
         logger.info(">>>>>>>>>>>>>>>>>>>>shipmentOrderAutoTakeGoods is start ");
         qzOrderService.shipmentOrderAutoTakeGoods();
@@ -101,7 +101,7 @@ public class OrderTask {
     /**
      * 方法描述:确认收货后30天自动确认好评
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void receiptOrderAutoComment() {
         logger.info(">>>>>>>>>>>>>>>>>>>>receiptOrderAutoComment is start ");
         qzOrderService.receiptOrderAutoComment();
@@ -112,7 +112,7 @@ public class OrderTask {
      * 方法描述:返回海关所需获取的支付相关实时数据
      * 五分钟更新未付款订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 5)
+//    @Scheduled(fixedRate = 1000 * 60 * 5)
     public void realTimeDataUp() {
         logger.info(">>>>>>>>>>>>>>>>>>>>realTimeDataUp is start ");
         qzOrderService.realTimeDataUp();
@@ -123,7 +123,7 @@ public class OrderTask {
      * 方法描述:用户确认收货后,记录商品分销购买记录
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void receiptOrderSaveDistSellStatis() {
         logger.info(">>>>>>>>>>>>>>>>>>>>receiptOrderSaveDistSellStatis is start ");
         qzOrderService.receiptOrderSaveDistSellStatis();
@@ -133,7 +133,7 @@ public class OrderTask {
      * 方法描述:查询渠道推广有效开始时间是否过期,过期则修改结束状态为已结束
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryStoreProm() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryStoreProm is start ");
         qzStorePromService.updateQueryStoreProm();
@@ -143,7 +143,7 @@ public class OrderTask {
      * 方法描述:支付成功且是渠道推广订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updatePromStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updatePromStatByPaySuccess is start ");
         qzStorePromService.updatePromStatByPaySuccess();
@@ -153,7 +153,7 @@ public class OrderTask {
      * 方法描述:退款成功且是渠道推广订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updatePromStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updatePromStatByRefundSuccess is start ");
         qzStorePromService.updatePromStatByRefundSuccess();
@@ -163,7 +163,7 @@ public class OrderTask {
      * 方法描述:查询优惠券有效时间是否过期,修改过期优惠券数据结束状态为无效,修改过期用户优惠券状态为无效
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryTicketDiscount() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryTicketDiscount is start ");
         qzStoreTicketDiscountService.updateQueryTicketDiscount();
@@ -174,7 +174,7 @@ public class OrderTask {
      * 方法描述:支付成功且是门店优惠券活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateTopicStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateTopicStatByPaySuccess is start ");
         qzStoreTopicStatisService.updateTopicStatByPaySuccess();
@@ -185,7 +185,7 @@ public class OrderTask {
      * 方法描述:退款成功且是门店优惠券活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateTopicStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateTopicStatByRefundSuccess is start ");
         qzStoreTopicStatisService.updateTopicStatByRefundSuccess();
@@ -196,7 +196,7 @@ public class OrderTask {
      * 方法描述:修改过期满减满折数据结束状态为无效,修改未开始且开始时间已小于或等于当前时间的满减满折结束状态为进行中
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryStoreCampMinus() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryStoreCampMinus is start ");
         qzStoreCampMinusService.updateQueryStoreCampMinus();
@@ -207,7 +207,7 @@ public class OrderTask {
      * 方法描述:支付成功且是门店促销满减活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateCampTopicStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateCampTopicStatByPaySuccess is start ");
         qzStoreTopicStatisService.updateCampTopicStatByPaySuccess();
@@ -218,7 +218,7 @@ public class OrderTask {
      * 方法描述:退款成功且是门店促销满减活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateCampTopicStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateCampTopicStatByRefundSuccess is start ");
         qzStoreTopicStatisService.updateCampTopicStatByRefundSuccess();
@@ -231,4 +231,15 @@ public class OrderTask {
         qzOrderService.updateSellVolume();
         logger.info(">>>>>>>>>>>>>>>>>>>>updateSellVolume is end ");
     }*/
+
+    /**
+     * 查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息
+     * 10秒执行一次
+     */
+//    @Scheduled(cron = "0/10 * * * * ?")
+    public void updateProductStoreByGoodsShareStock() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is start ");
+        qzOrderService.updateProductStoreByGoodsShareStock();
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is end ");
+    }
 }

+ 91 - 4
kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java

@@ -301,7 +301,7 @@ public class QzOrderService {
                             refundRaram.put("wechat_refund_status_des", "退款成功");
                             orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
                             //退款成功释放库存、释放优惠券、释放促销满减
-                             restStockNum(map,"定时任务更新退款成功订单");//库存还原
+                            restStockNum(map,"定时任务更新退款成功订单");//库存还原
                             restUserCoupon(map);// 判断是否使用优惠券,修改为可使用
                             restUserCamp(map);// 判断是否使用促销满减活动,修改为可使用
                         } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
@@ -587,7 +587,7 @@ public class QzOrderService {
                         wxOrderQuery(map);
                     }
                 }else{
-                    logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate 订单编号【"+orderId+"】的支付方式不能为空! ");
+                    logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate 订单编号【"+orderId+"】的支付方式不能为空! ");
                 }
             }
         } else {
@@ -1240,10 +1240,70 @@ public class QzOrderService {
     }
 
     /**
+     * 查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息
+     */
+    public void updateProductStoreByGoodsShareStock(){
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is start ");
+        logger.info(">>>>>>>>>>>>>>>>>>>>查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息 ");
+
+        // 查询商品库存数量变化后未共享的商品数据
+        List<Map> goodsList = qzOrderMapper.queryGoodsListByIsShareStock();
+        if (null != goodsList && goodsList.size() > 0) {
+            for (Map map : goodsList) {
+                Integer goodsId = MapUtils.getInteger("goodsId", map);
+                Integer goodsNumber = MapUtils.getInteger("goodsNumber", map);
+                String merchSn = MapUtils.getString("merchSn", map);
+
+                List<Map> storeRelaList = qzOrderMapper.queryStoreRelaListByGoodsId(goodsId);
+                for (Map storeRelaMap : storeRelaList) {
+                    Integer storeRelaId = MapUtils.getInteger("storeRelaId", storeRelaMap);
+                    Integer storeId = MapUtils.getInteger("storeId", storeRelaMap);
+                    Integer stockNum = MapUtils.getInteger("stockNum", storeRelaMap);//原有库存
+                    Map param = Maps.newHashMap();
+                    param.put("id", storeRelaId);
+                    param.put("stock_num", goodsNumber);
+                    qzOrderMapper.updateStockNum(param);//修改该商品的门店商品库存信息
+
+                    StoreMngChangeJobEntity storeMngChangeJobEntity = new StoreMngChangeJobEntity();
+                    storeMngChangeJobEntity.setChangeReason("共享库存变更,门店商品库存同步更新");
+                    storeMngChangeJobEntity.setGoodsId(goodsId);
+                    storeMngChangeJobEntity.setStoreId(storeId);
+                    storeMngChangeJobEntity.setMerchSn(merchSn);
+                    storeMngChangeJobEntity.setCreateTime(new Date());
+                    storeMngChangeJobEntity.setModTime(new Date());
+                    storeMngChangeJobEntity.setCreaterSn("定时任务");
+                    storeMngChangeJobEntity.setModerSn("定时任务");
+                    storeMngChangeJobEntity.setIsValid(0);
+                    if(goodsNumber != stockNum) {
+                        if (stockNum > goodsNumber) {
+                            storeMngChangeJobEntity.setStoreChangeNum(stockNum - goodsNumber);//变化数
+                            storeMngChangeJobEntity.setChangeType(Dict.changeType.item_4.getItem());
+                        } else {
+                            storeMngChangeJobEntity.setChangeType(Dict.changeType.item_3.getItem());
+                            storeMngChangeJobEntity.setStoreChangeNum(goodsNumber - stockNum);//变化数
+                        }
+                        storeMngChangeJobEntity.setStoreOriginalNum(stockNum);//原库存数
+                        storeMngChangeJobEntity.setStoreValidNum(goodsNumber);//可用数
+                        qzOrderMapper.saveStoreMngChange(storeMngChangeJobEntity);
+                    }
+                }
+                Map goodsMap = new HashMap();
+                goodsMap.put("goodsId", goodsId);
+                //商品库存数量变化后是否已共享,0:否,1:是(下单、退款触发)
+                goodsMap.put("isGoodsShareStock", Dict.isGoodsShareStock.item_1.getItem());
+                qzOrderMapper.updateByGoodsShareStock(goodsMap);
+            }
+        }else{
+            logger.info(">>>>>>>>>>>>>>>>>>>>未查到商品库存数量变化后未共享的商品数据");
+        }
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is end ");
+
+    }
+
+    /**
      * 查询订单中支付成功的订单详情,更新详情中商品的销量信息
      */
     public void updateSellVolume(){
-
         logger.info(">>>>>>>>>>>>>>>>>>>>updateSellVolume is start ");
         logger.info(">>>>>>>>>>>>>>>>>>>>查询订单中支付成功的订单详情,更新详情中商品的销量信息 ");
 
@@ -1303,7 +1363,19 @@ public class QzOrderService {
     private void restStockNum(Map map, String changeReason){
         String isStockShare = getIsStockShareByGoodsVo(map);
         resetGoodsStockNum(map, changeReason);
-        resetStoreStockNumAndSellVolume(map, changeReason);
+        String goodsBizType = MapUtils.getString("goods_biz_type", map);
+        Integer goodsId = MapUtils.getInteger("goods_id", map);
+        //该商品所属第三方商户不是共享库存
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+            resetStoreStockNumAndSellVolume(map, changeReason);//还原门店商品库存
+        }else{
+            //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+            if(!goodsBizType.equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                resetStoreStockNumAndSellVolume(map, changeReason);//还原门店商品库存
+            }
+        }
+        //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+        updateGoodsByIsShareStock(isStockShare, goodsBizType, goodsId);
     }
 
     /**
@@ -1377,6 +1449,21 @@ public class QzOrderService {
         storeMngChangeJobEntity.setIsValid(0);
         qzOrderMapper.saveStoreMngChange(storeMngChangeJobEntity);
     }
+    /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param isStockShare
+     */
+    private void updateGoodsByIsShareStock(String isStockShare, String goodsBizType, Integer goodsId){
+        //该商品所属第三方商户为共享库存,且是保税备货商品
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsBizType.equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            Map goodsMap = new HashMap();
+            goodsMap.put("goodsId", goodsId);
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款触发)
+            goodsMap.put("isGoodsShareStock", Dict.isGoodsShareStock.item_0.getItem());
+            qzOrderMapper.updateByGoodsShareStock(goodsMap);
+        }
+    }
 
     private String getIsStockShareByGoodsVo(Map map){
         String isStockShare = "";

+ 20 - 4
kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml

@@ -34,7 +34,7 @@
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
         a.id 'orderId',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -173,7 +173,7 @@
         g.goods_biz_type,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -216,7 +216,7 @@
         mb.third_party_merch_code,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -263,7 +263,7 @@
         mb.third_party_merch_code,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -572,4 +572,20 @@
             AND p.goods_id = gs.id where o.pay_status = 2
             AND is_onffline_order = 0 and p.id= #{storeRelaId}
     </select>
+
+    <select id="queryGoodsListByIsShareStock" resultType="map">
+        SELECT g.id 'goodsId',g.goods_number 'goodsNumber',g.merch_sn 'merchSn' FROM mall_goods g where g.is_goods_share_stock = 0
+    </select>
+
+    <select id="queryStoreRelaListByGoodsId" resultType="map">
+        SELECT p.id 'storeRelaId',p.stock_num 'stockNum',p.store_id 'storeId' FROM mall_product_store_rela p where p.goods_id = #{goodsId}
+    </select>
+
+    <update id="updateByGoodsShareStock" parameterType="map">
+        update mall_goods
+        <set>
+            is_goods_share_stock = #{isGoodsShareStock}
+        </set>
+        where id = #{goodsId}
+    </update>
 </mapper>