From d9e75c8c09738b31c375e3b843a3f2d4927f325f Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 26 七月 2023 09:13:29 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  730 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 661 insertions(+), 69 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 6b2ad45..52cceca 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,13 +13,13 @@
 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.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;
@@ -28,6 +28,7 @@
 import com.ruoyi.system.api.constant.DelayTaskEnum;
 import com.ruoyi.system.api.constant.SecurityConstant;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.activity.ActivityRecord;
 import com.ruoyi.system.api.domain.poji.config.DelayTask;
 import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
@@ -39,13 +40,17 @@
 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.service.partnerpayments.jsapi.model.Transaction;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -99,13 +104,31 @@
     private RemoteActivityService remoteActivityService;
 
     @Resource
-    private UserServiceRecordMapper userServiceRecordMapper;
-
-    @Resource
     private RedisService redisService;
+
+    //@Resource
+    //@Qualifier("profitsSharingServiceImpl")
+    //private ProfitsSharingService profitsSharingService;
 
     @Autowired
     private RedissonClient redissonClient;
+
+    /** 商户号 */
+    public static String merchantId = "";
+    /** 商户API私钥路径 */
+    public static String privateKeyPath = "";
+    /** 商户证书序列号 */
+    public static String merchantSerialNumber = "";
+    /** 微信支付平台证书路径 */
+    public static String wechatPayCertificatePath = "";
+    /** 微信支付 APIv3 密钥 */
+    public static String apiV3Key = "";
+    /** 微信支付APPID */
+    public static String appId="";
+    /** 微信支付商户ID */
+    public static String mchId="";
+    /** 通知地址 */
+    public static String notifyUrl="";
 
     /**
      * @description: buyGoods
@@ -124,6 +147,20 @@
         AppSureOrderGoodsVo appSureOrderGoodsVo;
         // 获取购买商品列表
         List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList();
+        //获取商品列表
+        StringJoiner goodsIdSJ = new StringJoiner(",");
+        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
+            goodsIdSJ.add(appBuyGoodsDto.getGoodsId());
+        }
+        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData();
+        Map<String, Goods> goodsMap = goodsList.stream()
+                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
+        Boolean haveDeposit = false;
+        for(Goods goods : goodsList){
+            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
+                haveDeposit = true;
+            }
+        }
         String goodsId;
         Integer buyNum;
         BigDecimal buyNumBig;
@@ -132,12 +169,17 @@
         BigDecimal goodsPrice;
         BigDecimal goodsTotalPrice;
         BigDecimal goodsRealPrice;
+        MerBaseDto merBaseDto = new MerBaseDto();
+        merBaseDto.setUserId(userId);
+        merBaseDto.setShopId(appSureOrderDto.getShopId());
         // 获取用户优惠券列表
-        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
-        // 初始化商品优惠券列表
-        List<AppMemberCouponVo> appGoodsMemberCouponVoList;
+        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
+
         // 将优惠券列表转换为Map,以优惠券ID为键
-        Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+        Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
+        if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){
+            appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+        }
         AppMemberCouponVo appMemberCouponVo;
         Integer couponType;
         BigDecimal moneyThreshold;
@@ -152,14 +194,19 @@
         BigDecimal orderPayDeposit = new BigDecimal("0.00");
         BigDecimal orderPayMoney = new BigDecimal("0.00");
         // 遍历购买商品列表
+        HashSet<String> userCouponIdSet = new HashSet<>();
         for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
             appSureOrderGoodsVo = new AppSureOrderGoodsVo();
+            discountMoney = BigDecimal.ZERO;
             useCoupon = 0;
             goodsId = appBuyGoodsDto.getGoodsId();
             buyNum = appBuyGoodsDto.getBuyNum();
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
             // 获取商品信息
-            goods = remoteGoodsService.getGoods(goodsId).getData();
+            goods = goodsMap.get(goodsId);
+            if(goods.getGoodsStatus()!=1){
+                throw new ServiceException(AppErrorConstant.GOODS_DOWN);
+            }
             // 设置订单商品信息
             appSureOrderGoodsVo.setGoodsId(goodsId);
             appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
@@ -183,7 +230,7 @@
             goodsTotalPrice = goodsPrice.multiply(buyNumBig);
             goodsRealPrice = goodsTotalPrice;
             // 处理优惠券
-            if (memberCouponId != null) {
+            if (StringUtils.isNotBlank(memberCouponId)) {
                 appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId);
                 if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) {
                     couponType = appMemberCouponVo.getCouponType();
@@ -193,16 +240,25 @@
                             discountMoney = appMemberCouponVo.getDiscountMoney();
                             goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                             useCoupon = 1;
+                            userCouponIdSet.add(memberCouponId);
+                            appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                         }
                     } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                         discountPercent = appMemberCouponVo.getDiscountPercent();
                         goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2, BigDecimal.ROUND_HALF_UP);
                         discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
                         useCoupon = 1;
+                        userCouponIdSet.add(memberCouponId);
+                        appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                     } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                         discountMoney = appMemberCouponVo.getDiscountMoney();
                         goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
+                        if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
+                            goodsRealPrice = BigDecimal.ZERO;
+                        }
                         useCoupon = 1;
+                        userCouponIdSet.add(memberCouponId);
+                        appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                     }
                 }
             }
@@ -210,9 +266,16 @@
             appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
             appSureOrderGoodsVo.setCouponDiscount(discountMoney);
             appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
+            // 获取商品押金
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit == null) {
-                goodsDeposit = new BigDecimal("0.00");
+            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
+                goodsDeposit = goodsDeposit.multiply(buyNumBig);
+            }else{
+                if(haveDeposit){
+                    goodsDeposit = goodsRealPrice;
+                }else{
+                    goodsDeposit = new BigDecimal("0.00");
+                }
             }
             appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
             // 计算订单总金额
@@ -220,34 +283,90 @@
             couponDiscount = couponDiscount.add(discountMoney);
             orderPayDeposit = orderPayDeposit.add(goodsDeposit);
             orderPayMoney = orderPayMoney.add(goodsRealPrice);
+            appSureOrderGoodsVoList.add(appSureOrderGoodsVo);
+        }
+        //处理优惠券列表
+        if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
+            for (AppMemberCouponVo entity : appMemberCouponVoList) {
+                if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){
+                    entity.setUseFlag(1);
+                }else{
+                    entity.setUseFlag(0);
+                }
+
+
+            }
+            // 过滤商品优惠券列表
+            List<AppMemberCouponVo> appGoodsMemberCouponVoList;
+            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
+                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()) {
             // 获取商品关联优惠券
             appGoodsMemberCouponVoList = new ArrayList<>();
-            if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
+            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList){
                 for (AppMemberCouponVo entity : appMemberCouponVoList) {
                     if (StringUtils.isBlank(entity.getRelGoodsIds())) {
                         if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) {
                             moneyThreshold = entity.getMoneyThreshold();
-                            if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
-                                appGoodsMemberCouponVoList.add(entity);
+                            if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) {
+                                if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+                                    appGoodsMemberCouponVoList.add(entity);
+                                }else{
+                                    if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+                                        appGoodsMemberCouponVoList.add(entity);
+                                    }
+                                }
                             }
                         }else{
-                            appGoodsMemberCouponVoList.add(entity);
+                            if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+                                appGoodsMemberCouponVoList.add(entity);
+                            }else{
+                                if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+                                    appGoodsMemberCouponVoList.add(entity);
+                                }
+                            }
                         }
-                    } else if (entity.getRelGoodsIds().contains(goodsId)) {
+                    } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) {
                         if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) {
                             moneyThreshold = entity.getMoneyThreshold();
-                            if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
-                                appGoodsMemberCouponVoList.add(entity);
+                            if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) {
+                                if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+                                    appGoodsMemberCouponVoList.add(entity);
+                                }else{
+                                    if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+                                        appGoodsMemberCouponVoList.add(entity);
+                                    }
+                                }
                             }
                         }else{
-                            appGoodsMemberCouponVoList.add(entity);
+                            if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+                                appGoodsMemberCouponVoList.add(entity);
+                            }else{
+                                if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+                                    appGoodsMemberCouponVoList.add(entity);
+                                }
+                            }
                         }
                     }
                 }
-                appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
+                sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
             }
-            appSureOrderGoodsVoList.add(appSureOrderGoodsVo);
-        }
+        }*/
         // 设置订单相关金额
         appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney);
         appSureOrderVo.setCouponDiscount(couponDiscount);
