Files
zszq-trs/YLErpWeb/Controllers/SystemController.cs
T

1730 lines
63 KiB
C#

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<TreeNode> 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<RolePosition>();
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<ViewUser>(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<int> cloneid = new List<int>(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<int>();
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<string>();
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();
}
/// <summary>
/// 选择用户控件使用
/// </summary>
/// <returns></returns>
public ActionResult SelectUser()
{
return View();
}
/// <summary>
/// 选择用户控件使用
/// </summary>
[HttpPost]
public JsonResult SelectUserQuery(string sidx, string sord, int page, int rows, IFormCollection collection)
{
var parameters = new List<object>();
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
var list = (from o in basedb.Dictionaries.AsNoTracking() where !financialCodeRights.Contains(o.Name) orderby o.Catalog select o).ToList();
var dictList = new Dictionary<string, List<Dictionary>>();
//OUDAL.Dictionary curDict = null;
foreach (var dict in list)
{
if (!dictList.ContainsKey(dict.Catalog))
{
dictList.Add(dict.Catalog, new List<Dictionary>());
}
dictList[dict.Catalog].Add(dict);
}
return View(dictList);
}
[HttpPost]
public JsonResult GetDictionaryItems(int dictId)
{
if (!CurUser.HasRight("系统管理-数据字典"))
{
if (CurUser.结算管理_财务编码维护)
{
var financialCodeRights = new List<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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<string>() { "用友客商编码", "财务凭证明细段", "财务凭证排除客户项" };
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);
}
/// <summary>
/// 按角色查看用户
/// </summary>
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<int, string> 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<Role> 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<SelectListItem> GetDictionaryItems(string name)
{
var signTypes = new List<SelectListItem>();
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<SelectListItem> GetUserNames()
{
return UserBLL.GetSystemsByUserId().Select(a => new SelectListItem()
{
Text = a.Name,
Value = a.Id + ""
}).ToList();
}
#region 审批组
/// <summary>
/// 审批组页面
/// </summary>
/// <returns></returns>
[MyAuthorize("系统管理-审批组")]
public ActionResult ApplovalGroupIndex()
{
return View();
}
/// <summary>
/// 查询
/// </summary>
/// <returns></returns>
public ActionResult ApplovalGroupSearch(ApprovalGroupRequest req)
{
List<approvalgroups> list = new List<approvalgroups>();
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);
}
/// <summary>
/// 审批组保存
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
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("保存成功");
}
/// <summary>
/// 删除组
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
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("删除成功");
}
/// <summary>
/// 审批组成员保存
/// </summary>
/// <param name="memberList"></param>
/// <returns></returns>
public ActionResult SaveApplovalGroupMember(List<approvalgroupmembers> 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("保存成功");
}
/// <summary>
/// 审批组成员删除
/// </summary>
/// <param name="memberList"></param>
/// <returns></returns>
public ActionResult DeleteApplovalGroupMember(List<int> 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("删除成功");
}
/// <summary>
/// 获取未加入审核组成员
/// </summary>
/// <returns></returns>
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);
}
/// <summary>
/// 校验审批组是否在已使用流程中
/// </summary>
/// <param name="groupId"></param>
/// <param name="memberIds">人员id集合</param>
/// <returns></returns>
private bool CheckGroupIsUse(int groupId, List<int> 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<int> roleIds = new List<int>();
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
}
}