# 第08节:活动领域的配置与状态
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!
- 分支:210911_xfg_activity (opens new window)
- 描述:开发活动领域部分功能,包括:活动创建、活动状态变更。主要以 domain 领域层下添加 activity 为主,并在对应的 service 中添加 deploy(创建活动)、partake(领取活动,待开发)、stateflow(状态流转) 三个模块。以及调整仓储服务实现到基础层。
# 零、优秀作业
- 为什么仓储接口定义在领域层?@拿笔小星 (opens new window)
- 活动领域的配置与状态 @一点江南 (opens new window)
- 把domain包引入infrastructure包改成infrastructure引入domain,为什么它会更符合DDD领域设计?@我的旅途 (opens new window)
- 活动领域的配置与状态 @BerserkD (opens new window)
- 更改domain层和基础层结构,第八章是活动领域的部分代码,有创建活动功能以及活动状态处理的实现 @Chin (opens new window)
- 活动领域的配置与状态 @Geroge Liu (opens new window)
- 开发活动领域部分功能,包括活动创建(涉及到数据落表,用到事务)、活动状态变更(用到设计模式中的状态模式) @liuc (opens new window)
- 在应用层编排抽奖过程 @liuc (opens new window)
- 项目过程中遇到的bug以及经验总结 @锚 (opens new window)
- 活动领域的配置与状态学习总结 @爱幻想 (opens new window)
# 一、开发日志
- 按照 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