|
@@ -0,0 +1,385 @@
|
|
|
+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
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// 任务分配
|
|
|
+ /// 仓库
|
|
|
+ /// </summary>
|
|
|
+ public class TaskAllocationRepository : BaseRepository<Pm_TaskAllocation, TaskAllocationView>
|
|
|
+ {
|
|
|
+ private readonly IMapper _mapper;
|
|
|
+ private Result _result;
|
|
|
+
|
|
|
+ public TaskAllocationRepository(SqlSugarClient sqlSugar, IMapper mapper)
|
|
|
+ : base(sqlSugar)
|
|
|
+ {
|
|
|
+ _mapper = mapper;
|
|
|
+ _result = new Result() { Code = -1, Msg = "操作失败!" };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 任务操作权限(任务创建人才可以进行操作)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="taskAllocation"></param>
|
|
|
+ /// <param name="userId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 基础数据源
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<Result> _Init(int portType, int userId)
|
|
|
+ {
|
|
|
+ if (portType == 1 || portType == 2 || portType == 3)
|
|
|
+ {
|
|
|
+ if (userId < 1)
|
|
|
+ {
|
|
|
+ _result.Msg = string.Format("请传入有效的UserId参数!");
|
|
|
+ return _result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //任务名称
|
|
|
+ List<string> _TaskNameInfos = new List<string>();
|
|
|
+ _TaskNameInfos = _sqlSugar.Queryable<Pm_TaskAllocation, Pm_TaskRelevanceUser>((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<ValueInfo> _GroupNameInfos = new List<ValueInfo>();
|
|
|
+ _GroupNameInfos = _sqlSugar.Queryable<Grp_DelegationInfo>().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<Sys_Users, Sys_Department>((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<ExecuteTaskUserInfo> _ExecuteTaskUserInfos = new List<ExecuteTaskUserInfo>();
|
|
|
+ TaskOperationAudit _TaskOpertionAudit = new TaskOperationAudit();
|
|
|
+ List<Pm_TaskJobRelevancy> taskAudits = new List<Pm_TaskJobRelevancy>();
|
|
|
+ taskAudits = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList();
|
|
|
+
|
|
|
+ if (taskAudits.Count > 0)
|
|
|
+ {
|
|
|
+ //任务权限
|
|
|
+ _TaskOpertionAudit.TaskAddAudit = 1;
|
|
|
+ _TaskOpertionAudit.TaskDelAudit = 1;
|
|
|
+ _TaskOpertionAudit.TasStopAudit = 1;
|
|
|
+
|
|
|
+ List<int> 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<ExecuteTaskUserInfo>(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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 任务指派
|
|
|
+ /// 详情
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="portType"></param>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<Result> _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<Pm_TaskAllocation>().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<TaskUserDetailsView> taskUserDetailsViews = new List<TaskUserDetailsView>();
|
|
|
+
|
|
|
+ taskUserDetailsViews = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Add Or Edit
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<Result> _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<Pm_TaskRelevanceUser> _TaskRelevanceUsers = new List<Pm_TaskRelevanceUser>();
|
|
|
+ _TaskAllocation = _mapper.Map<Pm_TaskAllocation>(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<Pm_TaskAllocation>().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<Pm_TaskRelevanceUser>(_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<Pm_TaskAllocation>(_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<int> selectUserId = new List<int>();
|
|
|
+ selectUserId = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
|
|
|
+ .Where(it => it.IsDel == 0 && it.TAId == _TaskAllocation.Id)
|
|
|
+ .Select(it => it.UserId)
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (selectUserId.Count < 1)
|
|
|
+ {
|
|
|
+ int addSub1 = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers).ExecuteCommandAsync();
|
|
|
+ if (addSub1 < 1)
|
|
|
+ {
|
|
|
+ _sqlSugar.RollbackTran();
|
|
|
+ _result.Msg = string.Format("任务编辑失败!");
|
|
|
+ return _result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ List<int> SelectUserIdDiff = new List<int>(); //select 差集
|
|
|
+ SelectUserIdDiff = selectUserId.Except(dto.UserIds).ToList();
|
|
|
+ if (SelectUserIdDiff.Count > 0) //删除
|
|
|
+ {
|
|
|
+ List<Pm_TaskRelevanceUser> _TaskRelevanceUsers1 = new List<Pm_TaskRelevanceUser>();
|
|
|
+
|
|
|
+ _TaskRelevanceUsers1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
|
|
|
+ .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<int> ParaUserIdDiff = new List<int>(); //para 差集
|
|
|
+ ParaUserIdDiff = dto.UserIds.Except(selectUserId).ToList();
|
|
|
+
|
|
|
+ if (ParaUserIdDiff.Count > 0)
|
|
|
+ {
|
|
|
+ List<Pm_TaskRelevanceUser> _TaskRelevanceUsers1 = new List<Pm_TaskRelevanceUser>();
|
|
|
+ _TaskRelevanceUsers1 = _TaskRelevanceUsers.Where(it => ParaUserIdDiff.Contains(it.UserId)).ToList();
|
|
|
+ if (_TaskRelevanceUsers1.Count > 0)
|
|
|
+ {
|
|
|
+ int addSub1 = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|