using Dapper; using Newtonsoft.Json; using System.Data; using YLErp.Abstract; using YLErp.BLL; using YLErp.DBModels.Consts; using YLErp.Modules.DictionaryModule; using YLErp.Modules.SystemModule; namespace YLErp.Web.Controllers { public class SystemController : BaseController { readonly ErpBaseContext basedb = new ErpBaseContext(); readonly YLContext yLContext = new YLContext(); private IKafkaProduce _kafkaProduce; public SystemController( IKafkaProduce kafkaProduce) { _kafkaProduce = kafkaProduce; } protected override void Dispose(bool disposing) { yldb.Dispose(); basedb.Dispose(); base.Dispose(disposing); } public ActionResult RemoveColumnConfig() { var uid = CurUser.UserId; var toremove = yldb.configcolumn.Where(c => c.userid == uid); yldb.configcolumn.RemoveRange(toremove); yldb.SaveChanges(); return Content(""); } [MyAuthorize("系统管理-部门管理")] public ActionResult DepartmentView() { if (!CurUser.HasRight("系统管理-部门管理")) { return NoRightPage(); } return View(); } [HttpPost] public JsonResult DepartmentJson(int parentid = 0) { IEnumerable obj; if (parentid == 0) { obj = from o in DepartmentBLL.Departments select new TreeNode { id = o.Id, name = o.Name, pId = o.PId, tag = o.DepartmentType, open = o.PId == 0, area = o.Area, tel = o.Tel, state = o.State, code = o.Code, description = o.Description }; } else { obj = from o in DepartmentBLL.GetDepartmentByParent(parentid) select new TreeNode { id = o.Id, name = o.Name, pId = o.PId, tag = o.DepartmentType, open = o.PId == 0, area = o.Area, tel = o.Tel, state = o.State, code = o.Code, description = o.Description }; } return JsonSuccessData(obj.ToArray()); } [HttpPost] public JsonResult UpdateDepartment(int id, IFormCollection collection) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var dept = basedb.Departments.FirstOrDefault(o => o.Id == id); if (dept == null) { dept = new Department { PId = int.Parse(collection["pid"]) }; basedb.Departments.Add(dept); } if (dept.DepartmentType == null) { dept.DepartmentType = ""; } dept.Name = collection["name"]; dept.DepartmentType = collection["departmenttype"]; dept.Tel = collection["tel"]; dept.Area = collection["area"]; dept.Code = collection["code"]; dept.Description = collection["description"]; basedb.SaveChanges(); DepartmentsController.IsListOld = true; DepartmentBLL.UpdateDepartments(); return Json(dept); } [HttpPost] public JsonResult UpdateDepartmentParent(int id, int pid) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var dept = basedb.Departments.FirstOrDefault(o => o.Id == id); if (dept == null) { return JsonError("找不到部门"); } else if (DepartmentBLL.IsParnet(id, pid)) { return JsonError("不能拖动到子部门下"); } else { dept.PId = pid; basedb.SaveChanges(); DepartmentsController.IsListOld = true; DepartmentBLL.UpdateDepartments(); } return JsonSuccess(); } [HttpPost] public JsonResult DeleteDepartment(int id) { if (!CurUser.HasRight("系统管理-部门管理")) { return Json("没有权限"); } var dept = basedb.Departments.FirstOrDefault(o => o.Id == id); if (dept == null) { return Json("找不到节点"); } else { if (basedb.Departments.Where(o => o.PId == id).Count() > 0) { return Json("要删除的节点有子节点,请先删除子节点"); } else { basedb.Database.ExecuteSqlRaw(string.Format("delete from departmentusers where departmentid={0}", id)); basedb.Departments.Remove(dept); basedb.SaveChanges(); DepartmentsController.IsListOld = true; DepartmentBLL.UpdateDepartments(); } } return JsonSuccess(); } [HttpPost] public JsonResult DepartmentUser(int id) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var list = from o in basedb.DepartmentUsers join u in basedb.SystemUsers on o.UserId equals u.Id where o.DepartmentId == id select new { userid = o.UserId, username = u.LoginName, workno = u.Name, ismanager = o.IsManager }; return JsonSuccessData(list); } [HttpPost] public JsonResult DepartmentAddUser(int id, int userid) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } if (userid < 1) { return JsonError("请选择用户"); } var r = basedb.SystemUsers.FirstOrDefault(o => o.Id == userid); //判断用户状态,为1表示“禁用”,则返回false if (r.State == 1) { return JsonError("当前用户为禁用状态,无法分配部门"); } var du = (from o in basedb.DepartmentUsers where o.DepartmentId == id && o.UserId == userid select o).FirstOrDefault(); if (du == null) { du = new DepartmentUser { UserId = userid, DepartmentId = id }; basedb.DepartmentUsers.Add(du); basedb.SaveChanges(); DepartmentBLL.UpdateDepartments(); } return JsonSuccess(); } [HttpPost] public JsonResult DepartmentRemoveUser(int id, IFormCollection collection) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var users = collection["users[]"]; if (!users.Any()) { return JsonError("请选择需要移除的部门人员"); } var userlist = users.ToString().Split(','); foreach (var s in userlist) { int.TryParse(s, out var i); if (i > 0) { var du = basedb.DepartmentUsers.FirstOrDefault(o => o.DepartmentId == id && o.UserId == i); if (du != null) { basedb.DepartmentUsers.Remove(du); } } } basedb.SaveChanges(); DepartmentBLL.UpdateDepartments(); return JsonSuccess(); } [HttpPost] public JsonResult DepartmentSetManager(int id, IFormCollection collection) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var managers = collection["managers[]"]; var managerlist = managers.ToString().Split(','); foreach (var s in managerlist) { int.TryParse(s, out var i); if (i > 0) { var du = basedb.DepartmentUsers.FirstOrDefault(o => o.DepartmentId == id && o.UserId == i); if (du != null) { du.IsManager = 1; } } } basedb.SaveChanges(); DepartmentBLL.UpdateDepartments(); return JsonSuccess(); } [HttpPost] public JsonResult DepartmentRemoveManager(int id, IFormCollection collection) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var managers = collection["managers[]"]; var managerlist = managers.ToString().Split(','); foreach (var s in managerlist) { int.TryParse(s, out var i); if (i > 0) { var du = basedb.DepartmentUsers.FirstOrDefault(o => o.DepartmentId == id && o.UserId == i); if (du != null) { du.IsManager = 0; } } } basedb.SaveChanges(); DepartmentBLL.UpdateDepartments(); return JsonSuccess(); } public ActionResult DepartmentUserEdit(int id) { if (!CurUser.HasRight("系统管理-部门管理")) { return NoRightPage(); } var d = basedb.Departments.FirstOrDefault(o => o.Id == id); return View(d); } /*---------------- Role ----------------------------*/ [MyAuthorize("系统管理-角色管理")] public ActionResult RoleIndex() { return View(); } [MyAuthorize("系统管理-角色管理")] [HttpPost] public JsonResult RoleQuery(string sidx, string sord, int page, int rows, string name) { var userSumQuery = from a in basedb.RoleUsers group a by a.RoleId into g select new { RoleId = (int?)g.Key, Num = (int?)g.Count() }; var roleQuery = from r in basedb.Roles join a in userSumQuery on r.Id equals a.RoleId into aa from ru in aa.DefaultIfEmpty() select new RoleDto { Id = r.Id, Name = r.Name, OptDate = r.OptDate, Remark = r.Remark, Position = r.Position, RoleUserCount = ru.Num ?? 0, }; if (!string.IsNullOrWhiteSpace(name)) { name = name.Trim(); roleQuery = roleQuery.Where(o => o.Name.Contains(name)); } var queryModel = new PagedQueryModel { PageIndex = page, PageSize = rows }; if (string.IsNullOrWhiteSpace(sidx)) { queryModel.SortExpression = $"{nameof(Role.OptDate)} desc,{nameof(RoleDto.Id)} desc"; } else { queryModel.SortExpression = sidx + " " + sord; } var pagedList = roleQuery.ToPagedList(queryModel); return JsonForJqGrid(pagedList); } public ActionResult RoleView(int id) { if (!CurUser.HasRight("系统管理-角色管理")) { return NoRightPage(); } var r = basedb.Roles.FirstOrDefault(n => n.Id == id) ?? new Role(); if (r.Id > 0) { ViewBag.Funtions = (from o in basedb.RoleFunctions where o.RoleId == id select o).ToList(); ViewBag.Users = (from o in basedb.RoleUsers where o.RoleId == id select o).ToList(); } return View(r); } public ActionResult RoleEdit(int id) { if (!CurUser.HasRight("系统管理-角色管理")) { return NoRightPage(); } var r = basedb.Roles.FirstOrDefault(n => n.Id == id) ?? new Role(); return View(r); } [MyAuthorize("系统管理-角色管理")] [HttpPost] public ActionResult RoleEdit(int id, string name, string remark, IFormCollection collection) { var r = basedb.Roles.FirstOrDefault(o => o.Id == id); if (r == null) { r = new Role(); basedb.Roles.Add(r); } r.Name = name; r.Remark = remark; r.OptDate = DateTime.Now; var positions = new List(); if (collection["IsTrader"] == "on") { positions.Add(new RolePosition { Name = "Trader" }); } r.Position = positions.ToJson(); //判断不能重名 if (basedb.Roles.Any(role => role.Name == r.Name && role.Id != r.Id)) { ViewBag.Error = "不能保存同名角色"; return View(r); } basedb.SaveChanges(); return Redirect("../RoleView/" + r.Id); } public ActionResult RoleFunctionEdit(int id) { if (!CurUser.HasRight("系统管理-角色管理")) { return NoRightPage(); } var role = basedb.Roles.FirstOrDefault(n => n.Id == id); if (role == null) { return Content("角色不存在"); } var roleFunctions = basedb.RoleFunctions.Where(o => o.RoleId == id).ToList(); var model = new RoleEditModel { Role = role, RoleFunctions = roleFunctions }; return View(model); } [HttpPost] public ActionResult RoleFunctionEditFormJson(RoleFunctionReq req) { if (Request.Form.TryGetValue("rights", out var rights) && rights.Count > 0) { req.rights = rights; } if (!CurUser.HasRight("系统管理-角色管理")) { return JsonError("当前登录用户没有用户管理权限"); } var role = new SysRoleService(CurUser).SaveRoleFunctions(req); return JsonSuccess("修改成功", role); } [HttpPost] public JsonResult DeleteRole(int id) { //if (!CurUser.HasRight("系统管理-部门管理")) //{ // return JsonError("没有权限"); //} var usercount = basedb.RoleUsers.Where(o => o.RoleId == id).Count(); if (usercount > 0) { return JsonError("已有用户使用此角色,不能删除"); } else { if (yLContext.approvalprocess.Any(x => x.roleId == id)) { return JsonError("已有审批流程在使用,不能删除"); }; var r = basedb.Roles.FirstOrDefault(o => o.Id == id); if (r == null) { return JsonError("找不到节点"); } else { basedb.Roles.Remove(r); basedb.SaveChanges(); } } return JsonSuccess(); } [HttpPost] public JsonResult GetParentFunctionList(int id) { var f = basedb.Functions.FirstOrDefault(o => o.Id == id); var functionList = basedb.Functions.Where(o => o.Name == f.ParentName).OrderBy(o => o.Sort).Select(o => o.Id).FirstOrDefault(); return Json(JsonConvert.SerializeObject(functionList)); } /*----------------------User------------------------------*/ [MyAuthorize("系统管理-用户管理")] public ActionResult UserIndex() { if (!CurUser.HasRight("系统管理-用户管理")) { return NoRightPage(); } return View(); } [MyAuthorize("系统管理-用户管理")] [HttpPost] public JsonResult UserSearchQuery(SystemUserReq req) { var result = new UserBLL().SearchSystemUserList(req); foreach (var item in result.rows) { item.UserGroup = ConsUserGroup.GetGroupDesc(item.UserGroup); } return Json(result); } [HttpPost] public JsonResult UserQuery(UserQueryModel model) { if (!CurUser.HasRight("系统管理-用户管理")) { return JsonError("没有权限"); } string s = ViewUser.BaseSql; //var role = Request.Form["role"] + ""; //var department = Request.Form["department"] + ""; //var name = Request.Form["Name"] + ""; if (!string.IsNullOrWhiteSpace(model.Name)) { s += $" and u.Name like '%{model.Name}%' "; } if (!string.IsNullOrWhiteSpace(model.role)) { s += $" and u.Id in (select userid from roleusers ru join roles r on ru.roleid=r.Id where r.name like '%{model.role}%')"; //parameters.Add(new SqlParameter("Role", string.Format("%{0}%", role))); } if (!string.IsNullOrWhiteSpace(model.department)) { s += $" and u.Id in (select userid from departmentusers du join departments d on du.departmentid=d.Id where d.name like '%{model.department}%')"; //parameters.Add(new SqlParameter("Department", string.Format("%{0}%", department))); } //var nodept = Request.Form["NoDept"] + ""; if (model.NoDept == "true") { s += " and not exists (select 1 from departmentusers du where du.userid=u.Id)"; } //bool.TryParse(Request.Form["State1"], out var state1); //bool.TryParse(Request.Form["State2"], out var state2); if (model.State1 ^ model.State2) { if (model.State1) { s += " and u.state=0"; } if (model.State2) { s += " and u.state=1"; } } var order = ""; if (!string.IsNullOrEmpty(model.sidx)) { order = model.sidx + " " + model.sord; s += " order by " + order; } var query = basedb.Database.GetDbConnection().Query(s).ToArray(); var totalrow = query.Count(); var pagenum = (totalrow - totalrow % model.rows) / model.rows + 1; var newquery = (from o in query select o).Take(model.rows * model.page).Skip(model.page * model.rows - model.rows).ToList();// 这种写法是在内存中运算 foreach (var u in newquery) { var q1 = (from o in basedb.DepartmentUsers from p in basedb.Departments where o.UserId == u.id && o.DepartmentId == p.Id select p.Name); foreach (var departname in q1) { if (u.Departments == null) { u.Departments = departname; } else { u.Departments += "," + departname; } } var q2 = (from o in basedb.RoleUsers from p in basedb.Roles where o.UserId == u.id && o.RoleId == p.Id select p.Name); foreach (var rolename in q2) { if (u.Roles == null) { u.Roles = rolename; } else { u.Roles += "," + rolename; } } } //int records = newquery.Count(); var jsonData = new { total = pagenum, page = model.page, records = totalrow, rows = newquery }; return Json(jsonData); } public ActionResult UserView(int id) { if (!CurUser.HasRight("系统管理-用户管理")) { return NoRightPage(); } var r = basedb.SystemUsers.FirstOrDefault(o => o.Id == id); if (r == null) { r = new SystemUser(); } else { var roles = (from o in basedb.RoleUsers from p in basedb.Roles where o.UserId == id && p.Id == o.RoleId select p.Name).ToList(); r.RoleTypeName = string.Join(",", roles); ViewData["AccountPostStr"] = new UserBLL().ToAccountPost(r.AccountPost); } return View(r); } public ActionResult UserEdit(int id) { if (!CurUser.HasRight("系统管理-用户管理")) { return NoRightPage(); } var r = basedb.SystemUsers.FirstOrDefault(o => o.Id == id); if (r == null) { r = new SystemUser(); } if (string.IsNullOrWhiteSpace(r.RoleType)) { var roles = (from o in basedb.RoleUsers where o.UserId == id select o.RoleId).ToList(); r.RoleType = string.Join(",", roles); } r.Password = null; return View(r); } [MyAuthorize("系统管理-用户管理")] public ActionResult UserLevelView(int id) { ViewBag.Id = id; return View(); } public ActionResult GetChildrenSystemUsers(int parentId) { return Json(UserBLL.GetChildrenSystemUsers(parentId, true)); } [HttpPost] public ActionResult userEditJson(IFormCollection collection, SystemUserDto req) { var result = UserEdit(req.Id, req.LoginName, req.Name, req.Password, req.State, req.QQ, req.Mobile, req.Tel, req.RoleType, req.Email, req.UserGroup, collection, req.AccountPost, req.ParentId); return result; } [HttpPost] public ActionResult UserEdit(int id, string loginname, string name, string password, int state, string qq, string Mobile, string tel, string roletype, string email, string userGroup, IFormCollection collection, int accountPost, int? parentId) { var roles = roletype?.Split(','); if (!CurUser.HasRight("系统管理-用户管理")) { return JsonError("当前登录用户没有用户管理权限"); } var r = basedb.SystemUsers.Find(id); if (r == null) { r = new SystemUser(); } else { //当交易员改成客户经理时 if (accountPost == 1) { using (var db = new YLContext()) { var dbassetList = db.assetunit.ToList(); foreach (var dbasset in dbassetList.Where(l => l.TraderIdsInt.Contains(r.Id))) { List cloneid = new List(dbasset.TraderIdsInt); cloneid.Remove(r.Id); dbasset.TraderIds = string.Join(",", UserBLL.Where(u => cloneid.Contains(u.Id)).Select(u => u.Id)); dbasset.TraderNames = string.Join(",", UserBLL.Where(u => cloneid.Contains(u.Id)).Select(u => u.Name)); } db.SaveChanges(); } } } if (string.IsNullOrWhiteSpace(loginname)) { return JsonError("登录名不能为空"); } if (string.IsNullOrWhiteSpace(name)) { return JsonError("姓名不能为空"); } if (roles == null || roles.Length == 0) { return JsonError("请选择至少一个角色"); } if (id == 0 && string.IsNullOrWhiteSpace(password)) { r.Password = "1qaz@WSX3edc"; } else if (loginname != r.LoginName && string.IsNullOrWhiteSpace(password)) { return JsonError("修改用户名时,需要重置密码"); } var CheckPassword = PS.Config.ErpElement.CheckPassword; if (password!=null) { if (CheckPassword && password.Length < 12) { return JsonError("密码 必须至少12位长度"); } if (CheckPassword && !PasswordValidator.Validate(password)) { return JsonError("密码 必须包含大小写字母,数字,特殊字符,长度不小于12位"); } } var checkuser = (from o in basedb.SystemUsers where o.Id != id && o.LoginName == loginname select name).FirstOrDefault(); if (checkuser != null) { return JsonError("该用户已存在"); } if (ModelState.IsValid == false) { r.Password = null; r.LoginName = loginname; r.Name = name; r.State = state; r.QQ = qq; r.Mobile = Mobile; r.Tel = tel; r.Email = email; r.RoleType = roletype; r.UserGroup = userGroup; r.AccountPost = accountPost; r.ParentId = parentId; return View(r); } else { var vo = new SystemUser { LoginName = loginname, Password = password, State = state, Name = name, Email = email, QQ = qq, Mobile = Mobile, Tel = tel, BondIP = collection["BondIP"], RoleType = roletype, UserGroup = userGroup, AccountPost = accountPost, ParentId = parentId, VarietyIds = "" }; r.Save(basedb, vo); Server.CacheProvider.Set("loginUserError^" + loginname.ToLower(), 0, TimeSpan.FromMinutes(120)); new SysUserService(CurUser).SaveSysUser(r); var oldRoleUsers = basedb.RoleUsers.Where(o => o.UserId == r.Id).ToArray(); foreach (var ru in oldRoleUsers) { basedb.RoleUsers.Remove(ru); } var roleIdList = new List(); foreach (var role in roles) { var roleUser = basedb.RoleUsers.Add(new RoleUser { UserId = r.Id, RoleId = int.Parse(role) })?.Entity; roleIdList.Add(roleUser.RoleId); } if (roleIdList.Count != oldRoleUsers.Length || !roleIdList.All(n => oldRoleUsers.Any(old => old.RoleId == n))) { var roleNameList = roleIdList.Count > 0 ? basedb.Roles.Where(n => roleIdList.Contains(n.Id)).Select(n => n.Name).ToArray() : Array.Empty(); var remark = string.Join(",", roleNameList); basedb.SystemLogs.Add(new DBModels.SystemLog { EventCategory = "系统账户", EventName = "设置角色", EventData = JsonHelper.Serialize(new { UserId = r.Id, RoleIds = roleIdList }), Remark = $"用户:{r.Name};登录名:{r.LoginName};用户角色:{remark}" })?.Entity.SetOpt(CurUser); } basedb.SaveChanges(); UserBLL.UpdateUsers(); TempData["saved"] = true; return JsonSuccess("更新成功", r); } } public JsonResult accountAble(int accountIds) { var r = basedb.SystemUsers.Find(accountIds); r.State = 0; basedb.SaveChanges(); new SysUserService(CurUser).UpdateState(accountIds, 0); return JsonSuccess("启动账户成功", r); } public JsonResult accountDisable(int accountIds) { var r = basedb.SystemUsers.Find(accountIds); r.State = 1; basedb.SaveChanges(); //清理缓存 Providers.MemoryCacheProvider.Default.Remove("loginUser" + accountIds); new SysUserService(CurUser).UpdateState(accountIds, 1); SysUserChangeInfo sysUserChangeInfo= new SysUserChangeInfo(); sysUserChangeInfo.Id = accountIds; sysUserChangeInfo.Status = 1; sysUserChangeInfo.ForceLoginOut = true; new SysUserKafkaService(_kafkaProduce).Send(sysUserChangeInfo); return JsonSuccess("禁用账户成功", r); } [HttpPost] public JsonResult DeleteUser(int id) { if (!CurUser.HasRight("系统管理-部门管理")) { return JsonError("没有权限"); } var r = (from o in basedb.SystemUsers where o.Id == id select o).FirstOrDefault(); if (r == null) { return JsonError("找不到用户"); } else { basedb.SystemUsers.Remove(r); basedb.SaveChanges(); new SysUserService(CurUser).RemoveSysUser(id); } return JsonSuccess(); } /// /// 选择用户控件使用 /// /// public ActionResult SelectUser() { return View(); } /// /// 选择用户控件使用 /// [HttpPost] public JsonResult SelectUserQuery(string sidx, string sord, int page, int rows, IFormCollection collection) { var parameters = new List(); var query = (from o in basedb.SystemUsers join p in basedb.DepartmentUsers on o.Id equals p.UserId join q in basedb.Departments on p.DepartmentId equals q.Id select new { id = o.Id, Name = o.LoginName, Department = q.Name, DeptId = q.Id }); var name = collection["name"] + ""; var depart = collection["department"] + ""; var departmentid = collection["departmentid"] + "";//url传来参数 var mallidstring = collection["mallid"] + ""; int.TryParse(mallidstring, out var mallid); if (name != "") { query = (from o in query where o.Name.Contains(name) select o); } if (depart != "") { query = (from o in query where o.Department.Contains(depart) select o); } if (int.TryParse(departmentid, out var departmentId)) { query = (from o in query where o.DeptId == departmentId select o); } var order = ""; if (sidx != "") { order = sidx + " " + sord; query = (from o in query orderby order select o); } var list = query.ToList(); if (mallid > 0) { list = (from o in list where DepartmentBLL.IsParnet(mallid, o.DeptId) select o).ToList(); } var totalrow = list.Count(); var pagenum = (totalrow - totalrow % rows) / rows + 1; var newquery = (from o in list select new UserName { id = o.id, Name = o.Name, Department = o.Department }).Take(rows * page).Skip(page * rows - rows).ToList();// 这种写法是在内存中运算 var jsonData = new { total = pagenum, page = page, records = totalrow, rows = newquery }; return Json(jsonData); } [MyAuthorize("系统管理-数据字典")] public ActionResult Dictionary() { if (!CurUser.HasRight("系统管理-数据字典")) { return NoRightPage(); } //这三个权限在 结算管理_财务编码维护,不予在数据字典界面查看 var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; var list = (from o in basedb.Dictionaries.AsNoTracking() where !financialCodeRights.Contains(o.Name) orderby o.Catalog select o).ToList(); var dictList = new Dictionary>(); //OUDAL.Dictionary curDict = null; foreach (var dict in list) { if (!dictList.ContainsKey(dict.Catalog)) { dictList.Add(dict.Catalog, new List()); } dictList[dict.Catalog].Add(dict); } return View(dictList); } [HttpPost] public JsonResult GetDictionaryItems(int dictId) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } var list = basedb.DictionaryItems.Where(o => o.DictId == dictId).OrderBy(o => o.IndexNum).ToArray(); return JsonSuccessData(list); } [HttpPost] public JsonResult AddDictionaryItem(int dictId, string name, string shortName) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } if (string.IsNullOrEmpty(name)) { return JsonError("名称不能为空"); } if (string.IsNullOrEmpty(shortName)) { return JsonError("简称不能为空"); } if (name.Length > 50) { return JsonError("名称长度超长,无法添加"); } if (shortName.Length > 50) { return JsonError("简称长度超长,无法添加"); } var dict = basedb.Dictionaries.FirstOrDefault(d => d.Id == dictId && d.Name == "累计转远期到期日类型"); if (dict != null) { var dicI = basedb.DictionaryItems.FirstOrDefault(O => O.DictId == dictId && O.Name == name.Trim() && O.ShortName == shortName.Trim()); if (dicI != null) { return JsonError("数据不能重复!"); } } var dictYYClientCode = basedb.Dictionaries.FirstOrDefault(d => d.Id == dictId && d.Name == "用友客商编码"); if (dictYYClientCode != null) { var dicI = basedb.DictionaryItems.FirstOrDefault(O => O.DictId == dictId && O.Name == name.Trim()); if (dicI != null) { return JsonError("用友客商编码名称不能重复!"); } } var list = (from o in basedb.DictionaryItems where o.DictId == dictId orderby o.IndexNum select o).ToList(); var next = 0; if (list.Count > 0) { next = list[list.Count - 1].IndexNum + 1; } var item = new DictionaryItem { DictId = dictId, Name = name, ShortName = shortName, IndexNum = next }; basedb.DictionaryItems.Add(item); basedb.SaveChanges(); list.Add(item); return JsonSuccessData(list); } [HttpPost] public JsonResult CheckDictionaryItem(int itemId) { DictionarySerivice dictionarySerivice = new DictionarySerivice(); var dic = dictionarySerivice.GetForwardDateDic(); string dicName = dic[itemId]; dicName = dicName.Trim(); var tradelist = (from ta in yLContext.trade_accumulator_option join t in yLContext.trade on ta.TradeId equals t.id into newt from t in newt.DefaultIfEmpty() where ta.ForwardDateType == dicName && t.ValidState != "InValid" select ta); if (tradelist.Any()) { return JsonSuccess(); } else { return JsonError(); } } [HttpPost] public JsonResult EditDictionaryItem(int itemId, string name, string shortName) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } if (string.IsNullOrEmpty(name)) { return JsonError("名称不能为空"); } if (string.IsNullOrEmpty(shortName)) { return JsonError("简称不能为空"); } if (name.Length > 50) { return JsonError("名称长度超长,无法添加"); } if (shortName.Length > 50) { return JsonError("简称长度超长,无法添加"); } var item = basedb.DictionaryItems.Find(itemId); if (item == null) { return JsonError("找不到条目"); } else { var dict = basedb.Dictionaries.Where(O => O.Id == item.DictId).FirstOrDefault(); if (dict != null && dict.Name == "累计转远期到期日类型") { var dicI = basedb.DictionaryItems.FirstOrDefault(O => O.Id != itemId && O.Name == name.Trim() && O.ShortName == shortName.Trim()); if (dicI != null) { return JsonError("数据不能重复!"); } } if (dict != null && dict.Name == "行业") { using (var clientDb = DbContextFactory.GetClientDbContext(CurUser)) { var clientArr = clientDb.client.Where(O => O.BusinessType == item.Name).ToArray(); foreach (var client in clientArr) { client.BusinessType = name; } clientDb.SaveChanges(); } } if (dict.Name == "用友客商编码") { var dicI = basedb.DictionaryItems.FirstOrDefault(O => O.DictId == item.DictId && O.Name == name.Trim()); if (dicI != null) { return JsonError("用友客商编码名称不能重复!"); } } item.Name = name; item.ShortName = shortName; basedb.SaveChanges(); } return JsonSuccess(); } [HttpPost] public JsonResult DeleteDictionaryItem(int itemId) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } var item = basedb.DictionaryItems.Find(itemId); if (item == null) { return JsonError("找不到条目"); } else { var dictId = item.DictId; basedb.DictionaryItems.Remove(item); basedb.SaveChanges(); var list = (from o in basedb.DictionaryItems where o.DictId == dictId orderby o.IndexNum select o).ToList(); var next = 0; if (list.Count > 0) { next = list[list.Count - 1].IndexNum + 1; } return JsonSuccessData(list); } } public JsonResult ChangeDictionaryItemIndex(int itemId, int increase) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } var item = basedb.DictionaryItems.Find(itemId); if (item == null) { return JsonError("找不到条目"); } else { DictionaryItem another = null; if (increase > 0) { another = (from o in basedb.DictionaryItems where o.DictId == item.DictId && o.IndexNum > item.IndexNum orderby o.IndexNum select o).FirstOrDefault(); } else { another = (from o in basedb.DictionaryItems where o.DictId == item.DictId && o.IndexNum < item.IndexNum orderby o.IndexNum descending select o).FirstOrDefault(); } if (another == null) { return JsonError("找不到可以交换位置的条目"); } else { var temp = item.IndexNum; item.IndexNum = another.IndexNum; another.IndexNum = temp; basedb.SaveChanges(); } } var list = (from o in basedb.DictionaryItems where o.DictId == item.DictId orderby o.IndexNum select o).ToList(); return JsonSuccessData(list); } [HttpPost] public JsonResult UpDictionaryItem(int itemid) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } return ChangeDictionaryItemIndex(itemid, -1); } [HttpPost] public JsonResult DownDictionaryItem(int itemid) { if (!CurUser.HasRight("系统管理-数据字典")) { if (CurUser.结算管理_财务编码维护) { var financialCodeRights = new List() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" }; if (!basedb.Dictionaries.Where(o => financialCodeRights.Contains(o.Name)).Any()) { return JsonError("没有权限"); } } else { return JsonError("没有权限"); } } return ChangeDictionaryItemIndex(itemid, 1); } [MyAuthorize("系统管理")] public ViewResult ResetCache() { return View(); } [MyAuthorize("系统管理")] public JsonResult ResetCacheFunction() { DepartmentBLL.UpdateDepartments(); FunctionHelper.Initialize(); UserBLL.UpdateUsers(); AppHelper.ResetMenus(); Providers.MemoryCacheProvider.Default.FlushAll(); Server.CacheProvider.FlushAll(); Modules.DataCacheModule.DataCacheManager.ResetDataCache(); return Json(1); } [MyAuthorize("系统管理")] public JsonResult SyncFunctionRight() { var functionRightXmlFilePath = Server.MapPath("/App_Data/FunctionRight.xml"); var resultMessage = new SysFunctionService(CurUser).SyncFunctionRight(functionRightXmlFilePath); return Json(resultMessage); } /// /// 按角色查看用户 /// public ActionResult RoleUserList(int id) { ViewBag.roleId = id; return View(); } [MyAuthorize("系统管理-交易权限")] public ActionResult SystemUserVariety() { return View(); } public JsonResult RoleUserQuery(SystemUserReq req) { if (req.sidx.IsNullOrWhiteSpace()) { req.sidx = "Id"; } var query = from source in basedb.SystemUsers join roleUser in basedb.RoleUsers on source.Id equals roleUser.UserId into roleUser2 from roleUser in roleUser2.DefaultIfEmpty() where roleUser.RoleId == req.RoleId select new ViewUser { id = source.Id, LoginName = source.LoginName, Name = source.Name, Email = source.Email, Tel = source.Tel, Mobile = source.Mobile, BondIP = source.BondIP, RoleId = roleUser.RoleId, State = source.State }; string departmentQuery(int userId) { var departQuery = from departUser in basedb.DepartmentUsers join depart in basedb.Departments on departUser.DepartmentId equals depart.Id where departUser.UserId == userId select depart.Name; return string.Join(",", departQuery.Distinct()); } Func roleQuery = (userId) => { var rQuery = from roleUser in basedb.RoleUsers join role in basedb.Roles on roleUser.RoleId equals role.Id where roleUser.UserId == userId select role.Name; return string.Join(",", rQuery.Distinct()); }; var result = query.ToSearchList(req); foreach (var r in result.rows) { r.Departments = departmentQuery(r.id); r.Roles = roleQuery(r.id); } return Json(result); } public static List GetUserRoles(int userid) { using (var baseCon = new ErpBaseContext()) { var UserRoles = (from role in baseCon.Roles join roleUser in baseCon.RoleUsers on role.Id equals roleUser.RoleId where roleUser.UserId == userid select role).ToList(); return UserRoles; } } public static List GetDictionaryItems(string name) { var signTypes = new List(); using (var basedb = new ErpBaseContext()) { var dicid = basedb.Dictionaries.Where(o => o.Name == name).Select(o => o.Id).FirstOrDefault(); return basedb.DictionaryItems.Where(o => o.DictId == dicid).Select(o => new SelectListItem() { Text = o.Name, Value = o.ShortName }).ToList(); } } public JsonResult GetSystemUserVariety(SystemUserVarietyReq systemUserVarietyReq) { var result = UserBLL.GetSystemUserVariety(systemUserVarietyReq); return Json(result); } public ActionResult UserVarietyEdit(int UserId) { var user = new SystemUser(); bool IsAll = false; if (UserId != 0) { user = DbContextFactory.GetErpBaseContext().SystemUsers.Where(a => a.Id == UserId).FirstOrDefault(); var varietyIds = varietyController.GetAllvariety().Select(a => Convert.ToInt32(a.Value)); if (user != null && user.VarietyIdList.Any()) { if (varietyIds.All(a => user.VarietyIdList.Any(b => b == a))) { IsAll = true; } } } ViewBag.IsAll = IsAll; return View(user); } public ActionResult SaveUserVarietyEdit(int UserId, string VarietyIds) { UserBLL.SetUserVariety(UserId, VarietyIds); return JsonSuccess("保存成功"); } public static List GetUserNames() { return UserBLL.GetSystemsByUserId().Select(a => new SelectListItem() { Text = a.Name, Value = a.Id + "" }).ToList(); } #region 审批组 /// /// 审批组页面 /// /// [MyAuthorize("系统管理-审批组")] public ActionResult ApplovalGroupIndex() { return View(); } /// /// 查询 /// /// public ActionResult ApplovalGroupSearch(ApprovalGroupRequest req) { List list = new List(); var groups = basedb.approvalgroups.AsNoTracking().ToList(); var groupMembers = basedb.approvalgroupmembers.AsNoTracking().ToList(); req.MemberName = req.MemberName != null ? req.MemberName.Trim() : ""; var sysUsers = basedb.SystemUsers.AsNoTracking().ToList(); if (!string.IsNullOrEmpty(req.MemberName)) { var query = from member in groupMembers join user in sysUsers on member.memberId equals user.Id where user.Name.Contains(req.MemberName) || user.LoginName.Contains(req.MemberName) select member; groupMembers = query.ToList(); ; } var memberIds = groupMembers.Select(s => s.memberId).ToList(); foreach (var group in groups) { group.approvalgroupmembers = groupMembers.Where(x => x.groupId == group.id).ToList(); foreach (var groupMember in group.approvalgroupmembers) { groupMember.member = sysUsers.FirstOrDefault(x => x.Id == groupMember.memberId); } if (!string.IsNullOrEmpty(req.MemberName) && group.approvalgroupmembers.Any()) { list.Add(group); } else { list.Add(group); } } list = list.OrderByDescending(o => o.id).ToList(); ; return JsonSuccess("", list); } /// /// 审批组保存 /// /// /// public ActionResult SaveApplovalGroup(approvalgroups req) { req.groupName = req.groupName.Trim(); if (string.IsNullOrEmpty(req.groupName)) { return JsonError("审批组名称不能为空"); } bool edit = req.id > 0; approvalgroups save; if (edit) { save = basedb.approvalgroups.Find(req.id); if (save == null) { return JsonError("审批组不存在"); } } else { save = new approvalgroups(); } var checkGroup = basedb.approvalgroups.Any(x => x.groupName == req.groupName && x.id != req.id); if (checkGroup) { return JsonError("审批组已存在"); } save.groupName = req.groupName; if (!edit) { basedb.approvalgroups.Add(save); } basedb.SaveChanges(); return JsonSuccess("保存成功"); } /// /// 删除组 /// /// /// public ActionResult DeleteApplovalGroup(int groupId) { var group = basedb.approvalgroups.Find(groupId); if (group != null) { var members = basedb.approvalgroupmembers.Where(x => x.groupId == groupId); var memberIds = members.Select(x => x.memberId).ToList(); //属于groupId审批组or不属于groupId审批组且流程的审批组id>0 if (CheckGroupIsUse(groupId, memberIds)) { throw new ServiceException("该审批组有审批流程在使用"); } basedb.approvalgroupmembers.RemoveRange(members); basedb.approvalgroups.Remove(group); basedb.SaveChanges(); } return JsonSuccess("删除成功"); } /// /// 审批组成员保存 /// /// /// public ActionResult SaveApplovalGroupMember(List memberList) { if (memberList.Any()) { foreach (approvalgroupmembers member in memberList) { var merberExist = basedb.approvalgroupmembers.FirstOrDefault(x => x.memberId == member.memberId && x.id != member.id); if (merberExist != null) { var group = basedb.approvalgroups.Find(merberExist.groupId); var user = basedb.SystemUsers.Find(member.memberId); return JsonError($"{user.Name}已存在审批组[{group.groupName}]"); } basedb.approvalgroupmembers.Add(member); } basedb.SaveChanges(); } return JsonSuccess("保存成功"); } /// /// 审批组成员删除 /// /// /// public ActionResult DeleteApplovalGroupMember(List ids) { if (ids.Any()) { var memberList = basedb.approvalgroupmembers.Where(x => ids.Contains(x.memberId)); var groupId = memberList.First().groupId; //审批组 是否已在已进行的审批流程中 if (CheckGroupIsUse(groupId, ids)) { throw new ServiceException("该审批组有审批流程在使用,不能删除成员"); } basedb.approvalgroupmembers.RemoveRange(memberList); basedb.SaveChanges(); } return JsonSuccess("删除成功"); } /// /// 获取未加入审核组成员 /// /// public ActionResult GetApplovalSysUserList(string name) { name = name != null ? name.Trim() : ""; var groupMembers = basedb.approvalgroupmembers.AsNoTracking().Select(x => x.memberId).ToList(); var query = from user in basedb.SystemUsers where !groupMembers.Contains(user.Id) && user.State == 0 select user; var sysUsers = query.ToList(); if (!string.IsNullOrEmpty(name)) { sysUsers = sysUsers.Where(x => x.LoginName.Contains(name) || x.Name.Contains(name)).ToList(); } return JsonSuccess("", sysUsers); } /// /// 校验审批组是否在已使用流程中 /// /// /// 人员id集合 /// private bool CheckGroupIsUse(int groupId, List memberIds) { //属于groupId审批组or不属于groupId审批组且流程的审批组id>0 var checkUse1 = false; var checkUse2 = false; var approvalprocessList = yLContext.approvalprocess.AsNoTracking().ToList(); var approcessMembers = basedb.approvalgroupmembers.AsNoTracking().ToList(); var branch1 = approvalprocessList.FirstOrDefault(x => x.approvalGroupId == groupId && x.approvalCondition == 1);//属于情况分支 var branch2 = approvalprocessList.Where(x => x.approvalGroupId != groupId && x.approvalCondition == 2 && x.approvalGroupId > 0);//不属于情况分支 List roleIds = new List(); if (branch1 != null) { var node = branch1.node; checkUse1 = yLContext.trade.Any(x => x.ProcessOrderBranch == node && x.ProcessOrderId >= branch1.order); if (checkUse1) { var approcessBanch1Members = approcessMembers.Where(x => x.groupId == groupId).Select(x => x.memberId).ToList(); if (approcessBanch1Members.Count - memberIds.Count == 0)//该组全删 { return true; } } } if (branch2.Count() > 0) { var _branch2 = branch2.First(); checkUse2 = yLContext.trade.Any(x => x.ProcessOrderBranch != 0 && x.ProcessOrderId > _branch2.order); if (checkUse2) { var approcessBanch1Members = approcessMembers.Where(x => !memberIds.Contains(x.memberId)).Select(x => x.memberId).ToList(); if (approcessBanch1Members.Count - memberIds.Count == 0)//不属于该组的全删 { return true; } } } return false; } #endregion #region 批量设置模型参数 [MyAuthorize("系统管理-批量设置模型参数")] public ActionResult DividendRateUpdate() { dividendrate_record record = new dividendrate_record() { DividendRate = 0, ValueDate = valuedateBLL.ValueDate, TradeType = "雪球期权", UnderlyingCode = "", OptionType = "全部" }; return View(record); } [MyAuthorize("系统管理-批量设置模型参数")] public JsonResult DividendRateUpdateQuwey(dividendrate_record dividendrate_Record) { new DividendrateRecordService(CurUser).ChangeDividendrate(dividendrate_Record); return JsonSuccess(); } #endregion } }