@@ -296,7 +415,13 @@
         if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
             throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
         }
+        if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) {
+            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
+        }
         Goods goods = remoteGoodsService.getGoods(goodsId).getData();
+        if(goods.getGoodsStatus()!=1){
+            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
+        }
         appPanicBuyVo.setGoodsId(goodsId);
         appPanicBuyVo.setGoodsName(goods.getGoodsName());
         appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction());
@@ -323,8 +448,10 @@
         appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice);
         appPanicBuyVo.setGoodsRealPrice(goodsRealPrice);
         goodsDeposit = activityGoodsGetVo.getActivitySubscription();
-        if (goodsDeposit == null) {
+        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
             goodsDeposit = new BigDecimal("0.00");
+        }else{
+            goodsDeposit = goodsDeposit.multiply(buyNumBig);
         }
         appPanicBuyVo.setGoodsDeposit(goodsDeposit);
         orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
@@ -343,6 +470,7 @@
      * @return
      */
     @Override
+    @Transactional
     public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
         // 获取用户ID
         Long userId = appPlaceOrderDto.getUserId();
@@ -353,6 +481,20 @@
         AppSureOrderGoodsVo appSureOrderGoodsVo;
         // 获取购买的商品列表
         List<AppBuyGoodsDto> appBuyGoodsDtoList = appPlaceOrderDto.getAppBuyGoodsDtoList();
