Parcourir la source

修复商品库存、销量不更新问题

codingliang il y a 3 mois
Parent
commit
dc6f6f6363

+ 1 - 1
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -672,7 +672,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             // 4. 构建版本号Map
             Map<Long, Integer> versionMap = currentStocks.stream()
                     .collect(Collectors.toMap(
-                            GoodsShopRelevancy::getId,
+                            GoodsShopRelevancy::getGoodsId,
                             GoodsShopRelevancy::getVersion
                     ));
 

+ 23 - 10
src/main/resources/mapper/goods/GoodsShopRelevancyMapper.xml

@@ -3,29 +3,42 @@
 <mapper namespace="com.sqx.modules.goods.dao.GoodsShopRelevancyDao">
 
     <update id="batchOptimisticUpdateStock">
-        <foreach collection="list" item="item" separator=";">
-            UPDATE goods_shop_relevancy
-            SET
-            inventory = inventory - #{item.num},
-            sales = sales + #{item.num},
-            version = version + 1
-            WHERE id = #{item.goodsId}
-            AND version = #{item.version}
+        UPDATE goods_shop_relevancy
+        SET
+        inventory = inventory - CASE goods_id
+        <foreach collection="list" item="item">
+            WHEN #{item.goodsId} THEN #{item.num}
         </foreach>
+        END,
+        sales = sales + CASE goods_id
+        <foreach collection="list" item="item">
+            WHEN #{item.goodsId} THEN #{item.num}
+        </foreach>
+        END,
+        version = version + 1
+        WHERE goods_id IN
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item.goodsId}
+        </foreach>
+        AND version = CASE goods_id
+        <foreach collection="list" item="item">
+            WHEN #{item.goodsId} THEN #{item.version}
+        </foreach>
+        END
     </update>
 
     <!-- 查询并获取版本号 -->
     <select id="selectWithVersion" resultType="com.sqx.modules.goods.entity.GoodsShopRelevancy">
         SELECT id, shop_id, goods_id, inventory, sales, version
         FROM goods_shop_relevancy
-        WHERE id = #{goodsId}
+        WHERE goods_id = #{goodsId}
     </select>
 
     <!-- 批量查询版本号 -->
     <select id="selectBatchWithVersion" resultType="com.sqx.modules.goods.entity.GoodsShopRelevancy">
         SELECT id, shop_id, goods_id, inventory, sales, version
         FROM goods_shop_relevancy
-        WHERE id IN
+        WHERE goods_id IN
         <foreach collection="list" item="goodsId" open="(" separator="," close=")">
             #{goodsId}
         </foreach>

+ 207 - 16
src/test/java/OrderTest.java

@@ -1,22 +1,14 @@
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import cn.hutool.core.collection.CollUtil;
 import com.sqx.SqxApplication;
-import com.sqx.common.utils.Query;
 import com.sqx.common.utils.RedisUtils;
-import com.sqx.modules.activity.entity.ActivityPartRecord;
 import com.sqx.modules.activity.service.ActivityPartRecordService;
 import com.sqx.modules.app.dao.UserMoneyDetailsDao;
 import com.sqx.modules.app.entity.UserMoneyDetails;
 import com.sqx.modules.app.service.UserMoneyDetailsService;
 import com.sqx.modules.app.service.UserMoneyService;
-import com.sqx.modules.common.entity.CommonInfo;
 import com.sqx.modules.common.service.CommonInfoService;
 import com.sqx.modules.coupon.dao.TbCouponUserDao;
-import com.sqx.modules.coupon.entity.TbCouponUser;
-import com.sqx.modules.coupon.service.TbCouponService;
-import com.sqx.modules.errand.entity.TbIndentSmsSendLog;
-import com.sqx.modules.goods.entity.GoodsShop;
+import com.sqx.modules.goods.service.GoodsShopService;
 import com.sqx.modules.order.dao.AppOrderDao;
 import com.sqx.modules.order.entity.TbOrder;
 import com.sqx.modules.order.service.AppOrderService;
