ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -5,6 +5,17 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.google.common.base.Joiner;
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -12,18 +23,19 @@
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.config.MyWxPayConfig;
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.pojo.order.PayRecord;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.mapper.order.OrderMapper;
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.service.account.OrderPaymentService;
import com.ruoyi.order.service.account.PaymentMessageService;
import com.ruoyi.order.service.order.*;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.DelayTaskEnum;
import com.ruoyi.system.api.constant.SecurityConstant;
@@ -37,6 +49,7 @@
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
@@ -106,31 +119,22 @@
    @Resource
    private RedisService redisService;
    //@Resource
    //@Qualifier("profitsSharingServiceImpl")
    //private ProfitsSharingService profitsSharingService;
    @Resource
    private PayRecordService payRecordService;
    @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="";
    @Autowired
    private WxPayService wxService;
    /**
    @Resource
    private PaymentMessageService paymentMessageService;
    @Resource
    private OrderPaymentService orderPaymentService;
   /**
     * @description: buyGoods
     * @param: appSureOrderDto
     * @return: AppSureOrderVo
@@ -236,8 +240,8 @@
                    couponType = appMemberCouponVo.getCouponType();
                    if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
                        moneyThreshold = appMemberCouponVo.getMoneyThreshold();
                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
                            discountMoney = appMemberCouponVo.getDiscountMoney();
                        discountMoney = appMemberCouponVo.getDiscountMoney();
                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) {
                            goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                            useCoupon = 1;
                            userCouponIdSet.add(memberCouponId);
@@ -245,20 +249,22 @@
                        }
                    } 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);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2,BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                        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;
                        if(goodsTotalPrice.compareTo(discountMoney)>0){
                            goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                            if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
                                goodsRealPrice = BigDecimal.ZERO;
                            }
                            useCoupon = 1;
                            userCouponIdSet.add(memberCouponId);
                            appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                        }
                        useCoupon = 1;
                        userCouponIdSet.add(memberCouponId);
                        appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                    }
                }
            }
@@ -302,10 +308,14 @@
                appGoodsMemberCouponVoList = new ArrayList<>();
                for(AppMemberCouponVo entity : appMemberCouponVoList){
                    if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){
                        if(entity.getCouponType()!=1){
                        if(entity.getCouponType()==1){
                            if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                                appGoodsMemberCouponVoList.add(entity);
                            }
                        }else if(entity.getCouponType()==2){
                            appGoodsMemberCouponVoList.add(entity);
                        }else{
                            if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                        }else if(entity.getCouponType()==3){
                            if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                                appGoodsMemberCouponVoList.add(entity);
                            }
                        }
@@ -412,8 +422,12 @@
        if (activityGoodsGetVo.getActivityStatus() == 2) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_END);
        }
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
        if(surpNum==null||surpNum<1){
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
        }
        if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
@@ -422,6 +436,7 @@
        if(goods.getGoodsStatus()!=1){
            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
        }
        appPanicBuyVo.setActivityId(activityId);
        appPanicBuyVo.setGoodsId(goodsId);
        appPanicBuyVo.setGoodsName(goods.getGoodsName());
        appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction());
@@ -502,7 +517,7 @@
        Integer serviceNum;
        Integer goodsNum = 0;
        String memberCouponId;
        Goods goods;
        Goods goods = null;
        GoodsFile goodsFile;
        BigDecimal goodsPrice;
        BigDecimal goodsTotalPrice;
@@ -534,6 +549,7 @@
        HashSet<String> goodsTypeSet = new HashSet<>();
        //使用优惠券
        StringJoiner memberCouponSJ = new StringJoiner(",");
        List<String> goodsNameList = new ArrayList<>();
        // 遍历购买的商品列表
        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
            appSureOrderGoodsVo = new AppSureOrderGoodsVo();
@@ -543,6 +559,7 @@
            memberCouponId = appBuyGoodsDto.getMemberCouponId();
            // 获取商品信息
            goods = goodsMap.get(goodsId);
            goodsNameList.add(goods.getGoodsName());
            // 设置商品信息
            appSureOrderGoodsVo.setGoodsId(goodsId);
            appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
@@ -588,8 +605,8 @@
                        }
                    } 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);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                        useCoupon = 1;
                    } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                        discountMoney = appMemberCouponVo.getDiscountMoney();
@@ -640,6 +657,7 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            // 保存订单商品
            orderGoodsService.save(orderGoods);
@@ -704,53 +722,90 @@
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        // 调用支付
       /* 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());*/
        try {
            // 创建支付订单
            Long shopId = appPlaceOrderDto.getShopId();
            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
            String subMchId = resultMch.getData();
            if(StringUtils.isEmpty(subMchId)){
                throw new ServiceException("获取微信商户号失败");
            }
            WxPayConfig config = wxService.getConfig();
            config.setSubMchId(subMchId);
            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
            request.setTradeType(WxPayConstants.TradeType.JSAPI);
            request.setSubMchId(subMchId);
            // 商户订单号
            request.setOutTradeNo(orderNo);
            // 订单总金额
            Integer totalFee = order.getPayMoney().multiply(new BigDecimal(100)).intValue();
            request.setTotalFee(totalFee);
            request.setProductId(orderNo);
            request.setNotifyUrl(config.getNotifyUrl());
            request.setProfitSharing("Y");
            request.setOpenid(appPlaceOrderDto.getOpenid());
            request.setSpbillCreateIp(appPlaceOrderDto.getSpbillCreateIp());
            // 商品描述   body
            String body = "商品购买";
            if(null != goods){
                body = goods.getGoodsName() + "-" + body;
            }
            request.setBody(body);
            request.checkAndSign(config);
            // 请求参数
            Gson gson = new Gson();
            String payRequestJson = gson.toJson(request);
            WxPayMpOrderResult result = wxService.createOrder(request);
            String payResponseJson = gson.toJson(request);
            // 支付相关信息返回
            appPlaceOrderVo.setAppId(result.getAppId());
            appPlaceOrderVo.setMchId(config.getMchId());
            appPlaceOrderVo.setTimeStamp(result.getTimeStamp());
            appPlaceOrderVo.setNonceStr(result.getNonceStr());
            appPlaceOrderVo.setPackageStr(result.getPackageValue());
            appPlaceOrderVo.setSignType(result.getSignType());
            appPlaceOrderVo.setPaySign(result.getPaySign());
            appPlaceOrderVo.setPrepayId(result.getPackageValue());
            //减去优惠券
            if(StringUtils.isNotBlank(memberCouponSJ.toString())){
                remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
            }
            //生成自动取消订单延时任务
            Integer delayTime = 30;
            if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
            DelayTask delayTask = new DelayTask();
            delayTask.setDelFlag(0);
            delayTask.setCreateTime(new Date());
            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));
        //减去优惠券
        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("1", 0L, payRequestJson, payResponseJson);
            // 保存支付订单统一下单支付记录
            orderPaymentService.saveOrderPayment(userId, shopId, orderId, order.getPayMoney(),
                    appPlaceOrderVo.getEndTime(), "Y", appPlaceOrderDto.getOpenid(),
                    Joiner.on(";").join(goodsNameList),result.getPackageValue());
            return appPlaceOrderVo;
        } catch (WxPayException e){
            throw new ServiceException(e.getMessage());
        }
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
        DelayTask delayTask = new DelayTask();
        delayTask.setDelFlag(0);
        delayTask.setCreateTime(new Date());
        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;
    }
