/// <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="user"></param>
        /// <returns>返回找到负责人的userId</returns>
        public int getTaskSuperior(int taskId, UserAuthSession user)
        {
            var task = SimpleDb.GetSingle(u => u.Id == taskId);

            if (task.ChargeUserId != user.UserId)
            {
                throw new Exception("您与选中任务无关联,无法提交");
            }

            while (true)
            {
                task = SimpleDb.GetSingle(u => u.Id == task.ParentId);

                if (task == null)
                {
                    break;
                }

                if (task.ChargeUserId != user.UserId)
                {
                    break;
                }
            }

            if (task == null)
            {
                throw new Exception("暂无可用上级,请联系管理员重新分配");
            }

            return(task.ChargeUserId);
        }
예제 #3
0
        /// <summary>
        /// 如果一个类有层级结构(树状),则修改该节点时,要修改该节点的所有子节点
        /// //修改对象的级联ID,生成类似XXX.XXX.X.XX
        /// </summary>
        /// <param name="task"></param>
        private void ChangeModuleCascade(Task task)
        {
            string cascadeId;
            var    currentCascadeId = 1; //当前结点的级联节点最后一位
            var    sameLevels       = SimpleDb.AsQueryable().Where(u => u.ParentId == task.ParentId && u.Id != task.Id).ToList();

            foreach (var obj in sameLevels)
            {
                var objCascadeId = int.Parse(obj.CascadeId.TrimEnd('.').Split('.').Last());
                if (currentCascadeId <= objCascadeId)
                {
                    currentCascadeId = objCascadeId + 1;
                }
            }

            if (task.ParentId > 0)
            {
                var parenntTask = SimpleDb.GetSingle(u => u.Id == task.ParentId);
                if (parenntTask != null)
                {
                    cascadeId = parenntTask.CascadeId + currentCascadeId + ".";
                }
                else
                {
                    throw new Exception("未能找到该组织的父节点信息");
                }
            }
            else
            {
                cascadeId = ".0." + currentCascadeId + ".";
            }

            task.CascadeId = cascadeId;
        }
예제 #4
0
        /// <summary>
        /// 前端展示项目任务树
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public Dictionary <string, object> getProjectTaskTree(int projectId)
        {
            var member = Db.Queryable <ProjectMember>().Where(u => u.ProjectId == projectId && u.UserId == user.UserId)
                         .ToList()[0];

            var treeList = new List <Task>();

            // 如果是项目经理或是管理员 才能查询到项目中所有子任务 否则查询到自己负责任务的所有下级任务以及和自己负责任务相关联的上级任务
            var allTaskList = Db.Queryable <Task>().Where(u => u.ProjectId == projectId);

            if (!member.ProjectRole.Equals("项目经理"))
            {
                var inferiorTaskList = allTaskList.Where(u => u.ChargeUserId == user.UserId).ToList();
                treeList.AddRange(inferiorTaskList);

                foreach (var inferiorTask in inferiorTaskList)
                {
                    var list = Db.Queryable <Task>().Where(u => !u.CascadeId.Equals(inferiorTask.CascadeId) && (
                                                               u.CascadeId.Contains(inferiorTask.CascadeId) ||
                                                               inferiorTask.CascadeId.Contains(u.CascadeId)))
                               .ToList();

                    treeList.AddRange(list);
                }
            }
            else
            {
                treeList = allTaskList.ToList();
            }

            var taskTree = treeList.GenerateVueTaskTree(u => u.Id, u => u.ParentId);

            // 处理返回tree 添加根节点 根节点名称为项目名称
            var project = SimpleDb.GetSingle(u => u.Id == projectId);
            var result  = new Dictionary <string, object>
            {
                { "id", 0 }, { "label", project.Name }, { "children", taskTree }, { "chargeUserName", project.ChargeUserName },
                { "status", 0 }
            };

            return(result);
        }
        /// <summary>
        /// 用户名密码登录
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public Response Login(string username, string password)
        {
            var result = new Response <string>();

            try
            {
                // 密码加密
                password = Md5.Encrypt(password);
                // 防sql注入
                username = Md5.avoidSqlInjection(username);

                var userInfo = SimpleDb.GetSingle(u => u.userName.Equals(username));

                if (userInfo == null)
                {
                    throw new Exception("用户不存在");
                }
                if (!Md5.Encrypt(userInfo.passWord).Equals(password))
                {
                    throw new Exception("密码不正确");
                }

                var currentSession = new UserAuthSession
                {
                    UserId       = userInfo.userId,
                    WechatUserId = userInfo.wechatUserId,
                    UserName     = userInfo.userName,
                    Token        = Guid.NewGuid().ToString().GetHashCode().ToString("x"),
                    CreateTime   = DateTime.Now
                };

                _cacheContext.Set(currentSession.Token, currentSession, DateTime.Now.AddDays(10));
                result.Result = currentSession.Token;
            }
            catch (Exception ex)
            {
                result.Code    = 500;
                result.Message = ex.Message;
            }

            return(result);
        }
        /// <summary>
        /// 通过token获取用户信息
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public Dictionary <string, object> getInfo(string token)
        {
            var result = _cacheContext.Get <UserAuthSession>(token);

            // 获取用户角色
            var roleList = Db.Queryable <UserRole, Role>((ur, r) =>
                                                         new object[] { JoinType.Left, ur.RoleId == r.Id }).Where(ur => ur.UserId == result.UserId)
                           .Select((ur, r) => new { r.Name }).ToList();

            // 获取用户头像
            var avatar = SimpleDb.GetSingle(u => u.userId == result.UserId).avatar;

            return(new Dictionary <string, object>
            {
                { "name", result.UserName },
                { "userId", result.UserId },
                { "wechatUserId", result.WechatUserId },
                { "avatar", avatar },
                { "role", roleList }
            });
        }
예제 #7
0
        /// <summary>
        /// 通过id获取project
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Project getProjectById(int id)
        {
            var project = SimpleDb.GetSingle(u => u.Id == id);

            return(project);
        }
예제 #8
0
        /// <summary>
        /// 找出同级别任务的占比 来进行百分百分配
        /// </summary>
        /// <param name="taskId"></param>
        /// <returns></returns>
        public List <Task> getSameLevelTask(int taskId)
        {
            var task = SimpleDb.GetSingle(u => u.Id == taskId);

            return(SimpleDb.AsQueryable().Where(u => u.ParentId == task.ParentId).ToList());
        }
예제 #9
0
 /// <summary>
 /// 通过id获取task
 /// </summary>
 /// <param name="taskId"></param>
 /// <returns></returns>
 public Task getTaskById(int taskId)
 {
     return(SimpleDb.GetSingle(u => u.Id == taskId));
 }
예제 #10
0
 /// <summary>
 /// 查询单个
 /// </summary>
 /// <param name="whereLambda">查询条件</param>
 /// <returns></returns>
 public T FindEntity(Expression <Func <T, bool> > whereLambda)
 {
     return(SimpleDb.GetSingle(whereLambda));
 }