+        StringJoiner goodsIdSJ = new StringJoiner(",");
+        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
+            goodsIdSJ.add(appBuyGoodsDto.getGoodsId());
+        }
+        //获取商品列表
+        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData();
+        Map<String, Goods> goodsMap = goodsList.stream()
+                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
+        Boolean haveDeposit = false;
+        for(Goods goods : goodsList){
+            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
+                haveDeposit = true;
+            }
+        }
         // 初始化变量
         String goodsId;
         Integer buyNum;
@@ -365,8 +507,11 @@
         BigDecimal goodsPrice;
         BigDecimal goodsTotalPrice;
         BigDecimal goodsRealPrice;
+        MerBaseDto merBaseDto = new MerBaseDto();
+        merBaseDto.setUserId(userId);
+        merBaseDto.setShopId(appPlaceOrderDto.getShopId());
         // 获取用户优惠券列表
-        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
+        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
         // 将用户优惠券列表转换为Map,方便后续查找
         Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
         AppMemberCouponVo appMemberCouponVo;
@@ -397,7 +542,7 @@
             goodsId = appBuyGoodsDto.getGoodsId();
             memberCouponId = appBuyGoodsDto.getMemberCouponId();
             // 获取商品信息
-            goods = remoteGoodsService.getGoods(goodsId).getData();
+            goods = goodsMap.get(goodsId);
             // 设置商品信息
             appSureOrderGoodsVo.setGoodsId(goodsId);
             appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
@@ -460,8 +605,14 @@
             appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
             // 获取商品押金
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit == null) {
-                goodsDeposit = new BigDecimal("0.00");
+            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
+                goodsDeposit = goodsDeposit.multiply(buyNumBig);
+            }else{
+                if(haveDeposit){
+                    goodsDeposit = goodsRealPrice;
+                }else{
+                    goodsDeposit = new BigDecimal("0.00");
+                }
             }
             appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
             // 计算商品总数量、商品总价、优惠总金额、支付押金、支付金额
@@ -523,19 +674,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());
@@ -553,8 +705,36 @@
         appPlaceOrderVo.setOrderId(orderId);
         appPlaceOrderVo.setOrderNo(orderNo);
         // 调用支付
-        //使用优惠券
-        if(memberCouponSJ!=null){
+       /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest();
+        request.setCombineAppid();
+        request.setCombineMchid();
+        profitsSharingService.combineTransactions(request);*/
+
+       //构建预下单支付对象
+        /*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();
+        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
+        request.setPayer(payer);*/
+        //返回前端唤醒支付结果信息
+        /*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());*/
+
+
+        //减去优惠券
+        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
             remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
         }
         //生成自动取消订单延时任务
@@ -569,8 +749,10 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
         return appPlaceOrderVo;
     }
+
 
     /**
      * @param appPlaceActivityDto
@@ -580,6 +762,7 @@
      * @date 2023/7/6 17:59
      */
     @Override
+    @Transactional
     public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
         Long userId = appPlaceActivityDto.getUserId();
         // 创建订单对象
@@ -639,8 +822,8 @@
         if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
             throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
         }