@@ -892,6 +947,7 @@
        orderGoods.setServiceNum(serviceNum);
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsName(goods.getGoodsName());
        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
        orderGoods.setGoodsPicture(goodsFile.getFileUrl());
        // 保存订单商品
        orderGoodsService.save(orderGoods);
@@ -932,6 +988,8 @@
        order.setReceivableMoney(orderPayMoney);
        order.setReceivableDeposit(orderPayDeposit);
        order.setChangeReceivableMoney(orderPayMoney);
        order.setActivityId(activityId);
        order.setActivityName(activityGoodsGetVo.getActivityName());
        // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
        if (appPlaceActivityDto.getPayType() == 1) {
            order.setPayMoney(orderPayMoney);
@@ -1100,6 +1158,7 @@
        appUserOrderGetVo.setCouponDiscount(order.getCouponMoney());
        appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit());
        appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney());
        appUserOrderGetVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getOnlinePayMoney()));
        appUserOrderGetVo.setPayType(order.getPayType());
        appUserOrderGetVo.setPayMoney(order.getPayMoney());
        appUserOrderGetVo.setOrderRemark(order.getOrderRemark());
@@ -1113,6 +1172,12 @@
        appUserOrderGetVo.setShopName(shop.getShopName());
        appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
        appUserOrderGetVo.setVerifyCode("1-" + orderId);
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
        return appUserOrderGetVo;
    }
