bug
jiangqs
2023-08-02 bb58e108a9da48d84b84d30b73c01106dd642550
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -13,24 +13,20 @@
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.ruoyi.order.domain.pojo.account.OrderRefund;
import com.ruoyi.order.domain.pojo.account.PaymentMessage;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.pojo.order.OrderGoods;
import com.ruoyi.order.domain.pojo.order.PayRecord;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.mapper.order.OrderMapper;
import com.ruoyi.order.mapper.order.UserServiceRecordMapper;
import com.ruoyi.order.service.order.ConsumerGoodsService;
import com.ruoyi.order.service.order.OrderGoodsService;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.order.tools.request.pay.combine.CombineTransactionsJsRequest;
import com.ruoyi.order.tools.service.ProfitsSharingService;
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;
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;
@@ -42,12 +38,12 @@
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.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.*;
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;
@@ -57,10 +53,6 @@
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAConfig;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
/**
 * <p>
@@ -110,13 +102,10 @@
    private RemoteActivityService remoteActivityService;
    @Resource
    private UserServiceRecordMapper userServiceRecordMapper;
    @Resource
    private RedisService redisService;
    @Resource
    private ProfitsSharingService profitsSharingService;
    private PayRecordService payRecordService;
    @Autowired
    private RedissonClient redissonClient;
@@ -182,10 +171,12 @@
        merBaseDto.setShopId(appSureOrderDto.getShopId());
        // 获取用户优惠券列表
        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
        // 初始化商品优惠券列表
        List<AppMemberCouponVo> appGoodsMemberCouponVoList;
        // 将优惠券列表转换为Map,以优惠券ID为键
        Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
        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;
@@ -242,8 +233,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);
@@ -251,31 +242,29 @@
                        }
                    } 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);
                    }
                }
            }
            if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){
                appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
            }
            appSureOrderGoodsVo.setUseCoupon(useCoupon);
            appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
            appSureOrderGoodsVo.setCouponDiscount(discountMoney);
            appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
            goodsDeposit = goods.getSubscription();
            // 获取商品押金
            goodsDeposit = goods.getSubscription();
            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
@@ -303,9 +292,30 @@
                }else{
                    entity.setUseFlag(0);
                }
            }
            // 过滤商品优惠券列表
            List<AppMemberCouponVo> appGoodsMemberCouponVoList;
            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
                sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
                appGoodsMemberCouponVoList = new ArrayList<>();
                for(AppMemberCouponVo entity : appMemberCouponVoList){
                    if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){
                        if(entity.getCouponType()==1){
                            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.getCouponType()==3){
                            if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                                appGoodsMemberCouponVoList.add(entity);
                            }
                        }
                    }
                }
                sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
            }
        }
        /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
@@ -405,13 +415,21 @@
        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);
        }
        Goods goods = remoteGoodsService.getGoods(goodsId).getData();
        if(goods.getGoodsStatus()!=1){
            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
        }
        appPanicBuyVo.setActivityId(activityId);
        appPanicBuyVo.setGoodsId(goodsId);
        appPanicBuyVo.setGoodsName(goods.getGoodsName());
        appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction());
@@ -460,6 +478,7 @@
     * @return
     */
    @Override
    @Transactional
    public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
        // 获取用户ID
        Long userId = appPlaceOrderDto.getUserId();
@@ -577,8 +596,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();
@@ -629,6 +648,7 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            // 保存订单商品
            orderGoodsService.save(orderGoods);
