From 7c9dda6138ceea88a312583a3fcc9b2bb356fbc4 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期六, 05 八月 2023 09:37:54 +0800
Subject: [PATCH] bug和二维码

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  678 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 469 insertions(+), 209 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index b8b2113..d69f88e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -18,18 +18,15 @@
 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.tools.request.ecommerce.profitsharing.ProfitSharingApplyRequest;
-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;
@@ -41,15 +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.core.Config;
-import com.wechat.pay.java.core.RSAConfig;
 import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
-import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
-import com.wechat.pay.java.service.payments.jsapi.model.*;
 import org.redisson.api.RLock;
 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;
@@ -111,7 +105,7 @@
     private RedisService redisService;
 
     @Resource
-    private ProfitsSharingService profitsSharingService;
+    private PayRecordService payRecordService;
 
     @Autowired
     private RedissonClient redissonClient;
@@ -179,7 +173,10 @@
         List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
 
         // 将优惠券列表转换为Map,以优惠券ID为键
-        Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+        Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
+        if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){
+            appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+        }
         AppMemberCouponVo appMemberCouponVo;
         Integer couponType;
         BigDecimal moneyThreshold;
@@ -236,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);
@@ -245,20 +242,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);
                     }
                 }
             }
@@ -266,7 +265,6 @@
             appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
             appSureOrderGoodsVo.setCouponDiscount(discountMoney);
             appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
-            goodsDeposit = goods.getSubscription();
             // 获取商品押金
             goodsDeposit = goods.getSubscription();
             if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
@@ -294,6 +292,8 @@
                 }else{
                     entity.setUseFlag(0);
                 }
+
+
             }
             // 过滤商品优惠券列表
             List<AppMemberCouponVo> appGoodsMemberCouponVoList;
@@ -301,10 +301,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);
                             }
                         }
@@ -411,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());
@@ -466,6 +478,7 @@
      * @return
      */
     @Override
+    @Transactional
     public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
         // 获取用户ID
         Long userId = appPlaceOrderDto.getUserId();
@@ -583,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();
@@ -635,6 +648,8 @@
             orderGoods.setServiceNum(serviceNum);
             orderGoods.setGoodsType(goods.getGoodsType());
             orderGoods.setGoodsName(goods.getGoodsName());
+            orderGoods.setGoodsTag(goods.getGoodsTags());
+            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
             orderGoods.setGoodsPicture(goodsFile.getFileUrl());
             // 保存订单商品
             orderGoodsService.save(orderGoods);
@@ -706,7 +721,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);
@@ -717,7 +732,7 @@
         request.setOutTradeNo(order.getOrderId());
         Payer payer = new Payer();
         payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
-        request.setPayer(payer);
+        request.setPayer(payer);*/
         //返回前端唤醒支付结果信息
         /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
         appPlaceOrderVo.setAppId(this.appId);
@@ -729,7 +744,7 @@
 
 
         //减去优惠券
-        if(memberCouponSJ!=null){
+        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
             remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
         }
         //生成自动取消订单延时任务
@@ -744,80 +759,8 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setPayDeadlineTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
+        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;
     }
 
 
@@ -829,6 +772,7 @@
      * @date 2023/7/6 17:59
      */
     @Override
+    @Transactional
     public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
         Long userId = appPlaceActivityDto.getUserId();
         // 创建订单对象
@@ -888,8 +832,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();
@@ -957,7 +901,9 @@
         orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
         orderGoods.setServiceNum(serviceNum);
         orderGoods.setGoodsType(goods.getGoodsType());
+        orderGoods.setGoodsTag(goods.getGoodsTags());
         orderGoods.setGoodsName(goods.getGoodsName());
+        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
         orderGoods.setGoodsPicture(goodsFile.getFileUrl());
         // 保存订单商品
         orderGoodsService.save(orderGoods);
@@ -998,6 +944,8 @@
         order.setReceivableMoney(orderPayMoney);
         order.setReceivableDeposit(orderPayDeposit);
         order.setChangeReceivableMoney(orderPayMoney);