@@ -1124,7 +1189,9 @@
    @Override
    public void cancelOrder(String orderId) {
        Order order = this.getById(orderId);
        if (order.getOrderStatus() == 1) {
        if (order.getOrderStatus() == 0) {
            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
        }else if (order.getOrderStatus() == 1) {
            this.autoCancelOrder(orderId);
        }else if(order.getOrderStatus() == 2){
            this.refundOrder(orderId);
@@ -1241,8 +1308,12 @@
        order.setOfflinePayMoney(relPayMoney);
        order.setOffPayTime(nowTime);
        order.setPayMoney(order.getPayMoney().add(relPayMoney));
        order.setCloseFlag(1);
        order.setChangeReceivableMoney(relReceiveMoney);
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
            order.setCloseFlag(1);
        }else{
            order.setCloseFlag(0);
        }
        this.saveOrUpdate(order);
        //创建服务商品
        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId);
@@ -1259,28 +1330,57 @@
        Goods goods;
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            consumerGoods = new ConsumerGoods();
            goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
            consumerGoodsId = IdUtils.simpleUUID();
            consumerGoods.setConsumerGoodsId(consumerGoodsId);
            consumerGoods.setDelFlag(0);
            consumerGoods.setServiceStatus(1);
            consumerGoods.setShopId(order.getShopId());
            consumerGoods.setUserId(order.getUserId());
            consumerGoods.setOrderId(orderId);
            consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
            consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
            consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
            consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
            consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
            consumerGoods.setCreateTime(nowTime);
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsList.add(consumerGoods);
            Integer buyNum = appUserOrderGoodsPageVo.getBuyNum();
            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
                consumerGoods = new ConsumerGoods();
                goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                consumerGoodsId = IdUtils.simpleUUID();
                consumerGoods.setConsumerGoodsId(consumerGoodsId);
                consumerGoods.setDelFlag(0);
                consumerGoods.setServiceStatus(1);
                consumerGoods.setShopId(order.getShopId());
                consumerGoods.setUserId(order.getUserId());
                consumerGoods.setOrderId(orderId);
                consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
                consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
                consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
                consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
                consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                consumerGoods.setUsedNum(0);
                consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                consumerGoods.setCreateTime(nowTime);
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                consumerGoods.setSourceFrom(1);
                consumerGoods.setSureNum(buyNum);
                consumerGoodsList.add(consumerGoods);
            }else{
                for(int i=0;i<buyNum;i++){
                    consumerGoods = new ConsumerGoods();
                    goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                    consumerGoodsId = IdUtils.simpleUUID();
                    consumerGoods.setConsumerGoodsId(consumerGoodsId);
                    consumerGoods.setDelFlag(0);
                    consumerGoods.setServiceStatus(1);
                    consumerGoods.setShopId(order.getShopId());
                    consumerGoods.setUserId(order.getUserId());
                    consumerGoods.setOrderId(orderId);
                    consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
                    consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
                    consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
                    consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
                    consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                    consumerGoods.setUsedNum(0);
                    consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                    consumerGoods.setCreateTime(nowTime);
                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
                    consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                    consumerGoods.setSourceFrom(1);
                    consumerGoodsList.add(consumerGoods);
                }
            }
        }
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        //生成返回
@@ -1304,12 +1404,51 @@
        merVerifyOrderVo.setUserMobile(member.getMobile());
        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
        //
        if(order.getOrderFrom()==2){
            //profitsSharingService.applyProfitSharing();
        if(order.getOrderFrom() == 2){
            // profitsSharingService.applyProfitSharing();
        }
        return merVerifyOrderVo;
        //创建支付记录
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(order.getOrderId());
        payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
        payRecord.setPayTime(new Date());
        payRecord.setPayType(2);
        payRecordService.save(payRecord);
        // TODO 核销完成 开始分账(平台收取服务费)
        OrderPayment payment = orderPaymentService.getByOrderId(orderId);
        String transactionId = payment.getTransactionId();
        String platformTyMacId = MyWxPayConfig.getPlatformTyMacId();
        R<String> resultMch = remoteShopService.getShopSubMchId(order.getShopId());
        String subMchId = resultMch.getData();
        if(StringUtils.isEmpty(subMchId)){
            throw new ServiceException("获取微信商户号失败");
        }
        R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(order.getShopId());
        ShopProportionVo shopProportion = resultShopProportion.getData();
        if(null == shopProportion){
            throw new ServiceException("获取商户分成失败");
        }
        ProfitSharingRequest request = new ProfitSharingRequest();
        request.setSubMchId(subMchId);
        request.setTransactionId(transactionId);
        request.setOutOrderNo(order.getOrderNo());
        List<ProfitSharingReceiver> receiverList = new ArrayList<>();
        ProfitSharingReceiver receiver = new ProfitSharingReceiver();
        // TODO 分账
        // receiver.set
        // request.setReceivers();
        // platformTyMacId
        // wxService.getProfitSharingV3Service().profitSharing()
        return merVerifyOrderVo;
    }
    /**
@@ -1530,11 +1669,23 @@
    @Override
    public void merCloseOrder(MerCloseOrderDto merCloseOrderDto) {
        Order order = this.getById(merCloseOrderDto.getOrderId());
        order.setOfflinePayMoney(merCloseOrderDto.getPayMoney());
        order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney()));
        order.setOffPayTime(new Date());
        order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney()));
        order.setCloseFlag(1);
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
            order.setCloseFlag(0);
        }else{
            order.setCloseFlag(1);
        }
        this.saveOrUpdate(order);
        //创建支付记录
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(order.getOrderId());
        payRecord.setPayMoney(merCloseOrderDto.getPayMoney());
        payRecord.setPayTime(new Date());
        payRecord.setPayType(2);
        payRecordService.save(payRecord);
    }
    /**
@@ -1654,7 +1805,7 @@
                        }
                    } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                        discountPercent = appMemberCouponVo.getDiscountPercent();
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2, BigDecimal.ROUND_HALF_UP);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
                    } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                        discountMoney = appMemberCouponVo.getDiscountMoney();
@@ -1692,6 +1843,7 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            orderGoodsService.save(orderGoods);
            switch (orderGoods.getGoodsType()) {
@@ -1734,7 +1886,6 @@
        order.setPayMoney(orderPayMoney);
        order.setOnlinePayMoney(new BigDecimal("0.00"));
        order.setOfflinePayMoney(orderPayMoney);
        order.setCloseFlag(1);
        order.setOrderRemark(merNewOrderDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(nowTime);
@@ -1746,35 +1897,71 @@
        order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
        order.setOffPayTime(nowTime);
        order.setPayType(1);
        order.setCloseFlag(1);
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
            order.setCloseFlag(0);
        }else{
            order.setCloseFlag(1);
        }
        this.save(order);
        //创建服务
        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId);
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            consumerGoods = new ConsumerGoods();
            goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
            consumerGoodsId = IdUtils.simpleUUID();
            consumerGoods.setConsumerGoodsId(consumerGoodsId);
            consumerGoods.setDelFlag(0);
            consumerGoods.setServiceStatus(1);
            consumerGoods.setShopId(order.getShopId());
            consumerGoods.setUserId(order.getUserId());
            consumerGoods.setOrderId(orderId);
            consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
            consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
            consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
            consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
            consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
            consumerGoods.setCreateTime(nowTime);
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoodsService.save(consumerGoods);
            Integer buyGoodsNum = appUserOrderGoodsPageVo.getBuyNum();
            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
                consumerGoods = new ConsumerGoods();
                goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
                consumerGoodsId = IdUtils.simpleUUID();
                consumerGoods.setConsumerGoodsId(consumerGoodsId);
                consumerGoods.setDelFlag(0);
                consumerGoods.setServiceStatus(1);
                consumerGoods.setShopId(order.getShopId());
                consumerGoods.setUserId(order.getUserId());
                consumerGoods.setOrderId(orderId);
                consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
                consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
                consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
                consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
                consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                consumerGoods.setUsedNum(0);
                consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                consumerGoods.setCreateTime(nowTime);
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                consumerGoods.setSourceFrom(1);
                consumerGoods.setSureNum(buyGoodsNum);
                consumerGoodsList.add(consumerGoods);
            }else{
                for(int i=0;i<buyGoodsNum;i++) {
                    consumerGoods = new ConsumerGoods();
                    goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
                    consumerGoodsId = IdUtils.simpleUUID();
                    consumerGoods.setConsumerGoodsId(consumerGoodsId);
                    consumerGoods.setDelFlag(0);
                    consumerGoods.setServiceStatus(1);
                    consumerGoods.setShopId(order.getShopId());
                    consumerGoods.setUserId(order.getUserId());
                    consumerGoods.setOrderId(orderId);
                    consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId());
                    consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId());
                    consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName());
                    consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag());
                    consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                    consumerGoods.setUsedNum(0);
                    consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                    consumerGoods.setCreateTime(nowTime);
                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
                    consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                    consumerGoods.setSourceFrom(1);
                    consumerGoodsList.add(consumerGoods);
                }
            }
        }
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        Member member = remoteMemberService.getMember(userId).getData();
        if (member != null && member.getBindingFlag() != 1) {
            //绑定商户
@@ -1793,6 +1980,14 @@
        shopTotalChangeDto.setExperienceMoney(experienceMoney);
        shopTotalChangeDto.setGoodsMoney(goodsMoney);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
        //创建支付记录
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(orderId);
        payRecord.setPayMoney(order.getPayMoney());
        payRecord.setPayTime(order.getPayTime());
        payRecord.setPayType(2);
        payRecordService.save(payRecord);
    }
@@ -1802,6 +1997,18 @@
     */
    @Override
    public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) {
        if(StringUtils.isNotBlank(merOrderPageDto.getKeyword())){
            MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
            userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
            MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
            if(StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())){
                List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
                merOrderPageDto.setMemberUserIdList(userIdList);
                merOrderPageDto.setMemberUserId(null);
            }
        }
        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto);
        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
            Long userId;