@@ -663,19 +683,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());
@@ -699,7 +720,7 @@
        profitsSharingService.combineTransactions(request);*/
       //构建预下单支付对象
        PrepayRequest request = new PrepayRequest();
        /*PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
        request.setAmount(amount);
@@ -708,24 +729,21 @@
        request.setDescription(order.getGoodsInfo());
        request.setNotifyUrl(this.notifyUrl);
        request.setOutTradeNo(order.getOrderId());
        Payer payer = new Payer();        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
        request.setPayer(payer);
        Payer payer = new Payer();
        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
        request.setPayer(payer);*/
        //返回前端唤醒支付结果信息
        PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
        appPlaceOrderVo.setAppId(this.appId);
        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
        appPlaceOrderVo.setNonceStr(res.getNonceStr());
        appPlaceOrderVo.setPackageStr(res.getPackageVal());
        appPlaceOrderVo.setTradeType(res.getSignType());
        appPlaceOrderVo.setPaySign(res.getPaySign());
        appPlaceOrderVo.setPaySign(res.getPaySign());*/
        //减去优惠券
        if(memberCouponSJ!=null){
        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //生成自动取消订单延时任务
@@ -740,79 +758,8 @@
        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;
    }
    /**
     *
     * 功能描述: 预下单,返回支付数据prePayId
     *
     * 构建对象参考
     *     PrepayRequest request = new PrepayRequest();
     *     Amount amount = new Amount();
     *     amount.setTotal(100);
     *     request.setAmount(amount);
     *     request.setAppid("wxa9d9651ae******");
     *     request.setMchid("190000****");
     *     request.setDescription("测试商品标题");
     *     request.setNotifyUrl("https://notify_url");
     *     request.setOutTradeNo("out_trade_no_001");
     *     Payer payer = new Payer();
     *     payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
     *     request.setPayer(payer);
     *
     * @auther: linqingsong
     * @date: 2023/7/22 16:13
     */
    /*public String getPrePayId(PrepayRequest request) {
        Config config =
                new RSAConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(privateKeyPath)
                        .merchantSerialNumber(merchantSerialNumber)
                        .wechatPayCertificatesFromPath(wechatPayCertificatePath)
                        .build();
        JsapiService service = new JsapiService.Builder().config(config).build();
        PrepayResponse response = service.prepay(request);
        return response.getPrepayId();
    }*/
    /**
     *
     * 功能描述: 预下单,并返回前端需要换起支付的字符串
     *
     * 构建对象参考
     *      *     PrepayRequest request = new PrepayRequest();
     *      *     Amount amount = new Amount();
     *      *     amount.setTotal(100);
     *      *     request.setAmount(amount);
     *      *     request.setAppid("wxa9d9651ae******");
     *      *     request.setMchid("190000****");
     *      *     request.setDescription("测试商品标题");
     *      *     request.setNotifyUrl("https://notify_url");
     *      *     request.setOutTradeNo("out_trade_no_001");
     *      *     Payer payer = new Payer();
     *      *     payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
     *      *     request.setPayer(payer);
     *
     *
     * @auther: linqingsong
     * @date: 2023/7/22 16:53
     */
    public PrepayWithRequestPaymentResponse getJsApIResponse(PrepayRequest request){
        Config config =
                new RSAConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(privateKeyPath)
                        .merchantSerialNumber(merchantSerialNumber)
                        .wechatPayCertificatesFromPath(wechatPayCertificatePath)
                        .build();
        JsapiServiceExtension service = new JsapiServiceExtension.Builder().config(config).build();
        PrepayWithRequestPaymentResponse response = service.prepayWithRequestPayment(request);
        return response;
    }
@@ -824,6 +771,7 @@
     * @date 2023/7/6 17:59
     */
    @Override
    @Transactional
    public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
        Long userId = appPlaceActivityDto.getUserId();
        // 创建订单对象
@@ -883,8 +831,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();
@@ -953,6 +901,7 @@
        orderGoods.setServiceNum(serviceNum);
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsName(goods.getGoodsName());
        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
        orderGoods.setGoodsPicture(goodsFile.getFileUrl());
        // 保存订单商品
        orderGoodsService.save(orderGoods);
@@ -993,19 +942,22 @@
        order.setReceivableMoney(orderPayMoney);
        order.setReceivableDeposit(orderPayDeposit);
        order.setChangeReceivableMoney(orderPayMoney);
        order.setPayType(appPlaceActivityDto.getPayType());
        order.setActivityId(activityId);
        order.setActivityName(activityGoodsGetVo.getActivityName());
        // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
        if (order.getPayType() == 1) {
        if (appPlaceActivityDto.getPayType() == 1) {
            order.setPayMoney(orderPayMoney);
            order.setOnlinePayMoney(orderPayMoney);
            appPlaceOrderVo.setPayMoney(orderPayMoney);
            appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
            order.setPayType(1);
            order.setCloseFlag(1);
        } else if (order.getPayType() == 2) {
        } else if (appPlaceActivityDto.getPayType() == 2) {
            order.setPayMoney(orderPayDeposit);
            order.setOnlinePayMoney(orderPayDeposit);
            appPlaceOrderVo.setPayMoney(orderPayDeposit);
            appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
            order.setPayType(2);
            order.setCloseFlag(0);
        }
        // 设置订单备注,商品数量,创建时间
@@ -1035,6 +987,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)){
@@ -1047,6 +1045,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;
    }
@@ -1074,6 +1073,10 @@
                Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                shopMap.put(shopIdLong, shopTemp);
            });
            Integer delayTime = 30;
            if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                shop = shopMap.get(appUserOrderPageVo.getShopId());
                appUserOrderPageVo.setShopName(shop.getShopName());
@@ -1084,6 +1087,7 @@
                    appUserOrderPageVo.setSameShop(0);
                }
                appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime));
            }
        }
        return appUserOrderPageVoList;
@@ -1108,6 +1112,8 @@
        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());
        appUserOrderGetVo.setShopId(order.getShopId());
@@ -1120,6 +1126,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;
    }
@@ -1131,7 +1143,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);
@@ -1211,9 +1225,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;
@@ -1226,6 +1240,7 @@
     * @return
     */
    @Override
    @Transactional
    public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) {
        String orderId = merVerifyOrderDto.getOrderId();
        BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
@@ -1236,14 +1251,23 @@
        if (order.getOrderStatus() != 2) {
            throw new ServiceException(AppErrorConstant.VERIFY_USED);
        }
        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData();
        if(!shopRelUserVo.getShopId().equals(order.getShopId())){
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        order.setOrderStatus(3);
        order.setUseTime(nowTime);
        order.setUseUserId(merVerifyOrderDto.getUserId());
        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);
@@ -1260,28 +1284,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);
        //生成返回
@@ -1300,10 +1353,26 @@
        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();
        }
        //创建支付记录
        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);
        return merVerifyOrderVo;
    }
    /**
@@ -1314,8 +1383,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对象
@@ -1323,7 +1397,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());
@@ -1403,14 +1477,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("平台生日卡");
@@ -1514,11 +1593,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);
    }
    /**
@@ -1530,6 +1621,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();
@@ -1557,6 +1650,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();
@@ -1573,8 +1669,6 @@
        BigDecimal goodsPrice;
        BigDecimal goodsTotalPrice;
        BigDecimal goodsRealPrice;
        Long shopId = merNewOrderDto.getShopId();
        Shop shop = remoteShopService.getShop(shopId).getData();
        MerBaseDto merBaseDto = new MerBaseDto();
        merBaseDto.setUserId(userId);
        merBaseDto.setShopId(shopId);
@@ -1635,7 +1729,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();
@@ -1673,6 +1767,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()) {
@@ -1715,7 +1810,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);
@@ -1726,35 +1820,72 @@
        order.setOnlinePayMoney(new BigDecimal("0.00"));
        order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
        order.setOffPayTime(nowTime);
        order.setCloseFlag(1);
        order.setPayType(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) {
            //绑定商户
@@ -1773,6 +1904,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);
    }
@@ -1782,6 +1921,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;
@@ -1804,7 +1955,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);
                }
@@ -1815,8 +1966,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;
@@ -1869,6 +2025,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();
@@ -1887,6 +2044,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
@@ -1954,7 +2113,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);
@@ -2078,7 +2239,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());
@@ -2175,8 +2338,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;
    }
@@ -2757,17 +2927,21 @@
            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();
        // 调用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());
@@ -2816,7 +2990,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("平台生日卡");
@@ -2921,9 +3095,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;
@@ -2964,12 +3138,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;
    }
@@ -3074,15 +3259,17 @@
    }
    /**
     * @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) {
        return orderMapper.totalMerOrder(merBaseDto.getShopId());
    public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) {
        MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo();
        merTotalOrderVo = orderMapper.totalMerOrder(merOrderPageDto);
        return merTotalOrderVo;
    }
    /**
@@ -3151,6 +3338,7 @@
     * @return  void
     */
    @Override
    @Transactional
    public void autoCancelOrder(String orderId){
        //更新订单信息
        Order order = this.getById(orderId);
@@ -3181,6 +3369,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{
@@ -3205,12 +3400,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());
@@ -3227,6 +3424,8 @@
        Boolean haveGoods = false;
        // 获取订单中的所有商品
        List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
        List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
        GoodsTotalChangeDto goodsTotalChangeDto;
        // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态
        for (OrderGoods orderGoods : orderGoodsList) {
            switch (orderGoods.getGoodsType()) {
@@ -3249,7 +3448,18 @@
                default:
                    break;
            }
            goodsTotalChangeDto = new GoodsTotalChangeDto();
            goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId());
            goodsTotalChangeDto.setChangeType(1);
            goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
            goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId());
            if(bugGoodsNum==null||bugGoodsNum<1){
                goodsTotalChangeDto.setPersonNum(1);
            }
            goodsTotalChangeDtoList.add(goodsTotalChangeDto);
        }
        //更新商品统计
        // 更新商户统计信息
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
@@ -3304,7 +3514,24 @@
            }
            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();
        PayRecord payRecord = new PayRecord();
        payRecord.setDelFlag(0);
        payRecord.setOrderId(orderId);
        payRecord.setPayMoney(order.getPayMoney());
        payRecord.setPayTime(order.getPayTime());
        payRecord.setPayType(1);
        payRecordService.save(payRecord);
    }
    /**
@@ -3315,6 +3542,7 @@
     * @return  void
     */
    @Override
    @Transactional
    public void refundOrder(String orderId){
        //更新订单信息
        Order order = this.getById(orderId);
@@ -3367,6 +3595,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());
                }
@@ -3691,4 +3926,87 @@
        }
        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){
                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());
                    }
                }
            }
        }
    }
}