# 第08节:活动领域的配置与状态

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

  • 分支:210911_xfg_activity (opens new window)
  • 描述:开发活动领域部分功能,包括:活动创建、活动状态变更。主要以 domain 领域层下添加 activity 为主,并在对应的 service 中添加 deploy(创建活动)、partake(领取活动,待开发)、stateflow(状态流转) 三个模块。以及调整仓储服务实现到基础层。

# 一、开发日志

  • 按照 DDD 模型,调整包引用 lottery-infrastructure 引入 lottery-domain,调整后效果领域层 domain 定义仓储接口,基础层 infrastructure 实现仓储接口。
  • 活动领域层需要提供的功能包括:活动创建、活动状态处理和用户领取活动操作,本章节先实现前两个需求,下个章节继续开发其他功能。
  • 活动创建的操作主要会用到事务,因为活动系统提供给运营后台创建活动时,需要包括:活动信息、奖品信息、策略信息、策略明细以及其他额外扩展的内容,这些信息都需要在一个事务下进行落库。
  • 活动状态的审核,【1编辑、2提审、3撤审、4通过、5运行(审核通过后worker扫描状态)、6拒绝、7关闭、8开启】,这里我们会用到设计模式中的状态模式进行处理。

# 二、活动创建

cn.itedus.lottery.domain.activity.service.deploy.impl.ActivityDeployImpl

public class ActivityDeployImpl implements IActivityDeploy {

    private Logger logger = LoggerFactory.getLogger(ActivityDeployImpl.class);

    @Resource
    private IActivityRepository activityRepository;

    @Transactional(rollbackFor = Exception.class)
    @Override
    public void createActivity(ActivityConfigReq req) {
        logger.info("创建活动配置开始,activityId:{}", req.getActivityId());
        ActivityConfigRich activityConfigRich = req.getActivityConfigRich();
        try {
            // 添加活动配置
            ActivityVO activity = activityConfigRich.getActivity();
            activityRepository.addActivity(activity);

            // 添加奖品配置
            List<AwardVO> awardList = activityConfigRich.getAwardList();
            activityRepository.addAward(awardList);

            // 添加策略配置
            StrategyVO strategy = activityConfigRich.getStrategy();
            activityRepository.addStrategy(strategy);

            // 添加策略明细配置
            List<StrategyDetailVO> strategyDetailList = activityConfigRich.getStrategy().getStrategyDetailList();
            activityRepository.addStrategyDetailList(strategyDetailList);

            logger.info("创建活动配置完成,activityId:{}", req.getActivityId());
        } catch (DuplicateKeyException e) {
            logger.error("创建活动配置失败,唯一索引冲突 activityId:{} reqJson:{}", req.getActivityId(), JSON.toJSONString(req), e);
            throw e;
        }
    }

    @Override
    public void updateActivity(ActivityConfigReq req) {
        // TODO: 非核心功能后续补充
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42