From 1987c54a9986885fb8e1ab491783cbd6f5e9f6bc Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期日, 23 七月 2023 18:50:25 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  157 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 126 insertions(+), 31 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 a3440b9..b8b2113 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
@@ -13,19 +13,18 @@
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.domain.dto.*;
+import com.ruoyi.order.domain.pojo.account.OrderPayment;
 import com.ruoyi.order.domain.pojo.account.OrderRefund;
-import com.ruoyi.order.domain.pojo.account.PaymentMessage;
 import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
 import com.ruoyi.order.domain.pojo.order.Order;
 import com.ruoyi.order.domain.pojo.order.OrderGoods;
 import com.ruoyi.order.domain.vo.*;
 import com.ruoyi.order.mapper.order.OrderMapper;
-import com.ruoyi.order.mapper.order.UserServiceRecordMapper;
 import com.ruoyi.order.service.order.ConsumerGoodsService;
 import com.ruoyi.order.service.order.OrderGoodsService;
 import com.ruoyi.order.service.order.OrderService;
 import com.ruoyi.order.service.order.UserServiceRecordService;
-import com.ruoyi.order.tools.request.pay.combine.CombineTransactionsJsRequest;
+import com.ruoyi.order.tools.request.ecommerce.profitsharing.ProfitSharingApplyRequest;
 import com.ruoyi.order.tools.service.ProfitsSharingService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.DelayTaskEnum;
@@ -42,6 +41,9 @@
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.*;
 import com.ruoyi.system.api.service.*;
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAConfig;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
 import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
 import com.wechat.pay.java.service.payments.jsapi.model.*;
 import org.redisson.api.RLock;
@@ -57,10 +59,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-
-import com.wechat.pay.java.core.Config;
-import com.wechat.pay.java.core.RSAConfig;
-import com.wechat.pay.java.service.payments.jsapi.JsapiService;
 
 /**
  * <p>
@@ -108,9 +106,6 @@
 
     @Resource
     private RemoteActivityService remoteActivityService;
-
-    @Resource
-    private UserServiceRecordMapper userServiceRecordMapper;
 
     @Resource
     private RedisService redisService;
@@ -182,8 +177,7 @@
         merBaseDto.setShopId(appSureOrderDto.getShopId());
         // 获取用户优惠券列表
         List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
-        // 初始化商品优惠券列表
-        List<AppMemberCouponVo> appGoodsMemberCouponVoList;
+
         // 将优惠券列表转换为Map,以优惠券ID为键
         Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
         AppMemberCouponVo appMemberCouponVo;
@@ -268,9 +262,6 @@
                     }
                 }
             }
-            if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){
-                appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
-            }
             appSureOrderGoodsVo.setUseCoupon(useCoupon);
             appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
             appSureOrderGoodsVo.setCouponDiscount(discountMoney);
@@ -304,8 +295,23 @@
                     entity.setUseFlag(0);
                 }
             }
+            // 过滤商品优惠券列表
+            List<AppMemberCouponVo> appGoodsMemberCouponVoList;
             for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
-                sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
+                appGoodsMemberCouponVoList = new ArrayList<>();
+                for(AppMemberCouponVo entity : appMemberCouponVoList){
+                    if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){
+                        if(entity.getCouponType()!=1){
+                            appGoodsMemberCouponVoList.add(entity);
+                        }else{
+                            if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())>0){
+                                appGoodsMemberCouponVoList.add(entity);
+                            }
+                        }
+
+                    }
+                }
+                sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
             }
         }
         /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
@@ -663,19 +669,20 @@
         order.setReceivableMoney(orderPayMoney);
         order.setReceivableDeposit(orderPayDeposit);
         order.setChangeReceivableMoney(orderPayMoney);
-        order.setPayType(appPlaceOrderDto.getPayType());
         // 根据支付类型计算支付金额
-        if (order.getPayType() == 1) {
+        if (appPlaceOrderDto.getPayType() == 1) {
             order.setPayMoney(orderPayMoney);
             order.setOnlinePayMoney(orderPayMoney);
             appPlaceOrderVo.setPayMoney(orderPayMoney);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setPayType(1);
             order.setCloseFlag(1);
-        } else if (order.getPayType() == 2) {
+        } else if (appPlaceOrderDto.getPayType() == 2) {
             order.setPayMoney(orderPayDeposit);
             order.setOnlinePayMoney(orderPayDeposit);
             appPlaceOrderVo.setPayMoney(orderPayDeposit);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setPayType(2);
             order.setCloseFlag(0);
         }
         order.setOrderRemark(appPlaceOrderDto.getOrderRemark());
@@ -708,20 +715,17 @@
         request.setDescription(order.getGoodsInfo());
         request.setNotifyUrl(this.notifyUrl);
         request.setOutTradeNo(order.getOrderId());
-        Payer payer = new Payer();        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
-
+        Payer payer = new Payer();
+        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
         request.setPayer(payer);
-
-
         //返回前端唤醒支付结果信息
-        PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
-
+        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
         appPlaceOrderVo.setAppId(this.appId);
         appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
         appPlaceOrderVo.setNonceStr(res.getNonceStr());
         appPlaceOrderVo.setPackageStr(res.getPackageVal());
         appPlaceOrderVo.setTradeType(res.getSignType());
-        appPlaceOrderVo.setPaySign(res.getPaySign());
+        appPlaceOrderVo.setPaySign(res.getPaySign());*/
 
 
         //减去优惠券