@@ -1824,7 +2031,7 @@
                    orderFromDesc = "商城订单";
                }
                merOrderPageVo.setOrderFromDesc(orderFromDesc);
                merOrderPageVo.setUnPaidMoney(merOrderPageVo.getReceivableMoney().subtract(merOrderPageVo.getPayMoney()));
                merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney()));
                if (merOrderPageVo.getUnPaidMoney() == null) {
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
@@ -1835,8 +2042,13 @@
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
                    merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                    merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                }else{
                    log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户");
                }
            }
        }
        return merOrderPageVoList;
@@ -1889,6 +2101,7 @@
        if (mgtMemberOrderPageVoList != null && !mgtMemberOrderPageVoList.isEmpty()) {
            Long shopId;
            HashSet<String> set = new HashSet<>();
            BigDecimal zeroBig = new BigDecimal("0.00");
            // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中
            for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) {
                shopId = mgtMemberOrderPageVo.getShopId();
@@ -1907,6 +2120,8 @@
            for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) {
                shopId = mgtMemberOrderPageVo.getShopId();
                mgtMemberOrderPageVo.setShopName(map.get(shopId).getShopName());
                BigDecimal unPaidMoney = mgtMemberOrderPageVo.getReceivableMoney().subtract(mgtMemberOrderPageVo.getPayMoney());
                mgtMemberOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney);
            }
        }
        // 返回MgtMemberOrderPageVoList