-        if (buyNum < activityGoodsGetVo.getAvailableBuyNum()) {
-            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
+        if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) {
+            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
         }
         // 创建订单ID和订单号
         String orderId = IdUtils.simpleUUID();
@@ -650,6 +833,7 @@
         String orderGoodsId;
         // 创建商品类型集合
         HashSet<String> goodsTypeSet = new HashSet<>();
+        HashSet<String> goodsNurseSet = new HashSet<>();
         // 创建商品订单对象,并设置商品ID,商品名称,商品介绍,商品类型
         appSureOrderGoodsVo = new AppSureOrderGoodsVo();
         useCoupon = 0;
@@ -680,8 +864,10 @@
         appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
         // 获取商品押金
         goodsDeposit = activityGoodsGetVo.getActivitySubscription();
-        if (goodsDeposit == null) {
+        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
             goodsDeposit = new BigDecimal("0.00");
+        }else{
+            goodsDeposit = goodsDeposit.multiply(buyNumBig);
         }
         appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
         // 计算商品数量,订单商品金额,优惠券折扣,订单支付押金,订单支付金额
@@ -724,6 +910,13 @@
         } else if (goods.getGoodsType() == 4) {
             goodsTypeSet.add("单品");
         }
+        String goodsNurse = goods.getGoodsNurses();
+        if(StringUtils.isNotBlank(goodsNurse)){
+            String[] goodsNurseArr = goodsNurse.split(",");
+            for(String str : goodsNurseArr){
+                goodsNurseSet.add(str);
+            }
+        }
         // 创建订单,并设置订单ID,删除标志,订单状态,订单号,订单来源,店铺ID,用户ID,订单金额,优惠券金额,折扣金额,应收金额,应收押金,变动应收金额,支付类型
         Order order = new Order();
         order.setOrderId(orderId);
@@ -739,19 +932,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);
         }
         // 设置订单备注,商品数量,创建时间
@@ -761,10 +955,11 @@
         // 保存订单
         this.save(order);
         // 更新用户商品类型
-        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
+        if (goodsTypeSet != null || goodsNurseSet!= null) {
             AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
             appMemberGoodsTypeDto.setUserId(userId);
             appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
+            appMemberGoodsTypeDto.setGoodsNurseSet(goodsNurseSet);
             remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
         }
         // 设置订单ID和订单号
@@ -780,6 +975,52 @@
         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());
+*/
+        //生成活动参加记录
+        ActivityRecord activityRecord = new ActivityRecord();
+        activityRecord.setDelFlag(0);
+        activityRecord.setActivityId(activityId);
+        activityRecord.setUserId(userId);
+        activityRecord.setOrderTime(order.getCreateTime());
+        activityRecord.setOrderMoney(order.getOrderMoney());
+        activityRecord.setOrderId(orderId);
+        activityRecord.setCreateTime(new Date());
+        activityRecord.setBuyNum(orderGoods.getBuyNum());
+        activityRecord.setGoodsId(orderGoods.getGoodsId());
+        activityRecord.setActivityMoney(activityGoodsGetVo.getActivityPrice());
+        remoteActivityService.addActivityRecord(activityRecord);
         //生成自动取消订单延时任务
         Integer delayTime = 30;
         if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
@@ -792,6 +1033,7 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
         return appPlaceOrderVo;
     }
 
@@ -819,6 +1061,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());
@@ -829,6 +1075,7 @@
                     appUserOrderPageVo.setSameShop(0);
                 }
                 appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
+                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime));
             }
         }
         return appUserOrderPageVoList;
@@ -853,6 +1100,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());
@@ -913,18 +1161,10 @@
      */
     @Override
     public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) {
-        List<Long> shopIds = merHomeShopTotalVo.getShopIds();
-        if (null != shopIds && shopIds.size() != 0) {
-            Integer todayShop = userServiceRecordMapper.countShopServicePersons(shopIds);
-            merHomeShopTotalVo = orderMapper.getMerHomeShopsTotalVo(shopIds);
-            merHomeShopTotalVo.setTodayShop(todayShop);
-        }else{
-            Long shopId = merHomeShopTotalVo.getShopId();
-            Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
-            merHomeShopTotalVo.setTodayShop(todayShop);
-            merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
-
-        }
+        Long shopId = merHomeShopTotalVo.getShopId();
+        Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
+        merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
+        merHomeShopTotalVo.setTodayShop(todayShop);
         return merHomeShopTotalVo;
     }
 
