From d2a65425646e33c26b8a98c394c7990a6bfb6b03 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 16 九月 2025 18:57:32 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |   82 +++++++++++++++++++++++++----------------
 1 files changed, 50 insertions(+), 32 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 3bfd27a..64e3635 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -2256,8 +2256,15 @@
 //    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
     public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) {
         String phone = merVerifyOrderDto.getPhone();
+        String name = merVerifyOrderDto.getName();
         String orderId = merVerifyOrderDto.getOrderId();
         Long shopId = merVerifyOrderDto.getShopId();
+        if(StringUtils.isEmpty(phone)){
+            throw new ServiceException("请填写核销用户电话号码");
+        }
+        if(StringUtils.isEmpty(name)){
+            throw new ServiceException("请填写核销用户姓名");
+        }
         //获取核销商户
         Shop shop = remoteShopService.getShop(shopId).getData();
         CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId);
@@ -2268,7 +2275,14 @@
         if (null == itemList && itemList.isEmpty()) {
             throw new ServiceException("查询券信息失败");
         }
-        CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0);
+        List<CertificatePrepareResponseDataCertificatesItem> collect = itemList.stream().filter(s -> s.getStatus().intValue() == 1).collect(Collectors.toList());
+        if(collect.size() < merVerifyOrderDto.getNumber()){
+            throw new ServiceException("验券数量超过可使用数量");
+        }
+        List<CertificatePrepareResponseDataCertificatesItem> certificatePrepareResponseDataCertificatesItems = collect.subList(0, merVerifyOrderDto.getNumber());
+
+
+        CertificatePrepareResponseDataCertificatesItem certificatesItem = certificatePrepareResponseDataCertificatesItems.get(0);
         //商品信息
         CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku();
         //次卡信息
@@ -2282,7 +2296,6 @@
         }
         Member member = remoteMemberService.getMemberByMobile(phone).getData();//绑定用户判断核销商户
         if(null == member){
-            String name = merVerifyOrderDto.getName();
             //创建新用户
             String memberId = IdUtils.simpleUUID();
             SysUser sysUser = new SysUser();
@@ -2318,10 +2331,11 @@
                 throw new ServiceException("该抖音券不能重复核销");
             }
         }
-        String encryptedCode = certificatesItem.getEncryptedCode();
-        List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getDyPoiId(), new ArrayList<String>() {{
-            add(encryptedCode);
-        }});
+        List<String> encryptedCodes = new ArrayList<>();
+        for (CertificatePrepareResponseDataCertificatesItem certificatePrepareResponseDataCertificatesItem : certificatePrepareResponseDataCertificatesItems) {
+            encryptedCodes.add(certificatePrepareResponseDataCertificatesItem.getEncryptedCode());
+        }
+        List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getDyPoiId(), encryptedCodes);
         if (null == items || items.isEmpty()) {
             throw new ServiceException("抖音券核销失败");
         }
@@ -2369,7 +2383,7 @@
             order.setUseTime(nowTime);
             order.setUseUserId(merVerifyOrderDto.getUserId());
             order.setCloseFlag(1);
-            order.setGoodsNum(1);
+            order.setGoodsNum(itemList.size());
             order.setCouponMoney(BigDecimal.ZERO);
             this.save(order);
             //创建服务商品
@@ -2382,15 +2396,14 @@
             orderGoods.setGoodsPrice(originAmount);
             orderGoods.setGoodsTotalMoney(originAmount);
             orderGoods.setGoodsReceivableMoney(originAmount);
-            orderGoods.setBuyNum(1);
+            orderGoods.setBuyNum(itemList.size());
 
             ConsumerGoods consumerGoods = new ConsumerGoods();
-            consumerGoods.setUsedNum(1);
+            consumerGoods.setUsedNum(merVerifyOrderDto.getNumber());
             if(null != timeCard){
-                //核销一次加一次
-                orderGoods.setBuyNum(1);
-                orderGoods.setServiceNum(1);
-                consumerGoods.setServiceNum(timeCard.getTimesCount());
+                orderGoods.setBuyNum(itemList.size());
+                orderGoods.setServiceNum(merVerifyOrderDto.getNumber());
+                consumerGoods.setServiceNum(itemList.size());
                 consumerGoods.setUseTime(new Date());
             }
             orderGoods.setCycleNumFlag(1);
@@ -2494,14 +2507,12 @@
         }else{
             //扣减剩余次数
             OrderGoods orderGoods = orderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderId, order.getOrderId()));
-            //核销一次加一次数量
-            orderGoods.setBuyNum(orderGoods.getBuyNum() + 1);
             if(null != orderGoods.getServiceNum()){
-                orderGoods.setServiceNum(orderGoods.getServiceNum() + 1);
+                orderGoods.setServiceNum(orderGoods.getServiceNum() + merVerifyOrderDto.getNumber());
             }
             orderGoodsService.updateById(orderGoods);
             ConsumerGoods consumerGoods = consumerGoodsService.getOne(new LambdaQueryWrapper<ConsumerGoods>().eq(ConsumerGoods::getOrderId, order.getOrderId()).eq(ConsumerGoods::getOrderGoodsId, orderGoods.getOrderGoodsId()));
