/// <summary>
        /// 审批不同意
        /// </summary>
        /// <param name="taskRecordId"></param>
        /// <param name="opinion"></param>
        public int disagree(int taskRecordId, string opinion)
        {
            // 新增approve record记录
            var approveRecord = new ApproveRecord
            {
                ApproverId = user.UserId,
                CreateTime = DateTime.Now,
                DocId      = taskRecordId,
                Opinion    = opinion,
                Result     = "审批拒绝",
                Type       = 2
            };

            Db.Insertable(approveRecord).ExecuteReturnIdentity();

            // 修改task record状态
            var taskRecord = SimpleDb.GetSingle(u => u.Id == taskRecordId);

            taskRecord.Status = 2;
            SimpleDb.Update(taskRecord);

            // todo 发送相关消息

            return(taskRecord.Id);
        }
Пример #2
0
        /// <summary>
        /// 结束任务
        /// </summary>
        /// <param name="taskId"></param>
        /// <param name="approverId"></param>
        public void endTask(int taskId, int approverId)
        {
            // 新增任务记录: 结束任务 任务状态: 待审批
            var taskRecord = new TaskRecord {
                Status = 0, CreateTime = DateTime.Now, Desc = "任务完成", SubmitterId = user.UserId, SubmitterName = user.UserName, TaskId = taskId
            };
            var taskRecordId = Db.Insertable(taskRecord).ExecuteReturnIdentity();

            // 新增任务审批人列表
            var approverList = new List <ApproveApprover>();
            var submitter    = new ApproveApprover {
                DocId = taskRecordId, ApproverId = user.UserId, Type = 1, Level = 0
            };

            approverList.Add(submitter);

            var superiorUserId = getTaskSuperior(taskId, user);    // 获取上级任务负责人
            var approver       = new ApproveApprover {
                DocId = taskRecordId, ApproverId = superiorUserId, Type = 1, Level = 1
            };

            approverList.Add(approver);
            Db.Insertable(approverList).ExecuteReturnIdentity();

            // 新增任务审批记录
            var record = new ApproveRecord {
                DocId = taskRecordId, ApproverId = user.UserId, Type = 1, Opinion = "", Result = "已提交"
            };

            Db.Insertable(record).ExecuteReturnIdentity();
        }
Пример #3
0
        /// <summary>
        /// 任务完成情况提交
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public TaskRecord addOrUpdateTaskRecord(TaskRecord record)
        {
            record.SubmitterId   = user.UserId;
            record.SubmitterName = user.UserName;
            record.CreateTime    = DateTime.Now;

            Db.Ado.BeginTran();

            // 更新task的进度
            var task = Db.Queryable <Task>().Where(u => u.Id == record.TaskId).Single();

            if (task.Progress + record.Percent > 100)
            {
                throw new Exception($"该任务已经完成{task.Progress}%,无法提交占比{record.Percent}%的完成情况!");
            }

            task.Progress += record.Percent;
            Db.Updateable(task).ExecuteCommand();

            var returnReocrd = Db.Saveable(record).ExecuteReturnEntity();

            // 新增任务审批记录
            var approverList = new List <ApproveApprover>();
            var submitter    = new ApproveApprover {
                DocId = returnReocrd.Id, ApproverId = user.UserId, Type = 2, Level = 0
            };

            approverList.Add(submitter);

            try
            {
                var superiorUserId = getTaskSuperior(record.TaskId, user);

                var approver = new ApproveApprover {
                    DocId = returnReocrd.Id, ApproverId = superiorUserId, Type = 2, Level = 1
                };
                approverList.Add(approver);
                Db.Insertable(approverList).ExecuteReturnIdentity();

                // 新增任务审批记录
                var approveRecord = new ApproveRecord {
                    DocId = returnReocrd.Id, ApproverId = user.UserId, Type = 2, Opinion = "", Result = "已提交"
                };
                Db.Insertable(approveRecord).ExecuteReturnIdentity();

                Db.Ado.CommitTran();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();

                task.Progress -= record.Percent;
                Db.Updateable(task).ExecuteCommand();

                throw new Exception(ex.Message);
            }

            return(returnReocrd);
        }