+        order.setActivityId(activityId);
+        order.setActivityName(activityGoodsGetVo.getActivityName());
         // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
         if (appPlaceActivityDto.getPayType() == 1) {
             order.setPayMoney(orderPayMoney);
@@ -1041,7 +989,7 @@
         agStockChangeDto.setUserId(order.getUserId());
         remoteActivityService.changeActivityStock(agStockChangeDto);
         // 调用支付
-        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);
@@ -1054,14 +1002,14 @@
         // TODO 获取openID
         payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
 
-        request.setPayer(payer);
+        request.setPayer(payer);*/
 
         //设置订单允许分账 秒杀活动才允许分账
-        if(order.getOrderFrom()==2){
+        /*if(order.getOrderFrom()==2){
             SettleInfo settleInfo=new SettleInfo();
             settleInfo.setProfitSharing(true);
             request.setSettleInfo(settleInfo);
-        }
+        }*/
 
 
         //返回前端唤醒支付结果信息
@@ -1074,7 +1022,19 @@
         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)){
@@ -1087,7 +1047,7 @@
         delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
         delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
         remoteConfigService.addDelayTask(delayTask);
-        appPlaceOrderVo.setPayDeadlineTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
+        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
         return appPlaceOrderVo;
     }
 
@@ -1154,6 +1114,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());
@@ -1167,6 +1128,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;
     }
 
@@ -1178,7 +1145,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);
@@ -1258,9 +1227,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;
@@ -1273,6 +1242,7 @@
      * @return
      */
     @Override
+    @Transactional
     public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) {
         String orderId = merVerifyOrderDto.getOrderId();
         BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
@@ -1283,6 +1253,7 @@
         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);
@@ -1293,8 +1264,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);
@@ -1311,28 +1286,59 @@
         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.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
+                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.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
+                    consumerGoods.setCreateTime(nowTime);
+                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
+                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
+                    consumerGoods.setGoodsNurses(goods.getGoodsNurses());
+                    consumerGoods.setSourceFrom(1);
+                    consumerGoodsList.add(consumerGoods);
+                }
+            }
         }
         consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
         //生成返回
@@ -1351,14 +1357,24 @@
         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;
 
     }
@@ -1371,6 +1387,7 @@
      * @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();
@@ -1384,7 +1401,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());
@@ -1442,6 +1459,7 @@
             }
             consumerGoods.setUsedNum(0);
             consumerGoods.setGoodsType(goods.getGoodsType());
+            consumerGoods.setGoodsTag(goods.getGoodsTags());
             consumerGoods.setCreateTime(new Date());
             consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
             goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
@@ -1464,6 +1482,7 @@
      * @return  MerVerifyAwardVo
      */
     @Override
+    @Transactional
     public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
         MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
         MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
@@ -1475,7 +1494,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("平台生日卡");
@@ -1559,7 +1578,7 @@
     @Override
     public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
         List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId());
-        if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
+        /*if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
             BigDecimal zeroBig = new BigDecimal("0.00");
             for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
                 merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney()));
@@ -1567,7 +1586,7 @@
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
             }
-        }
+        }*/
         return merMemberNoClearOrderVoList;
     }
 
@@ -1579,11 +1598,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);
     }
 
     /**
@@ -1595,6 +1626,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();
@@ -1622,6 +1655,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();
@@ -1638,8 +1674,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);
@@ -1700,7 +1734,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();
@@ -1737,7 +1771,9 @@
             orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
             orderGoods.setServiceNum(serviceNum);
             orderGoods.setGoodsType(goods.getGoodsType());
+            orderGoods.setGoodsTag(goods.getGoodsTags());
             orderGoods.setGoodsName(goods.getGoodsName());
+            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
             orderGoods.setGoodsPicture(goodsFile.getFileUrl());
             orderGoodsService.save(orderGoods);
             switch (orderGoods.getGoodsType()) {
@@ -1780,11 +1816,9 @@
         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);
-        order.setPayTime(nowTime);
         order.setUseTime(nowTime);
         order.setUseUserId(merNewOrderDto.getUserId());
         order.setPayMoney(merNewOrderDto.getPayMoney());
@@ -1792,35 +1826,73 @@
         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.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
+                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.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
+                    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) {
             //绑定商户
@@ -1839,6 +1911,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);
     }
 
 
@@ -1848,6 +1928,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;
@@ -1870,7 +1962,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);
                 }
@@ -1881,8 +1973,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;
@@ -1935,6 +2032,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();
@@ -1953,6 +2051,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
@@ -2020,7 +2120,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);
@@ -2060,7 +2162,7 @@
             }
         }
         MgtOrderTotal mgtOrderTotal = new MgtOrderTotal();
-        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst();
+        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(mgtShopOrderPageDto);
         MgtOrderTotal mgtOrderTotalSecond = orderMapper.totalOrderSecond(mgtShopOrderPageDto);
         MgtOrderTotal mgtOrderTotalThird = orderMapper.totalOrderThird(mgtShopOrderPageDto);
         mgtOrderTotal.setOrderTotal(mgtOrderTotalFirst.getOrderTotal());
@@ -2144,7 +2246,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());
@@ -2241,8 +2345,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;
     }
 
@@ -2256,6 +2367,8 @@
     @Override
     public MgtBulletinBoardVo boardOrderTotal() {
         MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal();
+        Integer activityUserTotal = orderMapper.activityUserTotal();
+        mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal);
         return mgtBulletinBoardVo;
     }
 
@@ -2823,17 +2936,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());
@@ -2882,7 +2999,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("平台生日卡");
@@ -2987,9 +3104,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;
@@ -3030,12 +3147,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;
     }
@@ -3140,15 +3268,29 @@
     }
 
     /**
-     * @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();
+        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;
     }
 
     /**
@@ -3217,6 +3359,7 @@
      * @return  void
      */
     @Override
+    @Transactional
     public void autoCancelOrder(String orderId){
         //更新订单信息
         Order order = this.getById(orderId);
@@ -3247,6 +3390,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{
@@ -3271,10 +3421,11 @@
      * @description  订单支付回调
      * @author  jqs
      * @date    2023/7/13 17:57
-     * @param Transaction
+     * @param transaction
      * @return  void
      */
     @Override
+    @Transactional
     public void payBack(Transaction transaction) {
         // 更新订单状态
         String orderId=transaction.getOutTradeNo();
@@ -3367,6 +3518,9 @@
         if (haveGoods) {
             memberTotalChangeDto.setGoodsOrderChange(1);
         }
+        if(order.getOrderFrom()==2){
+            memberTotalChangeDto.setActivityTime(order.getCreateTime());
+        }
         // 更新会员统计信息
         remoteMemberService.changeMemberTotal(memberTotalChangeDto);
         // 如果订单来源于活动,则更新活动统计信息
@@ -3387,19 +3541,21 @@
 
 
             //活动订单进行分账
-            ProfitSharingApplyRequest request=new ProfitSharingApplyRequest();
+            /*ProfitSharingApplyRequest request=new ProfitSharingApplyRequest();
             request.setAppid(this.appId);
             request.setSubMchid("");
             request.setTransactionId(transaction.getTransactionId());
-            profitsSharingService.applyProfitSharing(request);
+            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);
     }
 
     /**
@@ -3410,6 +3566,7 @@
      * @return  void
      */
     @Override
+    @Transactional
     public void refundOrder(String orderId){
         //更新订单信息
         Order order = this.getById(orderId);
@@ -3462,6 +3619,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());
                 }
@@ -3786,4 +3950,100 @@
         }
         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());
+
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * @description  获取商户订单统计
+     * @author  jqs
+     * @date    2023/8/4 10:25
+     * @param mgtShopOrderPageDto
+     * @return  MgtShopAllOrderTotal
+     */
+    @Override
+    public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopOrderPageDto mgtShopOrderPageDto){
+        MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopOrderPageDto);
+        return shopAllOrderTotal;
+    }
 }

--
Gitblit v1.7.1