@@ -1974,7 +2189,9 @@
            for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) {
                mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName());
                if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) {
                    mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName());
                    mgtActivityOrderPageVo.setNickName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName());
                    mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getRealName());
                    mgtActivityOrderPageVo.setUserMobile(userMap.get(mgtActivityOrderPageVo.getUserId()).getUserMobile());
                }
                BigDecimal unPaidMoney = mgtActivityOrderPageVo.getReceivableMoney().subtract(mgtActivityOrderPageVo.getPayMoney());
                mgtActivityOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney);
@@ -2098,7 +2315,9 @@
                }
                if (userMap != null && !userMap.isEmpty()) {
                    if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) {
                        mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName());
                        mgtShopOrderPageVo.setNickName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName());
                        mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getRealName());
                        mgtShopOrderPageVo.setUserMobile(userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile());
                    }
                }
                BigDecimal unPaidMoney = mgtShopOrderPageVo.getReceivableMoney().subtract(mgtShopOrderPageVo.getPayMoney());
@@ -2195,8 +2414,15 @@
        mgtOrderDetailVo.setCancelTime(order.getCancelTime());
        mgtOrderDetailVo.setOrderRemark(order.getOrderRemark());
        mgtOrderDetailVo.setShopId(order.getShopId());
        mgtOrderDetailVo.setShopName(shop.getShopName());
        if(shop!=null){
            mgtOrderDetailVo.setShopName(shop.getShopName());
        }else{
            mgtOrderDetailVo.setShopName("商户已被删除");
        }
        mgtOrderDetailVo.setVerifyTime(order.getUseTime());
        //获取支付记录
        List<MgtOrderPayListVo> orderPayListVoList = payRecordService.listMgtOrderPayVo(orderId);
        mgtOrderDetailVo.setOrderPayListVoList(orderPayListVoList);
        return mgtOrderDetailVo;
    }
