From 4a9ca8e24317da12e3dd07d93128a5d74c8103b8 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 30 四月 2026 21:20:12 +0800
Subject: [PATCH] 修改bug

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java |  298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 292 insertions(+), 6 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
index e5b5920..99d7190 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -1,12 +1,18 @@
 package com.xiaopeng.operation.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.dto.account.UcUserInfo;
 import com.xiaopeng.api.dto.operation.XpActivityDto;
+import com.xiaopeng.api.feignClient.account.UserResourcesClient;
+import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
+import com.xiaopeng.api.model.account.XpAppUserCoupon;
 import com.xiaopeng.api.model.operation.*;
 import com.xiaopeng.api.query.operation.XpActivityPageListQuery;
+import com.xiaopeng.api.vo.account.AppUserCouponSaveBatchVo;
 import com.xiaopeng.common.core.utils.bean.BeanUtils;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.operation.mapper.XpActicityMapper;
@@ -15,7 +21,10 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -39,13 +48,31 @@
     private IXpActicityUserService userService;
 
     @Resource
-    private IXpActivityNoticeService activityNotice;
-
-    @Resource
     private XpOrderClient xpOrderClient;
 
     @Resource
+    private IXpActicityStrategyService xpActicityStrategyService;
+
+    @Resource
+    private IXpActicityService xpActicityService;
+
+    @Resource
+    private IXpActicityUserService xpActicityUserService;
+
+    @Resource
+    private IXpWhitelistService xpWhitelistService;
+
+    @Resource
     private IXpActicityCouponService xpActicityCouponService;
+
+    @Resource
+    private IXpCouponService xpCouponService;
+
+    @Resource
+    private XpAppUserCouponClient xpAppUserCouponClient;
+
+    @Resource
+    private UserResourcesClient userResourcesClient;
 
 
 
@@ -67,7 +94,7 @@
     }
 
     @Override
-    public XpActivity activiting(Long uid) {
+    public List<XpActivity> activiting(Long uid) {
         //获取当前用户可参与的活动
         List<Integer> actitctiyIds = new ArrayList<>();
         //全部用户
@@ -82,9 +109,9 @@
                 .last("  and JSON_CONTAINS(user_list, '" + uid + "', '$')"));
         actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList()));
 
-        XpActivity one = this.getOne(new QueryWrapper<XpActivity>().eq("status", 2).eq("is_deleted", 0)
+        List<XpActivity> one = this.list(new QueryWrapper<XpActivity>().eq("status", 2).eq("is_deleted", 0)
                 .eq("mini_program_notification", 1).in(!actitctiyIds.isEmpty(), "id", actitctiyIds)
-                .last(" and now() between start_time and end_time order by float_window_priority desc limit 1"));
+                .last(" and now() between start_time and end_time"));
         return one;
     }
 
@@ -126,6 +153,9 @@
             xpActicityUser.setActitcityStrategeId(strategyMap.get(xpActicityUser.getStrategyName()).getId());
             userService.save(xpActicityUser);
         }
+
+        //执行修改活动状态
+        updateStatus();
     }
 
     @Override
@@ -170,4 +200,260 @@
                 .last(" and now() between start_time and end_time order by float_window_priority desc limit 1"));
         return one;
     }