@@ -31,10 +23,9 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author : codingliang
@@ -83,14 +74,214 @@ public class OrderTest {
     @Autowired
     private AppOrderService orderService;
 
+    @Autowired
+    private GoodsShopService goodsShopService;
+
     @Test
     public void test() {
-        orderService.accomplishOrder(1521747L, 2);
+        TbOrder tbOrder = appOrderService.selectOrderByNum("202603111524117723");
+        orderService.subStock(tbOrder);
     }
 
     @Test
     public void test2() {
-        String value = commonInfoService.findOne(19).getValue();
-        System.out.println("value = " + value);
+        List<String> orderNumbers = Arrays.asList("202603171658527850",
+                "202603171619351849",
+                "202603171710572245",
+                "202603171714048452",
+                "202603171638169334",
+                "202603171630378942",
+                "202603171748451859",
+                "202603171701106897",
+                "202603171650405141",
+                "202603171620564497",
+                "202603171642345788",
+                "202603171749291525",
+                "202603171623034174",
+                "202603171737258426",
+                "202603171635097793",
+                "202603171722291718",
+                "202603171758527104",
+                "202601061658273032",
+                "202603171702219075",
+                "202603061751057889",
+                "202603171756291948",
+                "202603171759418369",
+                "202603171721108130",
+                "202603171719358825",
+                "202603161117352549",
+                "202603171740425528",
+                "202603171708442864",
+                "202603161746295701",
+                "202603171805259872",
+                "202603171719246998",
+                "202603171644476707",
+                "202603171709029503",
+                "202603171644542515",
+                "202603151407369659",
+                "202603171806023314",
+                "202603171804086449",
+                "202603171621529775",
+                "202601131602524734",
+                "202603171724289097",
+                "202603171802209739",
+                "202603171801064578",
+                "202603171638089608",
+                "202603151825132239",
+                "202603071224354624",
+                "202603171721285003",
+                "202603171649493851",
+                "202603171741425727",
+                "202603171820348387",
+                "202603171623508052",
+                "202603171731148811",
+                "202603171706139841",
+                "202603141014225288",
+                "202603171645301175",
+                "202603171738077815",
+                "202603171631472362",
+                "202603161808435542",
+                "202603171621406667",
+                "202603171709198659",
+                "202603171713048654",
+                "202603171623196547",
+                "202603171614043059",
+                "202603171811466449",
+                "202603171622048052",
+                "202603171725342877",
+                "202603171713225462",
+                "202603171631307251",
+                "202603171751242823",
+                "202603171727426485",
+                "202603171705516972",
+                "202603171652208569",
+                "202603171731103142",
+                "202603171645548122",
+                "202603171618168512",
+                "202603171714322093",
+                "202603101702495228",
+                "202603171714424020",
+                "202511191950472470",
+                "202603171727504578",
+                "202603171632565021",
+                "202603171618507259",
+                "202603171629126621",
+                "202603171541583648",
+                "202603171738311378",
+                "202603171624238458",
+                "202510141117431653",
+                "202603171749365333",
+                "202603171629044014",
+                "202603171720331910",
+                "202603171538471740",
+                "202603171758378816",
+                "202603170938553359",
+                "202603171708297626",
+                "202603141545452583",
+                "202603171703332189",
+                "202603171622568889",
+                "202603061957284523",
+                "202603171627058425",
+                "202603171645356441",
+                "202603171539219622",
+                "202603171746039921",
+                "202603171650566927",
+                "202603171708117590",
+                "202603171627003546",
+                "202603171648503963",
+                "202603171652486958",
+                "202603171624083278",
+                "202603171634448770",
+                "202603171626482161",
+                "202603171749504957",
+                "202603171755208256",
+                "202603171728162921",
+                "202603171730195807",
+                "202603171643307822",
+                "202603171627265421",
+                "202603171724101591",
+                "202603141107296175",
+                "202603171539319893",
+                "202603171627236101",
+                "202603171639232165",
+                "202603171655131079",
+                "202603171657055630",
+                "202603171543323001",
+                "202603171735113067",
+                "202603171723286067",
+                "202603171734214261",
+                "202603171712446392",
+                "202603161114176003",
+                "202603171621492177",
+                "202603171652289291",
+                "202603171610071188",
+                "202603171753509654",
+                "202603171638023229",
+                "202603171707567855",
+                "202603171633592455",
+                "202603171753146128",
+                "202603171808167281",
+                "202603171657049869",
+                "202603171717027225",
+                "202603171720002131",
+                "202603171724353115",
+                "202603140959588453",
+                "202603171725534379",
+                "202603171633428380",
+                "202603171642061107",
+                "202603171651343111",
+                "202603171528529975",
+                "202511222048006265",
+                "202603171810439711",
+                "202603171722486650",
+                "202603171735498787",
+                "202603171724184062",
+                "202603171726423685",
+                "202603171123205174",
+                "202603171821396794",
+                "202603171809423918",
+                "202603121127423276",
+                "202603171639385171",
+                "202603171821493560",
+                "202603171719278277",
+                "202603171646502848",
+                "202603171633049375",
+                "202603171742512690",
+                "202603171622299622",
+                "202603171725488097",
+                "202603171752566876",
+                "202603171818486265",
+                "202603171715301136",
+                "202603171553503819",
+                "202603171806544458",
+                "202603171529325208",
+                "202603171756394394",
+                "202603161700407694",
+                "202603171758446886",
+                "202603171621501358",
+                "202603171744543689",
+                "202603131048046481",
+                "202603121844438578",
+                "202603111719122334",
+                "202603171757475220",
+                "202603171744275139",
+                "202603171735035470",
+                "202603171621581824",
+                "202603171746048999",
+                "202603171731401407",
+                "202603171817562763",
+                "202603171735545248",
+                "202603171623403056",
+                "202603171807109386");
+
+        for (String orderNumber : orderNumbers) {
+            List<UserMoneyDetails> userMoneyDetails = userMoneyDetailsDao.findByTitle(orderNumber);
+            if (CollUtil.isNotEmpty(userMoneyDetails)) {
+                for (UserMoneyDetails userMoneyDetail : userMoneyDetails) {
+                    System.out.println(userMoneyDetail.getId() + "," + userMoneyDetail.getContent());
+                }
+            }
+        }
+
     }
 }