puzhibing
2026-04-30 4a9ca8e24317da12e3dd07d93128a5d74c8103b8
修改bug
1个文件已添加
11个文件已修改
580 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpAppUserCouponClientFallbackFactory.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpAppUserCouponClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/AppUserCouponSaveBatchVo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpShiftController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpShiftMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -25,6 +25,7 @@
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.model.operation.XpCoupon;
import com.xiaopeng.api.query.account.XpAppUserCouponPageListQuery;
import com.xiaopeng.api.vo.account.AppUserCouponSaveBatchVo;
import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
import com.xiaopeng.api.vo.account.NavigationCouponPickerVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
@@ -407,12 +408,12 @@
    /**
     * 批量保存数据
     * @param xpAppUserCoupons
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/appUserCoupon/saveBatch")
    public R<?> saveBatch(@RequestParam List<XpAppUserCoupon> xpAppUserCoupons){
        xpAppUserCouponService.saveBatch(xpAppUserCoupons);
    public R<?> saveBatch(@RequestBody AppUserCouponSaveBatchVo vo){
        xpAppUserCouponService.saveBatch(vo.getXpAppUserCoupons());
        return R.ok();
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpAppUserCouponClientFallbackFactory.java
@@ -7,6 +7,7 @@
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.vo.account.AppUserCouponSaveBatchVo;
import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.common.core.domain.R;
@@ -74,7 +75,7 @@
            }
            @Override
            public R<?> saveBatch(List<XpAppUserCoupon> xpAppUserCoupons) {
            public R<?> saveBatch(AppUserCouponSaveBatchVo vo) {
                return R.fail("批量保存数据失败");
            }
        };
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpAppUserCouponClient.java
@@ -4,6 +4,7 @@
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.factory.account.XpAppUserCouponClientFallbackFactory;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.vo.account.AppUserCouponSaveBatchVo;
import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.common.core.domain.R;
@@ -82,9 +83,9 @@
    /**
     * 批量保存数据
     * @param xpAppUserCoupons
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/appUserCoupon/saveBatch")
    R<?> saveBatch(@RequestParam List<XpAppUserCoupon> xpAppUserCoupons);
    R<?> saveBatch(@RequestBody AppUserCouponSaveBatchVo vo);
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityStrategy.java
@@ -59,7 +59,7 @@
    @ApiModelProperty(value = "领取后指定日期生效")
    private LocalDate effectiveDays;
    @ApiModelProperty(value = "生效规则(1=次日0点失效,2=指定有效天数,3=指定日期失效)")
    @ApiModelProperty(value = "失效规则(1=次日0点失效,2=指定有效天数,3=指定日期失效)")
    private Integer expireRules;
    @ApiModelProperty(value = "有效天数")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/AppUserCouponSaveBatchVo.java
New file
@@ -0,0 +1,12 @@
package com.xiaopeng.api.vo.account;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import lombok.Data;
import java.util.List;
@Data
public class AppUserCouponSaveBatchVo {
    List<XpAppUserCoupon> xpAppUserCoupons;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpShiftController.java
@@ -33,6 +33,7 @@
    private IXpShiftService xpShiftService;
    @Autowired
    private TokenService tokenService;
    @ApiOperation(value = "班次管理分页列表", tags = "管理后台-运维执行")
    @PostMapping("/api/v1/shift/pageList")
    public R<PageInfo<XpShift>> pageList(@RequestBody XpShiftQuery query) {
@@ -58,8 +59,6 @@
        xpShiftService.removeById(id);
        return R.ok();
    }
    @ApiOperation(value = "排班考勤-排班计划管理-获取所有班次数据", tags = "管理后台-运维执行")
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1408,7 +1408,8 @@
        XpTask.Reject reject = task.reject(msg);
        rejects.add(reject);
        task.setExcluded(rejects);
        task.setReassignmentStatus(2);
        task.setReassignmentStatus(1);
        task.setStatus(4);
        Set<String> excludedUserIds = rejects.stream().map(XpTask.Reject::getRejectUserId).collect(Collectors.toSet());
        Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
@@ -1428,6 +1429,7 @@
        task.setHandleUserId(handlerUser);
        if(handlerUser == null) {
            task.setStatus(4);
            task.setReassignmentStatus(1);
            noticeAdministrator(task);//TODO 需要通知管理员手动处理,考虑再AliPushUtil 中给管理员发送消息
        }
        updateById(task);
@@ -1476,6 +1478,7 @@
        task.setHandleUserId(handlerUser);
        if(handlerUser == null) {
            task.setStatus(4);
            task.setReassignmentStatus(1);
            noticeAdministrator(task);
        }
        task.setAssigneeTime(LocalDateTime.now());
@@ -1631,6 +1634,7 @@
            task.setEndTime(LocalDateTime.now().plusDays(3));
        }
        task.setReassignmentStatus(2);
        task.setStatus(1);
        task.setAssigneeTime(LocalDateTime.now());
        task.setHandleUserId(handlerUserId.toString());
        task.setVehicleId(null);
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpShiftMapper.xml
@@ -4,7 +4,8 @@
    <select id="pageList" resultType="com.xiaopeng.api.model.maintenance.XpShift">
        select id, shift_name, shift_color, start_time, end_time, is_rest,
       rest_start_time, rest_end_time, create_by, create_time, update_by, update_time, is_deleted
       rest_start_time, rest_end_time, create_by, create_time, update_by, update_time, is_deleted, max_start_time, min_start_time,
               max_end_time, min_end_time, cross_day
        from xp_shift
        where is_deleted = 0
        order by create_time desc
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -99,35 +99,39 @@
    public R<XpActivity> firstEnter(HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        XpActivity activity = service.activiting(Long.valueOf(uid));
        if (activity != null) {
            List<XpAppUserCoupon> couponList = appUserCouponClient.getXpAppUserCoupon(activity.getId()).getData();
            Set<Long> longSet = couponList.stream().map(XpAppUserCoupon::getCouponId).collect(Collectors.toSet());
            if (longSet.isEmpty()) {
                return R.ok();
            }
            List<XpCoupon> xpCoupons1 = xpCouponService.listByIds(longSet);
            List<CouponVo> couponVos = new ArrayList<>();
            for (XpCoupon xpCoupon : xpCoupons1) {
                XpAppUserCoupon xpAppUserCoupon = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).findFirst().get();
                CouponVo vo = new CouponVo();
                vo.setId(xpCoupon.getId());
                vo.setConditionalAmount(xpCoupon.getConditionalAmount());
                vo.setAmount(xpCoupon.getAmount());
                vo.setCouponType(xpCoupon.getCouponType());
                vo.setCouponName(xpCoupon.getCouponName());
                vo.setCouponDesc(xpCoupon.getCouponDescription());
                vo.setEndTime(xpAppUserCoupon.getExpirationTime().toString());
                long count = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).count();
                vo.setQuantity(count);
                couponVos.add(vo);
            }
        List<XpActivity> activityList = service.activiting(Long.valueOf(uid));
        for (XpActivity activity : activityList) {
            Duration duration = Duration.between(LocalDateTime.now(), activity.getEndTime());
            Boolean isFirst = ops.setIfAbsent(CacheConstants.firstEnterActivity(String.valueOf(activity.getId()), uid), "1", duration);
            activity.setIsFirst(isFirst);
            activity.setCoupons(couponVos);
            if(isFirst){
                List<XpAppUserCoupon> couponList = appUserCouponClient.getXpAppUserCoupon(activity.getId()).getData();
                Set<Long> longSet = couponList.stream().map(XpAppUserCoupon::getCouponId).collect(Collectors.toSet());
                if (longSet.isEmpty()) {
                    return R.ok();
                }
                List<XpCoupon> xpCoupons1 = xpCouponService.listByIds(longSet);
                List<CouponVo> couponVos = new ArrayList<>();
                for (XpCoupon xpCoupon : xpCoupons1) {
                    XpAppUserCoupon xpAppUserCoupon = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).findFirst().get();
                    CouponVo vo = new CouponVo();
                    vo.setId(xpCoupon.getId());
                    vo.setConditionalAmount(xpCoupon.getConditionalAmount());
                    vo.setAmount(xpCoupon.getAmount());
                    vo.setCouponType(xpCoupon.getCouponType());
                    vo.setCouponName(xpCoupon.getCouponName());
                    vo.setCouponDesc(xpCoupon.getCouponDescription());
                    vo.setEndTime(xpAppUserCoupon.getExpirationTime().toString());
                    long count = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).count();
                    vo.setQuantity(count);
                    couponVos.add(vo);
                }
                activity.setIsFirst(isFirst);
                activity.setCoupons(couponVos);
                return R.ok(activity);
            }
        }
        return R.ok(activity);
        return R.ok();
    }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityService.java
@@ -22,7 +22,7 @@
    List<String> findListToIds(String acticityName);
    XpActivity activiting(Long uid);
    List<XpActivity> activiting(Long uid);
    void save(XpActivityDto dto);
@@ -35,4 +35,10 @@
     * @return
     */
    XpActivity getFloatActicity(Long uid);
    /**
     * 修改活动状态
     */
    void updateStatus();
}
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);
        }
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java
@@ -56,182 +56,7 @@
    @Scheduled(cron = "0 0/1 * * * *")
    public void taskOrder1() {
        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("actitcity_strategy_id", xpActicityStrategy.getId()));
                    List<XpCoupon> xpCoupons = xpCouponService.listByIds(acticityCoupons.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList()));
                    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){
                                        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(!xpAppUserCoupons.isEmpty()){
                                xpAppUserCouponClient.saveBatch(xpAppUserCoupons);
                            }
                        }
                        //老用户
                        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){
                                        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(!xpAppUserCoupons.isEmpty()){
                                xpAppUserCouponClient.saveBatch(xpAppUserCoupons);
                            }
                        }
                        //指定用户
                        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){
                                        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(!xpAppUserCoupons.isEmpty()){
                                xpAppUserCouponClient.saveBatch(xpAppUserCoupons);
                            }
                        }
                    }
                }
            }else if(2 == status & LocalDateTime.now().isAfter(xpActivity.getEndTime())){
                xpActivity.setStatus(3);
            }
            xpActicityService.updateById(xpActivity);
        }
        xpActicityService.updateStatus();
    }