ConditinController.cs 5.5 KB

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