From 328ac3b6130819a31a7ba2d6af84ceec5c9584bf Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 24 十一月 2023 15:22:38 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  133 ++++++++++++++++++++++++++++++++------------
 1 files changed, 97 insertions(+), 36 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 477cd68..53b0c25 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
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -954,6 +955,41 @@
             R<com.alibaba.fastjson.JSONObject> r = HuiFuTianXiaUtil.weixinPayment(outTradeNo, description, payMoney.doubleValue(), openid, request.getNotifyUrl());
             if(r.getCode() != 200){
                 throw new ServiceException(r.getMsg());
+            }else{
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+                        int time = 0;
+                        for (int i = 0; i < 13; i++) {
+                            try {
+                                time += (5000 * i);
+                                Thread.sleep(time);
+                            } catch (InterruptedException e) {
+                                e.printStackTrace();
+                            }
+                            R<WeixinPaymentNotifyVo> voR = HuiFuTianXiaUtil.queryPayment(outTradeNo, sdf.format(new Date()));
+                            if(voR.getCode() == 200){
+                                WeixinPaymentNotifyVo data = voR.getData();
+                                //P:处理中;S:成功;F:失败;I: 初始(初始状态很罕见,请联系汇付技术人员处理);
+                                String transStat = data.getTransStat();
+                                if("S".equals(transStat)){
+                                    PartnerTransactionsResult transaction = new PartnerTransactionsResult();
+                                    transaction.setOutTradeNo(data.getReqSeqId());
+                                    payBack(transaction, data.getFeeFlag() == 1 ? BigDecimal.ZERO : new BigDecimal(data.getFeeAmount()));
+                                    return;
+                                }
+                                if("P".equals(transStat) || "F".equals(transStat)){
+                                    continue;
+                                }
+                                log.error("支付失败,流水号:{}, 状态码:{}", outTradeNo, transStat);
+                                return;
+                            }else{
+                                log.error("支付查询失败!流水号:{},结果:{}", outTradeNo, voR.getMsg());
+                            }
+                        }
+                    }
+                }).start();
             }
             com.alibaba.fastjson.JSONObject data = r.getData();
             String mainMchId = WxPayConfiguration.getPlatformTyMacId();
@@ -1229,7 +1265,12 @@
                 }
                 appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
                 // 小程序微信下单支付
-                createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo,
+//                createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo,
+//                        orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
+//                        appPlaceActivityDto.getSpbillCreateIp());
+
+                // 小程序微信下单支付 TODO 更换支付渠道(汇付天下)
+                createWxPayInfo1(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo,
                         orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(),
                         appPlaceActivityDto.getSpbillCreateIp());
                 //生成自动取消订单延时任务
@@ -1507,11 +1548,6 @@
         Order order = this.getById(orderId);
         if (order.getOrderStatus() != 2) {
             throw new ServiceException(AppErrorConstant.VERIFY_USED);
-        }
-        //判断商户是否有分账权限
-        Shop shop = remoteShopService.getShop(shopId).getData();
-        if(shop.getAccountFlag()!=1){
-            throw new ServiceException(AppErrorConstant.SHOP_NO_VERIFY);
         }
         // 根据订单用户ID获取用户信息
         Member member = remoteMemberService.getMember(order.getUserId()).getData();
@@ -1897,10 +1933,14 @@
         }
         this.saveOrUpdate(order);
         // 订单金额大于0时进行分账