@@ -964,9 +1204,9 @@
         merVerifyOrderVo.setUseTime(order.getUseTime());
         merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
         // 根据订单用户ID获取用户信息
-        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
-        merVerifyOrderVo.setUserName(sysUser.getNickName());
-        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
+        Member member = remoteMemberService.getMember(order.getUserId()).getData();
+        merVerifyOrderVo.setUserName(member.getRealName());
+        merVerifyOrderVo.setUserMobile(member.getMobile());
         merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
         // 返回结果
         return merVerifyOrderVo;
@@ -979,6 +1219,7 @@
      * @return
      */
     @Override
+    @Transactional
     public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) {
         String orderId = merVerifyOrderDto.getOrderId();
         BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
@@ -988,6 +1229,11 @@
         Order order = this.getById(orderId);
         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);
@@ -1053,10 +1299,17 @@
         merVerifyOrderVo.setCreateTime(order.getCreateTime());
         merVerifyOrderVo.setPayTime(order.getPayTime());
         merVerifyOrderVo.setUseTime(order.getUseTime());
-        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
-        merVerifyOrderVo.setUserName(sysUser.getNickName());
-        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
+        Member member = remoteMemberService.getMember(order.getUserId()).getData();
+        merVerifyOrderVo.setUserName(member.getRealName());
+        merVerifyOrderVo.setUserMobile(member.getMobile());
+        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
+        //
+        if(order.getOrderFrom()==2){
+
+            //profitsSharingService.applyProfitSharing();
+        }
         return merVerifyOrderVo;
+
     }
 
     /**
@@ -1067,8 +1320,13 @@
      * @date 2023/6/28 11:26
      */
     @Override
+    @Transactional
     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对象
@@ -1076,7 +1334,7 @@
         Long userId = verifyCouponGetVo.getUserId();
         // 调用remoteMemberService的getMember方法获取Member对象
         Member member = remoteMemberService.getMember(userId).getData();
-        merVerifyCouponVo.setUserName(member.getNickName());
+        merVerifyCouponVo.setUserName(member.getRealName());
         merVerifyCouponVo.setUserMobile(member.getMobile());
         merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
         merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
@@ -1156,14 +1414,19 @@
      * @return  MerVerifyAwardVo
      */
     @Override
+    @Transactional
     public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
         MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
         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());
