StaffController.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  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. staff.Customers = null;
  153. staff.StaffGrade = null;
  154. staff.ItemStaffs = null;
  155. staff.Positions = null;
  156. staff.ReviewerItems = null;
  157. retStaffs.Add(staff);
  158. }
  159. }
  160. }
  161. }
  162. return retStaffs;
  163. }
  164. }
  165. catch (Exception ex)
  166. {
  167. throw ex;
  168. }
  169. }
  170. public Staff GetUser(int Id)
  171. {
  172. return Context.Staffs.FirstOrDefault(p=>p.Id == Id);
  173. }
  174. public Staff GetByName(string Name)
  175. {
  176. return Context.Staffs.FirstOrDefault(p => p.Name == Name);
  177. }
  178. public ListApiResponse<Staff> Query(int pageIndex,int pageSize)
  179. {
  180. ListApiResponse<Staff> ret = new ListApiResponse<Staff>();
  181. ret.TotalCount = Context.Staffs.Count<Staff>();
  182. List<Staff> retList = Context.Staffs.Skip<Staff>((pageIndex - 1) * pageSize).Take(pageSize).ToList<Staff>();
  183. ret.Results = retList;
  184. return ret;
  185. }
  186. public ListApiResponse<Staff> QueryInDepartment(int deptId,int pageIndex,int pageSize)
  187. {
  188. ListApiResponse<Staff> ret = new ListApiResponse<Staff>();
  189. var dept = Context.Departments.FirstOrDefault<Department>(d=>d.Id == deptId);
  190. string strancestors = $"{dept.ancestors},{deptId}";
  191. if (dept != null)
  192. {
  193. var retList = Context.Staffs.Where<Staff>(s =>
  194. s.Positions.Where<DepartmentPosition>(dp => dp.department.ancestors.StartsWith(strancestors) || dp.department.Id == deptId).Count() > 0 );
  195. ret.TotalCount = retList.Count();
  196. ret.Results = retList.Skip<Staff>((pageIndex - 1) * pageSize).Take(pageSize).ToList();
  197. }
  198. else
  199. {
  200. ret.Results = new List<Staff>();
  201. }
  202. return ret;
  203. }
  204. public ApiSaveResponse UpdateUser(SaveUserObject saveUser)
  205. {
  206. ApiSaveResponse ret = new ApiSaveResponse();
  207. Staff editObject = null;
  208. if (saveUser.staff.Id == 0)
  209. {
  210. editObject = Context.Staffs.FirstOrDefault(p=>p.Name == saveUser.staff.Name);
  211. }
  212. else
  213. {
  214. editObject = Context.Staffs.FirstOrDefault(p => p.Id == saveUser.staff.Id);
  215. }
  216. if(editObject == null)
  217. {
  218. ret.Success = false;
  219. ret.ErrorMessage = "用户不存在";
  220. }
  221. else
  222. {
  223. using (var t = Context.Database.BeginTransaction())
  224. {
  225. try
  226. {
  227. if(saveUser.staff.Account != null && editObject.Account != saveUser.staff.Account)
  228. editObject.Account = saveUser.staff.Account;
  229. if (saveUser.staff.Department != null && editObject.Department != saveUser.staff.Department)
  230. editObject.Department = saveUser.staff.Department;
  231. if (saveUser.staff.EntyDate != null && editObject.EntyDate != saveUser.staff.EntyDate)
  232. editObject.EntyDate = saveUser.staff.EntyDate;
  233. editObject.IsCalPerformsnce = saveUser.staff.IsCalPerformsnce;
  234. editObject.IsOnJob = saveUser.staff.IsOnJob;
  235. editObject.IsGradeAssess = saveUser.staff.IsGradeAssess;
  236. if (saveUser.staff.Mail != null && editObject.Mail != saveUser.staff.Mail)
  237. editObject.Mail = saveUser.staff.Mail;
  238. if (saveUser.staff.Memo != null && editObject.Memo != saveUser.staff.Memo)
  239. editObject.Memo = saveUser.staff.Memo;
  240. if (saveUser.staff.Mobile != null && editObject.Mobile != saveUser.staff.Mobile)
  241. editObject.Mobile = saveUser.staff.Mobile;
  242. if (saveUser.staff.Name != null && editObject.Name != saveUser.staff.Name)
  243. editObject.Name = saveUser.staff.Name;
  244. if (saveUser.staff.Password != null && saveUser.staff.Id >0)
  245. editObject.Password = utility.MD5Utility.GetMD5(saveUser.staff.Password);
  246. if (saveUser.staff.Sex != null && editObject.Sex != saveUser.staff.Sex)
  247. editObject.Sex = saveUser.staff.Sex;
  248. if (saveUser.staff.StaffGradeId != null && editObject.StaffGradeId != saveUser.staff.StaffGradeId)
  249. editObject.StaffGradeId = saveUser.staff.StaffGradeId;
  250. if (saveUser.staff.Status != null && editObject.Status != saveUser.staff.Status)
  251. editObject.Status = saveUser.staff.Status;
  252. if (saveUser.staff.Tel != null && editObject.Tel != saveUser.staff.Tel)
  253. editObject.Tel = saveUser.staff.Tel;
  254. if (saveUser.staff.WorkPlace != null && editObject.WorkPlace != saveUser.staff.WorkPlace)
  255. editObject.WorkPlace = saveUser.staff.WorkPlace;
  256. if(saveUser.staff.RegularDate != null && editObject.RegularDate != saveUser.staff.RegularDate)
  257. editObject.RegularDate = saveUser.staff.RegularDate;
  258. Context.SaveChanges();
  259. var temDP = Context.DepartmentPositions
  260. .Where<DepartmentPosition>(d =>
  261. d.departmentId == saveUser.deptId &&
  262. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  263. foreach (var depPosition in temDP)
  264. {
  265. Context.DepartmentPositions.Remove(depPosition);
  266. }
  267. Context.SaveChanges();
  268. DepartmentPosition dp = new DepartmentPosition();
  269. dp.departmentId = saveUser.deptId;
  270. dp.PositionId = saveUser.positionId;
  271. dp.StaffId = editObject.Id;
  272. Context.DepartmentPositions.Add(dp);
  273. Context.SaveChanges();
  274. t.Commit();
  275. }
  276. catch(Exception ex)
  277. {
  278. ret.Success = false;
  279. ret.ErrorMessage = ex.Message;
  280. }
  281. }
  282. }
  283. return ret;
  284. }
  285. public ApiSaveResponse SaveUser(SaveUserObject saveUser)
  286. {
  287. ApiSaveResponse ret = new ApiSaveResponse();
  288. using (var t = Context.Database.BeginTransaction())
  289. {
  290. try
  291. {
  292. Staff staff = saveUser.staff;
  293. if (staff.Id == 0)
  294. {
  295. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  296. if (temStaff != null)
  297. {
  298. ret.Success = false;
  299. ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  300. }
  301. else
  302. {
  303. if(string.IsNullOrEmpty(staff.Account) || string.IsNullOrEmpty(staff.Password))
  304. {
  305. ret.Success = false;
  306. ret.ErrorMessage = $"用户名或密码没有设定";
  307. return ret;
  308. }
  309. else
  310. {
  311. staff.Password = utility.MD5Utility.GetMD5(staff.Password);
  312. }
  313. Context.Staffs.Add(staff);
  314. Context.SaveChanges();
  315. DepartmentPosition dp = new DepartmentPosition();
  316. dp.departmentId = saveUser.deptId;
  317. dp.PositionId = saveUser.positionId;
  318. dp.StaffId = staff.Id;
  319. Context.DepartmentPositions.Add(dp);
  320. Context.SaveChanges();
  321. }
  322. }
  323. else
  324. {
  325. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  326. if (editObject != null)
  327. {
  328. //editObject.Account = staff.Account;
  329. editObject.Department = staff.Department;
  330. editObject.EntyDate = staff.EntyDate;
  331. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  332. editObject.IsOnJob = staff.IsOnJob;
  333. editObject.IsGradeAssess = staff.IsGradeAssess;
  334. editObject.Mail = staff.Mail;
  335. editObject.Memo = staff.Memo;
  336. editObject.Mobile = staff.Mobile;
  337. editObject.Name = staff.Name;
  338. //editObject.Password = utility.MD5Utility.GetMD5(staff.Password);
  339. editObject.Sex = staff.Sex;
  340. editObject.StaffGradeId = staff.StaffGradeId;
  341. editObject.Status = staff.Status;
  342. editObject.Tel = staff.Tel;
  343. editObject.WorkPlace = staff.WorkPlace;
  344. editObject.RegularDate =staff.RegularDate;
  345. Context.SaveChanges();
  346. if (saveUser.deptId > 0)
  347. {
  348. var temDP = Context.DepartmentPositions
  349. .Where<DepartmentPosition>(d =>
  350. d.departmentId == saveUser.deptId &&
  351. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  352. foreach (var depPosition in temDP)
  353. {
  354. Context.DepartmentPositions.Remove(depPosition);
  355. }
  356. Context.SaveChanges();
  357. DepartmentPosition dp = new DepartmentPosition();
  358. dp.departmentId = saveUser.deptId;
  359. dp.PositionId = saveUser.positionId;
  360. dp.StaffId = editObject.Id;
  361. Context.DepartmentPositions.Add(dp);
  362. Context.SaveChanges();
  363. }
  364. }
  365. else
  366. {
  367. ret.Success = false;
  368. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  369. }
  370. }
  371. t.Commit();
  372. ret.Success = true;
  373. }
  374. catch (Exception ex)
  375. {
  376. t.Rollback();
  377. ret.Success = false;
  378. ret.ErrorMessage = ex.Message;
  379. }
  380. }
  381. return ret;
  382. }
  383. [HttpPost]
  384. public ApiSaveResponse Save(Staff staff)
  385. {
  386. ApiSaveResponse ret = new ApiSaveResponse();
  387. try
  388. {
  389. if (staff.Id == 0)
  390. {
  391. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  392. if (temStaff != null)
  393. {
  394. if (staff.Account != null && staff.Account != temStaff.Account)
  395. temStaff.Account = staff.Account;
  396. if (staff.Department != null && staff.Department != temStaff.Department)
  397. temStaff.Department = staff.Department;
  398. if (staff.EntyDate != null && staff.EntyDate != temStaff.EntyDate)
  399. temStaff.EntyDate = staff.EntyDate;
  400. if (staff.IsCalPerformsnce != temStaff.IsCalPerformsnce)
  401. temStaff.IsCalPerformsnce = staff.IsCalPerformsnce;
  402. if (staff.IsGradeAssess != temStaff.IsGradeAssess)
  403. temStaff.IsGradeAssess = staff.IsGradeAssess;
  404. if (staff.IsOnJob != temStaff.IsOnJob)
  405. temStaff.IsOnJob = staff.IsOnJob;
  406. if (staff.Mail != null && staff.Mail != temStaff.Mail)
  407. {
  408. temStaff.Mail = staff.Mail;
  409. }
  410. if (staff.Memo != null && staff.Memo != temStaff.Memo)
  411. temStaff.Memo = staff.Memo;
  412. if (staff.Memo != null && staff.Memo != temStaff.Memo)
  413. temStaff.Mobile = staff.Mobile;
  414. if (staff.Sex != null && staff.Sex != temStaff.Sex)
  415. temStaff.Sex = staff.Sex;
  416. if (staff.StaffGradeId != null && staff.StaffGradeId != temStaff.StaffGradeId)
  417. temStaff.StaffGradeId = staff.StaffGradeId;
  418. if (staff.Status != null && staff.Status != temStaff.Status)
  419. temStaff.Status = staff.Status;
  420. if (staff.Tel != null && staff.Tel != temStaff.Tel)
  421. temStaff.Tel = staff.Tel;
  422. if (staff.WorkPlace != null && staff.WorkPlace != temStaff.WorkPlace)
  423. temStaff.WorkPlace = staff.WorkPlace;
  424. if(staff.RegularDate != null && staff.RegularDate != temStaff.RegularDate)
  425. {
  426. temStaff.RegularDate = staff.RegularDate;
  427. }
  428. Context.SaveChanges();
  429. //ret.Success = false;
  430. //ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  431. }
  432. else
  433. {
  434. Context.Staffs.Add(staff);
  435. }
  436. }
  437. else
  438. {
  439. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  440. if (editObject != null)
  441. {
  442. if (staff.Account != null && staff.Account != editObject.Account)
  443. editObject.Account = staff.Account;
  444. if (staff.Department != null && staff.Department != editObject.Department)
  445. editObject.Department = staff.Department;
  446. if (staff.EntyDate != null && staff.EntyDate != editObject.EntyDate)
  447. editObject.EntyDate = staff.EntyDate;
  448. if (staff.IsCalPerformsnce != editObject.IsCalPerformsnce)
  449. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  450. if (staff.IsGradeAssess != editObject.IsGradeAssess)
  451. editObject.IsGradeAssess = staff.IsGradeAssess;
  452. if (staff.IsOnJob != editObject.IsOnJob)
  453. editObject.IsOnJob = staff.IsOnJob;
  454. if (staff.Mail != null && staff.Mail != editObject.Mail)
  455. {
  456. editObject.Mail = staff.Mail;
  457. }
  458. if (staff.Memo != null && staff.Memo != editObject.Memo)
  459. editObject.Memo = staff.Memo;
  460. if (staff.Memo != null && staff.Memo != editObject.Memo)
  461. editObject.Mobile = staff.Mobile;
  462. if (staff.Sex != null && staff.Sex != editObject.Sex)
  463. editObject.Sex = staff.Sex;
  464. if (staff.StaffGradeId != null && staff.StaffGradeId != editObject.StaffGradeId)
  465. editObject.StaffGradeId = staff.StaffGradeId;
  466. if (staff.Status != null && staff.Status != editObject.Status)
  467. editObject.Status = staff.Status;
  468. if (staff.Tel != null && staff.Tel != editObject.Tel)
  469. editObject.Tel = staff.Tel;
  470. if (staff.WorkPlace != null && staff.WorkPlace != editObject.WorkPlace)
  471. editObject.WorkPlace = staff.WorkPlace;
  472. if(staff.RegularDate != null && staff.RegularDate != editObject.RegularDate)
  473. {
  474. editObject.RegularDate = staff.RegularDate;
  475. }
  476. }
  477. else
  478. {
  479. ret.Success = false;
  480. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  481. }
  482. }
  483. Context.SaveChanges();
  484. ret.Success = true;
  485. }
  486. catch (Exception ex)
  487. {
  488. ret.Success = false;
  489. ret.ErrorMessage = ex.Message;
  490. }
  491. return ret;
  492. }
  493. }
  494. }