StaffController.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using wispro.sp.entity;
  6. using wispro.sp.share;
  7. using System.Linq;
  8. using Microsoft.AspNetCore.Authentication.JwtBearer;
  9. using Microsoft.AspNetCore.Authorization;
  10. using wispro.sp.entity.workflowDefine;
  11. using Microsoft.EntityFrameworkCore;
  12. namespace wispro.sp.api.Controllers
  13. {
  14. [Authorize]
  15. [Route("api/[controller]/[action]")]
  16. [ApiController]
  17. public class StaffController : ControllerBase
  18. {
  19. private static List<Staff> CacheList = new List<Staff>();
  20. spDbContext Context;
  21. public StaffController(spDbContext context)
  22. {
  23. Context = context;
  24. }
  25. public List<Staff> GetAll()
  26. {
  27. return Context.Staffs.ToList<Staff>();
  28. }
  29. private List<Staff> GetStaffList(dynamic dynamic,UserField userField)
  30. {
  31. try
  32. {
  33. Staff temUser = null;
  34. switch (userField.UserConditionType)
  35. {
  36. case UserConditionType.Staff:
  37. //UserField user = new UserField();
  38. //user.UserConditionType = UserConditionType.UserDepartmentPosition;
  39. //user.Department = "120";
  40. //user.Positon = "6";
  41. //System.Diagnostics.Debug.WriteLine(System.Text.Json.JsonSerializer.Serialize(user));
  42. switch (userField.UserType)
  43. {
  44. case UserType.BindObjectProperty:
  45. if (dynamic == null)
  46. {
  47. return null;
  48. }
  49. else
  50. {
  51. var retObj = share.Utility.ObjectHelper.GetPropertyValue(userField.UserValue, dynamic);
  52. if (retObj is Staff)
  53. {
  54. return new List<Staff>() { (Staff)retObj };
  55. }
  56. else
  57. {
  58. if (retObj is List<Staff>)
  59. {
  60. return (List<Staff>)retObj;
  61. }
  62. }
  63. }
  64. break;
  65. case UserType.DoActionUser:
  66. break;
  67. case UserType.LoginUser:
  68. temUser = Context.Staffs.FirstOrDefault(s => s.Name == User.Identity.Name);
  69. return new List<Staff>() { temUser };
  70. break;
  71. case UserType.Staff:
  72. temUser = Context.Staffs.FirstOrDefault(s => s.Id == int.Parse(userField.UserValue.ToString()));
  73. if (temUser != null)
  74. {
  75. return new List<Staff>() { temUser };
  76. }
  77. break;
  78. }
  79. break;
  80. case UserConditionType.Department:
  81. var retList = Context.DepartmentPositions.Where(d => d.departmentId == int.Parse(userField.Department)).Select(p => p.Staff).ToList();
  82. return retList.Where(s=>s.IsOnJob ).ToList();
  83. break;
  84. case UserConditionType.Position:
  85. var query = Context.Staffs.Where(s=>true);
  86. var queryList = from u in query
  87. where ((from dp in Context.DepartmentPositions.Where(d => d.PositionId == int.Parse(userField.Positon)) select dp.StaffId).Contains(u.Id))
  88. select u;
  89. return queryList.ToList();
  90. break;
  91. case UserConditionType.UserDepartment:
  92. break;
  93. case UserConditionType.UserDepartmentPosition:
  94. break;
  95. case UserConditionType.DepartmentPosition:
  96. var retList1 = Context.DepartmentPositions.Where(d =>
  97. d.departmentId == int.Parse(userField.Department) &&
  98. d.PositionId == int.Parse(userField.Positon)
  99. )
  100. .Select(p => p.Staff).ToList();
  101. return retList1;
  102. break;
  103. }
  104. return new List<Staff>();
  105. }
  106. catch(Exception ex)
  107. {
  108. throw ex;
  109. }
  110. }
  111. public List<Staff> GetReviewers(int itemId, int appealTypeId)
  112. {
  113. try
  114. {
  115. var item = Context.PerformanceItems
  116. .Include(p=>p.Reviewer)
  117. .Include(p=>p.ItemStaffs).ThenInclude(p=>p.DoPerson)
  118. .Include(p=>p.PreOastaff)
  119. .Include(p=>p.Customer)
  120. .FirstOrDefault(p => p.Id == itemId);
  121. var apType = Context.AppealTypes.FirstOrDefault(p => p.Id == appealTypeId);
  122. UserField user = new UserField();
  123. if (String.IsNullOrEmpty(apType.ReviewerExpress))
  124. {
  125. return Context.Staffs.ToList();
  126. }
  127. else
  128. {
  129. List<UserField> lstUserField = new List<UserField>();
  130. if (apType.ReviewerExpress.StartsWith("p."))
  131. {
  132. UserField userField = new UserField();
  133. userField.UserConditionType = UserConditionType.Staff;
  134. userField.UserType = UserType.BindObjectProperty;
  135. userField.UserValue = apType.ReviewerExpress.Replace("p.", "").Trim();
  136. lstUserField.Add(userField);
  137. }
  138. else
  139. {
  140. lstUserField = System.Text.Json.JsonSerializer.Deserialize<List<UserField>>(apType.ReviewerExpress);
  141. //UserField userField = System.Text.Json.JsonSerializer.Deserialize<UserField>(apType.ReviewerExpress);
  142. }
  143. List<Staff> retStaffs = new List<Staff>();
  144. foreach(UserField uf in lstUserField)
  145. {
  146. var temStaffs = GetStaffList(item, uf);
  147. if(temStaffs != null)
  148. {
  149. foreach(var staff in temStaffs)
  150. {
  151. if(retStaffs.FirstOrDefault(s=>s.Id == staff.Id) == null) {
  152. retStaffs.Add(staff);
  153. }
  154. }
  155. }
  156. }
  157. return retStaffs;
  158. }
  159. }
  160. catch (Exception ex)
  161. {
  162. throw ex;
  163. }
  164. }
  165. public Staff GetUser(int Id)
  166. {
  167. return Context.Staffs.FirstOrDefault(p=>p.Id == Id);
  168. }
  169. public Staff GetByName(string Name)
  170. {
  171. return Context.Staffs.FirstOrDefault(p => p.Name == Name);
  172. }
  173. public ListApiResponse<Staff> Query(int pageIndex,int pageSize)
  174. {
  175. ListApiResponse<Staff> ret = new ListApiResponse<Staff>();
  176. ret.TotalCount = Context.Staffs.Count<Staff>();
  177. List<Staff> retList = Context.Staffs.Skip<Staff>((pageIndex - 1) * pageSize).Take(pageSize).ToList<Staff>();
  178. ret.Results = retList;
  179. return ret;
  180. }
  181. public ListApiResponse<Staff> QueryInDepartment(int deptId,int pageIndex,int pageSize)
  182. {
  183. ListApiResponse<Staff> ret = new ListApiResponse<Staff>();
  184. var dept = Context.Departments.FirstOrDefault<Department>(d=>d.Id == deptId);
  185. string strancestors = $"{dept.ancestors},{deptId}";
  186. if (dept != null)
  187. {
  188. var retList = Context.Staffs.Where<Staff>(s =>
  189. s.Positions.Where<DepartmentPosition>(dp => dp.department.ancestors.StartsWith(strancestors) || dp.department.Id == deptId).Count() > 0 );
  190. ret.TotalCount = retList.Count();
  191. ret.Results = retList.Skip<Staff>((pageIndex - 1) * pageSize).Take(pageSize).ToList();
  192. }
  193. else
  194. {
  195. ret.Results = new List<Staff>();
  196. }
  197. return ret;
  198. }
  199. public ApiSaveResponse UpdateUser(SaveUserObject saveUser)
  200. {
  201. ApiSaveResponse ret = new ApiSaveResponse();
  202. Staff editObject = null;
  203. if (saveUser.staff.Id == 0)
  204. {
  205. editObject = Context.Staffs.FirstOrDefault(p=>p.Name == saveUser.staff.Name);
  206. }
  207. else
  208. {
  209. editObject = Context.Staffs.FirstOrDefault(p => p.Id == saveUser.staff.Id);
  210. }
  211. if(editObject == null)
  212. {
  213. ret.Success = false;
  214. ret.ErrorMessage = "用户不存在";
  215. }
  216. else
  217. {
  218. using (var t = Context.Database.BeginTransaction())
  219. {
  220. try
  221. {
  222. editObject.Account = saveUser.staff.Account;
  223. editObject.Department = saveUser.staff.Department;
  224. editObject.EntyDate = saveUser.staff.EntyDate;
  225. editObject.IsCalPerformsnce = saveUser.staff.IsCalPerformsnce;
  226. editObject.IsOnJob = saveUser.staff.IsOnJob;
  227. editObject.Mail = saveUser.staff.Mail;
  228. editObject.Memo = saveUser.staff.Memo;
  229. editObject.Mobile = saveUser.staff.Mobile;
  230. editObject.Name = saveUser.staff.Name;
  231. editObject.Password = saveUser.staff.Password;
  232. editObject.Sex = saveUser.staff.Sex;
  233. editObject.StaffGradeId = saveUser.staff.StaffGradeId;
  234. editObject.Status = saveUser.staff.Status;
  235. editObject.Tel = saveUser.staff.Tel;
  236. editObject.WorkPlace = saveUser.staff.WorkPlace;
  237. Context.SaveChanges();
  238. var temDP = Context.DepartmentPositions
  239. .Where<DepartmentPosition>(d =>
  240. d.departmentId == saveUser.deptId &&
  241. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  242. foreach (var depPosition in temDP)
  243. {
  244. Context.DepartmentPositions.Remove(depPosition);
  245. }
  246. Context.SaveChanges();
  247. DepartmentPosition dp = new DepartmentPosition();
  248. dp.departmentId = saveUser.deptId;
  249. dp.PositionId = saveUser.positionId;
  250. dp.StaffId = editObject.Id;
  251. Context.DepartmentPositions.Add(dp);
  252. Context.SaveChanges();
  253. t.Commit();
  254. }
  255. catch(Exception ex)
  256. {
  257. ret.Success = false;
  258. ret.ErrorMessage = ex.Message;
  259. }
  260. }
  261. }
  262. return ret;
  263. }
  264. public ApiSaveResponse SaveUser(SaveUserObject saveUser)
  265. {
  266. ApiSaveResponse ret = new ApiSaveResponse();
  267. using (var t = Context.Database.BeginTransaction())
  268. {
  269. try
  270. {
  271. Staff staff = saveUser.staff;
  272. if (staff.Id == 0)
  273. {
  274. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  275. if (temStaff != null)
  276. {
  277. ret.Success = false;
  278. ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  279. }
  280. else
  281. {
  282. Context.Staffs.Add(staff);
  283. Context.SaveChanges();
  284. DepartmentPosition dp = new DepartmentPosition();
  285. dp.departmentId = saveUser.deptId;
  286. dp.PositionId = saveUser.deptId;
  287. dp.StaffId = temStaff.Id;
  288. Context.DepartmentPositions.Add(dp);
  289. }
  290. }
  291. else
  292. {
  293. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  294. if (editObject != null)
  295. {
  296. editObject.Account = staff.Account;
  297. editObject.Department = staff.Department;
  298. editObject.EntyDate = staff.EntyDate;
  299. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  300. editObject.IsOnJob = staff.IsOnJob;
  301. editObject.Mail = staff.Mail;
  302. editObject.Memo = staff.Memo;
  303. editObject.Mobile = staff.Mobile;
  304. editObject.Name = staff.Name;
  305. editObject.Password = staff.Password;
  306. editObject.Sex = staff.Sex;
  307. editObject.StaffGradeId = staff.StaffGradeId;
  308. editObject.Status = staff.Status;
  309. editObject.Tel = staff.Tel;
  310. editObject.WorkPlace = staff.WorkPlace;
  311. Context.SaveChanges();
  312. var temDP = Context.DepartmentPositions
  313. .Where<DepartmentPosition>(d =>
  314. d.departmentId == saveUser.deptId &&
  315. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  316. foreach (var depPosition in temDP)
  317. {
  318. Context.DepartmentPositions.Remove(depPosition);
  319. }
  320. Context.SaveChanges();
  321. DepartmentPosition dp = new DepartmentPosition();
  322. dp.departmentId = saveUser.deptId;
  323. dp.PositionId = saveUser.positionId;
  324. dp.StaffId = editObject.Id;
  325. Context.DepartmentPositions.Add(dp);
  326. Context.SaveChanges();
  327. }
  328. else
  329. {
  330. ret.Success = false;
  331. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  332. }
  333. }
  334. t.Commit();
  335. ret.Success = true;
  336. }
  337. catch (Exception ex)
  338. {
  339. t.Rollback();
  340. ret.Success = false;
  341. ret.ErrorMessage = ex.Message;
  342. }
  343. }
  344. return ret;
  345. }
  346. [HttpPost]
  347. public ApiSaveResponse Save(Staff staff)
  348. {
  349. ApiSaveResponse ret = new ApiSaveResponse();
  350. try
  351. {
  352. if (staff.Id == 0)
  353. {
  354. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  355. if (temStaff != null)
  356. {
  357. temStaff.Account = staff.Account;
  358. temStaff.Department = staff.Department;
  359. temStaff.EntyDate = staff.EntyDate;
  360. temStaff.IsCalPerformsnce = staff.IsCalPerformsnce;
  361. temStaff.IsOnJob = staff.IsOnJob;
  362. temStaff.Mail = staff.Mail;
  363. temStaff.Memo = staff.Memo;
  364. temStaff.Mobile = staff.Mobile;
  365. temStaff.Name = staff.Name;
  366. temStaff.Password = staff.Password;
  367. temStaff.Sex = staff.Sex;
  368. temStaff.StaffGradeId = staff.StaffGradeId;
  369. temStaff.Status = staff.Status;
  370. temStaff.Tel = staff.Tel;
  371. temStaff.WorkPlace = staff.WorkPlace;
  372. Context.SaveChanges();
  373. ret.Success = false;
  374. ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  375. }
  376. else
  377. {
  378. Context.Staffs.Add(staff);
  379. }
  380. }
  381. else
  382. {
  383. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  384. if (editObject != null)
  385. {
  386. editObject.Account = staff.Account;
  387. editObject.Department = staff.Department;
  388. editObject.EntyDate = staff.EntyDate;
  389. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  390. editObject.IsOnJob = staff.IsOnJob;
  391. editObject.Mail = staff.Mail;
  392. editObject.Memo = staff.Memo;
  393. editObject.Mobile = staff.Mobile;
  394. editObject.Name = staff.Name;
  395. editObject.Password = staff.Password;
  396. editObject.Sex = staff.Sex;
  397. editObject.StaffGradeId = staff.StaffGradeId;
  398. editObject.Status = staff.Status;
  399. editObject.Tel = staff.Tel;
  400. editObject.WorkPlace = staff.WorkPlace;
  401. }
  402. else
  403. {
  404. ret.Success = false;
  405. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  406. }
  407. }
  408. Context.SaveChanges();
  409. ret.Success = true;
  410. }
  411. catch (Exception ex)
  412. {
  413. ret.Success = false;
  414. ret.ErrorMessage = ex.Message;
  415. }
  416. return ret;
  417. }
  418. }
  419. }