ConditinController.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using System;
  5. using System.Collections.Concurrent;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Reflection;
  11. using System.Threading.Tasks;
  12. using wispro.sp.entity;
  13. using wispro.sp.entity.workflowDefine;
  14. using wispro.sp.share.Utility;
  15. namespace wispro.sp.api.Controllers
  16. {
  17. [Route("api/[controller]")]
  18. [ApiController]
  19. [Authorize]
  20. public class ConditinController : ControllerBase
  21. {
  22. spDbContext Context;
  23. public ConditinController(spDbContext context)
  24. {
  25. Context = context;
  26. }
  27. private List<Staff> GetStaffList(UserField userField, object dynBindObject, entity.workflowInstance.WorkflowInstance Instance)
  28. {
  29. switch (userField.UserConditionType)
  30. {
  31. case UserConditionType.Department:
  32. try
  33. {
  34. var deptId = int.Parse(userField.Department);
  35. return Context.Staffs.Where<Staff>(s =>
  36. (s.Positions.Where<DepartmentPosition>(p => p.departmentId == deptId).Count() > 0))
  37. .ToList<Staff>();
  38. }
  39. catch (Exception ex)
  40. {
  41. throw;
  42. }
  43. break;
  44. case UserConditionType.DepartmentPosition:
  45. try
  46. {
  47. var deptId = int.Parse(userField.Department);
  48. var pId = int.Parse(userField.Positon);
  49. return Context.Staffs.Where<Staff>(s =>
  50. (s.Positions.Where<DepartmentPosition>(p => p.departmentId == deptId && p.PositionId == pId).Count() > 0))
  51. .ToList<Staff>();
  52. }
  53. catch (Exception ex)
  54. {
  55. throw new ApplicationException("没有找到指定的部门或职位");
  56. }
  57. break;
  58. case UserConditionType.Staff:
  59. return new List<Staff> { GetUser(userField, dynBindObject) };
  60. break;
  61. case UserConditionType.UserDepartment:
  62. Staff temUser = GetUser(userField, dynBindObject);
  63. if (temUser != null)
  64. {
  65. var temDeptPosition = Context.DepartmentPositions.Where<DepartmentPosition>(d =>
  66. d.departmentId == int.Parse(userField.Department)
  67. && d.StaffId == temUser.Id).FirstOrDefault();
  68. var temDeptId = temDeptPosition.departmentId;
  69. var retList = Context.DepartmentPositions.Where<DepartmentPosition>(dp =>
  70. dp.departmentId == temDeptId)
  71. .Select(s => s.Staff)
  72. .ToList();
  73. return retList;
  74. }
  75. else
  76. {
  77. throw new ApplicationException("指定的员工不存在");
  78. }
  79. break;
  80. case UserConditionType.UserDepartmentPosition:
  81. Staff temUser1 = GetUser(userField, dynBindObject);
  82. if (temUser1 != null)
  83. {
  84. var temDeptPosition = Context.DepartmentPositions.Where<DepartmentPosition>(d =>
  85. d.departmentId == int.Parse(userField.Department)
  86. && d.StaffId == temUser1.Id).FirstOrDefault();
  87. var temDeptId = temDeptPosition.departmentId;
  88. var retList = Context.DepartmentPositions.Where<DepartmentPosition>(dp =>
  89. dp.departmentId == temDeptId &&
  90. dp.PositionId == int.Parse(userField.Positon))
  91. .Select(s => s.Staff)
  92. .ToList();
  93. return retList;
  94. }
  95. else
  96. {
  97. throw new ApplicationException("指定的员工不存在");
  98. }
  99. break;
  100. }
  101. return new List<Staff>();
  102. }
  103. private Staff GetUser(UserField userField, object dynBindObject)
  104. {
  105. Staff temUser = null;
  106. switch (userField.UserType)
  107. {
  108. case UserType.BindObjectProperty:
  109. try
  110. {
  111. temUser = share.Utility.ObjectHelper.GetPropertyValue(userField.UserValue, dynBindObject) as Staff;
  112. }
  113. catch
  114. {
  115. throw new ApplicationException("指定的属性属性不是人员类型");
  116. }
  117. break;
  118. case UserType.DoActionUser:
  119. break;
  120. case UserType.LoginUser:
  121. temUser = Context.Staffs.Where<Staff>(s => s.Name == User.Identity.Name).FirstOrDefault();
  122. break;
  123. case UserType.Staff:
  124. temUser = Context.Staffs.Where<Staff>(s => s.Id == int.Parse(userField.UserValue)).FirstOrDefault();
  125. break;
  126. }
  127. return temUser;
  128. }
  129. }
  130. }