using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data; using wispro.sp.entity; using wispro.sp.share; using System.Linq; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using wispro.sp.entity.workflowDefine; using Microsoft.EntityFrameworkCore; namespace wispro.sp.api.Controllers { [Authorize] [Route("api/[controller]/[action]")] [ApiController] public class StaffController : ControllerBase { private static List CacheList = new List(); spDbContext Context; public StaffController(spDbContext context) { Context = context; } public List GetAll() { return Context.Staffs.ToList(); } private List GetStaffList(dynamic dynamic,UserField userField) { try { Staff temUser = null; switch (userField.UserConditionType) { case UserConditionType.Staff: //UserField user = new UserField(); //user.UserConditionType = UserConditionType.UserDepartmentPosition; //user.Department = "120"; //user.Positon = "6"; //System.Diagnostics.Debug.WriteLine(System.Text.Json.JsonSerializer.Serialize(user)); switch (userField.UserType) { case UserType.BindObjectProperty: if (dynamic == null) { return null; } else { var retObj = share.Utility.ObjectHelper.GetPropertyValue(userField.UserValue, dynamic); if (retObj is Staff) { return new List() { (Staff)retObj }; } else { if (retObj is List) { return (List)retObj; } } } break; case UserType.DoActionUser: break; case UserType.LoginUser: temUser = Context.Staffs.FirstOrDefault(s => s.Name == User.Identity.Name); return new List() { temUser }; break; case UserType.Staff: temUser = Context.Staffs.FirstOrDefault(s => s.Id == int.Parse(userField.UserValue.ToString())); if (temUser != null) { return new List() { temUser }; } break; } break; case UserConditionType.Department: var retList = Context.DepartmentPositions.Where(d => d.departmentId == int.Parse(userField.Department)).Select(p => p.Staff).ToList(); return retList.Where(s=>s.IsOnJob ).ToList(); break; case UserConditionType.Position: var query = Context.Staffs.Where(s=>true); var queryList = from u in query where ((from dp in Context.DepartmentPositions.Where(d => d.PositionId == int.Parse(userField.Positon)) select dp.StaffId).Contains(u.Id)) select u; return queryList.ToList(); break; case UserConditionType.UserDepartment: break; case UserConditionType.UserDepartmentPosition: break; case UserConditionType.DepartmentPosition: var retList1 = Context.DepartmentPositions.Where(d => d.departmentId == int.Parse(userField.Department) && d.PositionId == int.Parse(userField.Positon) ) .Select(p => p.Staff).ToList(); return retList1; break; } return new List(); } catch(Exception ex) { throw ex; } } public List GetReviewers(int itemId, int appealTypeId) { try { var item = Context.PerformanceItems .Include(p=>p.Reviewer) .Include(p=>p.ItemStaffs).ThenInclude(p=>p.DoPerson) .Include(p=>p.PreOastaff) .Include(p=>p.Customer) .FirstOrDefault(p => p.Id == itemId); var apType = Context.AppealTypes.FirstOrDefault(p => p.Id == appealTypeId); UserField user = new UserField(); if (String.IsNullOrEmpty(apType.ReviewerExpress)) { return Context.Staffs.ToList(); } else { List lstUserField = new List(); if (apType.ReviewerExpress.StartsWith("p.")) { UserField userField = new UserField(); userField.UserConditionType = UserConditionType.Staff; userField.UserType = UserType.BindObjectProperty; userField.UserValue = apType.ReviewerExpress.Replace("p.", "").Trim(); lstUserField.Add(userField); } else { lstUserField = System.Text.Json.JsonSerializer.Deserialize>(apType.ReviewerExpress); //UserField userField = System.Text.Json.JsonSerializer.Deserialize(apType.ReviewerExpress); } List retStaffs = new List(); foreach(UserField uf in lstUserField) { var temStaffs = GetStaffList(item, uf); if(temStaffs != null) { foreach(var staff in temStaffs) { if(retStaffs.FirstOrDefault(s=>s.Id == staff.Id) == null) { retStaffs.Add(staff); } } } } return retStaffs; } } catch (Exception ex) { throw ex; } } public Staff GetUser(int Id) { return Context.Staffs.FirstOrDefault(p=>p.Id == Id); } public Staff GetByName(string Name) { return Context.Staffs.FirstOrDefault(p => p.Name == Name); } public ListApiResponse Query(int pageIndex,int pageSize) { ListApiResponse ret = new ListApiResponse(); ret.TotalCount = Context.Staffs.Count(); List retList = Context.Staffs.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); ret.Results = retList; return ret; } public ListApiResponse QueryInDepartment(int deptId,int pageIndex,int pageSize) { ListApiResponse ret = new ListApiResponse(); var dept = Context.Departments.FirstOrDefault(d=>d.Id == deptId); string strancestors = $"{dept.ancestors},{deptId}"; if (dept != null) { var retList = Context.Staffs.Where(s => s.Positions.Where(dp => dp.department.ancestors.StartsWith(strancestors) || dp.department.Id == deptId).Count() > 0 ); ret.TotalCount = retList.Count(); ret.Results = retList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } else { ret.Results = new List(); } return ret; } public ApiSaveResponse UpdateUser(SaveUserObject saveUser) { ApiSaveResponse ret = new ApiSaveResponse(); Staff editObject = null; if (saveUser.staff.Id == 0) { editObject = Context.Staffs.FirstOrDefault(p=>p.Name == saveUser.staff.Name); } else { editObject = Context.Staffs.FirstOrDefault(p => p.Id == saveUser.staff.Id); } if(editObject == null) { ret.Success = false; ret.ErrorMessage = "用户不存在"; } else { using (var t = Context.Database.BeginTransaction()) { try { editObject.Account = saveUser.staff.Account; editObject.Department = saveUser.staff.Department; editObject.EntyDate = saveUser.staff.EntyDate; editObject.IsCalPerformsnce = saveUser.staff.IsCalPerformsnce; editObject.IsOnJob = saveUser.staff.IsOnJob; editObject.Mail = saveUser.staff.Mail; editObject.Memo = saveUser.staff.Memo; editObject.Mobile = saveUser.staff.Mobile; editObject.Name = saveUser.staff.Name; editObject.Password = saveUser.staff.Password; editObject.Sex = saveUser.staff.Sex; editObject.StaffGradeId = saveUser.staff.StaffGradeId; editObject.Status = saveUser.staff.Status; editObject.Tel = saveUser.staff.Tel; editObject.WorkPlace = saveUser.staff.WorkPlace; Context.SaveChanges(); var temDP = Context.DepartmentPositions .Where(d => d.departmentId == saveUser.deptId && d.StaffId == editObject.Id).ToList(); foreach (var depPosition in temDP) { Context.DepartmentPositions.Remove(depPosition); } Context.SaveChanges(); DepartmentPosition dp = new DepartmentPosition(); dp.departmentId = saveUser.deptId; dp.PositionId = saveUser.positionId; dp.StaffId = editObject.Id; Context.DepartmentPositions.Add(dp); Context.SaveChanges(); t.Commit(); } catch(Exception ex) { ret.Success = false; ret.ErrorMessage = ex.Message; } } } return ret; } public ApiSaveResponse SaveUser(SaveUserObject saveUser) { ApiSaveResponse ret = new ApiSaveResponse(); using (var t = Context.Database.BeginTransaction()) { try { Staff staff = saveUser.staff; if (staff.Id == 0) { Staff temStaff = Context.Staffs.Where(x => x.Name == staff.Name).FirstOrDefault(); if (temStaff != null) { ret.Success = false; ret.ErrorMessage = $"用户【{staff.Name}】已存在!"; } else { Context.Staffs.Add(staff); Context.SaveChanges(); DepartmentPosition dp = new DepartmentPosition(); dp.departmentId = saveUser.deptId; dp.PositionId = saveUser.deptId; dp.StaffId = temStaff.Id; Context.DepartmentPositions.Add(dp); } } else { Staff editObject = Context.Staffs.Where(x => x.Id == staff.Id).FirstOrDefault(); if (editObject != null) { editObject.Account = staff.Account; editObject.Department = staff.Department; editObject.EntyDate = staff.EntyDate; editObject.IsCalPerformsnce = staff.IsCalPerformsnce; editObject.IsOnJob = staff.IsOnJob; editObject.Mail = staff.Mail; editObject.Memo = staff.Memo; editObject.Mobile = staff.Mobile; editObject.Name = staff.Name; editObject.Password = staff.Password; editObject.Sex = staff.Sex; editObject.StaffGradeId = staff.StaffGradeId; editObject.Status = staff.Status; editObject.Tel = staff.Tel; editObject.WorkPlace = staff.WorkPlace; Context.SaveChanges(); var temDP = Context.DepartmentPositions .Where(d => d.departmentId == saveUser.deptId && d.StaffId == editObject.Id).ToList(); foreach (var depPosition in temDP) { Context.DepartmentPositions.Remove(depPosition); } Context.SaveChanges(); DepartmentPosition dp = new DepartmentPosition(); dp.departmentId = saveUser.deptId; dp.PositionId = saveUser.positionId; dp.StaffId = editObject.Id; Context.DepartmentPositions.Add(dp); Context.SaveChanges(); } else { ret.Success = false; ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!"; } } t.Commit(); ret.Success = true; } catch (Exception ex) { t.Rollback(); ret.Success = false; ret.ErrorMessage = ex.Message; } } return ret; } [HttpPost] public ApiSaveResponse Save(Staff staff) { ApiSaveResponse ret = new ApiSaveResponse(); try { if (staff.Id == 0) { Staff temStaff = Context.Staffs.Where(x => x.Name == staff.Name).FirstOrDefault(); if (temStaff != null) { temStaff.Account = staff.Account; temStaff.Department = staff.Department; temStaff.EntyDate = staff.EntyDate; temStaff.IsCalPerformsnce = staff.IsCalPerformsnce; temStaff.IsOnJob = staff.IsOnJob; temStaff.Mail = staff.Mail; temStaff.Memo = staff.Memo; temStaff.Mobile = staff.Mobile; temStaff.Name = staff.Name; temStaff.Password = staff.Password; temStaff.Sex = staff.Sex; temStaff.StaffGradeId = staff.StaffGradeId; temStaff.Status = staff.Status; temStaff.Tel = staff.Tel; temStaff.WorkPlace = staff.WorkPlace; Context.SaveChanges(); ret.Success = false; ret.ErrorMessage = $"用户【{staff.Name}】已存在!"; } else { Context.Staffs.Add(staff); } } else { Staff editObject = Context.Staffs.Where(x => x.Id == staff.Id).FirstOrDefault(); if (editObject != null) { editObject.Account = staff.Account; editObject.Department = staff.Department; editObject.EntyDate = staff.EntyDate; editObject.IsCalPerformsnce = staff.IsCalPerformsnce; editObject.IsOnJob = staff.IsOnJob; editObject.Mail = staff.Mail; editObject.Memo = staff.Memo; editObject.Mobile = staff.Mobile; editObject.Name = staff.Name; editObject.Password = staff.Password; editObject.Sex = staff.Sex; editObject.StaffGradeId = staff.StaffGradeId; editObject.Status = staff.Status; editObject.Tel = staff.Tel; editObject.WorkPlace = staff.WorkPlace; } else { ret.Success = false; ret.ErrorMessage = $"编号为【{staff.Id}】的用户不存在!"; } } Context.SaveChanges(); ret.Success = true; } catch (Exception ex) { ret.Success = false; ret.ErrorMessage = ex.Message; } return ret; } } }