package com.xiaopeng.operation.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.dto.account.UcUserInfo; import com.xiaopeng.api.dto.operation.SmsDto; 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.operation.SmsClient; import com.xiaopeng.api.feignClient.operation.XpCouponClient; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.feignClient.pushMessage.SubscribeMessageClient; 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.api.vo.operation.SmsVo; import com.xiaopeng.api.vo.pushMessage.SendCouponMessageVo; import com.xiaopeng.api.vo.pushMessage.SendSubscribeMessageVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.MessageTemplateEnum; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.mapper.XpActicityMapper; import com.xiaopeng.operation.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; /** *

* 活动管理 服务实现类 *

* * @author mitao * @since 2026-02-03 */ @Slf4j @Service public class XpActicityServiceImpl extends ServiceImpl implements IXpActicityService { @Resource private IXpActicityStrategyService strategyService; @Resource private IXpActicityUserService userService; @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; @Resource private SubscribeMessageClient subscribeMessageClient; @Resource private XpCouponClient xpCouponClient; @Resource private SmsClient smsClient; @Value("${sms.appid:1476153389173952512}") private String sms_appid; private static final ThreadPoolExecutor RETRY_EXECUTOR = new ThreadPoolExecutor( 4, 16, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(512), new ThreadFactory() { private final AtomicInteger counter = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, "route-push-retry-" + counter.incrementAndGet()); t.setDaemon(true); return t; } }, new ThreadPoolExecutor.CallerRunsPolicy() ); @Override public PageInfo pageList(XpActivityPageListQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize()); List list = this.baseMapper.pageList(pageInfo,query); pageInfo.setRecords(list); return pageInfo; } @Override public List findListToIds(String acticityName){ LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.select(XpActivity::getId); query.eq(XpActivity::getDeleted, 0); query.like(XpActivity::getActicityName, acticityName); return listObjs(query, Object::toString); } @Override public List activiting(Long uid) { //获取当前用户可参与的活动 List actitctiyIds = new ArrayList<>(); //全部用户 List list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", 1)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //判断用户类型 2=老用户,3=新用户,4=流失用户 Integer userType = xpOrderClient.determineUserType(uid).getData(); list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", userType)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //指定用户 list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", 5) .last(" and JSON_CONTAINS(user_list, '" + uid + "', '$')")); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); List one = this.list(new QueryWrapper().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")); return one; } @Override public void save(XpActivityDto dto) { XpActivity activity = new XpActivity(); BeanUtils.copyBeanProp(activity, dto); activity.setActicityType(dto.getActivityType()); activity.setAggregateLimit(dto.getEnableTotalLimit() ? 1 : 0); activity.setLimitation(dto.getTotalLimit()); activity.setCoverImage(dto.getImg()); activity.setRemarks(dto.getRichText()); save(activity); List strategy = dto.getStrategy(); List activityUser = dto.getActivityUser(); for (XpActicityStrategy xpActicityStrategy : strategy) { xpActicityStrategy.setActitcityId(activity.getId().intValue()); xpActicityStrategy.setDeleted(false); strategyService.save(xpActicityStrategy); List couponIds = xpActicityStrategy.getCouponIds(); for (Long couponId : couponIds) { XpActicityCoupon xpActicityCoupon = new XpActicityCoupon(); xpActicityCoupon.setActicityStrategyId(xpActicityStrategy.getId().longValue()); xpActicityCoupon.setCouponId(couponId); xpActicityCoupon.setActivityId(activity.getId()); xpActicityCouponService.save(xpActicityCoupon); } } Map strategyMap = strategy.stream().collect(Collectors.toMap( XpActicityStrategy::getName, Function.identity() )); for (XpActicityUser xpActicityUser : activityUser) { xpActicityUser.setActitcityId(activity.getId().intValue()); xpActicityUser.setActitcityStrategeId(strategyMap.get(xpActicityUser.getStrategyName()).getId()); userService.save(xpActicityUser); } //执行修改活动状态 updateStatus(activity.getId()); } @Override public XpActivityDto detail(Long id) { XpActivity byId = getById(id); XpActivityDto ret = new XpActivityDto(); BeanUtils.copyBeanProp(ret, byId); ret.setActicityType(byId.getActicityType()); ret.setEnableTotalLimit(byId.getAggregateLimit() == 1); ret.setTotalLimit(byId.getLimitation()); ret.setImg(byId.getCoverImage()); ret.setRichText(byId.getRemarks()); ret.setStrategy(strategyService.listByActicityId(id)); ret.setActivityUser(userService.listByActicityId(id)); return ret; } /** * 获取悬浮弹窗活动数据 * @param uid * @return */ @Override public XpActivity getFloatActicity(Long uid) { //获取当前用户可参与的活动 List actitctiyIds = new ArrayList<>(); //全部用户 List list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", 1)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //判断用户类型 2=老用户,3=新用户,4=流失用户 Integer userType = xpOrderClient.determineUserType(uid).getData(); list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", userType)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //指定用户 list = userService.list(new QueryWrapper().eq("is_deleted", 0).eq("user_type", 5) .last(" and JSON_CONTAINS(user_list, '" + uid + "', '$')")); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); XpActivity one = this.getOne(new QueryWrapper().eq("status", 2).eq("is_deleted", 0) .eq("enable_float_window", 1).in(!actitctiyIds.isEmpty(), "id", actitctiyIds) .last(" and now() between start_time and end_time order by float_window_priority desc limit 1")); return one; } public void updateStatus(Long activityId) { XpActivity xpActivity = xpActicityService.getById(activityId); Integer status = xpActivity.getStatus(); //即将开始的活动推送socket给前端用户 if(1 == status && LocalDateTime.now().isBefore(xpActivity.getStartTime())){ } //即将结束的活动推送给前端用户 //生效的活动修改状态和发放一次优惠券 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) { pushCoupon(xpActivity, xpActicityStrategy); } } xpActicityService.updateById(xpActivity); } @Override public void updateStatus() { 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) { pushCoupon(xpActivity, xpActicityStrategy); } } //到期的活动修改状态为已结束 if(2 == status & LocalDateTime.now().isAfter(xpActivity.getEndTime())){ xpActivity.setStatus(3); } xpActicityService.updateById(xpActivity); } } /** * 发放优惠券 * @param xpActivity * @param xpActicityStrategy */ public void pushCoupon(XpActivity xpActivity, XpActicityStrategy xpActicityStrategy){ log.info("发放优惠券:{}", JSON.toJSONString(xpActivity)); List acticityCoupons = xpActicityCouponService.list(new QueryWrapper().eq("acticity_strategy_id", xpActicityStrategy.getId())); List xpCoupons = xpCouponService.listByIds(acticityCoupons.stream().map(XpActicityCoupon::getCouponId).collect(Collectors.toList())); //总发放数量 Integer distributionsTotal = xpActicityStrategy.getDistributionsTotal(); //没人限量数量 Integer limitNumber = xpActicityStrategy.getLimitNumber(); List list2 = xpActicityUserService.list(new QueryWrapper().eq("actitcity_stratege_id", xpActicityStrategy.getId())); for (XpActicityUser xpActicityUser : list2) { Integer userType = xpActicityUser.getUserType(); //全部白名单用户 if(1 == userType){ log.info("全部白名单用户发送"); 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){ for (Integer i = 0; i < limitNumber; i++) { XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon(); xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount()); xpAppUserCoupon.setMoney(xpCoupon.getAmount()); Integer effectiveRules = xpActicityStrategy.getEffectiveRules(); // 领取后生效 if(1 == effectiveRules){ xpAppUserCoupon.setEffectiveTime(LocalDateTime.now()); } // 指定日期生效 if(2 == effectiveRules){ String format = xpActicityStrategy.getEffectiveDays().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); xpAppUserCoupon.setEffectiveTime(LocalDateTime.parse(format + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } 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); //发送到账提醒消息 pushMessage(xpActivity, xpAppUserCoupons); } if(null == distributionsTotal){ continue; } if(distributionsTotal <= 0){ break; } } //老用户 if(2 == userType || 3 == userType || 4 == userType){ List longList = xpOrderClient.getUserTypeIdList(userType).getData(); log.info("特定用户群体发送 {}", JSON.toJSONString(longList)); 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){ 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); //发送到账提醒消息 pushMessage(xpActivity, xpAppUserCoupons); } if(null == distributionsTotal){ continue; } if(distributionsTotal <= 0){ break; } } //指定用户 if(5 == userType){ List userList = xpActicityUser.getUserList(); log.info("指定用户发送 {}", JSON.toJSONString(userList)); List xpAppUserCoupons = new ArrayList<>(); for (Integer userId : userList) { XpWhitelist xpWhitelist = xpWhitelistService.getById(userId); if(null == xpWhitelist){ continue; } 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(null == distributionsTotal){ continue; } if(distributionsTotal <= 0){ break; } } if(!xpAppUserCoupons.isEmpty()){ AppUserCouponSaveBatchVo vo = new AppUserCouponSaveBatchVo(); vo.setXpAppUserCoupons(xpAppUserCoupons); xpAppUserCouponClient.saveBatch(vo); //发送到账提醒消息 pushMessage(xpActivity, xpAppUserCoupons); } } } } /** * 推送提醒消息 * @param xpActivity * @param list */ private void pushMessage(XpActivity xpActivity, List list) { pushWxCouponMessage(xpActivity, list); pushSmsCouponMessage(xpActivity, list); } /** * 微信通知 */ private void pushWxCouponMessage(XpActivity xpActivity, List list) { log.info("开始执行优惠券到账微信提醒消息发送 {}", JSON.toJSONString(xpActivity)); //微信通知活动开始提醒(0=否,1=是) Integer wechatReceivedReminder = xpActivity.getWechatReceivedReminder(); if(null != wechatReceivedReminder && 1 == wechatReceivedReminder){ RETRY_EXECUTOR.execute(() -> { for (XpAppUserCoupon xpAppUserCoupon : list) { XpCoupon coupon = xpCouponClient.getCouponById(xpAppUserCoupon.getCouponId()).getData(); SendSubscribeMessageVo vo = new SendSubscribeMessageVo(); vo.setUserId(xpAppUserCoupon.getAppUserId()); vo.setTemplateId(MessageTemplateEnum.C.getTemplateId()); String json = MessageTemplateEnum.C.getRemarks(); json = json.replace("活动名称", xpAppUserCoupon.getCouponName()); json = json.replace("温馨提示", coupon.getCouponDescription()); vo.setJson(json); R r = subscribeMessageClient.sendSubscribeMessage(vo); } }); } } /** * 短信通知 * @param xpActivity */ private void pushSmsCouponMessage(XpActivity xpActivity, List list) { log.info("开始执行优惠券短信提醒消息发送 {}", JSON.toJSONString(xpActivity)); Integer now = Integer.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HHmm"))); if(StringUtils.hasLength(xpActivity.getSmsStartBlockingTime())){ String[] smsStartBlockingTime = xpActivity.getSmsStartBlockingTime().split(","); String[] smsEndBlockingTime = xpActivity.getSmsEndBlockingTime().split(","); for (int i = 0; i < smsStartBlockingTime.length; i++) { Integer start = Integer.valueOf(smsStartBlockingTime[i].replace(":", "")); Integer end = Integer.valueOf(smsEndBlockingTime[i].replace(":", "")); if(start <= now && now <= end){ log.info("当前时间在短信发送时间区间内,不发送短信"); return; } } } //短信通知到账提醒(0=否,1=是) Integer smsReceivedReminder = xpActivity.getSmsReceivedReminder(); if(null != smsReceivedReminder && 1 == smsReceivedReminder){ RETRY_EXECUTOR.execute(() -> { for (XpAppUserCoupon xpAppUserCoupon : list) { UcUserInfo ucUserInfo = userResourcesClient.getBaseUserByUid(xpAppUserCoupon.getAppUserId().toString()); if(null == ucUserInfo || !StringUtils.hasLength(ucUserInfo.getMobile())){ log.info("用户信息不存在,跳过"); continue; } XpCoupon coupon = xpCouponClient.getCouponById(xpAppUserCoupon.getCouponId()).getData(); SmsVo vo = new SmsVo(); vo.setAppId(sms_appid); vo.setPushType(1); vo.setReceivers(ucUserInfo.getMobile()); vo.setTemplateCode("RTActivityStartTpl"); vo.setAppPushConfigCode("RTActivityStartSms"); vo.setParams(new HashMap<>()); vo.getParams().put("name", xpAppUserCoupon.getCouponName()); SmsDto smsDto = smsClient.pushSms(vo); if(null == smsDto || smsDto.getCode() != 200){ log.info("短信发送失败"); } } }); } } }