# 第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
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
