コード例 #1
0
        public void CreateLeave(Entity.Leave leave, int maxLeaderLevel, Approver approver)
        {
            leave.MaxLeaderLevel = maxLeaderLevel;
            leave.Approver       = approver;
            leave.Create();
            _leaveRepository.Save(_leaveFactory.CreateLeavePO(leave));
            var @event = LeaveEvent.Create(LeaveEventType.CREATE_EVENT, leave);

            _leaveRepository.SaveEvent(_leaveFactory.CreateLeaveEventPO(@event));
            _eventPublisher.Publish(@event);
        }
コード例 #2
0
        public void SubmitApproval(Entity.Leave leave, Approver approver)
        {
            if (leave.CurrentApprovalInfo != null)
            {
                //根据当前审批信息,确定案件状态
                switch (leave.CurrentApprovalInfo.ApprovalType)
                {
                case ApprovalType.REJECT:
                    leave.Status = Status.REJECTED;
                    break;

                case ApprovalType.AGREE:
                    leave.Status = Status.APPROVED;
                    break;
                }
            }
            LeaveEvent @event;

            if (ApprovalType.REJECT == leave.CurrentApprovalInfo.ApprovalType)
            {
                //拒约后保持原来批准人
                leave.Reject(leave.Approver);
                @event = LeaveEvent.Create(LeaveEventType.REJECT_EVENT, leave);
            }
            else
            {
                if (approver != null)
                {
                    //通过后更换下一审批人
                    leave.Agree(approver);
                    @event = LeaveEvent.Create(LeaveEventType.AGREE_EVENT, leave);
                }
                else
                {
                    leave.Finish();
                    @event = LeaveEvent.Create(LeaveEventType.APPROVED_EVENT, leave);
                }
            }
            leave.AddHistoryApprovalInfo(leave.CurrentApprovalInfo);
            var leavePO = _leaveFactory.CreateLeavePO(leave);

            _leaveRepository.Submit(leavePO);
            _leaveRepository.SaveEvent(_leaveFactory.CreateLeaveEventPO(@event));
            _eventPublisher.Publish(@event);
        }