@@ -2777,11 +3003,15 @@
            throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
        } else if (couponStatus == 2) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        } else if (couponStatus != 0) {
        } else if (couponStatus != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        if (!memberCoupon.getShopId().equals(shopId)) {
        if (memberCoupon.getCouponFrom()==2&&!memberCoupon.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        //如果是平台优惠券
        if(memberCoupon.getCouponFrom()==1&&memberCoupon.getShopId()==null){
            memberCoupon.setShopId(shopId);
        }
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
        Long userId = verifyCouponGetVo.getUserId();
@@ -2941,9 +3171,9 @@
        }
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
        //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
        // 如果订单年龄用户列表不为空
        if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
        /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
            // 定义变量
            Integer ageType;
            List<Long> userIdList;
@@ -2984,12 +3214,23 @@
                    orderTotalValue[i] = 0;
                    orderMoneyValue[i] = BigDecimal.ZERO;
                }
            }*/
            List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList =  orderMapper.listMerOrderDistributionTotal(merTotalDto);
            if(mgtMapTotalPlusVoList!=null&&!mgtMapTotalPlusVoList.isEmpty()) {
                String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
                Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
                BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
                MgtMapTotalPlusVo mgtMapTotalPlusVo;
                for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
                    mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
                    orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                }
                orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
                orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
                orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
            }
            // 设置订单分布总数对象的属性值
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
    }
@@ -3094,22 +3335,28 @@
    }
    /**
     * @param merBaseDto
     * @return MerTotalOrderVo
     * @description 商户端订单管理统计
     * @author jqs
     * @date 2023/7/4 16:27
     * @description  商户端订单管理统计
     * @author  jqs
     * @date    2023/7/31 10:53
     * @param merOrderPageDto
     * @return  MerTotalOrderVo
     */
    @Override
    public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) {
    public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) {
        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);
        if(StringUtils.isNotBlank(merOrderPageDto.getKeyword())){
            MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
            userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
            MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
            if(StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())){
                List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
                merOrderPageDto.setMemberUserIdList(userIdList);
                merOrderPageDto.setMemberUserId(null);
            }
        }
        merTotalOrderVo = orderMapper.totalMerOrder(merOrderPageDto);
        return merTotalOrderVo;
    }
@@ -3366,11 +3613,13 @@
        }
        //生成支付记录
        OrderPayment orderPayment = new OrderPayment();
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(orderId);
        payRecord.setPayMoney(order.getPayMoney());
        payRecord.setPayTime(order.getPayTime());
        payRecord.setPayType(1);
        payRecordService.save(payRecord);
    }
    /**
@@ -3780,15 +4029,71 @@
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        delayTime = delayTime + 5;
        Date checkTime = DateUtils.addMinutes(new Date(),delayTime);
        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());
            for(Order order: orderList){
                autoTimeCancelOrder(order);
            }
        }
    }
    private void autoTimeCancelOrder(Order order){
        String orderId = order.getOrderId();
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        this.saveOrUpdate(order);
        //活动订单回退库存
        if(order.getOrderFrom()==2){
            List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
            if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
                for(OrderGoods orderGoods : orderGoodsList){
                    //redis库存控制极简版
                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try{
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
                    }finally{
                        redissonLock.unlock();
                    }
                    //改变活动库存
                    AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
                    agStockChangeDto.setActivityId(order.getActivityId());
                    agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
                    agStockChangeDto.setChangeType(1);
                    agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
                    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{
            if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){
                //回退优惠券
                List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
                if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) {
                    StringJoiner memberCouponSJ = new StringJoiner(",");
                    for (OrderGoods orderGoods : orderGoodsList) {
                        memberCouponSJ.add(orderGoods.getCouponId());
                    }
                    if(memberCouponSJ!=null){
                        remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
                    }
                }
            }
        }
    }