-            consumerGoods.setUsedNum(consumerGoods.getUsedNum() + 1);
+            consumerGoods.setUsedNum(consumerGoods.getUsedNum() + merVerifyOrderDto.getNumber());
             consumerGoods.setUseTime(new Date());
             if(consumerGoods.getUsedNum() == consumerGoods.getServiceNum()){
                 consumerGoods.setCompleteTime(new Date());
@@ -2563,8 +2574,15 @@
 //    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
     public MerVerifyOrderVo sureVerifyOrderKuaiShou(MerVerifyOrderDto merVerifyOrderDto) {
         String phone = merVerifyOrderDto.getPhone();
+        String name = merVerifyOrderDto.getName();
         String orderId = merVerifyOrderDto.getOrderId();
         Long shopId = merVerifyOrderDto.getShopId();
+        if(StringUtils.isEmpty(phone)){
+            throw new ServiceException("请填写核销用户电话号码");
+        }
+        if(StringUtils.isEmpty(name)){
+            throw new ServiceException("请填写核销用户姓名");
+        }
         //获取核销商户
         Shop shop = remoteShopService.getShop(shopId).getData();
         VerifyPrepareDataNew data = KSVerifyUtil.certificatePrepare(redisService, orderId);
@@ -2575,7 +2593,8 @@
         if (null == itemList || itemList.isEmpty()) {
             throw new ServiceException("查询券信息失败");
         }
-        SimpleCertificateTimesCard certificatesItem = itemList.get(0);
+        List<SimpleCertificateTimesCard> timesCards = itemList.subList(0, merVerifyOrderDto.getNumber());
+        SimpleCertificateTimesCard certificatesItem = timesCards.get(0);
         Long expire_time = certificatesItem.getExpire_time();
         if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){
             throw new ServiceException("优惠券已过期");
@@ -2596,11 +2615,12 @@
                 throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
             }
         }
-        
-        String encryptedCode = certificatesItem.getEncrypted_code();
-        List<VerifyResult> items = KSVerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getKsPoiId(), new ArrayList<String>() {{
-            add(encryptedCode);
-        }}, data.getOrder_id());
+
+        List<String> encryptedCodes = new ArrayList<>();
+        for (SimpleCertificateTimesCard timesCard : timesCards) {
+            encryptedCodes.add(timesCard.getEncrypted_code());
+        }
+        List<VerifyResult> items = KSVerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getKsPoiId(), encryptedCodes, data.getOrder_id());
         if (null == items || items.isEmpty()) {
             throw new ServiceException("快手券核销失败");
         }
@@ -2648,7 +2668,7 @@
             order.setUseTime(nowTime);
             order.setUseUserId(merVerifyOrderDto.getUserId());
             order.setCloseFlag(1);
-            order.setGoodsNum(1);
+            order.setGoodsNum(itemList.size());
             order.setCouponMoney(BigDecimal.ZERO);
             this.save(order);
             //创建服务商品
@@ -2659,13 +2679,12 @@
             orderGoods.setDelFlag(0);
             orderGoods.setOrderId(order.getOrderId());
             orderGoods.setGoodsId(sku.getSku_id());
-            orderGoods.setBuyNum(1);
-            orderGoods.setServiceNum(1);
+            orderGoods.setBuyNum(itemList.size());
             orderGoods.setGoodsPrice(originAmount);
             orderGoods.setGoodsTotalMoney(originAmount);
             orderGoods.setGoodsReceivableMoney(originAmount);
             orderGoods.setCycleNumFlag(1);
-            orderGoods.setServiceNum(sku.getTimes_count());
+            orderGoods.setServiceNum(merVerifyOrderDto.getNumber());
             orderGoods.setGoodsType(2);
             orderGoods.setGoodsName(sku.getTitle());
             orderGoodsService.save(orderGoods);
@@ -2681,8 +2700,8 @@
             consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId());
             consumerGoods.setGoodsName(sku.getTitle());
             consumerGoods.setCycleNumFlag(1);
-            consumerGoods.setServiceNum(sku.getTimes_count());
-            consumerGoods.setUsedNum(1);
+            consumerGoods.setServiceNum(itemList.size());
+            consumerGoods.setUsedNum(merVerifyOrderDto.getNumber());
             consumerGoods.setUseTime(new Date());
             consumerGoods.setCreateTime(nowTime);
             consumerGoods.setGoodsType(2);
@@ -2770,12 +2789,11 @@
         }else{
             //扣减剩余次数
             OrderGoods orderGoods = orderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderId, order.getOrderId()));
-            orderGoods.setBuyNum(orderGoods.getBuyNum() + 1);
-            orderGoods.setServiceNum(orderGoods.getServiceNum() + 1);
+            orderGoods.setServiceNum(orderGoods.getServiceNum() + itemList.size());
             orderGoodsService.updateById(orderGoods);
 
             ConsumerGoods consumerGoods = consumerGoodsService.getOne(new LambdaQueryWrapper<ConsumerGoods>().eq(ConsumerGoods::getOrderId, order.getOrderId()).eq(ConsumerGoods::getOrderGoodsId, orderGoods.getOrderGoodsId()));
-            consumerGoods.setUsedNum(consumerGoods.getUsedNum() + 1);
+            consumerGoods.setUsedNum(consumerGoods.getUsedNum() + itemList.size());
             consumerGoods.setUseTime(new Date());
             if(consumerGoods.getUsedNum() == consumerGoods.getServiceNum()){
                 consumerGoods.setCompleteTime(new Date());

--
Gitblit v1.7.1