+        merVerifyAwardVo.setUserName(member.getRealName());
         merVerifyAwardVo.setUserMobile(member.getMobile());
         if(memberGiftRecord.getGiftFrom()==1){
             merVerifyAwardVo.setGiftFrom("平台生日卡");
@@ -1283,6 +1546,8 @@
     public void createNewOrder(MerNewOrderDto merNewOrderDto) {
         Long userId = merNewOrderDto.getBuyUserId();
         Date nowTime = new Date();
+        Long shopId = merNewOrderDto.getShopId();
+        Shop shop = remoteShopService.getShop(shopId).getData();
         //如果非指定用户判断是否需要通过手机号创建新用户
         if (userId == null) {
             String name = merNewOrderDto.getName();
@@ -1310,6 +1575,9 @@
                 member.setMobile(mobile);
                 member.setRealName(name);
                 member.setNickName(name);
+                member.setBindingFlag(1);
+                member.setRelationShopId(shopId);
+                member.setRelationShopName(shop.getShopName());
                 remoteMemberService.createNewMember(member);
             }
             userId = sysUser.getUserId();
@@ -1326,9 +1594,10 @@
         BigDecimal goodsPrice;
         BigDecimal goodsTotalPrice;
         BigDecimal goodsRealPrice;
-        Long shopId = merNewOrderDto.getShopId();
-        Shop shop = remoteShopService.getShop(shopId).getData();
-        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
+        MerBaseDto merBaseDto = new MerBaseDto();
+        merBaseDto.setUserId(userId);
+        merBaseDto.setShopId(shopId);
+        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
         Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
         if (null != appMemberCouponVoList) {
             appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
@@ -1395,8 +1664,10 @@
             }
 
             goodsDeposit = goods.getSubscription();
-            if (goodsDeposit == null) {
+            if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
                 goodsDeposit = new BigDecimal("0.00");
+            }else{
+                goodsDeposit = goodsDeposit.multiply(buyNumBig);
             }
             goodsNum = goodsNum + buyNum;
             orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
@@ -1474,6 +1745,7 @@
         order.setOnlinePayMoney(new BigDecimal("0.00"));
         order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
         order.setOffPayTime(nowTime);
+        order.setPayType(1);
         order.setCloseFlag(1);
         this.save(order);
         //创建服务
@@ -2515,7 +2787,7 @@
         Long userId = verifyCouponGetVo.getUserId();
         // 调用remoteMemberService的getMember方法获取Member对象
         Member member = remoteMemberService.getMember(userId).getData();
-        merVerifyCouponVo.setUserName(member.getNickName());
+        merVerifyCouponVo.setUserName(member.getRealName());
         merVerifyCouponVo.setUserMobile(member.getMobile());
         merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
         merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName());
@@ -2564,7 +2836,7 @@
             throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
         Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
-        merVerifyAwardVo.setUserName(member.getNickName());
+        merVerifyAwardVo.setUserName(member.getRealName());
         merVerifyAwardVo.setUserMobile(member.getMobile());
         if(memberGiftRecord.getGiftFrom()==1){
             merVerifyAwardVo.setGiftFrom("平台生日卡");
@@ -2830,7 +3102,15 @@
      */
     @Override
     public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) {
-        return orderMapper.totalMerOrder(merBaseDto.getShopId());
+        MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo();
+        merTotalOrderVo = orderMapper.totalMerOrder(merBaseDto.getShopId());
+        Shop shop = remoteShopService.getShop(merBaseDto.getShopId()).getData();
+        if(shop.getShopType()==2){
+            merTotalOrderVo.setAgencyFlag(1);
+        }else{
+            merTotalOrderVo.setAgencyFlag(0);
+        }
+        return merTotalOrderVo;
     }
 
     /**
@@ -2899,6 +3179,7 @@
      * @return  void
      */
     @Override
+    @Transactional
     public void autoCancelOrder(String orderId){
         //更新订单信息
         Order order = this.getById(orderId);
@@ -2929,6 +3210,13 @@
                     agStockChangeDto.setShopId(order.getShopId());
                     agStockChangeDto.setUserId(order.getUserId());
                     remoteActivityService.changeActivityStock(agStockChangeDto);
+                    //删除活动记录
+                    ActivityRecord activityRecord = new ActivityRecord();
+                    activityRecord.setActivityId(order.getActivityId());
+                    activityRecord.setGoodsId(orderGoods.getGoodsId());
+                    activityRecord.setUserId(order.getUserId());
+                    activityRecord.setOrderTime(order.getCreateTime());
+                    remoteActivityService.delActivityRecord(activityRecord);
                 }
             }
         }else{
@@ -2953,12 +3241,14 @@
      * @description  订单支付回调
      * @author  jqs
      * @date    2023/7/13 17:57
-     * @param orderId
+     * @param transaction
      * @return  void
      */
     @Override
-    public void payBack(String orderId) {
+    @Transactional
+    public void payBack(Transaction transaction) {
         // 更新订单状态
+        String orderId=transaction.getOutTradeNo();
         Order order = this.getById(orderId);
         order.setOrderStatus(2);
         order.setPayTime(new Date());
@@ -2975,6 +3265,8 @@
         Boolean haveGoods = false;
         // 获取订单中的所有商品
         List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+        List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
+        GoodsTotalChangeDto goodsTotalChangeDto;
         // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态
         for (OrderGoods orderGoods : orderGoodsList) {
             switch (orderGoods.getGoodsType()) {
@@ -2997,7 +3289,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());
@@ -3052,7 +3355,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();
+
+
+
+
+
     }
 
     /**
@@ -3063,6 +3381,7 @@
      * @return  void
      */
     @Override
+    @Transactional
     public void refundOrder(String orderId){
         //更新订单信息
         Order order = this.getById(orderId);
@@ -3115,6 +3434,13 @@
                     agStockChangeDto.setShopId(order.getShopId());
                     agStockChangeDto.setUserId(order.getUserId());
                     remoteActivityService.changeActivityStock(agStockChangeDto);
+                    //删除活动记录
+                    ActivityRecord activityRecord = new ActivityRecord();
+                    activityRecord.setActivityId(order.getActivityId());
+                    activityRecord.setGoodsId(orderGoods.getGoodsId());
+                    activityRecord.setUserId(order.getUserId());
+                    activityRecord.setOrderTime(order.getCreateTime());
+                    remoteActivityService.delActivityRecord(activityRecord);
                 }else{
                     memberCouponSJ.add(orderGoods.getCouponId());
                 }
@@ -3200,4 +3526,270 @@
             remoteActivityService.changeActivityTotal(activityTotalChangeDto);
         }
     }
+
+    /**
+     * @description  员工端活动订单统计
+     * @author  jqs
+     * @date    2023/7/17 15:25
+     * @param staffTotalDto
+     * @return  StaffActivityOrderTotalVo
+     */
+    @Override
+    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){
+        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
+        return staffActivityOrderTotalVo;
+    }
+
+    /**
+     * @description  员工端活动统计
+     * @author  jqs
+     * @date    2023/7/17 15:51
+     * @param staffTotalDto
+     * @return  StaffActivityTotalVo
+     */
+    @Override
+    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){
+        StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
+        return staffActivityTotalVo;
+    }
+
+    /**
+     * @description  员工端活动统计订单分布
+     * @author  jqs
+     * @date    2023/7/17 16:16
+     * @param staffTotalDto
+     * @return  MerOrderDistributionTotalVo
+     */
+    @Override
+    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){
+        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
+        // 获取订单年龄用户列表
+        MerTotalDto merTotalDto = new MerTotalDto();
+        merTotalDto.setShopId(staffTotalDto.getShopId());
+        List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
+        // 如果订单年龄用户列表不为空
+        if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
+            // 定义变量
+            Integer ageType;
+            List<Long> userIdList;
+            MerOrderAgeUserVo orderAgeUserVo;
+            MgtMapTotalPlusVo mgtMapTotalPlusVo;
+            String[] orderTotalKey = new String[5];
+            Integer[] orderTotalValue = new Integer[5];
+            BigDecimal[] orderMoneyValue = new BigDecimal[5];
+            // 遍历订单年龄用户列表
+            for (int i = 0; i < orderAgeUserVoList.size(); i++) {
+                orderAgeUserVo = orderAgeUserVoList.get(i);
+                ageType = orderAgeUserVo.getAgeType();
+                userIdList = orderAgeUserVo.getUserIdList();
+                // 根据年龄类型设置订单总数键
+                switch (ageType) {
+                    case 1:
+                        orderTotalKey[i] = "<20";
+                        break;
+                    case 2:
+                        orderTotalKey[i] = "21-30";
+                        break;
+                    case 3:
+                        orderTotalKey[i] = "31-40";
+                        break;
+                    case 4:
+                        orderTotalKey[i] = "41-50";
+                        break;
+                    case 5:
+                        orderTotalKey[i] = ">50";
+                        break;
+                }
+                // 如果用户ID列表不为空
+                if (userIdList != null && !userIdList.isEmpty()) {
+                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId());
+                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
+                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
+                } else {
+                    orderTotalValue[i] = 0;
+                    orderMoneyValue[i] = BigDecimal.ZERO;
+                }
+            }
+            // 设置订单分布总数对象的属性值
+            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
+            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
+            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+        }
+        // 返回订单分布总数对象
+        return orderDistributionTotalVo;
+    }
+
+
+    /**
+     * @description  员工端活动统计销售占比
+     * @author  jqs
+     * @date    2023/7/17 17:03
+     * @param staffTotalDto
+     * @return  MerOrderTypeTotalVo
+     */
+    @Override
+    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){
+        MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
+        //获取商品分类销售数据
+        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto);
+        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
+        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
+        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
+            MgtMapIntTotalVo MgtMapIntTotalVo;
+            MgtMapBigTotalVo mgtMapBigTotalVo;
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
+                MgtMapIntTotalVo = new MgtMapIntTotalVo();
+                mgtMapBigTotalVo = new MgtMapBigTotalVo();
+                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
+                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
+                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
+                    MgtMapIntTotalVo.setMapKey("周期");
+                    mgtMapBigTotalVo.setMapKey("周期");
+                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
+                    MgtMapIntTotalVo.setMapKey("服务");
+                    mgtMapBigTotalVo.setMapKey("服务");
+                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
+                    MgtMapIntTotalVo.setMapKey("体验");
+                    mgtMapBigTotalVo.setMapKey("体验");
+                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
+                    MgtMapIntTotalVo.setMapKey("单品");
+                    mgtMapBigTotalVo.setMapKey("单品");
+                }
+                goodsTypeTotalList.add(MgtMapIntTotalVo);
+                goodsTypeMoneyList.add(mgtMapBigTotalVo);
+            }
+            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
+            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
+        }
+        return orderTypeTotalVo;
+    }
+
+    /**
+     * @description  员工端获客人数
+     * @author  jqs
+     * @date    2023/7/17 18:42
+     * @param staffTotalDto
+     * @return  StaffActivityDateMemberTotalVo
+     */
+    @Override
+    public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) {
+        // 创建返回对象
+        StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
+        // 查询数据库获取数据
+        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityGetMemberTotal(staffTotalDto);
+        // 将查询结果转为Map
+        Map<String, Integer> map = new HashMap<>();
+        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
+            map = mgtMapIntTotalVoList.stream()
+                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        }
+        // 获取日期范围
+        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
+        int size = dateList.size();
+        // 创建日期和成员总数的数组
+        String[] dateMemberTotalKey = new String[size];
+        Integer[] dateMemberTotalValue = new Integer[size];
+        // 遍历日期列表,设置日期和成员总数的数组
+        String str;
+        Integer value;
+        for (int i = 0; i < size; i++) {
+            str = dateList.get(i);
+            dateMemberTotalKey[i] = str;
+            value = map.get(str);
+            dateMemberTotalValue[i] = (value != null) ? value : 0;
+        }
+        // 设置返回对象的日期和成员总数数组
+        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
+        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
+        // 返回结果对象
+        return staffActivityDateMemberTotalVo;
+    }
+
+    /**
+     * @description  员工端获客人数
+     * @author  jqs
+     * @date    2023/7/17 18:42
+     * @param staffTotalDto
+     * @return  StaffActivityDateMemberTotalVo
+     */
+    @Override
+    public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
+        // 创建返回对象
+        StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
+        // 查询数据库获取数据
+        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityMemberTotal(staffTotalDto);
+        // 将查询结果转为Map
+        Map<String, Integer> map = new HashMap<>();
+        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
+            map = mgtMapIntTotalVoList.stream()
+                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
+        }
+        // 获取日期范围
+        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
+        int size = dateList.size();
+        // 创建日期和成员总数的数组
+        String[] dateMemberTotalKey = new String[size];
+        Integer[] dateMemberTotalValue = new Integer[size];
+        // 遍历日期列表,设置日期和成员总数的数组
+        String str;
+        Integer value;
+        for (int i = 0; i < size; i++) {
+            str = dateList.get(i);
+            dateMemberTotalKey[i] = str;
+            value = map.get(str);
+            dateMemberTotalValue[i] = (value != null) ? value : 0;
+        }
+        // 设置返回对象的日期和成员总数数组
+        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
+        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
+        // 返回结果对象
+        return staffActivityDateMemberTotalVo;
+    }
+
+    /**
+     * @description  获取时间段日期
+     * @author  jqs
+     * @date    2023/7/17 19:11
+     * @param startDate
+     * @param endDate
+     * @return  List<String>
+     */
+    public static List<String> getDateRange(String startDate, String endDate) {
+        List<String> dateList = new ArrayList<>();
+        LocalDate start = LocalDate.parse(startDate);
+        LocalDate end = LocalDate.parse(endDate);
+        while (!start.isAfter(end)) {
+            dateList.add(start.format(DateTimeFormatter.ISO_DATE));
+            start = start.plusDays(1);
+        }
+        return dateList;
+    }
+
+    /**
+     * @description  检查订单状态定时任务
+     * @author  jqs
+     * @date    2023/7/25 14:40
+     * @param
+     * @return  void
+     */
+    @Override
+    public void checkOrderStatus(){
+        Integer delayTime = 30;
+        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
+            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+        }
+        delayTime = delayTime + 5;
+        Date checkTime = DateUtils.addMinutes(new Date(),delayTime);
+        LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Order::getDelFlag,0);
+        queryWrapper.lt(Order::getCreateTime,checkTime);
+        queryWrapper.eq(Order::getOrderStatus,1);
+        List<Order> orderList = this.list(queryWrapper);
+        if(orderList!=null&&!orderList.isEmpty()){
+            for(Order order : orderList){
+                autoCancelOrder(order.getOrderId());
+            }
+        }
+    }
 }

--
Gitblit v1.7.1