|
@@ -83,17 +83,20 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
@Autowired
|
|
|
private SysMessageService sysMessageService;
|
|
|
|
|
|
- @Resource
|
|
|
- private ActivityRewardChangeStockDao changeStockDao;
|
|
|
-
|
|
|
@Autowired
|
|
|
private RedissonClient redissonClient;
|
|
|
|
|
|
//保存/更新拓展字段
|
|
|
private static final Map<ActivityTypeEnum, Consumer<ActivityPlanDto>> saveOrUpdateExpand = new HashMap<>();
|
|
|
- //取消活动
|
|
|
- private static final Map<ActivityTypeEnum, Consumer<Long>> cancelActivity = new HashMap<>();
|
|
|
- //活动完成(结束)
|
|
|
+ //开始活动(活动刚开始触发)
|
|
|
+ private static final Map<ActivityTypeEnum, Consumer<Long>> startActivity = new HashMap<>();
|
|
|
+ //开启活动(开启活动按钮)
|
|
|
+ private static final Map<ActivityTypeEnum, Consumer<Long>> openActivity = new HashMap<>();
|
|
|
+ //关闭活动(关闭活动按钮)
|
|
|
+ private static final Map<ActivityTypeEnum, Consumer<Long>> closeActivity = new HashMap<>();
|
|
|
+ //活动中定时轮询
|
|
|
+ private static final Map<ActivityTypeEnum, Consumer<Object>> activityIng = new HashMap<>();
|
|
|
+ //活动完成(活动截止时间到触发)
|
|
|
private static final Map<ActivityTypeEnum, Consumer<Long>> successActivity = new HashMap<>();
|
|
|
|
|
|
@PostConstruct
|
|
@@ -103,13 +106,21 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
saveOrUpdateExpand.put(ActivityTypeEnum.EVALUATION, activityPlanEvaluationService::createOrUpdate);
|
|
|
//达标赠送活动
|
|
|
saveOrUpdateExpand.put(ActivityTypeEnum.STANDARD_GIFT, activityPlanStandardService::createOrUpdate);
|
|
|
+ /**********开始活动(活动刚开始触发)******************/
|
|
|
+
|
|
|
+ /**********开启活动(开启活动按钮)******************/
|
|
|
|
|
|
- /**********取消活动******************/
|
|
|
+ /**********关闭活动(关闭活动按钮)******************/
|
|
|
//评测活动
|
|
|
- cancelActivity.put(ActivityTypeEnum.EVALUATION, activityPlanEvaluationService::cancelActivity);
|
|
|
- /**********活动完成(结束)******************/
|
|
|
+ closeActivity.put(ActivityTypeEnum.EVALUATION, activityPlanEvaluationService::closeActivity);
|
|
|
+ /**********活动中定时轮询******************/
|
|
|
+ //达标赠送活动
|
|
|
+ activityIng.put(ActivityTypeEnum.STANDARD_GIFT, activityPlanStandardService::activityIng);
|
|
|
+ /**********活动完成(活动截止时间到触发)******************/
|
|
|
//评测活动
|
|
|
successActivity.put(ActivityTypeEnum.EVALUATION, activityPlanEvaluationService::successActivity);
|
|
|
+ //达标赠送活动
|
|
|
+ successActivity.put(ActivityTypeEnum.STANDARD_GIFT, activityPlanStandardService::successActivity);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -142,14 +153,6 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
throw new BizException("参数异常");
|
|
|
}
|
|
|
|
|
|
- if (ActivityTypeEnum.EVALUATION.equals(activityPlan.getActivityType())) {
|
|
|
- activityPlan.setActivityClient(ClientEnum.STUDENT);
|
|
|
- } else {
|
|
|
- if (null == activityPlan.getActivityClient()) {
|
|
|
- throw new BizException("活动客户端不能为空");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
if (null == activityPlan.getId()) {
|
|
|
activityPlan.setDraftFlag(1);
|
|
|
activityPlan.setCreateBy(activityPlan.getUserId());
|
|
@@ -193,10 +196,15 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
activityPlan.setActivityStart(now);
|
|
|
}
|
|
|
activityPlan.setActivityState(activityState);
|
|
|
+ //开启活动
|
|
|
+ Consumer<Long> afterFunction = openActivity.get(activityPlan.getActivityType());
|
|
|
+ if (!Objects.isNull(afterFunction)) {
|
|
|
+ afterFunction.accept(activityPlan.getId());
|
|
|
+ }
|
|
|
} else {
|
|
|
activityPlan.setActivityState(2);
|
|
|
- //取消活动
|
|
|
- Consumer<Long> afterFunction = cancelActivity.get(activityPlan.getActivityType());
|
|
|
+ //关闭活动
|
|
|
+ Consumer<Long> afterFunction = closeActivity.get(activityPlan.getActivityType());
|
|
|
if (!Objects.isNull(afterFunction)) {
|
|
|
afterFunction.accept(activityPlan.getId());
|
|
|
}
|
|
@@ -225,8 +233,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if(!ActivityTypeEnum.STANDARD_GIFT.equals(activityPlan.getActivityType())){
|
|
|
- if(null == activityPlan.getRegistrationMethod()){
|
|
|
+ if (!ActivityTypeEnum.STANDARD_GIFT.equals(activityPlan.getActivityType())) {
|
|
|
+
|
|
|
+ if (null == activityPlan.getRegistrationMethod()) {
|
|
|
throw new BizException("报名缴费方式不能为空");
|
|
|
}
|
|
|
if (RegistrationMethodEnum.CHARGE.equals(activityPlan.getRegistrationMethod())
|
|
@@ -237,25 +246,42 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
&& (null == activityPlan.getShareRate())) {
|
|
|
throw new BizException("活动收费时,分润比例不能为空");
|
|
|
}
|
|
|
- if(StringUtil.isEmpty(activityPlan.getSubjectUrl())){
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getSubjectUrl())) {
|
|
|
throw new BizException("主题图片不能为空");
|
|
|
}
|
|
|
- if(StringUtil.isEmpty(activityPlan.getBackgroundUrl())){
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getBackgroundUrl())) {
|
|
|
throw new BizException("平铺背景不能为空");
|
|
|
}
|
|
|
- if(StringUtil.isEmpty(activityPlan.getShareUrl())){
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getShareUrl())) {
|
|
|
throw new BizException("分享图片不能为空");
|
|
|
}
|
|
|
- if(StringUtil.isEmpty(activityPlan.getRuleDescribe())){
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getRuleDescribe())) {
|
|
|
throw new BizException("活动规则不能为空");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (ActivityTypeEnum.EVALUATION.equals(activityPlan.getActivityType())) {
|
|
|
- if(null == activityPlan.getPlanEvaluation() || null == activityPlan.getPlanEvaluation().getEvaluationDifficulty()){
|
|
|
+ activityPlan.setActivityClient(ClientEnum.STUDENT);
|
|
|
+ if (null == activityPlan.getPlanEvaluation() || null == activityPlan.getPlanEvaluation().getEvaluationDifficulty()) {
|
|
|
throw new BizException("活动类型为评测活动时,评测难度不能为空");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (ActivityTypeEnum.STANDARD_GIFT.equals(activityPlan.getActivityType())) {
|
|
|
+ if (null == activityPlan.getPlanStandard()) {
|
|
|
+ throw new BizException("缺少达标赠送参数");
|
|
|
+ }
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getPlanStandard().getCondition())) {
|
|
|
+ throw new BizException("达标条件不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtil.isEmpty(activityPlan.getPlanStandard().getCalculationMethod())) {
|
|
|
+ throw new BizException("计算方式不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (null == activityPlan.getActivityClient()) {
|
|
|
+ throw new BizException("活动客户端不能为空");
|
|
|
+ }
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -406,34 +432,40 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void activityState() {
|
|
|
List<ActivityPlan> list = baseMapper.activityState();
|
|
|
- for (ActivityPlan activityPlan : list) {
|
|
|
- if (activityPlan.getActivityState() == 0) {
|
|
|
- activityPlan.setActivityState(1);
|
|
|
- baseMapper.updateById(activityPlan);
|
|
|
- } else {
|
|
|
- activityPlan.setActivityState(0);
|
|
|
- baseMapper.updateById(activityPlan);
|
|
|
-
|
|
|
- //关闭活动
|
|
|
- Consumer<Long> afterFunction = cancelActivity.get(activityPlan.getActivityType());
|
|
|
- if (!Objects.isNull(afterFunction)) {
|
|
|
- afterFunction.accept(activityPlan.getId());
|
|
|
- }
|
|
|
- }
|
|
|
+ for (ActivityPlan plan : list) {
|
|
|
+ DistributedLock.of(redissonClient)
|
|
|
+ .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_STOCK.getRedisKey(plan.getId())
|
|
|
+ , (id) -> {
|
|
|
+ ActivityPlan activityPlan = getById(id);
|
|
|
+ if (activityPlan.getActivityState() == 0) {
|
|
|
+ activityPlan.setActivityState(1);
|
|
|
+ baseMapper.updateById(activityPlan);
|
|
|
+
|
|
|
+ //开始活动
|
|
|
+ Consumer<Long> afterFunction = startActivity.get(activityPlan.getActivityType());
|
|
|
+ if (!Objects.isNull(afterFunction)) {
|
|
|
+ afterFunction.accept(activityPlan.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ activityPlan.setActivityState(0);
|
|
|
+ activityPlan.setRewardFlag(1);
|
|
|
+ baseMapper.updateById(activityPlan);
|
|
|
+
|
|
|
+ //完成活动
|
|
|
+ Consumer<Long> afterFunction = successActivity.get(activityPlan.getActivityType());
|
|
|
+ if (!Objects.isNull(afterFunction)) {
|
|
|
+ afterFunction.accept(activityPlan.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }, plan.getId(), 10l);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- //活动完成
|
|
|
- List<ActivityPlan> rewardList = baseMapper.activityReward();
|
|
|
- for (ActivityPlan activityPlan : rewardList) {
|
|
|
- //活动置为已发奖(已完成)
|
|
|
- activityPlan.setRewardFlag(1);
|
|
|
- updateById(activityPlan);
|
|
|
-
|
|
|
- //完成活动
|
|
|
- Consumer<Long> afterFunction = successActivity.get(activityPlan.getActivityType());
|
|
|
- if (!Objects.isNull(afterFunction)) {
|
|
|
- afterFunction.accept(activityPlan.getId());
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public void activityIng() {
|
|
|
+ for (ActivityTypeEnum activityTypeEnum : activityIng.keySet()) {
|
|
|
+ activityIng.get(activityTypeEnum).accept(null);
|
|
|
}
|
|
|
}
|
|
|
|