-        if (order.getOnlinePayMoney().compareTo(BigDecimal.ZERO)>0) {
+        OrderPayment orderPayment = orderPaymentService.getOne(new QueryWrapper<OrderPayment>()
+                .eq("order_id", order.getOrderId()).eq("pay_status", 2)
+                .eq("del_flag", 0));
+        BigDecimal bigDecimal = orderPayment.getPayMoney().subtract(orderPayment.getFeeAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+        if (bigDecimal.compareTo(BigDecimal.ZERO)>0) {
             // TODO: 2023/10/17  更换分账渠道(汇付天下)
 //            submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom());
-            submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom());
+            submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), bigDecimal, order.getOrderFrom());
         }
         //创建支付记录
         if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){
@@ -2061,7 +2101,11 @@
                 BigDecimal proportionPercent = null;
                 //商户订单获取统一分成 活动订单获取活动分成
                 if(orderFrom==1){
-                    proportionPercent = new BigDecimal(vo.getShareRatio());
+                    if(null == vo.getShareRatio()){
+                        proportionPercent = new BigDecimal(redisService.getCacheObject(SecurityConstant.SHOP_COMMON_PROPORTION).toString());
+                    }else{
+                        proportionPercent = new BigDecimal(vo.getShareRatio());
+                    }
                 }else{
                     R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId);
                     shopProportion = resultShopProportion.getData();
@@ -2079,7 +2123,7 @@
                     if(proportionPercent.compareTo(BigDecimal.ZERO)>0){
                         PaymentDelaytransHFTXVo result = new PaymentDelaytransHFTXVo();
                         // 计算分成金额
-                        int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue();
+                        int amount = orderMoney.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).intValue();
                         BigDecimal multiply = orderMoney.multiply(proportionPercent.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN);
                         log.info("订单分账:{} 分账金额: {}", orderNo, amount);
                         if (amount > 0) {
@@ -2096,15 +2140,21 @@
 
                             //分账对象
                             JSONArray acctInfos = new JSONArray();
-                            JSONObject jsonObject = new JSONObject();
-                            jsonObject.put("div_amt", String.format("%.2f", multiply.doubleValue()));
-                            jsonObject.put("huifu_id", vo.getHuifuId());
+                            if(multiply.compareTo(BigDecimal.ZERO) > 0){
+                                JSONObject jsonObject = new JSONObject();
+                                jsonObject.put("div_amt", String.format("%.2f", multiply.doubleValue()));
+                                jsonObject.put("huifu_id", vo.getHuifuId());
+                                acctInfos.add(jsonObject);
+                            }
                             //平台商户
-                            double pt_amount = orderMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-                            JSONObject jsonObject1 = new JSONObject();
-                            jsonObject1.put("div_amt", String.format("%.2f", pt_amount));
-                            jsonObject1.put("huifu_id", "6666000141216769");
-                            acctInfos.add(jsonObject1);
+                            BigDecimal pt_amount = orderMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN);
+                            if(pt_amount.compareTo(BigDecimal.ZERO) > 0){
+                                JSONObject jsonObject1 = new JSONObject();
+                                jsonObject1.put("div_amt", String.format("%.2f", pt_amount.doubleValue()));
+                                jsonObject1.put("huifu_id", "6666000141216769");
+                                acctInfos.add(jsonObject1);
+                            }
+
                             R<PaymentDelaytransHFTXVo> hftxVoR = HuiFuTianXiaUtil.paymentDelaytrans(request.getOutOrderNo(), org_req_date, outTradeNo, acctInfos);
                             if(hftxVoR.getCode() != 200){
                                 throw new ServiceException(hftxVoR.getMsg());
@@ -3176,8 +3226,6 @@
         Order order = this.getById(orderId);
         // 获取会员信息
         Member member = remoteMemberService.getMember(order.getUserId()).getData();
-        // 获取商店信息
-        Shop shop = remoteShopService.getShop(order.getShopId()).getData();
         // 获取订单商品详细信息
         List<MgtOrderGoodsDetailVo> orderGoodsDetailVoList = orderGoodsService.listMgtVoByOrderId(orderId);
         // 设置MgtOrderDetailVo属性
@@ -3207,6 +3255,7 @@
         }
         // 设置订单编号
         mgtOrderDetailVo.setOrderNo(order.getOrderNo());
+        mgtOrderDetailVo.setOutTradeNo(order.getOutTradeNo());
         // 设置订单来源
         switch (order.getOrderFrom()) {
             case 1:
@@ -3237,10 +3286,12 @@
         mgtOrderDetailVo.setCancelTime(order.getCancelTime());
         mgtOrderDetailVo.setOrderRemark(order.getOrderRemark());
         mgtOrderDetailVo.setShopId(order.getShopId());
-        if (shop != null) {
+        if (3 == order.getOrderStatus()) {
+            // 获取商店信息
+            Shop shop = remoteShopService.getShop(order.getShopId()).getData();
             mgtOrderDetailVo.setShopName(shop.getShopName());
         } else {
-            mgtOrderDetailVo.setShopName("商户已被删除");
+            mgtOrderDetailVo.setShopName("");
         }
         mgtOrderDetailVo.setVerifyTime(order.getUseTime());
         //获取支付记录
@@ -5112,7 +5163,7 @@
     @Override
     @Transactional
     @GlobalTransactional(rollbackFor = Exception.class)
-    public void payBack(PartnerTransactionsResult transaction) {
+    public void payBack(PartnerTransactionsResult transaction, BigDecimal feeAmount) {
         log.info("订单支付回调---"+transaction.toString());
         // Order order = this.getById(orderId);
         // 更新订单状态 outTradeNo
@@ -5166,12 +5217,8 @@
             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);
-            }else{
-                goodsTotalChangeDto.setPersonNum(0);
-            }
+            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId());
+            goodsTotalChangeDto.setPersonNum(bugGoodsNum);
             goodsTotalChangeDtoList.add(goodsTotalChangeDto);
         }
         //更新商品统计
@@ -5246,7 +5293,7 @@
             profitsSharingService.applyProfitSharing(request);*/
         }
         //修改支付记录生成支付记录
-        orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId());
+        orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), feeAmount, transaction.getTransactionId());
         PayRecord payRecord = new PayRecord();
         payRecord.setDelFlag(0);
         payRecord.setOrderId(orderId);
@@ -5377,12 +5424,8 @@
                 goodsTotalChangeDto.setChangeType(2);
                 goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
                 goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
-                Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
-                if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) {
-                    goodsTotalChangeDto.setPersonNum(1);
-                }else{
-                    goodsTotalChangeDto.setPersonNum(0);
-                }
+                Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId());
+                goodsTotalChangeDto.setPersonNum(bugGoodsNum);
                 goodsTotalChangeDtoList.add(goodsTotalChangeDto);
             }
             remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList);
@@ -6224,4 +6267,22 @@
         ProfitSharingResult profitSharingResult = wxService.getEcommerceService().queryProfitSharing(request);
         return profitSharingResult;
     }
+
+    @Override
+    public List<String> getActivityOrderGoods(String activityId) {
+        List<Order> orders = this.baseMapper.selectList(new QueryWrapper<Order>()
+                .eq("del_flag", 0)
+                .in("order_status", Arrays.asList(1, 2, 3))
+                .eq("activity_id", activityId)
+        );
+        if(orders.size() > 0){
+            List<String> collect = orders.stream().map(Order::getOrderId).collect(Collectors.toList());
+            List<OrderGoods> list = orderGoodsService.list(new QueryWrapper<OrderGoods>()
+                    .eq("del_flag", 0)
+                    .in("order_id", collect)
+            );
+            return list.stream().map(OrderGoods::getGoodsId).collect(Collectors.toList());
+        }
+        return new ArrayList<>();
+    }
 }

--
Gitblit v1.7.1