+
+
+    @Override
+    public void updateStatus() {
+        List<XpActivity> list = xpActicityService.list(new QueryWrapper<XpActivity>().in("status", Arrays.asList(1, 2)).eq("is_deleted", 0));
+        for (XpActivity xpActivity : list) {
+            Integer status = xpActivity.getStatus();
+            if(1 == status && LocalDateTime.now().isAfter(xpActivity.getStartTime()) && LocalDateTime.now().isBefore(xpActivity.getEndTime())){
+                xpActivity.setStatus(2);
+                //发放优惠券-发放一次的优惠券
+                List<XpActicityStrategy> list1 = xpActicityStrategyService.list(new QueryWrapper<XpActicityStrategy>().eq("actitcity_id", xpActivity.getId())
+                        .eq("distribution_rules", 2));
+                for (XpActicityStrategy xpActicityStrategy : list1) {
+                    List<XpActicityCoupon> acticityCoupons = xpActicityCouponService.list(new QueryWrapper<XpActicityCoupon>().eq("acticity_strategy_id", xpActicityStrategy.getId()));
+                    List<XpCoupon> xpCoupons = xpCouponService.listByIds(acticityCoupons.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList()));
+                    //总发放数量
+                    Integer distributionsTotal = xpActicityStrategy.getDistributionsTotal();
+                    //没人限量数量
+                    Integer limitNumber = xpActicityStrategy.getLimitNumber();
+                    List<XpActicityUser> list2 = xpActicityUserService.list(new QueryWrapper<XpActicityUser>().eq("actitcity_stratege_id", xpActicityStrategy.getId()));
+                    for (XpActicityUser xpActicityUser : list2) {
+                        Integer userType = xpActicityUser.getUserType();
+                        //全部白名单用户
+                        if(1 == userType){
+                            List<XpWhitelist> list3 = xpWhitelistService.list(new QueryWrapper<XpWhitelist>().eq("is_deleted", 0).eq("status", 1));
+                            List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
+                            for (XpWhitelist xpWhitelist : list3) {
+                                for (XpActicityCoupon acticityCoupon : acticityCoupons) {
+                                    XpCoupon xpCoupon = xpCoupons.stream().filter(s -> s.getId().equals(acticityCoupon.getCouponId())).findFirst().orElse(null);
+                                    if(null != xpCoupon){
+                                        for (Integer i = 0; i < limitNumber; i++) {
+                                            XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon();
+                                            xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount());
+                                            xpAppUserCoupon.setMoney(xpCoupon.getAmount());
+
+                                            Integer expireRules = xpActicityStrategy.getExpireRules();
+                                            //次日0点失效
+                                            if(1 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                LocalDateTime localDateTime = now.plusDays(1);
+                                                LocalDateTime localDateTime1 = localDateTime.withHour(0).withMinute(0).withSecond(0);
+                                                xpAppUserCoupon.setExpirationTime(localDateTime1);
+                                            }
+                                            //指定有效天数
+                                            if(2 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                xpAppUserCoupon.setExpirationTime(now.plusDays(xpActicityStrategy.getExpireDays()));
+                                            }
+                                            //指定日期失效
+                                            if(3 == expireRules){
+                                                String format = xpActicityStrategy.getExpireDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                                                LocalDateTime localDateTime = LocalDateTime.parse(format + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                                                xpAppUserCoupon.setExpirationTime(localDateTime);
+                                            }
+
+                                            xpAppUserCoupon.setCouponId(acticityCoupon.getCouponId());
+                                            xpAppUserCoupon.setAppUserId(xpWhitelist.getAppUserId());
+                                            xpAppUserCoupon.setStatus(1);
+                                            xpAppUserCoupon.setActivityId(xpActivity.getId());
+                                            xpAppUserCoupon.setCouponName(xpCoupon.getCouponName());
+                                            xpAppUserCoupon.setDeleted(false);
+                                            xpAppUserCoupon.setCreateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setUpdateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setPhone(xpWhitelist.getAccount());
+                                            xpAppUserCoupon.setTimeJson(JSON.toJSONString(xpActicityStrategy.getUsagePeriod()));
+                                            xpAppUserCoupons.add(xpAppUserCoupon);
+                                            if(null == distributionsTotal){
+                                                continue;
+                                            }
+                                            distributionsTotal--;
+                                            if(distributionsTotal <= 0){
+                                                break;
+                                            }
+                                        }
+
+                                    }
+                                }
+                                if(null == distributionsTotal){
+                                    continue;
+                                }
+                                if(distributionsTotal <= 0){
+                                    break;
+                                }
+                            }
+                            if(!xpAppUserCoupons.isEmpty()){
+                                AppUserCouponSaveBatchVo vo = new AppUserCouponSaveBatchVo();
+                                vo.setXpAppUserCoupons(xpAppUserCoupons);
+                                xpAppUserCouponClient.saveBatch(vo);
+                            }
+                            if(null == distributionsTotal){
+                                continue;
+                            }
+                            if(distributionsTotal <= 0){
+                                break;
+                            }
+                        }
+                        //老用户
+                        if(2 == userType || 3 == userType || 4 == userType){
+                            List<Long> longList = xpOrderClient.getUserTypeIdList(userType).getData();
+                            List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
+                            for (Long userId : longList) {
+                                UcUserInfo baseUserByUid = userResourcesClient.getBaseUserByUid(userId.toString());
+                                for (XpActicityCoupon acticityCoupon : acticityCoupons) {
+                                    XpCoupon xpCoupon = xpCoupons.stream().filter(s -> s.getId().equals(acticityCoupon.getCouponId())).findFirst().orElse(null);
+                                    if(null != xpCoupon){
+                                        for (Integer i = 0; i < limitNumber; i++) {
+                                            XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon();
+                                            xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount());
+                                            xpAppUserCoupon.setMoney(xpCoupon.getAmount());
+
+                                            Integer expireRules = xpActicityStrategy.getExpireRules();
+                                            //次日0点失效
+                                            if(1 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                LocalDateTime localDateTime = now.plusDays(1);
+                                                LocalDateTime localDateTime1 = localDateTime.withHour(0).withMinute(0).withSecond(0);
+                                                xpAppUserCoupon.setExpirationTime(localDateTime1);
+                                            }
+                                            //指定有效天数
+                                            if(2 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                xpAppUserCoupon.setExpirationTime(now.plusDays(xpActicityStrategy.getExpireDays()));
+                                            }
+                                            //指定日期失效
+                                            if(3 == expireRules){
+                                                String format = xpActicityStrategy.getExpireDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                                                LocalDateTime localDateTime = LocalDateTime.parse(format + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                                                xpAppUserCoupon.setExpirationTime(localDateTime);
+                                            }
+
+                                            xpAppUserCoupon.setCouponId(acticityCoupon.getCouponId());
+                                            xpAppUserCoupon.setAppUserId(userId);
+                                            xpAppUserCoupon.setStatus(1);
+                                            xpAppUserCoupon.setActivityId(xpActivity.getId());
+                                            xpAppUserCoupon.setCouponName(xpCoupon.getCouponName());
+                                            xpAppUserCoupon.setDeleted(false);
+                                            xpAppUserCoupon.setCreateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setUpdateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setPhone(baseUserByUid.getMobile());
+                                            xpAppUserCoupon.setTimeJson(JSON.toJSONString(xpActicityStrategy.getUsagePeriod()));
+                                            xpAppUserCoupons.add(xpAppUserCoupon);
+                                            if(null == distributionsTotal){
+                                                continue;
+                                            }
+                                            distributionsTotal--;
+                                            if(distributionsTotal <= 0){
+                                                break;
+                                            }
+                                        }
+                                    }
+                                    if(null == distributionsTotal){
+                                        continue;
+                                    }
+                                    if(distributionsTotal <= 0){
+                                        break;
+                                    }
+                                }
+                            }
+                            if(!xpAppUserCoupons.isEmpty()){
+                                AppUserCouponSaveBatchVo vo = new AppUserCouponSaveBatchVo();
+                                vo.setXpAppUserCoupons(xpAppUserCoupons);
+                                xpAppUserCouponClient.saveBatch(vo);
+                            }
+                            if(null == distributionsTotal){
+                                continue;
+                            }
+                            if(distributionsTotal <= 0){
+                                break;
+                            }
+                        }
+                        //指定用户
+                        if(5 == userType){
+                            List<Long> userList = xpActicityUser.getUserList();
+                            List<XpAppUserCoupon> xpAppUserCoupons = new ArrayList<>();
+                            for (Long userId : userList) {
+                                UcUserInfo baseUserByUid = userResourcesClient.getBaseUserByUid(userId.toString());
+                                for (XpActicityCoupon acticityCoupon : acticityCoupons) {
+                                    XpCoupon xpCoupon = xpCoupons.stream().filter(s -> s.getId().equals(acticityCoupon.getCouponId())).findFirst().orElse(null);
+                                    if(null != xpCoupon){
+                                        for (Integer i = 0; i < limitNumber; i++) {
+                                            XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon();
+                                            xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount());
+                                            xpAppUserCoupon.setMoney(xpCoupon.getAmount());
+
+                                            Integer expireRules = xpActicityStrategy.getExpireRules();
+                                            //次日0点失效
+                                            if(1 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                LocalDateTime localDateTime = now.plusDays(1);
+                                                LocalDateTime localDateTime1 = localDateTime.withHour(0).withMinute(0).withSecond(0);
+                                                xpAppUserCoupon.setExpirationTime(localDateTime1);
+                                            }
+                                            //指定有效天数
+                                            if(2 == expireRules){
+                                                LocalDateTime now = LocalDateTime.now();
+                                                xpAppUserCoupon.setExpirationTime(now.plusDays(xpActicityStrategy.getExpireDays()));
+                                            }
+                                            //指定日期失效
+                                            if(3 == expireRules){
+                                                String format = xpActicityStrategy.getExpireDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                                                LocalDateTime localDateTime = LocalDateTime.parse(format + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                                                xpAppUserCoupon.setExpirationTime(localDateTime);
+                                            }
+
+                                            xpAppUserCoupon.setCouponId(acticityCoupon.getCouponId());
+                                            xpAppUserCoupon.setAppUserId(userId);
+                                            xpAppUserCoupon.setStatus(1);
+                                            xpAppUserCoupon.setActivityId(xpActivity.getId());
+                                            xpAppUserCoupon.setCouponName(xpCoupon.getCouponName());
+                                            xpAppUserCoupon.setDeleted(false);
+                                            xpAppUserCoupon.setCreateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setUpdateTime(LocalDateTime.now());
+                                            xpAppUserCoupon.setPhone(baseUserByUid.getMobile());
+                                            xpAppUserCoupon.setTimeJson(JSON.toJSONString(xpActicityStrategy.getUsagePeriod()));
+                                            xpAppUserCoupons.add(xpAppUserCoupon);
+                                            if(null == distributionsTotal){
+                                                continue;
+                                            }
+                                            distributionsTotal--;
+                                            if(distributionsTotal <= 0){
+                                                break;
+                                            }
+                                        }
+
+                                    }
+                                    if(null == distributionsTotal){
+                                        continue;
+                                    }
+                                    if(distributionsTotal <= 0){
+                                        break;
+                                    }
+                                }
+
+                                if(null == distributionsTotal){
+                                    continue;
+                                }
+                                if(distributionsTotal <= 0){
+                                    break;
+                                }
+                            }
+                            if(!xpAppUserCoupons.isEmpty()){
+                                AppUserCouponSaveBatchVo vo = new AppUserCouponSaveBatchVo();
+                                vo.setXpAppUserCoupons(xpAppUserCoupons);
+                                xpAppUserCouponClient.saveBatch(vo);
+                            }
+                        }
+                    }
+
+                }
+
+            }else if(2 == status & LocalDateTime.now().isAfter(xpActivity.getEndTime())){
+                xpActivity.setStatus(3);
+            }
+            xpActicityService.updateById(xpActivity);
+        }
+    }
 }

--
Gitblit v1.7.1