using AutoMapper; using NPOI.SS.Formula.Functions; using OASystem.Domain; using OASystem.Domain.Dtos.PersonnelModule; using OASystem.Domain.Entities.Groups; using OASystem.Domain.Entities.PersonnelModule; using OASystem.Domain.Entities.System; using OASystem.Domain.ViewModels.PersonnelModule; using Org.BouncyCastle.Ocsp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OASystem.Infrastructure.Repositories.PersonnelModule { /// /// 任务分配 /// 仓库 /// public class TaskAllocationRepository : BaseRepository { private readonly IMapper _mapper; private Result _result; public TaskAllocationRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar) { _mapper = mapper; _result = new Result() { Code = -1, Msg = "操作失败!" }; } /// /// 任务操作权限(任务创建人才可以进行操作) /// /// /// /// public TaskOperationAudit _TaskOperationAudit(Pm_TaskAllocation taskAllocation, int userId) { TaskOperationAudit taskOperationAudit = new TaskOperationAudit(); if (taskAllocation.CreateUserId == userId) { taskOperationAudit.TaskAddAudit = 1; taskOperationAudit.TaskDelAudit = 1; taskOperationAudit.TasStopAudit = 1; } return taskOperationAudit; } /// /// 基础数据源 /// /// public async Task _Init(int portType, int userId) { if (portType == 1 || portType == 2 || portType == 3) { if (userId < 1) { _result.Msg = string.Format("请传入有效的UserId参数!"); return _result; } //任务名称 List _TaskNameInfos = new List(); _TaskNameInfos = _sqlSugar.Queryable((ta, tau) => new JoinQueryInfos(JoinType.Left, ta.Id == tau.Id)) .Where((ta, tau) => ta.CreateUserId == userId || tau.UserId == userId) .Select(ta => ta.TaskName).ToList(); //团组名称 List _GroupNameInfos = new List(); _GroupNameInfos = _sqlSugar.Queryable().Where(it => it.IsDel == 0) .OrderByDescending(it => it.CreateTime) .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName }) .ToList(); _GroupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" }); //部门名称 ValueInfo _DepartmentNameInfos = new ValueInfo(); _DepartmentNameInfos = _sqlSugar.Queryable((u, d) => new JoinQueryInfos(JoinType.Left, u.DepId == d.Id)) .Select((u, d) => new ValueInfo() { Id = d.Id, Name = d.DepName }) .First(); //执行任务人员信息 1 公司总经理/副总 可分配 所有人的任务 2 公司 部门经理/主管 可分配 部门下的人员的任务 List _ExecuteTaskUserInfos = new List(); TaskOperationAudit _TaskOpertionAudit = new TaskOperationAudit(); List taskAudits = new List(); taskAudits = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList(); if (taskAudits.Count > 0) { //任务权限 _TaskOpertionAudit.TaskAddAudit = 1; _TaskOpertionAudit.TaskDelAudit = 1; _TaskOpertionAudit.TasStopAudit = 1; List userIds = taskAudits.Select(it => it.SubUserId).ToList(); string userSql = string.Format(@"Select u.Id,u.CnName As Name,c.CompanyName, d.DepName As DepartmentName,jp.JobName From Sys_Users u Left Join Sys_Company c On u.CompanyId = c.Id Left Join Sys_Department d On u.DepId = d.Id Left Join Sys_JobPost jp On u.JobPostId = jp.Id Where u.IsDel = 0 "); _ExecuteTaskUserInfos = _sqlSugar.SqlQueryable(userSql).Where(it => userIds.Contains(it.Id)).ToList(); } InitView _view = new InitView() { TaskOperationAudit = _TaskOpertionAudit, TaskNameInfos = _TaskNameInfos, ExecuteTaskUserInfos = _ExecuteTaskUserInfos, GroupNameInfos = _GroupNameInfos, DepartmentNameInfo = _DepartmentNameInfos }; _result.Code = 0; _result.Data = _view; } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } /// /// 任务指派 /// 详情 /// /// /// /// public async Task _Details(int portType, int Id) { if (Id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } if (portType == 1 || portType == 2 || portType == 3) { TaskDetailsView _view = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == Id) .Select(it => new TaskDetailsView { Id = it.Id, DiId = it.DiId, DepId = it.DepId, CreateUserId = it.CreateUserId, CreateTime = it.CreateTime, TaskName = it.TaskName, TaskContent = it.TaskContent, TaskPriority = it.TaskPriority, PredictBeginTime = it.PredictBeginTime, PredictEndTime = it.PredictEndTime, IsIntoPerformance = it.IsIntoPerformance, Remark = it.Remark, }) .FirstAsync(); if (_view != null) { List taskUserDetailsViews = new List(); taskUserDetailsViews = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.TAId == _view.Id) .Select(it => new TaskUserDetailsView { Id = it.Id, TAId = it.TAId, UserId = it.UserId, BeginTime = it.BeginTime, OverTime = it.OverTime, TaskStatus = it.TaskStatus, Cause = it.Cause, Remark = it.Remark }) .ToListAsync(); _view.UserTaskInfos = taskUserDetailsViews; _result.Code = 0; _result.Msg = "查询成功!"; } } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } /// /// Add Or Edit /// /// /// public async Task _AddOrEdit(TaskAllocationAddOrEditDto dto) { if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) { if (dto.UserIds.Count < 1) { _result.Msg = string.Format("指派人员不能为空!"); return _result; } #region 参数处理 Pm_TaskAllocation _TaskAllocation = new Pm_TaskAllocation(); List _TaskRelevanceUsers = new List(); _TaskAllocation = _mapper.Map(dto); _TaskAllocation.CreateUserId = dto.UserId; foreach (var item in dto.UserIds) { _TaskRelevanceUsers.Add(new Pm_TaskRelevanceUser() { TAId = dto.Id, UserId = item, CreateUserId = dto.UserId, }); } #endregion if (dto.Id == 0) //添加 { // 1 按 任务名称 查询重 Pm_TaskAllocation taskAllocation1 = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.TaskName.Equals(_TaskAllocation.TaskName)).FirstAsync(); if (taskAllocation1 != null) { _result.Msg = string.Format("任务名称重复,请重命名!"); return _result; } _sqlSugar.BeginTran(); int addId = await _sqlSugar.Insertable< Pm_TaskAllocation >(_TaskAllocation).ExecuteReturnIdentityAsync(); if (addId < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务发布失败!"); return _result; } foreach (var item in _TaskRelevanceUsers) { item.TAId = addId; } int addSub = await _sqlSugar.Insertable(_TaskRelevanceUsers).ExecuteCommandAsync(); if (addSub < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务发布失败!"); return _result; } /* * 发送消息 */ _result.Code = 0; _result.Msg = "添加成功!"; _sqlSugar.CommitTran(); } else if(dto.Id > 0) //修改 { _sqlSugar.BeginTran(); int updateStatus1 = await _sqlSugar.Updateable(_TaskAllocation) .UpdateColumns(it => new { it.DepId, it.DiId, it.TaskPriority, it.TaskName, it.TaskContent, it.PredictBeginTime, it.PredictEndTime, it.IsIntoPerformance, }) .Where(it => it.Id == _TaskAllocation.Id) .ExecuteCommandAsync(); if (updateStatus1 < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务编辑失败!"); return _result; } List selectUserId = new List(); selectUserId = await _sqlSugar.Queryable() .Where(it => it.IsDel == 0 && it.TAId == _TaskAllocation.Id) .Select(it => it.UserId) .ToListAsync(); if (selectUserId.Count < 1) { int addSub1 = await _sqlSugar.Insertable(_TaskRelevanceUsers).ExecuteCommandAsync(); if (addSub1 < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务编辑失败!"); return _result; } } else { List SelectUserIdDiff = new List(); //select 差集 SelectUserIdDiff = selectUserId.Except(dto.UserIds).ToList(); if (SelectUserIdDiff.Count > 0) //删除 { List _TaskRelevanceUsers1 = new List(); _TaskRelevanceUsers1 = await _sqlSugar.Queryable() .Where(it => it.IsDel == 0 && it.TAId == _TaskAllocation.Id && SelectUserIdDiff.Contains(it.UserId)) .ToListAsync(); if (_TaskRelevanceUsers1.Count > 0) { foreach (var item in _TaskRelevanceUsers1) { item.IsDel = 1; } var updateIsDel = await _sqlSugar.Updateable(_TaskRelevanceUsers1) .UpdateColumns(it => it.IsDel) .WhereColumns(it => new { it.Id,it.TAId}) .ExecuteCommandAsync(); if (updateIsDel < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务编辑失败!"); return _result; } } } List ParaUserIdDiff = new List(); //para 差集 ParaUserIdDiff = dto.UserIds.Except(selectUserId).ToList(); if (ParaUserIdDiff.Count > 0) { List _TaskRelevanceUsers1 = new List(); _TaskRelevanceUsers1 = _TaskRelevanceUsers.Where(it => ParaUserIdDiff.Contains(it.UserId)).ToList(); if (_TaskRelevanceUsers1.Count > 0) { int addSub1 = await _sqlSugar.Insertable(_TaskRelevanceUsers1).ExecuteCommandAsync(); if (addSub1 < 1) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("任务编辑失败!"); return _result; } } } } /* * 发送消息 */ _result.Code = 0; _result.Msg = "编辑成功!"; _sqlSugar.CommitTran(); } else { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } } }