|
@@ -2,6 +2,7 @@ package com.kym.service.admin.impl;
|
|
|
|
|
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
import com.kym.common.utils.CommUtil;
|
|
import com.kym.common.utils.CommUtil;
|
|
@@ -11,11 +12,16 @@ import com.kym.entity.admin.delay.DelayActivity;
|
|
|
import com.kym.entity.admin.queryParams.ActivityQueryParam;
|
|
import com.kym.entity.admin.queryParams.ActivityQueryParam;
|
|
|
import com.kym.entity.admin.vo.ActivityVo;
|
|
import com.kym.entity.admin.vo.ActivityVo;
|
|
|
import com.kym.entity.common.PageBean;
|
|
import com.kym.entity.common.PageBean;
|
|
|
|
|
+import com.kym.entity.miniapp.User;
|
|
|
|
|
+import com.kym.entity.miniapp.UserCoupon;
|
|
|
import com.kym.entity.miniapp.UserRechargeRights;
|
|
import com.kym.entity.miniapp.UserRechargeRights;
|
|
|
import com.kym.mapper.admin.ActivityMapper;
|
|
import com.kym.mapper.admin.ActivityMapper;
|
|
|
import com.kym.service.admin.*;
|
|
import com.kym.service.admin.*;
|
|
|
import com.kym.service.jobs.DelayService;
|
|
import com.kym.service.jobs.DelayService;
|
|
|
|
|
+import com.kym.service.miniapp.UserCouponService;
|
|
|
import com.kym.service.miniapp.UserRechargeRightsService;
|
|
import com.kym.service.miniapp.UserRechargeRightsService;
|
|
|
|
|
+import com.kym.service.miniapp.UserService;
|
|
|
|
|
+import com.kym.service.queue.producer.CouponMessageProducer;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.context.annotation.Lazy;
|
|
@@ -25,8 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
import java.time.LocalTime;
|
|
|
-import java.util.concurrent.ExecutorService;
|
|
|
|
|
-import java.util.concurrent.Executors;
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import static com.kym.entity.admin.Activity.APPLY_STATION_部分站点;
|
|
import static com.kym.entity.admin.Activity.APPLY_STATION_部分站点;
|
|
|
import static com.kym.entity.admin.Activity.DISCOUNT_TYPE_服务费折扣权益;
|
|
import static com.kym.entity.admin.Activity.DISCOUNT_TYPE_服务费折扣权益;
|
|
@@ -54,9 +61,15 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
|
|
|
private final DelayService<DelayActivity> activityDelayService;
|
|
private final DelayService<DelayActivity> activityDelayService;
|
|
|
private final BannerService bannerService;
|
|
private final BannerService bannerService;
|
|
|
|
|
|
|
|
|
|
+ private final UserService userService;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserCouponService userCouponService;
|
|
|
|
|
+
|
|
|
|
|
+ private final CouponMessageProducer couponMessageProducer;
|
|
|
|
|
+
|
|
|
public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, CouponService couponService,
|
|
public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, CouponService couponService,
|
|
|
UserRechargeRightsService userRechargeRightsService, StationService stationService,
|
|
UserRechargeRightsService userRechargeRightsService, StationService stationService,
|
|
|
- @Lazy DelayService<DelayActivity> activityDelayService, BannerService bannerService) {
|
|
|
|
|
|
|
+ @Lazy DelayService<DelayActivity> activityDelayService, BannerService bannerService, UserService userService, UserCouponService userCouponService, CouponMessageProducer couponMessageProducer) {
|
|
|
this.activityStationService = activityStationService;
|
|
this.activityStationService = activityStationService;
|
|
|
this.rechargeRightsService = rechargeRightsService;
|
|
this.rechargeRightsService = rechargeRightsService;
|
|
|
this.couponService = couponService;
|
|
this.couponService = couponService;
|
|
@@ -64,6 +77,9 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
|
|
|
this.stationService = stationService;
|
|
this.stationService = stationService;
|
|
|
this.activityDelayService = activityDelayService;
|
|
this.activityDelayService = activityDelayService;
|
|
|
this.bannerService = bannerService;
|
|
this.bannerService = bannerService;
|
|
|
|
|
+ this.userService = userService;
|
|
|
|
|
+ this.userCouponService = userCouponService;
|
|
|
|
|
+ this.couponMessageProducer = couponMessageProducer;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -81,7 +97,7 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
|
|
|
activity.setId(IDGenerator.INS().nextId());
|
|
activity.setId(IDGenerator.INS().nextId());
|
|
|
save(activity);
|
|
save(activity);
|
|
|
|
|
|
|
|
- // 新增activityStation
|
|
|
|
|
|
|
+ // 新增activityStation 活动-站点关联
|
|
|
if (activityVo.getApplyStation() == APPLY_STATION_部分站点 && !CommUtil.isEmptyOrNull(activityVo.getStationIds())) {
|
|
if (activityVo.getApplyStation() == APPLY_STATION_部分站点 && !CommUtil.isEmptyOrNull(activityVo.getStationIds())) {
|
|
|
var activityStationList = activityVo.getStationIds().stream().map(stationId -> new ActivityStation().setActivityId(activity.getId()).setStationId(stationId)).toList();
|
|
var activityStationList = activityVo.getStationIds().stream().map(stationId -> new ActivityStation().setActivityId(activity.getId()).setStationId(stationId)).toList();
|
|
|
activityStationService.saveBatch(activityStationList);
|
|
activityStationService.saveBatch(activityStationList);
|
|
@@ -98,11 +114,12 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
|
|
|
|
|
|
|
|
// 新增优惠券活动
|
|
// 新增优惠券活动
|
|
|
if (activityVo.getDiscountType().equals(Activity.DISCOUNT_TYPE_优惠券) && !CommUtil.isEmptyOrNull(activityVo.getCouponList())) {
|
|
if (activityVo.getDiscountType().equals(Activity.DISCOUNT_TYPE_优惠券) && !CommUtil.isEmptyOrNull(activityVo.getCouponList())) {
|
|
|
- var couponList = activityVo.getCouponList().stream().peek(coupon -> {
|
|
|
|
|
|
|
+ List<Coupon> couponList = activityVo.getCouponList().stream().peek(coupon -> {
|
|
|
BeanUtils.copyProperties(activity, coupon, "id");
|
|
BeanUtils.copyProperties(activity, coupon, "id");
|
|
|
coupon.setActivityId(activity.getId());
|
|
coupon.setActivityId(activity.getId());
|
|
|
- }).toList();
|
|
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
couponService.saveBatch(couponList);
|
|
couponService.saveBatch(couponList);
|
|
|
|
|
+ handleUserCoupons(activity, activityVo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 加入活动延迟启停队列
|
|
// 加入活动延迟启停队列
|
|
@@ -111,6 +128,54 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
|
|
|
activityDelayService.addToDelayQueue(new DelayActivity(activity.getId(), activity.getName(), activity.getEndTime(), DelayActivity.TYPE_结束));
|
|
activityDelayService.addToDelayQueue(new DelayActivity(activity.getId(), activity.getName(), activity.getEndTime(), DelayActivity.TYPE_结束));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理优惠券用户绑定
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param activity
|
|
|
|
|
+ * @param activityVo
|
|
|
|
|
+ */
|
|
|
|
|
+ private void handleUserCoupons(Activity activity, ActivityVo activityVo) {
|
|
|
|
|
+ List<UserCoupon> userCouponList = new ArrayList<>();
|
|
|
|
|
+ var couponList = activityVo.getCouponList();
|
|
|
|
|
+
|
|
|
|
|
+ var targetUsersType = activityVo.getTargetUsers();
|
|
|
|
|
+ switch (targetUsersType) {
|
|
|
|
|
+ case Activity.TARGET_USERS_全部用户:
|
|
|
|
|
+ userService.listObjs(new QueryWrapper<User>().lambda().select(User::getId))
|
|
|
|
|
+ .forEach(useId -> couponList.forEach(coupon -> addUserCoupon(userCouponList, coupon, activity.getId(), Long.valueOf(useId.toString()))));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case Activity.TARGET_USERS_指定用户:
|
|
|
|
|
+ activityVo.getTargetUserIds().forEach(useId -> couponList.forEach(coupon -> addUserCoupon(userCouponList, coupon, activity.getId(), useId)));
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ userCouponService.saveBatch(userCouponList);
|
|
|
|
|
+ userCouponList.forEach(couponMessageProducer::sendMessage);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 添加用户优惠券
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param userCouponList
|
|
|
|
|
+ * @param coupon
|
|
|
|
|
+ * @param activityId
|
|
|
|
|
+ * @param userId
|
|
|
|
|
+ */
|
|
|
|
|
+ private void addUserCoupon(List<UserCoupon> userCouponList, Coupon coupon, Long activityId, Long userId) {
|
|
|
|
|
+ var userCoupon = new UserCoupon()
|
|
|
|
|
+ .setCouponId(coupon.getId())
|
|
|
|
|
+ .setActivityId(activityId)
|
|
|
|
|
+ .setUserId(userId)
|
|
|
|
|
+ .setStartTime(coupon.getStartTime())
|
|
|
|
|
+ .setEndTime(coupon.getEndTime())
|
|
|
|
|
+ .setCouponType(coupon.getCouponType())
|
|
|
|
|
+ .setDiscount(coupon.getDiscount())
|
|
|
|
|
+ .setMinServiceMoney(coupon.getMinServiceMoney())
|
|
|
|
|
+ .setAllowStacke(coupon.getAllowStacke())
|
|
|
|
|
+ .setStatus(Coupon.STATUS_有效);
|
|
|
|
|
+ userCouponList.add(userCoupon);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 主活动列表
|
|
* 主活动列表
|
|
|
*
|
|
*
|