1 功能描述
- 请假人填写请假单提交审批,根据请假人身份、请假类型和请假天数进行校验,根据审批规则逐级递交上级审批,逐级核批通过则完成审批,否则审批不通过退回申请人。
- 根据考勤规则,核销请假数据后,对考勤数据进行校验,输出考勤统计。
为了满足内外部人员,他们的在线请假、自动考勤统计和外部人员管理的需求,我们建设这个在线请假考勤系统,它是一个在线请假平台,可以自动考勤统计。它可以同时支持内外网请假,同时管理内外部人员请假和定期考勤分析,而不像HR系统,只管理内部人员,且只能内网使用。我们的产品内外网皆可使用,可实现内外部人员无差异管理。
2 场景示例
2.1 请假
用户:请假人
- 请假人登录系统:从权限微服务获取请假人信息和权限数据,完成登录认证
- 创建请假单:打开请假页面,选择请假类型和起始时间,录入请假信息。保存并创建请假单,提交请假审批。
- 修改请假单:查询请假单,打开请假页面,修改请假单,提交请假审批
- 提交审批:获取审批规则,根据审批规则,从人员组织关系中获取审批人,给请假单分配审批人
2.2 审批
用户:审批人
- 审批人登录系统:从权限微服务获取审批人信息和权限数据,完成登录认证。
- 获取请假单:获取审批人名下请假单,选择请假单。
- 审批:填写审批意见。
- 逐级审批:如果还需要上级审批,根据审批规则,从人员组织关系中获取审批人,给请假单分配审批人。重复以上4步。
最后审批人完成审批。 - 完成审批后,产生请假审批已通过领域事件。后续有两个进一步的业务操作:发送请假审批已通过的通知,通知邮件系统告知请假人;将请假数据发送到考勤以便核销
人员组织关系场景分析结果图
3 领域建模
通过对业务和问题域进行分析,建立领域模型。向上通过限界上下文指导微服务边界设计,向下通过聚合指导实体对象设计。
3.1 领域建模过程
3.1.1 找出领域实体和值对象等领域对象
根据场景分析,分析并找出发起或产生这些命令或领域事件的实体和值对象,将与实体或值对象有关的命令和事件聚集到实体。
分析后的实体与命令的关系:请假单、审批意见、审批规则、人员、组织关系、刷卡明细、考勤明细以及考勤统计等实体和值对象
找出聚合根
根据实体、值对象与聚合根的依赖关系,建立聚合。
定义聚合前,先找出聚合根。
- 从实体中可找出“请假单”、“人员”聚合根
- 再找出与聚合根紧密依赖的实体和值对象,会发现
请假单下的
- 审批意见
- 审批规则
人员下的
- 组织关系
但之后发现刷卡明细、考勤明细和考勤统计等实体没有聚合根。
这类就需要分情况处理。
刷卡明细、考勤明细和考勤统计等实体间相互独立,找不出聚合根,不是富领域模型,但它们一起完成考勤业务逻辑,具有高业务内聚性。考虑将这几个业务关联紧密的实体,放在一个考勤聚合内。
最终建立请假、人员组织关系和考勤聚合:
- 请假聚合有请假单、审批意见实体和审批规则等值对象
- 人员组织关系聚合有人员和组织关系等实体
- 考勤聚合有刷卡明细、考勤明细和考勤统计等实体