StaffController.cs 23 KB

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