From 1ee6637e101e539b7e327c779087d81de9d8b129 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 30 四月 2026 17:33:14 +0800
Subject: [PATCH] 开发优惠券发放逻辑
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 212 insertions(+), 6 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java
index f1ed16a..2b52750 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/task/ActivityTask.java
@@ -1,18 +1,24 @@
package com.xiaopeng.operation.utils.task;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.xiaopeng.api.model.operation.XpActicityStrategy;
-import com.xiaopeng.api.model.operation.XpActicityUser;
-import com.xiaopeng.api.model.operation.XpActivity;
-import com.xiaopeng.operation.service.IXpActicityService;
-import com.xiaopeng.operation.service.IXpActicityStrategyService;
-import com.xiaopeng.operation.service.IXpActicityUserService;
+import com.xiaopeng.api.dto.account.UcUserInfo;
+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.operation.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
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.stream.Collectors;
@@ -29,6 +35,206 @@
@Resource
private IXpActicityUserService xpActicityUserService;
+ @Resource
+ private IXpWhitelistService xpWhitelistService;
+
+ @Resource
+ private IXpActicityCouponService xpActicityCouponService;
+
+ @Resource
+ private IXpCouponService xpCouponService;
+
+ @Resource
+ private XpAppUserCouponClient xpAppUserCouponClient;
+
+ @Resource
+ private XpOrderClient xpOrderClient;
+
+ @Resource
+ private UserResourcesClient userResourcesClient;
+
+
+ @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);
+ }
+ }
+
+
--
Gitblit v1.7.1