From 878ac7cc8e1951bbc7b27619c4e7ece1e3d331ff Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 16 七月 2025 16:41:12 +0800
Subject: [PATCH] 新增加快手团购券核销功能

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java |  475 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 375 insertions(+), 100 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 bc08919..7e10468 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
@@ -17,6 +17,12 @@
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
+import com.kuaishou.locallife.open.api.domain.locallife_order.OpenApiOrderAmountV1;
+import com.kuaishou.locallife.open.api.domain.locallife_order.OpenApiQueryOrderDetailInfoV1;
+import com.kuaishou.locallife.open.api.domain.locallife_trade.SimpleCertificateTimesCard;
+import com.kuaishou.locallife.open.api.domain.locallife_trade.SkuTImesCard;
+import com.kuaishou.locallife.open.api.domain.locallife_trade.VerifyPrepareDataNew;
+import com.kuaishou.locallife.open.api.domain.locallife_trade.VerifyResult;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.enums.UserStatus;
@@ -72,7 +78,6 @@
 import com.ruoyi.system.api.model.QwH5LoginVo;
 import com.ruoyi.system.api.model.QwUserDetailDto;
 import com.ruoyi.system.api.service.*;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.extern.log4j.Log4j2;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -85,6 +90,8 @@
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -1515,6 +1522,7 @@
             delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
         }
         appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
+        appUserOrderGetVo.setCancelType(order.getCancelType());
         return appUserOrderGetVo;
     }
 
@@ -1533,10 +1541,10 @@
             //删除待支付超时取消延时任务
             redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
             remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId);
-            this.autoCancelOrder(orderId);
+            this.autoCancelOrder(orderId, 3);
         } else if (order.getOrderStatus() == 2) {
             // 2.待核销 -> 订单退款
-            this.refundOrder(orderId);
+            this.refundOrder(orderId, 3);
         } else {
             throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
         }
@@ -1691,12 +1699,12 @@
         shopId = merHomeShopTotalVo.getShopId();
         
         //获取今日到店
-        Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
+        List<Integer> todayShop = userServiceRecordService.countShopServicePerson(shopId);
         //获取待处理订单和营业额
         merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
         //获取服务统计
         MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId);
-        merHomeShopTotalVo.setTodayShop(todayShop);
+        merHomeShopTotalVo.setTodayShop(todayShop.size());
         merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp());
         merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp());
         return merHomeShopTotalVo;
@@ -1875,6 +1883,40 @@
         appUserOrderGoodsPageVoList.add(orderGoodsPageVo);
         merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
         merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed());
+        // 返回结果
+        return merVerifyOrderVo;
+    }
+    
+    
+    @Override
+    public MerVerifyOrderVo verifyOrderKuaiShou(String orderId, Long shopId) {
+        VerifyPrepareDataNew data = com.ruoyi.order.util.kuaishou.VerifyUtil.certificatePrepare(redisService, orderId);
+        if (null == data) {
+            throw new ServiceException("查询券信息失败");
+        }
+        List<SimpleCertificateTimesCard> itemList = data.getCertificates();
+        if (null == itemList || itemList.isEmpty()) {
+            throw new ServiceException("查询券信息失败");
+        }
+        SimpleCertificateTimesCard certificatesItem = itemList.get(0);
+        Long expire_time = certificatesItem.getExpire_time();
+        if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){
+            throw new ServiceException("优惠券已过期");
+        }
+        //商品信息
+        SkuTImesCard sku = certificatesItem.getSku();
+        // 创建返回对象
+        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
+        // 设置返回对象的属性值
+        merVerifyOrderVo.setOrderId(orderId);
+        merVerifyOrderVo.setOrderFrom(7);
+        merVerifyOrderVo.setOrderStatus(2);
+        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>();
+        AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo();
+        orderGoodsPageVo.setGoodsName(sku.getTitle());
+        appUserOrderGoodsPageVoList.add(orderGoodsPageVo);
+        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
+        merVerifyOrderVo.setLaveTime(sku.getTimes_count());
         // 返回结果
         return merVerifyOrderVo;
     }
@@ -2324,6 +2366,208 @@
         remoteMemberService.changeMemberTotal(memberTotalChangeDto);
         return merVerifyOrderVo;
     }
