package com.xiaopeng.operation.utils.task; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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; @Slf4j @Component public class ActivityTask { @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 XpOrderClient xpOrderClient; @Resource private UserResourcesClient userResourcesClient; @Scheduled(cron = "0 0/1 * * * *") public void taskOrder1() { List list = xpActicityService.list(new QueryWrapper().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 list1 = xpActicityStrategyService.list(new QueryWrapper().eq("actitcity_id", xpActivity.getId()) .eq("distribution_rules", 2)); for (XpActicityStrategy xpActicityStrategy : list1) { List acticityCoupons = xpActicityCouponService.list(new QueryWrapper().eq("actitcity_strategy_id", xpActicityStrategy.getId())); List xpCoupons = xpCouponService.listByIds(acticityCoupons.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList())); List list2 = xpActicityUserService.list(new QueryWrapper().eq("actitcity_stratege_id", xpActicityStrategy.getId())); for (XpActicityUser xpActicityUser : list2) { Integer userType = xpActicityUser.getUserType(); //全部白名单用户 if(1 == userType){ List list3 = xpWhitelistService.list(new QueryWrapper().eq("is_deleted", 0).eq("status", 1)); List 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 longList = xpOrderClient.getUserTypeIdList(userType).getData(); List 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 userList = xpActicityUser.getUserList(); List 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); } } /** * 凌晨执行的定时任务 */ @Scheduled(cron = "0 0 0 * * *") public void taskOrder() { pusCoupon(); } /** * 每日发放券的活动 */ public void pusCoupon(){ List activities = xpActicityService.list(new QueryWrapper().eq("status", 2) .eq("is_deleted", 0).last(" and now() between start_time and end_time")); if(activities.isEmpty()){ return; } List activityIds = activities.stream().map(XpActivity::getId).collect(Collectors.toList()); //获取发放人 List xpActicityUsers = xpActicityUserService.list(new QueryWrapper().eq("is_deleted", 0) .in("actitcity_id", activityIds)); List list = xpActicityStrategyService.list(new QueryWrapper() .eq("distribution_rules", 1) .eq("is_deleted", 0) .in("actitcity_id", activityIds)); for (XpActicityStrategy xpActicityStrategy : list) { //发放人 List collect = xpActicityUsers.stream().filter(s -> s.getActitcityStrategeId().equals(xpActicityStrategy.getId())).collect(Collectors.toList()); } } }