TaskAllocationRepository.cs 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959
  1. using AutoMapper;
  2. using EnumsNET;
  3. using Microsoft.VisualBasic;
  4. using NPOI.SS.Formula.Functions;
  5. using OASystem.Domain;
  6. using OASystem.Domain.Dtos.PersonnelModule;
  7. using OASystem.Domain.Entities.Groups;
  8. using OASystem.Domain.Entities.PersonnelModule;
  9. using OASystem.Domain.Entities.System;
  10. using OASystem.Domain.ViewModels.PersonnelModule;
  11. using Org.BouncyCastle.Ocsp;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. namespace OASystem.Infrastructure.Repositories.PersonnelModule
  18. {
  19. /// <summary>
  20. /// 任务分配
  21. /// 仓库
  22. /// </summary>
  23. public class TaskAllocationRepository : BaseRepository<Pm_TaskAllocation, TaskAllocationView>
  24. {
  25. private readonly IMapper _mapper;
  26. private Result _result;
  27. public TaskAllocationRepository(SqlSugarClient sqlSugar, IMapper mapper)
  28. : base(sqlSugar)
  29. {
  30. _mapper = mapper;
  31. _result = new Result() { Code = -1, Msg = "操作失败!" };
  32. }
  33. /// <summary>
  34. /// 任务操作权限(任务创建人才可以进行操作)
  35. /// </summary>
  36. /// <param name="taskAllocation"></param>
  37. /// <param name="userId"></param>
  38. /// <returns></returns>
  39. public TaskOperationAudit _TaskOperationAudit(Pm_TaskAllocation taskAllocation, int userId)
  40. {
  41. TaskOperationAudit taskOperationAudit = new TaskOperationAudit();
  42. if (taskAllocation.CreateUserId == userId)
  43. {
  44. taskOperationAudit.TaskAddAudit = 1;
  45. taskOperationAudit.TaskDelAudit = 1;
  46. taskOperationAudit.TasStopAudit = 1;
  47. taskOperationAudit.TaskComfirmAudit = 1;
  48. taskOperationAudit.TaskScoreAudit = 1;
  49. }
  50. return taskOperationAudit;
  51. }
  52. /// <summary>
  53. /// 基础数据源
  54. /// </summary>
  55. /// <returns></returns>
  56. public async Task<Result> _Init(int portType, int userId)
  57. {
  58. if (portType == 1 || portType == 2 || portType == 3)
  59. {
  60. if (userId < 1)
  61. {
  62. _result.Msg = string.Format("请传入有效的UserId参数!");
  63. return _result;
  64. }
  65. //任务名称
  66. List<string?> _TaskNameInfos = new List<string?>();
  67. _TaskNameInfos = _sqlSugar.Queryable<Pm_TaskAllocation, Pm_TaskRelevanceUser>((ta, tau) => new JoinQueryInfos(JoinType.Left, ta.Id == tau.TAId))
  68. .Where((ta, tau) => ta.IsDel == 0 && tau.IsDel == 0)
  69. .Where((ta, tau) => ta.CreateUserId == userId || tau.UserId == userId)
  70. .Select(ta => ta.TaskName).ToList()
  71. .Distinct().ToList();
  72. //团组名称
  73. List<ValueInfo> _GroupNameInfos = new List<ValueInfo>();
  74. _GroupNameInfos = _sqlSugar.Queryable<Grp_DelegationInfo>()
  75. .Where(it => it.IsDel == 0)
  76. .OrderByDescending(it => it.VisitStartDate)
  77. .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName })
  78. .ToList();
  79. _GroupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" });
  80. //部门名称
  81. ValueInfo _DepartmentNameInfos = new ValueInfo();
  82. _DepartmentNameInfos = _sqlSugar.Queryable<Sys_Users, Sys_Department>((u, d) => new JoinQueryInfos(JoinType.Left, u.DepId == d.Id))
  83. .Where((u, d) => u.Id == userId)
  84. .Select((u, d) => new ValueInfo() { Id = d.Id, Name = d.DepName })
  85. .First();
  86. //执行任务人员信息 1 公司总经理/副总 可分配 所有人的任务 2 公司 部门经理/主管 可分配 部门下的人员的任务
  87. List<ExecuteTaskUserInfo> _ExecuteTaskUserInfos = new List<ExecuteTaskUserInfo>();
  88. TaskOperationAudit _TaskOpertionAudit = new TaskOperationAudit();
  89. var taskAudits = new List<Pm_TaskJobRelevancy>();
  90. taskAudits = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList();
  91. var taslPerm = taskAudits.Any();
  92. if (!taskAudits.Any())
  93. {
  94. var taskUserIds = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && it.SubUserId == userId).Select(x => x.PrimaryUserId).ToList();
  95. if (taskUserIds.Any())
  96. {
  97. taskAudits = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && taskUserIds.Contains(it.PrimaryUserId)).ToList();
  98. }
  99. }
  100. if (taskAudits.Any())
  101. {
  102. //任务权限
  103. if (taslPerm)
  104. {
  105. _TaskOpertionAudit.TaskAddAudit = 1;
  106. _TaskOpertionAudit.TaskDelAudit = 1;
  107. _TaskOpertionAudit.TasStopAudit = 1;
  108. }
  109. List<int> userIds = taskAudits.Select(it => it.SubUserId).ToList();
  110. string userSql = string.Format(@"Select u.Id,u.CnName As Name,c.CompanyName,
  111. d.DepName As DepartmentName,jp.JobName
  112. From Sys_Users u
  113. Left Join Sys_Company c On u.CompanyId = c.Id
  114. Left Join Sys_Department d On u.DepId = d.Id
  115. Left Join Sys_JobPost jp On u.JobPostId = jp.Id
  116. Where u.IsDel = 0 ");
  117. _ExecuteTaskUserInfos = _sqlSugar.SqlQueryable<ExecuteTaskUserInfo>(userSql).Where(it => userIds.Contains(it.Id)).ToList();
  118. }
  119. InitView _view = new InitView()
  120. {
  121. TaskOperationAudit = _TaskOpertionAudit,
  122. TaskNameInfos = _TaskNameInfos,
  123. ExecuteTaskUserInfos = _ExecuteTaskUserInfos,
  124. GroupNameInfos = _GroupNameInfos,
  125. DepartmentNameInfo = _DepartmentNameInfos
  126. };
  127. _result.Code = 0;
  128. _result.Data = _view;
  129. }
  130. else
  131. {
  132. _result.Msg = string.Format("请传入有效的PortType参数!");
  133. }
  134. return _result;
  135. }
  136. /// <summary>
  137. /// 任务指派
  138. /// 详情
  139. /// </summary>
  140. /// <param name="portType"></param>
  141. /// <param name="Id"></param>
  142. /// <returns></returns>
  143. public async Task<Result> _Details(int portType, int Id)
  144. {
  145. if (Id < 1)
  146. {
  147. _result.Msg = string.Format("请传入有效的Id参数!");
  148. return _result;
  149. }
  150. if (portType == 1 || portType == 2 || portType == 3)
  151. {
  152. //团组名称
  153. List<ValueInfo> _GroupNameInfos = new List<ValueInfo>();
  154. _GroupNameInfos = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0)
  155. .OrderByDescending(it => it.CreateTime)
  156. .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName })
  157. .ToList();
  158. _GroupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" });
  159. //部门名称
  160. List<ValueInfo> _DepartmentNameInfos = new List<ValueInfo>();
  161. _DepartmentNameInfos = _sqlSugar.Queryable<Sys_Department>()
  162. .Select(d => new ValueInfo() { Id = d.Id, Name = d.DepName })
  163. .ToList();
  164. //用户名称
  165. List<ValueInfo> _UserNameInfos = new List<ValueInfo>();
  166. _UserNameInfos = _sqlSugar.Queryable<Sys_Users>()
  167. .Select(d => new ValueInfo() { Id = d.Id, Name = d.CnName })
  168. .ToList();
  169. TaskDetailsView _view = _sqlSugar.Queryable<Pm_TaskAllocation>()
  170. .Where(it => it.IsDel == 0 && it.Id == Id)
  171. .Select(it => new TaskDetailsView
  172. {
  173. Id = it.Id,
  174. DiId = it.DiId,
  175. DepId = it.DepId,
  176. CreateUserId = it.CreateUserId,
  177. CreateTime = it.CreateTime,
  178. TaskName = it.TaskName,
  179. TaskContent = it.TaskContent,
  180. TaskPriority = it.TaskPriority,
  181. PredictBeginTime = it.PredictBeginTime,
  182. PredictEndTime = it.PredictEndTime,
  183. IsIntoPerformance = it.IsIntoPerformance,
  184. Remark = it.Remark,
  185. })
  186. .First();
  187. if (_view != null)
  188. {
  189. List<TaskUserDetailsView> taskUserDetailsViews = new List<TaskUserDetailsView>();
  190. taskUserDetailsViews = _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
  191. .Where(it => it.IsDel == 0 && it.TAId == _view.Id)
  192. .Select(it => new TaskUserDetailsView
  193. {
  194. Id = it.Id,
  195. TAId = it.TAId,
  196. UserId = it.UserId,
  197. BeginTime = it.BeginTime,
  198. OverTime = it.OverTime,
  199. TaskStatus = it.TaskStatus,
  200. Cause = it.Cause,
  201. Remark = it.Remark
  202. })
  203. .ToList();
  204. _view.UserTaskInfos = taskUserDetailsViews;
  205. _result.Data = _view;
  206. _result.Code = 0;
  207. _result.Msg = "查询成功!";
  208. }
  209. }
  210. else
  211. {
  212. _result.Msg = string.Format("请传入有效的PortType参数!");
  213. }
  214. return _result;
  215. }
  216. /// <summary>
  217. /// Add Or Edit
  218. /// </summary>
  219. /// <param name="dto"></param>
  220. /// <returns></returns>
  221. public async Task<Result> _AddOrEdit(TaskAllocationAddOrEditDto dto)
  222. {
  223. if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3)
  224. {
  225. if (dto.UserIds.Count < 1)
  226. {
  227. _result.Msg = string.Format("指派人员不能为空!");
  228. return _result;
  229. }
  230. #region 参数处理
  231. Pm_TaskAllocation _TaskAllocation = new Pm_TaskAllocation();
  232. List<Pm_TaskRelevanceUser> _TaskRelevanceUsers = new List<Pm_TaskRelevanceUser>();
  233. _TaskAllocation = _mapper.Map<Pm_TaskAllocation>(dto);
  234. _TaskAllocation.CreateUserId = dto.UserId;
  235. _TaskAllocation.Status = TaskEnum.NotStarted;
  236. foreach (var item in dto.UserIds)
  237. {
  238. _TaskRelevanceUsers.Add(new Pm_TaskRelevanceUser() {
  239. TAId = dto.Id,
  240. UserId = item,
  241. TaskStatus = TaskerEnum.NotStarted,
  242. CreateUserId = dto.UserId,
  243. });
  244. }
  245. #endregion
  246. if (dto.Id == 0) //添加
  247. {
  248. // 1 按 任务名称 查询重
  249. Pm_TaskAllocation taskAllocation1 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.TaskName.Equals(_TaskAllocation.TaskName)).FirstAsync();
  250. if (taskAllocation1 != null)
  251. {
  252. _result.Msg = string.Format("任务名称重复,请重命名!");
  253. return _result;
  254. }
  255. _sqlSugar.BeginTran();
  256. int addId = await _sqlSugar.Insertable<Pm_TaskAllocation>(_TaskAllocation).ExecuteReturnIdentityAsync();
  257. if (addId < 1)
  258. {
  259. _sqlSugar.RollbackTran();
  260. _result.Msg = string.Format("任务发布失败!");
  261. return _result;
  262. }
  263. foreach (var item in _TaskRelevanceUsers)
  264. {
  265. item.TAId = addId;
  266. }
  267. int addSub = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers).ExecuteCommandAsync();
  268. if (addSub < 1)
  269. {
  270. _sqlSugar.RollbackTran();
  271. _result.Msg = string.Format("任务发布失败!");
  272. return _result;
  273. }
  274. _result.Code = 0;
  275. _result.Msg = "添加成功!";
  276. _sqlSugar.CommitTran();
  277. }
  278. else if (dto.Id > 0) //修改
  279. {
  280. _sqlSugar.BeginTran();
  281. int updateStatus1 = await _sqlSugar.Updateable<Pm_TaskAllocation>(_TaskAllocation)
  282. .UpdateColumns(it => new
  283. {
  284. it.DepId,
  285. it.DiId,
  286. it.TaskPriority,
  287. it.TaskName,
  288. it.TaskContent,
  289. it.PredictBeginTime,
  290. it.PredictEndTime,
  291. it.IsIntoPerformance,
  292. })
  293. .Where(it => it.Id == _TaskAllocation.Id)
  294. .ExecuteCommandAsync();
  295. if (updateStatus1 < 1)
  296. {
  297. _sqlSugar.RollbackTran();
  298. _result.Msg = string.Format("任务编辑失败!");
  299. return _result;
  300. }
  301. List<int> selectUserId = new List<int>();
  302. selectUserId = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
  303. .Where(it => it.IsDel == 0 && it.TAId == _TaskAllocation.Id)
  304. .Select(it => it.UserId)
  305. .ToListAsync();
  306. if (selectUserId.Count < 1)
  307. {
  308. int addSub1 = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers).ExecuteCommandAsync();
  309. if (addSub1 < 1)
  310. {
  311. _sqlSugar.RollbackTran();
  312. _result.Msg = string.Format("任务编辑失败!");
  313. return _result;
  314. }
  315. }
  316. else
  317. {
  318. List<int> SelectUserIdDiff = new List<int>(); //select 差集
  319. SelectUserIdDiff = selectUserId.Except(dto.UserIds).ToList();
  320. if (SelectUserIdDiff.Count > 0) //删除
  321. {
  322. List<Pm_TaskRelevanceUser> _TaskRelevanceUsers1 = new List<Pm_TaskRelevanceUser>();
  323. _TaskRelevanceUsers1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
  324. .Where(it => it.IsDel == 0 &&
  325. it.TAId == _TaskAllocation.Id &&
  326. SelectUserIdDiff.Contains(it.UserId))
  327. .ToListAsync();
  328. if (_TaskRelevanceUsers1.Count > 0)
  329. {
  330. foreach (var item in _TaskRelevanceUsers1)
  331. {
  332. item.IsDel = 1;
  333. }
  334. var updateIsDel = await _sqlSugar.Updateable(_TaskRelevanceUsers1)
  335. .UpdateColumns(it => it.IsDel)
  336. .WhereColumns(it => new { it.Id, it.TAId })
  337. .ExecuteCommandAsync();
  338. if (updateIsDel < 1)
  339. {
  340. _sqlSugar.RollbackTran();
  341. _result.Msg = string.Format("任务编辑失败!");
  342. return _result;
  343. }
  344. }
  345. }
  346. List<int> ParaUserIdDiff = new List<int>(); //para 差集
  347. ParaUserIdDiff = dto.UserIds.Except(selectUserId).ToList();
  348. if (ParaUserIdDiff.Count > 0)
  349. {
  350. List<Pm_TaskRelevanceUser> _TaskRelevanceUsers1 = new List<Pm_TaskRelevanceUser>();
  351. _TaskRelevanceUsers1 = _TaskRelevanceUsers.Where(it => ParaUserIdDiff.Contains(it.UserId)).ToList();
  352. if (_TaskRelevanceUsers1.Count > 0)
  353. {
  354. int addSub1 = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers1).ExecuteCommandAsync();
  355. if (addSub1 < 1)
  356. {
  357. _sqlSugar.RollbackTran();
  358. _result.Msg = string.Format("任务编辑失败!");
  359. return _result;
  360. }
  361. }
  362. }
  363. }
  364. /*
  365. * 发送消息
  366. */
  367. _result.Code = 0;
  368. _result.Msg = "编辑成功!";
  369. _sqlSugar.CommitTran();
  370. }
  371. else
  372. {
  373. _result.Msg = string.Format("请传入有效的Id参数!");
  374. return _result;
  375. }
  376. }
  377. else
  378. {
  379. _result.Msg = string.Format("请传入有效的PortType参数!");
  380. }
  381. return _result;
  382. }
  383. /// <summary>
  384. /// 任务归属人状态 Items
  385. /// </summary>
  386. /// <param name="id"></param>
  387. /// <returns></returns>
  388. public async Task<Result> _TaskerDetails(int id)
  389. {
  390. if (id < 1)
  391. {
  392. _result.Msg = string.Format("请传入有效的Id参数!");
  393. return _result;
  394. }
  395. string sql = string.Format(@"Select tau.Id,u.CnName As UserName,tau.BeginTime,tau.OverTime,tau.TaskStatus,
  396. tau.Cause,tau.Score,tau.Remark As ScoreRemark,tau.CreateUserId As TaskCreateUserId
  397. From Pm_TaskRelevanceUser tau
  398. Left Join Sys_Users u On tau.UserId = u.Id
  399. Where tau.IsDel = 0 And tau.TAId = {0}", id);
  400. var data = await _sqlSugar.SqlQueryable<TaskerDetailsView>(sql).ToListAsync();
  401. _result.Data = data;
  402. _result.Msg = string.Format("操作成功!");
  403. _result.Code = 0;
  404. return _result;
  405. }
  406. /// <summary>
  407. /// 任务归属人状态
  408. /// </summary>
  409. /// <param name="id"></param>
  410. /// <returns></returns>
  411. public async Task<Result> _TaskerStatus(int id)
  412. {
  413. if (id < 1)
  414. {
  415. _result.Msg = string.Format("请传入有效的Id参数!");
  416. return _result;
  417. }
  418. var data1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync();
  419. if (data1 == null)
  420. {
  421. _result.Msg = string.Format("该任务不存在!");
  422. return _result;
  423. }
  424. var data2 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.Id == data1.TAId).FirstAsync();
  425. _sqlSugar.BeginTran();
  426. var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  427. .SetColumns(it => it.TaskStatus == TaskerEnum.HaveKnown)
  428. .ExecuteCommandAsync();
  429. if (update1 < 1)
  430. {
  431. _result.Msg = string.Format("操作失败!");
  432. return _result;
  433. }
  434. _result.Msg = string.Format("操作成功!");
  435. _result.Code = 0;
  436. _sqlSugar.CommitTran();
  437. return _result;
  438. }
  439. /// <summary>
  440. /// 任务归属人设置开始状态
  441. /// </summary>
  442. /// <param name="id"></param>
  443. /// <returns></returns>
  444. public async Task<Result> _TaskerSetStartStatus(int userId, int id)
  445. {
  446. if (id < 1)
  447. {
  448. _result.Msg = string.Format("请传入有效的Id参数!");
  449. return _result;
  450. }
  451. //状态限制
  452. var selectData = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.UserId == userId && it.TAId == id).FirstAsync();
  453. if (selectData == null)
  454. {
  455. _result.Msg = string.Format("该任务不在!");
  456. return _result;
  457. }
  458. if (selectData.TaskStatus >= TaskerEnum.UnderWay)
  459. {
  460. _result.Msg = string.Format("该任务已知晓,不可重复设置!");
  461. return _result;
  462. }
  463. _sqlSugar.BeginTran();
  464. var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  465. .SetColumns(it => it.TaskStatus == TaskerEnum.UnderWay)
  466. .SetColumns(it => it.BeginTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
  467. .Where(it => it.TAId == id)
  468. .Where(it => it.UserId == userId )
  469. .ExecuteCommandAsync();
  470. if (update1 < 1)
  471. {
  472. _result.Msg = string.Format("操作失败!");
  473. _sqlSugar.RollbackTran();
  474. return _result;
  475. }
  476. var update2 = await _sqlSugar.Updateable<Pm_TaskAllocation>()
  477. .SetColumns(it => it.Status == TaskEnum.UnderWay)
  478. .Where(it => it.Id == id)
  479. .ExecuteCommandAsync();
  480. if (update2 < 1)
  481. {
  482. _result.Msg = string.Format("操作失败!");
  483. _sqlSugar.RollbackTran();
  484. return _result;
  485. }
  486. _sqlSugar.CommitTran();
  487. _result.Msg = string.Format("操作成功!");
  488. _result.Code = 0;
  489. return _result;
  490. }
  491. /// <summary>
  492. /// 任务归属人设置完成状态
  493. /// 1.待审核
  494. /// </summary>
  495. /// <param name="id"></param>
  496. /// <returns></returns>
  497. public async Task<Result> _TaskerSetOverStatus(int userId, int id)
  498. {
  499. if (id < 1)
  500. {
  501. _result.Msg = string.Format("请传入有效的Id参数!");
  502. return _result;
  503. }
  504. //状态限制
  505. var selectData = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.UserId == userId && it.TAId == id).FirstAsync();
  506. if (selectData == null)
  507. {
  508. _result.Msg = string.Format("该任务不在!");
  509. return _result;
  510. }
  511. if (selectData.TaskStatus >= TaskerEnum.UnderWay)
  512. {
  513. _result.Msg = string.Format("该任务已提交待审核状态,不可重复提交!");
  514. return _result;
  515. }
  516. _sqlSugar.BeginTran();
  517. var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  518. .SetColumns(it => it.TaskStatus == TaskerEnum.WaitConfirm)
  519. .SetColumns(it => it.OverTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
  520. .Where(it => it.TAId == id)
  521. .Where(it => it.UserId == userId)
  522. .ExecuteCommandAsync();
  523. if (update1 < 1)
  524. {
  525. _result.Msg = string.Format("操作失败!");
  526. _sqlSugar.RollbackTran();
  527. return _result;
  528. }
  529. var update2 = await _sqlSugar.Updateable<Pm_TaskAllocation>()
  530. .SetColumns(it => it.Status == TaskEnum.UnderWay)
  531. .Where(it => it.Id == id)
  532. .ExecuteCommandAsync();
  533. if (update2 < 1)
  534. {
  535. _result.Msg = string.Format("操作失败!");
  536. _sqlSugar.RollbackTran();
  537. return _result;
  538. }
  539. _sqlSugar.CommitTran();
  540. _result.Msg = string.Format("操作成功!");
  541. _result.Code = 0;
  542. return _result;
  543. }
  544. /// <summary>
  545. /// 设置任务知晓
  546. /// </summary>
  547. /// <param name="id"></param>
  548. /// <returns></returns>
  549. public async Task<Result> _TaskSetHaveStatus(int id)
  550. {
  551. if (id < 1)
  552. {
  553. _result.Msg = string.Format("请传入有效的Id参数!");
  554. return _result;
  555. }
  556. var data1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync();
  557. if (data1 == null)
  558. {
  559. _result.Msg = string.Format("该任务不存在!");
  560. return _result;
  561. }
  562. var data2 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.Id == data1.TAId).FirstAsync();
  563. var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  564. .SetColumns(it => it.TaskStatus == TaskerEnum.HaveKnown)
  565. .ExecuteCommandAsync();
  566. if (update1 < 1)
  567. {
  568. _result.Msg = string.Format("操作失败!");
  569. return _result;
  570. }
  571. _result.Msg = string.Format("操作成功!");
  572. _result.Code = 0;
  573. _sqlSugar.CommitTran();
  574. return _result;
  575. }
  576. /// <summary>
  577. /// 设置任务审批状态
  578. /// </summary>
  579. /// <param name="id"></param>
  580. /// <returns></returns>
  581. public async Task<Result> _TaskSetAuditStatus(int id)
  582. {
  583. if (id < 1)
  584. {
  585. _result.Msg = string.Format("请传入有效的Id参数!");
  586. return _result;
  587. }
  588. var data1 = _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.Id == id).First();
  589. if (data1 == null)
  590. {
  591. _result.Msg = string.Format("该任务不存在或者该任务未分配给你!");
  592. return _result;
  593. }
  594. int _taId = data1.TAId;
  595. _sqlSugar.BeginTran();
  596. var update1 = _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  597. .SetColumns(it => it.TaskStatus == TaskerEnum.Finished)
  598. .Where(it => it.Id == id)
  599. .ExecuteCommand();
  600. if (update1 < 1)
  601. {
  602. _result.Msg = string.Format("操作失败!");
  603. _sqlSugar.RollbackTran();
  604. return _result;
  605. }
  606. //设置任务状态
  607. TaskEnum taskStatus = TaskEnum.Finished;
  608. var data2 = _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.TAId == _taId).ToList();
  609. var data3 = data2.Where(it => it.TaskStatus == TaskerEnum.Finished && it.Id != id).ToList();
  610. var data4 = data2.Where(it => it.TaskStatus == TaskerEnum.UnFinished && it.Id != id).ToList();
  611. if (data4.Count > 0) taskStatus = TaskEnum.UnFinished;
  612. if ((data2.Count - 1) == (data3.Count + data4.Count))
  613. {
  614. var update2 = _sqlSugar.Updateable<Pm_TaskAllocation>()
  615. .SetColumns(it => it.Status == taskStatus)
  616. .Where(it => it.Id == _taId)
  617. .ExecuteCommand();
  618. if (update2 < 1)
  619. {
  620. _result.Msg = string.Format("操作失败!");
  621. _sqlSugar.RollbackTran();
  622. return _result;
  623. }
  624. }
  625. _result.Msg = string.Format("操作成功!");
  626. _result.Code = 0;
  627. _sqlSugar.CommitTran();
  628. return _result;
  629. }
  630. /// <summary>
  631. /// 设置任务未完成状态
  632. /// </summary>
  633. /// <param name="id"></param>
  634. /// <returns></returns>
  635. public async Task<Result> _TaskSetUnFinishedStatus(int id, string cause)
  636. {
  637. if (id < 1)
  638. {
  639. _result.Msg = string.Format("请传入有效的Id参数!");
  640. return _result;
  641. }
  642. var data1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync();
  643. if (data1 == null)
  644. {
  645. _result.Msg = string.Format("该任务不存在或者该任务未分配给你!");
  646. return _result;
  647. }
  648. int _taId = data1.TAId;
  649. _sqlSugar.BeginTran();
  650. var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  651. .SetColumns(it => it.TaskStatus == TaskerEnum.UnFinished)
  652. .SetColumns(it => it.Cause == cause)
  653. .Where(it => it.Id == id)
  654. .ExecuteCommandAsync();
  655. if (update1 < 1)
  656. {
  657. _result.Msg = string.Format("操作失败!");
  658. _sqlSugar.RollbackTran();
  659. return _result;
  660. }
  661. //设置任务状态
  662. var data2 = _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.TAId == _taId).ToList();
  663. var data3 = data2.Where(it => it.TaskStatus == TaskerEnum.Finished && it.Id != id).ToList();
  664. var data4 = data2.Where(it => it.TaskStatus == TaskerEnum.UnFinished && it.Id != id).ToList();
  665. if ((data2.Count - 1) == (data3.Count + data4.Count))
  666. {
  667. var update2 = _sqlSugar.Updateable<Pm_TaskAllocation>()
  668. .SetColumns(it => it.Status == TaskEnum.UnFinished)
  669. .Where(it => it.Id == _taId)
  670. .ExecuteCommand();
  671. if (update2 < 1)
  672. {
  673. _result.Msg = string.Format("操作失败!");
  674. _sqlSugar.RollbackTran();
  675. return _result;
  676. }
  677. }
  678. _result.Msg = string.Format("操作成功!");
  679. _result.Code = 0;
  680. _sqlSugar.CommitTran();
  681. return _result;
  682. }
  683. /// <summary>
  684. /// 任务确认完成
  685. /// </summary>
  686. /// <param name="dto"></param>
  687. /// <returns></returns>
  688. public async Task<Result> _TaskConfirmCompletion(int portType,int id)
  689. {
  690. if (portType == 1 || portType == 2 || portType == 3)
  691. {
  692. if (id < 1)
  693. {
  694. _result.Msg = string.Format("请传入有效的Id参数!");
  695. return _result;
  696. }
  697. var data = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
  698. .Where(it => it.IsDel == 0 && it.Id == id && it.TaskStatus <= TaskerEnum.UnFinished)
  699. .ToListAsync();
  700. if (data.Count > 0)
  701. {
  702. _result.Msg = string.Format("本任务参与人员并未全部完成,不可确认任务完成!");
  703. return _result;
  704. }
  705. var update = await _sqlSugar.Updateable<Pm_TaskAllocation>()
  706. .SetColumns(it => it.IsComplete == 1)
  707. .SetColumns(it => it.Status == TaskEnum.Finished)
  708. .Where(it => it.Id == id)
  709. .ExecuteCommandAsync();
  710. if (update > 0)
  711. {
  712. _result.Code = 0;
  713. return _result;
  714. }
  715. else _result.Msg = "确认完成失败!";
  716. }
  717. else
  718. {
  719. _result.Msg = string.Format("请传入有效的PortType参数!");
  720. }
  721. return _result;
  722. }
  723. /// <summary>
  724. /// 任务评分
  725. /// </summary>
  726. /// <param name="dto"></param>
  727. /// <returns></returns>
  728. public async Task<Result> _TaskScore(TaskAllocationScoreDto dto)
  729. {
  730. int portType = dto.PortType;
  731. if (portType == 1 || portType == 2 || portType == 3)
  732. {
  733. if (dto.SubId < 1)
  734. {
  735. _result.Msg = string.Format("请传入有效的SubId参数!");
  736. return _result;
  737. }
  738. //var data = await _sqlSugar.Queryable<Pm_TaskAllocation>()
  739. // .Where(it => it.IsDel == 0 )
  740. // .FirstAsync();
  741. //if (data == null)
  742. //{
  743. // _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!");
  744. // return _result;
  745. //}
  746. var data = _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
  747. .Where(it => it.IsDel == 0 && it.Id == dto.SubId)
  748. .First();
  749. if (data == null)
  750. {
  751. _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!");
  752. return _result;
  753. }
  754. if (data.TaskStatus != TaskerEnum.Finished)
  755. {
  756. _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!");
  757. return _result;
  758. }
  759. Pm_TaskRelevanceUser _TaskRelevanceUser = new Pm_TaskRelevanceUser() {
  760. Id = dto.SubId,
  761. Score = dto.Score,
  762. Remark = dto.ScoreRemark
  763. };
  764. var update = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>(_TaskRelevanceUser)
  765. .UpdateColumns(it => new { it.Score, it.Remark })
  766. .WhereColumns(it => it.Id)
  767. .ExecuteCommandAsync();
  768. if (update > 0)
  769. {
  770. _result.Code = 0;
  771. return _result;
  772. }
  773. else _result.Msg = "评分失败!";
  774. }
  775. else
  776. {
  777. _result.Msg = string.Format("请传入有效的PortType参数!");
  778. }
  779. return _result;
  780. }
  781. /// <summary>
  782. /// 任务终止
  783. /// </summary>
  784. /// <param name="dto"></param>
  785. /// <returns></returns>
  786. public async Task<Result> _TaskTermination(int taskId)
  787. {
  788. if (taskId < 1)
  789. {
  790. _result.Msg = string.Format("请传入有效的taskId参数!");
  791. return _result;
  792. }
  793. _sqlSugar.BeginTran();
  794. var taskUpdate = _sqlSugar.Updateable<Pm_TaskAllocation>()
  795. .SetColumns(it => it.Status == TaskEnum.TaskStop)
  796. .Where(it => it.Id == taskId)
  797. .ExecuteCommand();
  798. if (taskUpdate < 1)
  799. {
  800. _result.Msg = "任务终止失败!";
  801. _sqlSugar.RollbackTran();
  802. return _result;
  803. }
  804. var subTaskUpdate = _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  805. .SetColumns(it => it.TaskStatus == TaskerEnum.TaskStop)
  806. .Where(it => it.TAId == taskId)
  807. .ExecuteCommand();
  808. if (taskUpdate < 1)
  809. {
  810. _result.Msg = "任务终止失败!";
  811. _sqlSugar.RollbackTran();
  812. return _result;
  813. }
  814. _result.Msg = "操作成功!";
  815. _result.Code = 0;
  816. _sqlSugar.CommitTran();
  817. return _result;
  818. }
  819. /// <summary>
  820. /// 任务删除
  821. /// </summary>
  822. /// <param name="dto"></param>
  823. /// <returns></returns>
  824. public async Task<Result> _TaskDel(int taskId)
  825. {
  826. if (taskId < 1)
  827. {
  828. _result.Msg = string.Format("请传入有效的taskId参数!");
  829. return _result;
  830. }
  831. _sqlSugar.BeginTran();
  832. var taskUpdate = _sqlSugar.Updateable<Pm_TaskAllocation>()
  833. .SetColumns(it => it.IsDel == 1)
  834. .Where(it => it.Id == taskId)
  835. .ExecuteCommand();
  836. if (taskUpdate < 1)
  837. {
  838. _result.Msg = "任务删除失败!";
  839. _sqlSugar.RollbackTran();
  840. return _result;
  841. }
  842. var subTaskUpdate = _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
  843. .SetColumns(it => it.IsDel == 1)
  844. .Where(it => it.TAId == taskId)
  845. .ExecuteCommand();
  846. if (taskUpdate < 1)
  847. {
  848. _result.Msg = "任务删除失败!";
  849. _sqlSugar.RollbackTran();
  850. return _result;
  851. }
  852. _result.Msg = "操作成功!";
  853. _result.Code = 0;
  854. _sqlSugar.CommitTran();
  855. return _result;
  856. }
  857. }
  858. }