+    
+    
+    /**
+     * 核销快手券
+     *
+     * @return
+     */
+    @Override
+    @Transactional
+//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
+    public MerVerifyOrderVo sureVerifyOrderKuaiShou(MerVerifyOrderDto merVerifyOrderDto) {
+        String phone = merVerifyOrderDto.getPhone();
+        String orderId = merVerifyOrderDto.getOrderId();
+        Long shopId = merVerifyOrderDto.getShopId();
+        //获取核销商户
+        Shop shop = remoteShopService.getShop(shopId).getData();
+        VerifyPrepareDataNew data = com.ruoyi.order.util.kuaishou.VerifyUtil.certificatePrepare(redisService, orderId);
+        if (null == data) {
+            throw new ServiceException("查询券信息失败");
+        }
+        List<SimpleCertificateTimesCard> itemList = data.getCertificates();
+        if (null == itemList || itemList.isEmpty()) {
+            throw new ServiceException("查询券信息失败");
+        }
+        SimpleCertificateTimesCard certificatesItem = itemList.get(0);
+        Long expire_time = certificatesItem.getExpire_time();
+        if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){
+            throw new ServiceException("优惠券已过期");
+        }
+        
+        String encryptedCode = certificatesItem.getEncrypted_code();
+        List<VerifyResult> items = com.ruoyi.order.util.kuaishou.VerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getPoiId(), new ArrayList<String>() {{
+            add(encryptedCode);
+        }}, data.getOrder_id());
+        if (null == items || items.isEmpty()) {
+            throw new ServiceException("快手券核销失败");
+        }
+        Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrder_id()));
+        if (null != one) {
+            throw new ServiceException("该快手券不能重复核销");
+        }
+    
+        OpenApiQueryOrderDetailInfoV1 orderDetailInfoV1 = com.ruoyi.order.util.kuaishou.OrderUtil.queryOrderInfo(redisService, data.getOrder_id());
+        //原始金额
+        BigDecimal originAmount = BigDecimal.ZERO;
+        //支付金额
+        BigDecimal payAmount = BigDecimal.ZERO;
+        //优惠金额
+        BigDecimal payDiscountAmount = BigDecimal.ZERO;
+        if (null != orderDetailInfoV1) {
+            OpenApiOrderAmountV1 amountInfo = orderDetailInfoV1.getAmount();
+            originAmount = BigDecimal.valueOf(amountInfo.getTotal_amount());
+            payAmount = BigDecimal.valueOf(amountInfo.getPay_amount());
+            payDiscountAmount = originAmount.subtract(payAmount);
+        }
+        
+        Date nowTime = new Date();
+        Member member = remoteMemberService.getMemberByMobile(phone).getData();
+        //开始添加订单数据
+        Order order = new Order();
+        order.setOrderId(IdUtils.fastSimpleUUID());
+        order.setDelFlag(0);
+        order.setOrderStatus(3);
+        order.setOrderNo(CodeFactoryUtil.getShopOrderNo());
+        order.setOrderFrom(7);
+        order.setShopId(shopId);
+        order.setUserId(member.getUserId());
+        order.setOrderMoney(originAmount);
+        order.setDiscountMoney(payDiscountAmount);
+        order.setReceivableMoney(payAmount);
+        order.setPayType(1);
+        order.setPayMoney(payAmount);
+        order.setOnlinePayMoney(payAmount);
+        order.setOrderRemark("快手订单");
+        order.setCreateTime(nowTime);
+        order.setPayTime(nowTime);
+        order.setTripartiteOrderId(data.getOrder_id());
+        
+        //绑定用户判断核销商户
+        if (member.getBindingFlag() == 1) {
+            if (!member.getRelationShopId().equals(shopId)) {
+                throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
+            }
+        }
+        order.setUseTime(nowTime);
+        order.setUseUserId(merVerifyOrderDto.getUserId());
+        order.setCloseFlag(1);
+        this.save(order);
+        //创建服务商品
+        //获取商品信息(商品简介,调理问题)
+        //商品信息
+        SkuTImesCard sku = certificatesItem.getSku();
+        
+        OrderGoods orderGoods = new OrderGoods();
+        orderGoods.setOrderGoodsId(IdUtils.simpleUUID());
+        orderGoods.setDelFlag(0);
+        orderGoods.setOrderId(order.getOrderId());
+        orderGoods.setGoodsId(sku.getSku_id());
+        orderGoods.setBuyNum(sku.getTimes_count());
+        orderGoods.setCycleNumFlag(1);
+        orderGoods.setServiceNum(sku.getTimes_count());
+        orderGoods.setGoodsType(2);
+        orderGoods.setGoodsName(sku.getTitle());
+        orderGoodsService.save(orderGoods);
+        
+        ConsumerGoods consumerGoods = new ConsumerGoods();
+        consumerGoods.setConsumerGoodsId(IdUtils.simpleUUID());
+        consumerGoods.setDelFlag(0);
+        consumerGoods.setServiceStatus(1);
+        consumerGoods.setShopId(order.getShopId());
+        consumerGoods.setUserId(order.getUserId());
+        consumerGoods.setOrderId(orderId);
+        consumerGoods.setGoodsId(sku.getSku_id());
+        consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId());
+        consumerGoods.setGoodsName(sku.getTitle());
+        consumerGoods.setCycleNumFlag(1);
+        consumerGoods.setServiceNum(sku.getTimes_count());
+        consumerGoods.setCreateTime(nowTime);
+        consumerGoods.setGoodsType(2);
+        consumerGoods.setSourceFrom(1);
+        consumerGoodsService.save(consumerGoods);
+        //生成返回
+        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
+        merVerifyOrderVo.setOrderId(orderId);
+        merVerifyOrderVo.setOrderNo(order.getOrderNo());
+        merVerifyOrderVo.setOrderStatus(order.getOrderStatus());
+        merVerifyOrderVo.setOrderFrom(order.getOrderFrom());
+        merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
+        merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
+        merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
+        merVerifyOrderVo.setPayMoney(order.getPayMoney());
+        merVerifyOrderVo.setOrderRemark(order.getOrderRemark());
+        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(new ArrayList<AppUserOrderGoodsPageVo>() {{
+            add(new AppUserOrderGoodsPageVo() {{
+                setOrderGoodsId(orderGoods.getOrderGoodsId());
+                setGoodsName(orderGoods.getGoodsName());
+                setGoodsType(orderGoods.getGoodsType());
+                setBuyNum(orderGoods.getBuyNum());
+            }});
+        }});
+        merVerifyOrderVo.setCreateTime(order.getCreateTime());
+        merVerifyOrderVo.setPayTime(order.getPayTime());
+        merVerifyOrderVo.setUseTime(order.getUseTime());
+        merVerifyOrderVo.setPayType(order.getPayType());
+        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
+        //根据支付方式返回应收金额和已收金额
+        if (order.getPayType() == 1) {
+            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney()));
+            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
+        } else {
+            merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit()));
+            if (order.getOfflinePayMoney() != null) {
+                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
+            } else {
+                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
+            }
+        }
+        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney()));
+        merVerifyOrderVo.setUserId(order.getUserId());
+        merVerifyOrderVo.setUserName(member.getRealName());
+        merVerifyOrderVo.setUserMobile(member.getMobile());
+        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
+        //判断用户是否绑定  2023-09-05需求改变核销时绑定用户
+        if (member.getBindingFlag() != 1) {
+            //绑定商户
+            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
+            appMemberBindingDto.setShopId(order.getShopId());
+            appMemberBindingDto.setUserId(order.getUserId());
+            appMemberBindingDto.setBindingFlag(1);
+            if (order.getOrderFrom() == 1) {
+                appMemberBindingDto.setBindingType(1);
+            } else if (order.getOrderFrom() == 2) {
+                appMemberBindingDto.setBindingType(2);
+            }
+            remoteMemberService.updateMemberBinding(appMemberBindingDto);
+            order.setNewMemberFlag(1);
+        } else {
+            order.setNewMemberFlag(0);
+        }
+        this.saveOrUpdate(order);
+        //更新用户积分和消费统计
+        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
+        memberTotalChangeDto.setUserId(order.getUserId());
+        // 如果存在积分兑换比例,则计算积分
+        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
+            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
+            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
+            BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0, BigDecimal.ROUND_HALF_UP);
+            Integer integral = Integer.valueOf(integralBig.toString());
+            if (integral > 0) {
+                memberTotalChangeDto.setChangeIntegral(integral);
+                memberTotalChangeDto.setTypeIntegral(1);
+                memberTotalChangeDto.setOrderId(orderId);
+                memberTotalChangeDto.setOrderNo(order.getOrderNo());
+            }
+        }
+        //更新消费时间
+        memberTotalChangeDto.setConsumeTime(nowTime);
+        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
+        return merVerifyOrderVo;
+    }
+    
     
     
     /**
@@ -3256,7 +3500,7 @@
             Long userId;
             Member member;
             Integer orderFrom;
-            String orderFromDesc;
+            String orderFromDesc = "";
             BigDecimal zeroBig = new BigDecimal("0.00");
             StringJoiner userIdSj = new StringJoiner(",");
             // 遍历订单列表
@@ -3270,8 +3514,16 @@
                         orderFromDesc = "商城订单";
                     } else if (orderFrom == 2) {
                         orderFromDesc = "平台秒杀活动(" + merOrderPageVo.getActivityName() + ")";
-                    } else {
+                    } else if(orderFrom == 3) {
                         orderFromDesc = "线下创建";
+                    }else if(orderFrom == 4) {
+                        orderFromDesc = "抽奖";
+                    }else if(orderFrom == 5) {
+                        orderFromDesc = "美团";
+                    }else if(orderFrom == 6) {
+                        orderFromDesc = "抖音";
+                    }else if(orderFrom == 7) {
+                        orderFromDesc = "快手";
                     }
                 } else {
                     orderFromDesc = "商城订单";
@@ -4387,6 +4639,12 @@
         mgtTotalOrderTotalVo.setExperienceTotal(0);
         mgtTotalOrderTotalVo.setServiceTotal(0);
         mgtTotalOrderTotalVo.setItemTotal(0);
+        mgtTotalOrderTotalVo.setMeituan(0);
+        mgtTotalOrderTotalVo.setDouyin(0);
+        mgtTotalOrderTotalVo.setKuaishou(0);
+        mgtTotalOrderTotalVo.setMeituanAmount(new BigDecimal("0"));
+        mgtTotalOrderTotalVo.setDouyinAmount(new BigDecimal("0"));
+        mgtTotalOrderTotalVo.setKuaishouAmount(new BigDecimal("0"));
         mgtTotalOrderTotalVo.setOrderMoney(new BigDecimal("0"));
         mgtTotalOrderTotalVo.setOnlineMoney(new BigDecimal("0"));
         mgtTotalOrderTotalVo.setOfflineMoney(new BigDecimal("0"));
@@ -4424,6 +4682,12 @@
         mgtTotalOrderTotalVo.setOnlineMoney(totalOrderTotalVo.getOnlineMoney());
         mgtTotalOrderTotalVo.setOfflineMoney(totalOrderTotalVo.getOfflineMoney());
         mgtTotalOrderTotalVo.setActivityMoney(totalOrderTotalVo.getActivityMoney());
+        mgtTotalOrderTotalVo.setMeituan(totalOrderTotalVo.getMeituan());
+        mgtTotalOrderTotalVo.setDouyin(totalOrderTotalVo.getDouyin());
+        mgtTotalOrderTotalVo.setKuaishou(totalOrderTotalVo.getKuaishou());
+        mgtTotalOrderTotalVo.setMeituanAmount(totalOrderTotalVo.getMeituanAmount());
+        mgtTotalOrderTotalVo.setDouyinAmount(totalOrderTotalVo.getDouyinAmount());
+        mgtTotalOrderTotalVo.setKuaishouAmount(totalOrderTotalVo.getKuaishouAmount());
         //获取商品分类销售数据
         List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
         List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
@@ -5564,11 +5828,12 @@
     @Override
     @Transactional
 //    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
-    public void autoCancelOrder(String orderId) {
+    public void autoCancelOrder(String orderId, Integer cancelType) {
         //更新订单信息
         Order order = this.getById(orderId);
         order.setOrderStatus(0);
         order.setCancelTime(new Date());
+        order.setCancelType(cancelType);
         this.saveOrUpdate(order);
         //活动订单回退库存
         if (order.getOrderFrom() == 2) {
@@ -5780,11 +6045,12 @@
     @Override
     @Transactional
 //    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
-    public void refundOrder(String orderId) {
+    public void refundOrder(String orderId, Integer cancelType) {
         // 更新订单信息
         Order order = this.getById(orderId);
         order.setOrderStatus(0);
         order.setCancelTime(new Date());
+        order.setCancelType(cancelType);
         this.saveOrUpdate(order);
         OrderRefund orderRefund = new OrderRefund();
         String refundId = IdUtils.simpleUUID();
@@ -6523,64 +6789,39 @@
         }
     }
 
-//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
-    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());
-                        if(null == surpNum){
-                            surpNum = 0;
-                        }
-                        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());
-
-                    }
-                }
-            }
+    /**
+     * 后台取消订单
+     * 订单状态变为已取消 不退款
+     * @param dto
+     */
+    @Override
+    public R cancelOrderBySys(CancelOrderDTO dto) {
+        Order order = this.getById(dto.getOrderId());
+        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
+        if(null == order || order.getDelFlag() == -1){
+            return R.fail("订单不存在");
         }
+
+        if (order.getOrderStatus() == 0) {
+            return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER);
+        } else if (order.getOrderStatus() == 1) {
+            //删除待支付超时取消延时任务
+            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
+            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+order.getOrderId());
+            order.setOrderStatus(0);
+            order.setCancelTime(new Date());
+            order.setCancelType(1);
+            this.saveOrUpdate(order);
+        } else if (order.getOrderStatus() == 2) {
+            // 2.待核销
+            order.setOrderStatus(0);
+            order.setCancelTime(new Date());
+            order.setCancelType(1);
+            this.saveOrUpdate(order);
+        } else {
+            return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER);
+        }
+        return R.ok();
     }
 
     /**
@@ -6721,38 +6962,6 @@
         }
         return new ArrayList<>();
     }
-    /**
-     * 后台取消订单
-     * 订单状态变为已取消 不退款
-     * @param dto
-     */
-    @Override
-    public R cancelOrderBySys(CancelOrderDTO dto) {
-        Order order = this.getById(dto.getOrderId());
-        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
-        if(null == order || order.getDelFlag() == -1){
-            return R.fail("订单不存在");
-        }
-
-        if (order.getOrderStatus() == 0) {
-            return R.fail(AppErrorConstant.CANCEL_CANCEL_ORDER);
-        } else if (order.getOrderStatus() == 1) {
-            //删除待支付超时取消延时任务
-            redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
-            remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+order.getOrderId());
-            order.setOrderStatus(0);
-            order.setCancelTime(new Date());
-            this.saveOrUpdate(order);
-        } else if (order.getOrderStatus() == 2) {
-            // 2.待核销
-            order.setOrderStatus(0);
-            order.setCancelTime(new Date());
-            this.saveOrUpdate(order);
-        } else {
-            return R.fail(AppErrorConstant.CANCEL_ERROR_ORDER);
-        }
-        return R.ok();
-    }
 
     @Override
     public R refundOrderBySys(CancelOrderDTO dto) {
@@ -6767,15 +6976,76 @@
             //删除待支付超时取消延时任务
             redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
             remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+ order.getOrderId());
-            this.autoCancelOrder( order.getOrderId());
+            this.autoCancelOrder( order.getOrderId(), 1);
         } else if (order.getOrderStatus() == 2) {
             // 2.待核销 -> 订单退款
-            this.refundOrder( order.getOrderId());
+            this.refundOrder( order.getOrderId(), 1);
         } else {
             return R.fail("已核销订单不能退款");
         }
         return R.ok();
 
+    }
+
+//    @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解
+    private void autoTimeCancelOrder(Order order) {
+        String orderId = order.getOrderId();
+        order.setOrderStatus(0);
+        order.setCancelTime(new Date());
+        order.setCancelType(1);
+        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());
+                        if(null == surpNum){
+                            surpNum = 0;
+                        }
+                        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());
+
+                    }
+                }
+            }
+        }
     }
 
     @Override
@@ -6881,4 +7151,9 @@
          vo = orderMapper.getPlTotalThirdOrderStatics(mgtBasePlatformDto);
         return vo;
     }
+
+    @Override
+    public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) {
+        return orderGoodsService.getGoodsSellStatic(goodsIdList);
+    }
 }

--
Gitblit v1.7.1