StaffController.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  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. if(saveUser.staff.Account != null && editObject.Account != saveUser.staff.Account)
  223. editObject.Account = saveUser.staff.Account;
  224. if (saveUser.staff.Department != null && editObject.Department != saveUser.staff.Department)
  225. editObject.Department = saveUser.staff.Department;
  226. if (saveUser.staff.EntyDate != null && editObject.EntyDate != saveUser.staff.EntyDate)
  227. editObject.EntyDate = saveUser.staff.EntyDate;
  228. editObject.IsCalPerformsnce = saveUser.staff.IsCalPerformsnce;
  229. editObject.IsOnJob = saveUser.staff.IsOnJob;
  230. editObject.IsGradeAssess = saveUser.staff.IsGradeAssess;
  231. if (saveUser.staff.Mail != null && editObject.Mail != saveUser.staff.Mail)
  232. editObject.Mail = saveUser.staff.Mail;
  233. if (saveUser.staff.Memo != null && editObject.Memo != saveUser.staff.Memo)
  234. editObject.Memo = saveUser.staff.Memo;
  235. if (saveUser.staff.Mobile != null && editObject.Mobile != saveUser.staff.Mobile)
  236. editObject.Mobile = saveUser.staff.Mobile;
  237. if (saveUser.staff.Name != null && editObject.Name != saveUser.staff.Name)
  238. editObject.Name = saveUser.staff.Name;
  239. if (saveUser.staff.Password != null && saveUser.staff.Id >0)
  240. editObject.Password = utility.MD5Utility.GetMD5(saveUser.staff.Password);
  241. if (saveUser.staff.Sex != null && editObject.Sex != saveUser.staff.Sex)
  242. editObject.Sex = saveUser.staff.Sex;
  243. if (saveUser.staff.StaffGradeId != null && editObject.StaffGradeId != saveUser.staff.StaffGradeId)
  244. editObject.StaffGradeId = saveUser.staff.StaffGradeId;
  245. if (saveUser.staff.Status != null && editObject.Status != saveUser.staff.Status)
  246. editObject.Status = saveUser.staff.Status;
  247. if (saveUser.staff.Tel != null && editObject.Tel != saveUser.staff.Tel)
  248. editObject.Tel = saveUser.staff.Tel;
  249. if (saveUser.staff.WorkPlace != null && editObject.WorkPlace != saveUser.staff.WorkPlace)
  250. editObject.WorkPlace = saveUser.staff.WorkPlace;
  251. if(saveUser.staff.RegularDate != null && editObject.RegularDate != saveUser.staff.RegularDate)
  252. editObject.RegularDate = saveUser.staff.RegularDate;
  253. Context.SaveChanges();
  254. var temDP = Context.DepartmentPositions
  255. .Where<DepartmentPosition>(d =>
  256. d.departmentId == saveUser.deptId &&
  257. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  258. foreach (var depPosition in temDP)
  259. {
  260. Context.DepartmentPositions.Remove(depPosition);
  261. }
  262. Context.SaveChanges();
  263. DepartmentPosition dp = new DepartmentPosition();
  264. dp.departmentId = saveUser.deptId;
  265. dp.PositionId = saveUser.positionId;
  266. dp.StaffId = editObject.Id;
  267. Context.DepartmentPositions.Add(dp);
  268. Context.SaveChanges();
  269. t.Commit();
  270. }
  271. catch(Exception ex)
  272. {
  273. ret.Success = false;
  274. ret.ErrorMessage = ex.Message;
  275. }
  276. }
  277. }
  278. return ret;
  279. }
  280. public ApiSaveResponse SaveUser(SaveUserObject saveUser)
  281. {
  282. ApiSaveResponse ret = new ApiSaveResponse();
  283. using (var t = Context.Database.BeginTransaction())
  284. {
  285. try
  286. {
  287. Staff staff = saveUser.staff;
  288. if (staff.Id == 0)
  289. {
  290. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  291. if (temStaff != null)
  292. {
  293. ret.Success = false;
  294. ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  295. }
  296. else
  297. {
  298. if(string.IsNullOrEmpty(staff.Account) || string.IsNullOrEmpty(staff.Password))
  299. {
  300. ret.Success = false;
  301. ret.ErrorMessage = $"用户名或密码没有设定";
  302. return ret;
  303. }
  304. else
  305. {
  306. staff.Password = utility.MD5Utility.GetMD5(staff.Password);
  307. }
  308. Context.Staffs.Add(staff);
  309. Context.SaveChanges();
  310. DepartmentPosition dp = new DepartmentPosition();
  311. dp.departmentId = saveUser.deptId;
  312. dp.PositionId = saveUser.positionId;
  313. dp.StaffId = staff.Id;
  314. Context.DepartmentPositions.Add(dp);
  315. Context.SaveChanges();
  316. }
  317. }
  318. else
  319. {
  320. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  321. if (editObject != null)
  322. {
  323. //editObject.Account = staff.Account;
  324. editObject.Department = staff.Department;
  325. editObject.EntyDate = staff.EntyDate;
  326. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  327. editObject.IsOnJob = staff.IsOnJob;
  328. editObject.IsGradeAssess = staff.IsGradeAssess;
  329. editObject.Mail = staff.Mail;
  330. editObject.Memo = staff.Memo;
  331. editObject.Mobile = staff.Mobile;
  332. editObject.Name = staff.Name;
  333. //editObject.Password = utility.MD5Utility.GetMD5(staff.Password);
  334. editObject.Sex = staff.Sex;
  335. editObject.StaffGradeId = staff.StaffGradeId;
  336. editObject.Status = staff.Status;
  337. editObject.Tel = staff.Tel;
  338. editObject.WorkPlace = staff.WorkPlace;
  339. editObject.RegularDate =staff.RegularDate;
  340. Context.SaveChanges();
  341. if (saveUser.deptId > 0)
  342. {
  343. var temDP = Context.DepartmentPositions
  344. .Where<DepartmentPosition>(d =>
  345. d.departmentId == saveUser.deptId &&
  346. d.StaffId == editObject.Id).ToList<DepartmentPosition>();
  347. foreach (var depPosition in temDP)
  348. {
  349. Context.DepartmentPositions.Remove(depPosition);
  350. }
  351. Context.SaveChanges();
  352. DepartmentPosition dp = new DepartmentPosition();
  353. dp.departmentId = saveUser.deptId;
  354. dp.PositionId = saveUser.positionId;
  355. dp.StaffId = editObject.Id;
  356. Context.DepartmentPositions.Add(dp);
  357. Context.SaveChanges();
  358. }
  359. }
  360. else
  361. {
  362. ret.Success = false;
  363. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  364. }
  365. }
  366. t.Commit();
  367. ret.Success = true;
  368. }
  369. catch (Exception ex)
  370. {
  371. t.Rollback();
  372. ret.Success = false;
  373. ret.ErrorMessage = ex.Message;
  374. }
  375. }
  376. return ret;
  377. }
  378. [HttpPost]
  379. public ApiSaveResponse Save(Staff staff)
  380. {
  381. ApiSaveResponse ret = new ApiSaveResponse();
  382. try
  383. {
  384. if (staff.Id == 0)
  385. {
  386. Staff temStaff = Context.Staffs.Where<Staff>(x => x.Name == staff.Name).FirstOrDefault();
  387. if (temStaff != null)
  388. {
  389. if (staff.Account != null && staff.Account != temStaff.Account)
  390. temStaff.Account = staff.Account;
  391. if (staff.Department != null && staff.Department != temStaff.Department)
  392. temStaff.Department = staff.Department;
  393. if (staff.EntyDate != null && staff.EntyDate != temStaff.EntyDate)
  394. temStaff.EntyDate = staff.EntyDate;
  395. if (staff.IsCalPerformsnce != temStaff.IsCalPerformsnce)
  396. temStaff.IsCalPerformsnce = staff.IsCalPerformsnce;
  397. if (staff.IsGradeAssess != temStaff.IsGradeAssess)
  398. temStaff.IsGradeAssess = staff.IsGradeAssess;
  399. if (staff.IsOnJob != temStaff.IsOnJob)
  400. temStaff.IsOnJob = staff.IsOnJob;
  401. if (staff.Mail != null && staff.Mail != temStaff.Mail)
  402. {
  403. temStaff.Mail = staff.Mail;
  404. }
  405. if (staff.Memo != null && staff.Memo != temStaff.Memo)
  406. temStaff.Memo = staff.Memo;
  407. if (staff.Memo != null && staff.Memo != temStaff.Memo)
  408. temStaff.Mobile = staff.Mobile;
  409. if (staff.Sex != null && staff.Sex != temStaff.Sex)
  410. temStaff.Sex = staff.Sex;
  411. if (staff.StaffGradeId != null && staff.StaffGradeId != temStaff.StaffGradeId)
  412. temStaff.StaffGradeId = staff.StaffGradeId;
  413. if (staff.Status != null && staff.Status != temStaff.Status)
  414. temStaff.Status = staff.Status;
  415. if (staff.Tel != null && staff.Tel != temStaff.Tel)
  416. temStaff.Tel = staff.Tel;
  417. if (staff.WorkPlace != null && staff.WorkPlace != temStaff.WorkPlace)
  418. temStaff.WorkPlace = staff.WorkPlace;
  419. if(staff.RegularDate != null && staff.RegularDate != temStaff.RegularDate)
  420. {
  421. temStaff.RegularDate = staff.RegularDate;
  422. }
  423. Context.SaveChanges();
  424. //ret.Success = false;
  425. //ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
  426. }
  427. else
  428. {
  429. Context.Staffs.Add(staff);
  430. }
  431. }
  432. else
  433. {
  434. Staff editObject = Context.Staffs.Where<Staff>(x => x.Id == staff.Id).FirstOrDefault();
  435. if (editObject != null)
  436. {
  437. if (staff.Account != null && staff.Account != editObject.Account)
  438. editObject.Account = staff.Account;
  439. if (staff.Department != null && staff.Department != editObject.Department)
  440. editObject.Department = staff.Department;
  441. if (staff.EntyDate != null && staff.EntyDate != editObject.EntyDate)
  442. editObject.EntyDate = staff.EntyDate;
  443. if (staff.IsCalPerformsnce != editObject.IsCalPerformsnce)
  444. editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
  445. if (staff.IsGradeAssess != editObject.IsGradeAssess)
  446. editObject.IsGradeAssess = staff.IsGradeAssess;
  447. if (staff.IsOnJob != editObject.IsOnJob)
  448. editObject.IsOnJob = staff.IsOnJob;
  449. if (staff.Mail != null && staff.Mail != editObject.Mail)
  450. {
  451. editObject.Mail = staff.Mail;
  452. }
  453. if (staff.Memo != null && staff.Memo != editObject.Memo)
  454. editObject.Memo = staff.Memo;
  455. if (staff.Memo != null && staff.Memo != editObject.Memo)
  456. editObject.Mobile = staff.Mobile;
  457. if (staff.Sex != null && staff.Sex != editObject.Sex)
  458. editObject.Sex = staff.Sex;
  459. if (staff.StaffGradeId != null && staff.StaffGradeId != editObject.StaffGradeId)
  460. editObject.StaffGradeId = staff.StaffGradeId;
  461. if (staff.Status != null && staff.Status != editObject.Status)
  462. editObject.Status = staff.Status;
  463. if (staff.Tel != null && staff.Tel != editObject.Tel)
  464. editObject.Tel = staff.Tel;
  465. if (staff.WorkPlace != null && staff.WorkPlace != editObject.WorkPlace)
  466. editObject.WorkPlace = staff.WorkPlace;
  467. if(staff.RegularDate != null && staff.RegularDate != editObject.RegularDate)
  468. {
  469. editObject.RegularDate = staff.RegularDate;
  470. }
  471. }
  472. else
  473. {
  474. ret.Success = false;
  475. ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!";
  476. }
  477. }
  478. Context.SaveChanges();
  479. ret.Success = true;
  480. }
  481. catch (Exception ex)
  482. {
  483. ret.Success = false;
  484. ret.ErrorMessage = ex.Message;
  485. }
  486. return ret;
  487. }
  488. }
  489. }