ConditinController.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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 ex;
  42. }
  43. break;
  44. case UserConditionType.DepartmentPosition:
  45. try {
  46. var deptId = int.Parse(userField.Department);
  47. var pId = int.Parse(userField.Positon);
  48. return Context.Staffs.Where<Staff>(s =>
  49. (s.Positions.Where<DepartmentPosition>(p => p.departmentId == deptId && p.PositionId == pId).Count() > 0))
  50. .ToList<Staff>();
  51. }
  52. catch (Exception ex)
  53. {
  54. throw new ApplicationException("没有找到指定的部门或职位");
  55. }
  56. break;
  57. case UserConditionType.Staff:
  58. return new List<Staff>{ GetUser(userField, dynBindObject)};
  59. break;
  60. case UserConditionType.UserDepartment:
  61. Staff temUser = GetUser(userField, dynBindObject);
  62. if (temUser != null)
  63. {
  64. var temDeptPosition = Context.DepartmentPositions.Where<DepartmentPosition>(d =>
  65. d.departmentId == int.Parse(userField.Department)
  66. && d.StaffId == temUser.Id).FirstOrDefault();
  67. var temDeptId = temDeptPosition.departmentId;
  68. var retList = Context.DepartmentPositions.Where<DepartmentPosition>(dp =>
  69. dp.departmentId == temDeptId)
  70. .Select(s => s.Staff)
  71. .ToList();
  72. return retList;
  73. }
  74. else
  75. {
  76. throw new ApplicationException("指定的员工不存在");
  77. }
  78. break;
  79. case UserConditionType.UserDepartmentPosition:
  80. Staff temUser1 = GetUser(userField, dynBindObject);
  81. if (temUser1 != null)
  82. {
  83. var temDeptPosition = Context.DepartmentPositions.Where<DepartmentPosition>(d =>
  84. d.departmentId == int.Parse(userField.Department)
  85. && d.StaffId == temUser1.Id).FirstOrDefault();
  86. var temDeptId = temDeptPosition.departmentId;
  87. var retList = Context.DepartmentPositions.Where<DepartmentPosition>(dp =>
  88. dp.departmentId == temDeptId &&
  89. dp.PositionId == int.Parse(userField.Positon))
  90. .Select(s => s.Staff)
  91. .ToList();
  92. return retList;
  93. }
  94. else
  95. {
  96. throw new ApplicationException("指定的员工不存在");
  97. }
  98. break;
  99. }
  100. return new List<Staff>();
  101. }
  102. private Staff GetUser(UserField userField, object dynBindObject)
  103. {
  104. Staff temUser = null;
  105. switch (userField.UserType)
  106. {
  107. case UserType.BindObjectProperty:
  108. try
  109. {
  110. temUser = share.Utility.ObjectHelper.GetPropertyValue(userField.UserValue, dynBindObject) as Staff;
  111. }
  112. catch
  113. {
  114. throw new ApplicationException("指定的属性属性不是人员类型");
  115. }
  116. break;
  117. case UserType.DoActionUser:
  118. break;
  119. case UserType.LoginUser:
  120. temUser = Context.Staffs.Where<Staff>(s => s.Name == User.Identity.Name).FirstOrDefault();
  121. break;
  122. case UserType.Staff:
  123. temUser = Context.Staffs.Where<Staff>(s => s.Id == int.Parse(userField.UserValue)).FirstOrDefault();
  124. break;
  125. }
  126. return temUser;
  127. }
  128. }
  129. }