using AutoMapper; using EnumsNET; using Microsoft.VisualBasic; 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.Asn1.Tsp; using Org.BouncyCastle.Ocsp; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Net.NetworkInformation; 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; taskOperationAudit.TaskComfirmAudit = 1; taskOperationAudit.TaskScoreAudit = 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; } //任务类型 var taskTypeInfos = _sqlSugar.Queryable().Where(x => x.STid == 127 && x.IsDel == 0) .Select(x => new ValueInfo { Id = x.Id, Name = x.Name }) .ToList(); //任务名称 var taskNameInfos = _sqlSugar.Queryable((ta, tau) => new JoinQueryInfos(JoinType.Left, ta.Id == tau.TAId)) .Where((ta, tau) => ta.IsDel == 0 && tau.IsDel == 0) .Where((ta, tau) => ta.CreateUserId == userId || tau.UserId == userId) .Select(ta => ta.TaskName).ToList() .Distinct().ToList(); //团组名称 var groupNameInfos = _sqlSugar.Queryable() .Where(it => it.IsDel == 0) .OrderByDescending(it => it.VisitStartDate) .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName }) .ToList(); groupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" }); //部门名称 var departmentNameInfos = _sqlSugar.Queryable((u, d) => new JoinQueryInfos(JoinType.Left, u.DepId == d.Id)) .Where((u, d) => u.Id == userId) .Select((u, d) => new ValueInfo() { Id = d.Id, Name = d.DepName }) .First(); //执行任务人员信息 1 公司总经理/副总 可分配 所有人的任务 2 公司 部门经理/主管 可分配 部门下的人员的任务 var executeTaskUserInfos = new List(); var taskOpertionAudit = new TaskOperationAudit(); var taskAudits = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList(); var taslPerm = taskAudits.Any(); if (!taskAudits.Any()) { var taskUserIds = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.SubUserId == userId).Select(x => x.PrimaryUserId).ToList(); if (taskUserIds.Any()) { taskAudits = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && taskUserIds.Contains(it.PrimaryUserId)).ToList(); } } if (taskAudits.Any()) { //任务权限 if (taslPerm) { taskOpertionAudit.TaskAddAudit = 1; taskOpertionAudit.TaskDelAudit = 1; taskOpertionAudit.TasStopAudit = 1; } var 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(); } var view = new InitView() { TaskOperationAudit = taskOpertionAudit, TaskNameInfos = taskNameInfos, ExecuteTaskUserInfos = executeTaskUserInfos, GroupNameInfos = groupNameInfos, DepartmentNameInfo = departmentNameInfos, TaskTypeInfos = taskTypeInfos }; _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) { //团组名称 var _groupNameInfos = _sqlSugar.Queryable().Where(it => it.IsDel == 0) .OrderByDescending(it => it.VisitDate) .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName }) .ToList(); _groupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" }); //部门名称 var _departmentNameInfos = _sqlSugar.Queryable() .Select(d => new ValueInfo() { Id = d.Id, Name = d.DepName }) .ToList(); //用户名称 var _userNameInfos = _sqlSugar.Queryable() .Select(d => new ValueInfo() { Id = d.Id, Name = d.CnName }) .ToList(); var _view = _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, }) .First(); if (_view != null) { var taskUserDetailsViews = _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 }) .ToList(); _view.UserTaskInfos = taskUserDetailsViews; _result.Data = _view; _result.Code = 0; _result.Msg = "查询成功!"; } } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } /// /// 编辑权限验证 /// public (bool CanEdit, string Message) EditPerm(int taskId, int currentUserId) { var taskInfo = _sqlSugar.Queryable().First(x => x.Id == taskId && x.IsDel == 0); if (taskInfo == null) return (false, "任务不存在!"); if (taskInfo.CreateUserId != currentUserId) return (false, "当前任务仅创建人可编辑!"); // 定义结束状态集合 var UneditableStatuses = new List { TaskEnum.UnFinished, TaskEnum.Finished, TaskEnum.TaskStop }; if (UneditableStatuses.Contains(taskInfo.Status)) return (false, taskInfo.Status switch { TaskEnum.UnFinished => "当前任务状态为“未完成”结束状态,不可编辑!", TaskEnum.Finished => "当前任务状态为“已完成”结束状态,不可编辑!", TaskEnum.TaskStop => "当前任务状态为“任务终止”结束状态,不可编辑!", _ => "当前任务状态不可编辑!" }); return (true, string.Empty); } /// /// 任务终止权限验证 /// public (bool CanEdit, string Message) TaskStopPerm(int taskId, int currentUserId) { var taskInfo = _sqlSugar.Queryable().First(x => x.Id == taskId && x.IsDel == 0); if (taskInfo == null) return (false, "任务不存在!"); if (taskInfo.CreateUserId != currentUserId) return (false, "只有创建人可以终止任务!"); // 2. 检查当前状态是否允许终止 if (taskInfo.Status == TaskEnum.TaskStop) { return (false, "任务已终止,无需重复操作!"); } // 3. 定义不允许终止的状态 var cannotStopStatuses = new List { TaskEnum.Finished, TaskEnum.UnFinished }; if (cannotStopStatuses.Contains(taskInfo.Status)) { var statusDesc = taskInfo.Status switch { TaskEnum.Finished => "已完成", TaskEnum.UnFinished => "未完成", _ => "未知状态" }; return (false, $"任务已{statusDesc},不能终止!"); } // 安全解析时间 var predictBeginTime = SafeParse(taskInfo.PredictBeginTime); var predictEndTime = SafeParse(taskInfo.PredictEndTime); var currTime = DateTime.Now; // 时间范围检查 if (predictBeginTime.HasValue && currTime < predictBeginTime.Value) return (false, "任务尚未开始,不能终止!"); if (predictEndTime.HasValue && currTime > predictEndTime.Value.AddHours(24)) return (false, "任务已超过预计结束时间24小时,不能终止!"); // 检查创建时间(防止恶意创建后立即终止) if ((currTime - taskInfo.CreateTime).TotalMinutes < 5) { return (false, "任务创建时间不足5分钟,请先执行一段时间才可执行任务终止!"); } return (true, string.Empty); } /// /// 安全解析字符串为 DateTime? /// public static DateTime? SafeParse(string dateTimeString) { if (string.IsNullOrWhiteSpace(dateTimeString)) return null; if (DateTime.TryParse(dateTimeString, out DateTime result)) return result; return null; } /// /// 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 参数处理 var _TaskAllocation = new Pm_TaskAllocation(); var _TaskRelevanceUsers = new List(); _TaskAllocation = _mapper.Map(dto); _TaskAllocation.CreateUserId = dto.UserId; _TaskAllocation.Status = TaskEnum.NotStarted; foreach (var item in dto.UserIds) { _TaskRelevanceUsers.Add(new Pm_TaskRelevanceUser() { TAId = dto.Id, UserId = item, TaskStatus = TaskerEnum.NotStarted, 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(_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(); #region 编辑验证 1. 仅创建者可以修改 2.状态完成不可修改 var taskInfo = await _sqlSugar .Queryable() .Where(it => it.Id == dto.Id && it.IsDel == 0) .FirstAsync(); if (taskInfo != null) { (bool isEdit, string msg) = EditPerm(dto.Id, dto.UserId); if (!isEdit) { _result.Msg = msg; return _result; } } #endregion int updateStatus1 = await _sqlSugar.Updateable(_TaskAllocation) .UpdateColumns(it => new { it.DepId, it.DiId, it.TaskType, 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参数!"); } else _result.Msg = string.Format("请传入有效的PortType参数!"); return _result; } /// /// 任务归属人状态 Items /// /// /// public async Task TaskerDetails(int id) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } string sql = string.Format(@"Select tau.Id,u.CnName As UserName,tau.BeginTime,tau.OverTime,tau.TaskStatus, tau.Cause,tau.Score,tau.Remark As ScoreRemark,tau.CreateUserId As TaskCreateUserId From Pm_TaskRelevanceUser tau Left Join Sys_Users u On tau.UserId = u.Id Where tau.IsDel = 0 And tau.TAId = {0}", id); var data = await _sqlSugar.SqlQueryable(sql).ToListAsync(); _result.Data = data; _result.Msg = string.Format("操作成功!"); _result.Code = 0; return _result; } /// /// 任务归属人状态 /// /// /// public async Task TaskerStatus(int id) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } var data1 = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync(); if (data1 == null) { _result.Msg = string.Format("该任务不存在!"); return _result; } var data2 = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == data1.TAId).FirstAsync(); _sqlSugar.BeginTran(); var update1 = await _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.HaveKnown) .ExecuteCommandAsync(); if (update1 < 1) { _result.Msg = string.Format("操作失败!"); return _result; } _result.Msg = string.Format("操作成功!"); _result.Code = 0; _sqlSugar.CommitTran(); return _result; } /// /// 任务归属人设置开始状态 /// /// /// public async Task TaskerSetStartStatus(int userId, int id) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } //状态限制 var selectData = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.UserId == userId && it.TAId == id).FirstAsync(); if (selectData == null) { _result.Msg = string.Format("该任务不在!"); return _result; } if (selectData.TaskStatus >= TaskerEnum.UnderWay) { _result.Msg = string.Format("该任务已知晓,不可重复设置!"); return _result; } _sqlSugar.BeginTran(); var update1 = await _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.UnderWay) .SetColumns(it => it.BeginTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) .Where(it => it.TAId == id) .Where(it => it.UserId == userId ) .ExecuteCommandAsync(); if (update1 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } var update2 = await _sqlSugar.Updateable() .SetColumns(it => it.Status == TaskEnum.UnderWay) .Where(it => it.Id == id) .ExecuteCommandAsync(); if (update2 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } _sqlSugar.CommitTran(); _result.Msg = string.Format("操作成功!"); _result.Code = 0; return _result; } /// /// 任务归属人设置完成状态 /// 1.待审核 /// /// /// public async Task TaskerSetOverStatus(int userId, int id) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } //状态限制 var selectData = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.UserId == userId && it.TAId == id).FirstAsync(); if (selectData == null) { _result.Msg = string.Format("该任务不在!"); return _result; } if (selectData.TaskStatus >= TaskerEnum.WaitConfirm) { _result.Msg = string.Format("该任务已提交待审核状态,不可重复提交!"); return _result; } _sqlSugar.BeginTran(); var update1 = await _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.WaitConfirm) .SetColumns(it => it.OverTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) .Where(it => it.TAId == id) .Where(it => it.UserId == userId) .ExecuteCommandAsync(); if (update1 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } var update2 = await _sqlSugar.Updateable() .SetColumns(it => it.Status == TaskEnum.UnderWay) .Where(it => it.Id == id) .ExecuteCommandAsync(); if (update2 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } _sqlSugar.CommitTran(); _result.Msg = string.Format("操作成功!"); _result.Code = 0; return _result; } /// /// 设置任务知晓 /// /// /// public async Task TaskSetHaveStatus(int id,int userId) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } var taskUserInfo = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.TAId == id && it.UserId == userId).FirstAsync(); if (taskUserInfo == null) { _result.Msg = string.Format("该任务不存在!"); return _result; } var taskerId = taskUserInfo.Id; //状态确认 if (taskUserInfo.TaskStatus == TaskerEnum.HaveKnown) { _result.Msg = string.Format("已设置“已知晓”状态,不可重复设置!"); return _result; } var update1 = await _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.HaveKnown) .Where(it => it.Id == taskerId && it.UserId == userId) .ExecuteCommandAsync(); if (update1 < 1) { _result.Msg = string.Format("操作失败!"); return _result; } _result.Msg = string.Format("操作成功!"); _result.Code = 0; _sqlSugar.CommitTran(); return _result; } /// /// 设置任务审批状态 /// /// /// public Result TaskSetAuditStatus(int id,int userId,string overTime) { if (id < 1) { _result.Msg = string.Format("请传入有效的任务关联ID!"); return _result; } // 实际完成时间验证 // 验证完成时间格式 if (!DateTime.TryParse(overTime,out DateTime overDt)) { _result.Msg = string.Format("实际完成时间格式不正确,正确时间格式为: yyyy-MM-dd HH:mm:ss"); return _result; } // 验证时间合理性(不能是未来时间) if (overDt > DateTime.Now.AddMinutes(5)) // 允许5分钟内的未来时间(考虑时差) { _result.Msg = string.Format("实际完成时间不能是未来时间!"); return _result; } _sqlSugar.BeginTran(); try { //状态验证 var subTaskInfo = _sqlSugar.Queryable() .Where(it => it.IsDel == 0 && it.TAId == id) .First(); if (subTaskInfo == null) { _result.Msg = string.Format("该任务关联信息不存在!"); return _result; } int mainTaskId = subTaskInfo.TAId; int taskerId = subTaskInfo.Id; //只有创建人可以审批完成状态 if (subTaskInfo.CreateUserId != userId) { _result.Msg = string.Format("只有任务创建者可审批'已完成'状态!"); return _result; } //不可重复设置状态 if (subTaskInfo.TaskStatus == TaskerEnum.Finished) { _result.Msg = string.Format("“已完成”状态,已设置不可重复操作!"); return _result; } var subTaskUpd = _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.Finished) .SetColumns(it => it.OverTime == overTime) .Where(it => it.Id == taskerId) .ExecuteCommand(); if (subTaskUpd < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } #region 更新主任务状态 // 查询所有关联任务的状态 var allRelevanceTasks = _sqlSugar.Queryable() .Where(x => x.TAId == mainTaskId && x.IsDel == 0) .Select(x => new { x.Id, x.TaskStatus }) .ToList(); // 计算任务状态统计 int totalCount = allRelevanceTasks.Count; // 已完成状态数量 int finishedCount = allRelevanceTasks.Count(x => x.TaskStatus == TaskerEnum.Finished); // 未完成状态数量 int unfinishedCount = allRelevanceTasks.Count(x => x.TaskStatus == TaskerEnum.UnFinished); // 结束状态数量(已完成 + 未完成) int endedCount = finishedCount + unfinishedCount; // 判断是否所有子任务均处于结束状态 是 则更新主任务状态 bool allTasksInEndStatus = totalCount == endedCount; if (allTasksInEndStatus) { TaskEnum newMainTaskStatus; if (unfinishedCount > 0) { // 存在未完成的子任务 newMainTaskStatus = TaskEnum.UnFinished; } else if (finishedCount == totalCount) { // 所有子任务都已完成 newMainTaskStatus = TaskEnum.Finished; } else { // 理论上不会走到这里,但为了安全 newMainTaskStatus = TaskEnum.UnFinished; } var rowsAffected = _sqlSugar.Updateable() .SetColumns(x => new Pm_TaskAllocation { Status = newMainTaskStatus, OverTime = overTime }) .Where(x => x.Id == mainTaskId && x.IsDel == 0) .ExecuteCommand(); if (rowsAffected <= 0) { _result.Msg = string.Format("更新主任务状态失败!"); _sqlSugar.RollbackTran(); return _result; } } #endregion _result.Msg = string.Format("操作成功!"); _result.Code = 0; _sqlSugar.CommitTran(); return _result; } catch (Exception) { _sqlSugar.RollbackTran(); _result.Msg = string.Format("操作失败!"); return _result; } } /// /// 设置任务未完成状态 /// /// /// public async Task TaskSetUnFinishedStatus(int id, string cause) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } var data1 = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync(); if (data1 == null) { _result.Msg = string.Format("该任务不存在或者该任务未分配给你!"); return _result; } int _taId = data1.TAId; _sqlSugar.BeginTran(); var update1 = await _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.UnFinished) .SetColumns(it => it.Cause == cause) .Where(it => it.Id == id) .ExecuteCommandAsync(); if (update1 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } //设置任务状态 var data2 = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.TAId == _taId).ToList(); var data3 = data2.Where(it => it.TaskStatus == TaskerEnum.Finished && it.Id != id).ToList(); var data4 = data2.Where(it => it.TaskStatus == TaskerEnum.UnFinished && it.Id != id).ToList(); if ((data2.Count - 1) == (data3.Count + data4.Count)) { var update2 = _sqlSugar.Updateable() .SetColumns(it => it.Status == TaskEnum.UnFinished) .Where(it => it.Id == _taId) .ExecuteCommand(); if (update2 < 1) { _result.Msg = string.Format("操作失败!"); _sqlSugar.RollbackTran(); return _result; } } _result.Msg = string.Format("操作成功!"); _result.Code = 0; _sqlSugar.CommitTran(); return _result; } /// /// 任务确认完成 /// /// /// public async Task TaskConfirmCompletion(int portType,int id) { if (portType == 1 || portType == 2 || portType == 3) { if (id < 1) { _result.Msg = string.Format("请传入有效的Id参数!"); return _result; } var data = await _sqlSugar.Queryable() .Where(it => it.IsDel == 0 && it.Id == id && it.TaskStatus <= TaskerEnum.UnFinished) .ToListAsync(); if (data.Count > 0) { _result.Msg = string.Format("本任务参与人员并未全部完成,不可确认任务完成!"); return _result; } var update = await _sqlSugar.Updateable() .SetColumns(it => it.IsComplete == 1) .SetColumns(it => it.Status == TaskEnum.Finished) .Where(it => it.Id == id) .ExecuteCommandAsync(); if (update > 0) { _result.Code = 0; return _result; } else _result.Msg = "确认完成失败!"; } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } /// /// 任务评分 /// /// /// public async Task TaskScore(TaskAllocationScoreDto dto) { int portType = dto.PortType; if (portType == 1 || portType == 2 || portType == 3) { if (dto.SubId < 1) { _result.Msg = string.Format("请传入有效的SubId参数!"); return _result; } //var data = await _sqlSugar.Queryable() // .Where(it => it.IsDel == 0 ) // .FirstAsync(); //if (data == null) //{ // _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!"); // return _result; //} var data = _sqlSugar.Queryable() .Where(it => it.IsDel == 0 && it.Id == dto.SubId) .First(); if (data == null) { _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!"); return _result; } if (data.TaskStatus != TaskerEnum.Finished) { _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!"); return _result; } Pm_TaskRelevanceUser _TaskRelevanceUser = new Pm_TaskRelevanceUser() { Id = dto.SubId, Score = dto.Score, Remark = dto.ScoreRemark }; var update = await _sqlSugar.Updateable(_TaskRelevanceUser) .UpdateColumns(it => new { it.Score, it.Remark }) .WhereColumns(it => it.Id) .ExecuteCommandAsync(); if (update > 0) { _result.Code = 0; return _result; } else _result.Msg = "评分失败!"; } else { _result.Msg = string.Format("请传入有效的PortType参数!"); } return _result; } /// /// 任务终止 /// /// /// public async Task TaskTermination(int taskId,int userId) { if (taskId < 1) { _result.Msg = string.Format("请传入有效的taskId参数!"); return _result; } //权限验证 (bool taskStopPerm,string msg) = TaskStopPerm(taskId, userId); if (!taskStopPerm) { _result.Msg = msg; return _result; } _sqlSugar.BeginTran(); var taskUpdate = _sqlSugar.Updateable() .SetColumns(it => it.Status == TaskEnum.TaskStop) .Where(it => it.Id == taskId) .ExecuteCommand(); if (taskUpdate < 1) { _result.Msg = "任务终止失败!"; _sqlSugar.RollbackTran(); return _result; } var subTaskUpdate = _sqlSugar.Updateable() .SetColumns(it => it.TaskStatus == TaskerEnum.TaskStop) .Where(it => it.TAId == taskId) .ExecuteCommand(); if (taskUpdate < 1) { _result.Msg = "任务终止失败!"; _sqlSugar.RollbackTran(); return _result; } _result.Msg = "操作成功!"; _result.Code = 0; _sqlSugar.CommitTran(); return _result; } /// /// 任务删除 /// /// /// public async Task TaskDel(int taskId,int userId) { if (taskId < 1) { _result.Msg = string.Format("请传入有效的taskId参数!"); return _result; } _sqlSugar.BeginTran(); var nowStrig = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var taskUpdate = _sqlSugar.Updateable() .SetColumns(it => it.IsDel == 1) .SetColumns(it => it.DeleteUserId == userId) .SetColumns(it => it.DeleteTime == nowStrig) .Where(it => it.Id == taskId) .ExecuteCommand(); if (taskUpdate < 1) { _result.Msg = "任务删除失败!"; _sqlSugar.RollbackTran(); return _result; } var subTaskUpdate = _sqlSugar.Updateable() .SetColumns(it => it.IsDel == 1) .SetColumns(it => it.DeleteUserId == userId) .SetColumns(it => it.DeleteTime == nowStrig) .Where(it => it.TAId == taskId) .ExecuteCommand(); if (taskUpdate < 1) { _result.Msg = "任务删除失败!"; _sqlSugar.RollbackTran(); return _result; } _result.Msg = "操作成功!"; _result.Code = 0; _sqlSugar.CommitTran(); return _result; } } }