@@ -740,6 +744,7 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
+        appPlaceOrderVo.setPayDeadlineTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
         return appPlaceOrderVo;
     }
 
@@ -993,19 +998,20 @@
         order.setReceivableMoney(orderPayMoney);
         order.setReceivableDeposit(orderPayDeposit);
         order.setChangeReceivableMoney(orderPayMoney);
-        order.setPayType(appPlaceActivityDto.getPayType());
         // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
-        if (order.getPayType() == 1) {
+        if (appPlaceActivityDto.getPayType() == 1) {
             order.setPayMoney(orderPayMoney);
             order.setOnlinePayMoney(orderPayMoney);
             appPlaceOrderVo.setPayMoney(orderPayMoney);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setPayType(1);
             order.setCloseFlag(1);
-        } else if (order.getPayType() == 2) {
+        } else if (appPlaceActivityDto.getPayType() == 2) {
             order.setPayMoney(orderPayDeposit);
             order.setOnlinePayMoney(orderPayDeposit);
             appPlaceOrderVo.setPayMoney(orderPayDeposit);
             appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
+            order.setPayType(2);
             order.setCloseFlag(0);
         }
         // 设置订单备注,商品数量,创建时间
@@ -1035,6 +1041,40 @@
         agStockChangeDto.setUserId(order.getUserId());
         remoteActivityService.changeActivityStock(agStockChangeDto);
         // 调用支付
+        PrepayRequest request = new PrepayRequest();
+        Amount amount = new Amount();
+        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
+        request.setAmount(amount);
+        request.setAppid(this.appId);
+        request.setMchid(this.mchId);
+        request.setDescription(order.getGoodsInfo());
+        request.setNotifyUrl(this.notifyUrl);
+        request.setOutTradeNo(order.getOrderId());
+        Payer payer = new Payer();
+        // TODO 获取openID
+        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
+
+        request.setPayer(payer);
+
+        //设置订单允许分账 秒杀活动才允许分账
+        if(order.getOrderFrom()==2){
+            SettleInfo settleInfo=new SettleInfo();
+            settleInfo.setProfitSharing(true);
+            request.setSettleInfo(settleInfo);
+        }
+
+
+        //返回前端唤醒支付结果信息
+        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
+
+        appPlaceOrderVo.setAppId(this.appId);
+        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
+        appPlaceOrderVo.setNonceStr(res.getNonceStr());
+        appPlaceOrderVo.setPackageStr(res.getPackageVal());
+        appPlaceOrderVo.setTradeType(res.getSignType());
+        appPlaceOrderVo.setPaySign(res.getPaySign());
+*/
+
         //生成自动取消订单延时任务
         Integer delayTime = 30;
         if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
@@ -1047,6 +1087,7 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
+        appPlaceOrderVo.setPayDeadlineTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
         return appPlaceOrderVo;
     }
 
@@ -1074,6 +1115,10 @@
                 Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                 shopMap.put(shopIdLong, shopTemp);
             });
+            Integer delayTime = 30;
+            if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+            }
             for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                 shop = shopMap.get(appUserOrderPageVo.getShopId());
                 appUserOrderPageVo.setShopName(shop.getShopName());
@@ -1084,6 +1129,7 @@
                     appUserOrderPageVo.setSameShop(0);
                 }
                 appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
+                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime));
             }
         }
         return appUserOrderPageVoList;
@@ -1108,6 +1154,7 @@
         appUserOrderGetVo.setCouponDiscount(order.getCouponMoney());
         appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit());
         appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney());
+        appUserOrderGetVo.setPayType(order.getPayType());
         appUserOrderGetVo.setPayMoney(order.getPayMoney());
         appUserOrderGetVo.setOrderRemark(order.getOrderRemark());
         appUserOrderGetVo.setShopId(order.getShopId());
@@ -1236,6 +1283,10 @@
         if (order.getOrderStatus() != 2) {
             throw new ServiceException(AppErrorConstant.VERIFY_USED);
         }
+        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData();
+        if(!shopRelUserVo.getShopId().equals(order.getShopId())){
+            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+        }
         order.setOrderStatus(3);
         order.setUseTime(nowTime);
         order.setUseUserId(merVerifyOrderDto.getUserId());
@@ -1303,7 +1354,13 @@
         SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
         merVerifyOrderVo.setUserName(sysUser.getNickName());
         merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
+        //
+        if(order.getOrderFrom()==2){
+
+            //profitsSharingService.applyProfitSharing();
+        }
         return merVerifyOrderVo;
+
     }
 
     /**
@@ -1316,6 +1373,10 @@
     @Override
     public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
         MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
+        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData();
+        if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){
+            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+        }
         // 创建MerVerifyCouponVo对象
         MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
         // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
@@ -1408,6 +1469,10 @@
         MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
         if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
             throw new ServiceException(AppErrorConstant.COUPON_USED);
+        }
+        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData();
+        if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){
+            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
         Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
         merVerifyAwardVo.setUserName(member.getNickName());
@@ -1726,6 +1791,7 @@
         order.setOnlinePayMoney(new BigDecimal("0.00"));
         order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
         order.setOffPayTime(nowTime);
+        order.setPayType(1);
         order.setCloseFlag(1);
         this.save(order);
         //创建服务
@@ -3205,12 +3271,13 @@
      * @description  订单支付回调
      * @author  jqs
      * @date    2023/7/13 17:57
-     * @param orderId
+     * @param Transaction
      * @return  void
      */
     @Override
-    public void payBack(String orderId) {
+    public void payBack(Transaction transaction) {
         // 更新订单状态
+        String orderId=transaction.getOutTradeNo();
         Order order = this.getById(orderId);
         order.setOrderStatus(2);
         order.setPayTime(new Date());
@@ -3227,6 +3294,8 @@
         Boolean haveGoods = false;
         // 获取订单中的所有商品
         List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+        List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
+        GoodsTotalChangeDto goodsTotalChangeDto;
         // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态
         for (OrderGoods orderGoods : orderGoodsList) {
             switch (orderGoods.getGoodsType()) {
@@ -3249,7 +3318,18 @@
                 default:
                     break;
             }
+            goodsTotalChangeDto = new GoodsTotalChangeDto();
+            goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId());
+            goodsTotalChangeDto.setChangeType(1);
+            goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
+            goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
+            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId());
+            if(bugGoodsNum==null||bugGoodsNum<1){
+                goodsTotalChangeDto.setPersonNum(1);
+            }
+            goodsTotalChangeDtoList.add(goodsTotalChangeDto);
         }
+        //更新商品统计
         // 更新商户统计信息
         ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
         shopTotalChangeDto.setShopId(order.getShopId());
@@ -3304,7 +3384,22 @@
             }
             activityTotalChangeDto.setUserId(order.getUserId());
             remoteActivityService.changeActivityTotal(activityTotalChangeDto);
+
+
+            //活动订单进行分账
+            ProfitSharingApplyRequest request=new ProfitSharingApplyRequest();
+            request.setAppid(this.appId);
+            request.setSubMchid("");
+            request.setTransactionId(transaction.getTransactionId());
+            profitsSharingService.applyProfitSharing(request);
         }
+        //生成支付记录
+        OrderPayment orderPayment = new OrderPayment();
+
+
+
+
+
     }
 
     /**

--
Gitblit v1.7.1