Пример #4
0
        /// <summary>
        /// 审批一条记录
        /// </summary>
        /// <param name="recordId"></param>
        /// <param name="isPass"></param>
        /// <param name="userId"></param>
        /// <param name="reason"></param>
        /// <param name="callBackFun"></param>
        /// <param name="messageReceiver"></param>
        /// <param name="objectId"></param>
        public void ApproveRecord(int recordId, int isPass, int userId, string reason,
                                  Action <int, bool, string> callBackFun,
                                  out int[] messageReceiver, out int objectId)
        {
            messageReceiver = new int[] { };
            var record = _dataAccess.Get <ApproveRecord>(recordId);

            record.IsCheck     = 1;
            record.IsPass      = isPass;
            record.Reason      = reason;
            record.UserId      = userId;
            record.ApproveTime = DateTime.Now;
            _dataAccess.UpdateEntity(record);
            objectId = record.ObjectId;

            if (record.IsPass == 0)
            {
                callBackFun(record.ObjectId, false, reason);
            }
            else
            {
                var steps = GetApproveStepList(record.WayId);
                if (steps.Last().StepId == record.CurrentStepId)
                {
                    callBackFun(record.ObjectId, true, reason);
                }
                else
                {
                    var step      = steps.First(p => p.OrderNum == record.CurrentStepOrderNum + 1);
                    var newRecord = new ApproveRecord
                    {
                        IsCheck             = 0,
                        IsPass              = 0,
                        Reason              = "",
                        UserId              = 0,
                        CurrentStepId       = step.StepId,
                        CurrentStepOrderNum = record.CurrentStepOrderNum + 1,
                        WayType             = record.WayType,
                        ObjectId            = record.ObjectId,
                        ObjectDeptId        = record.ObjectDeptId,
                        WayId        = record.WayId,
                        ApproveTime  = DateTime.Now,
                        ObjectUserId = record.ObjectUserId
                    };
                    _dataAccess.AddEntity(newRecord);

                    messageReceiver = GetMessageReceiver(step.ApproverType, step.ApproverId, record.ObjectUserId);
                }
            }
        }
Пример #5
0
        /// <summary>
        /// 开始审批
        /// </summary>
        /// <param name="objectId"></param>
        /// <param name="wayType">
        /// 0:培训
        /// 1:晋升学习
        /// </param>
        /// <param name="objectDeptId"></param>
        /// <param name="objectUserId"></param>
        /// <param name="messageReceiver"></param>
        /// <returns></returns>
        public ApproveRecord BeginApproveRecord(int objectId, int wayType, int objectDeptId, int objectUserId,
                                                out int[] messageReceiver)
        {
            var record = new ApproveRecord
            {
                IsCheck             = 0,
                IsPass              = 0,
                Reason              = "",
                UserId              = 0,
                CurrentStepId       = 0,
                CurrentStepOrderNum = 0,
                WayType             = wayType,
                ObjectId            = objectId,
                ObjectDeptId        = objectDeptId,
                ApproveTime         = DateTime.Now,
                ObjectUserId        = objectUserId
            };
            List <ApproveStep> steps;
            List <ApproveDept> depts;
            bool canUpdate;

            var approveWayType = 0;

            if (wayType == 1)
            {
                approveWayType = 1;
            }

            record.WayId = GetApproveWay(objectDeptId, approveWayType, out steps, out depts, out canUpdate).WayId;

            if (record.WayId != 0)
            {
                record.CurrentStepId       = steps[0].StepId;
                record.CurrentStepOrderNum = steps[0].OrderNum;
            }

            _dataAccess.AddEntity(record);

            if (steps.Count > 0)
            {
                messageReceiver = GetMessageReceiver(steps[0].ApproverType, steps[0].ApproverId, objectUserId);
            }
            else
            {
                messageReceiver = new int[0];
            }

            return(record);
        }
Пример #6
0
 public bool ApprovTimeSheet(int idTimeSheet, ApproveRecord record)
 {
     throw new NotImplementedException();
 }