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

1755 lines
64 KiB
C#

using BaseOUDAL;
using Dapper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Org.BouncyCastle.Asn1.Ocsp;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using YLErp.Abstract;
using YLErp.BLL;
using YLErp.DBModels;
using YLErp.DBModels.Consts;
using YLErp.Modules.DictionaryModule;
using YLErp.Modules.RiskEngine;
using YLErp.Modules.SystemModule;
using YLErp.Web.Models;
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,req.OaAccount);
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,string oaAccount)
{
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;
r.OaAccount = oaAccount;
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 = "",
OaAccount=oaAccount
};
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 accountDelete(int accountIds)
{
var r = basedb.SystemUsers.Find(accountIds);
r.State = 2;
basedb.SaveChanges();
new SysUserService(CurUser).UpdateState(accountIds, 2);
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();
// 刷新风控引擎缓存
RiskEngineService.GetInstance().RefreshCache();
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
}
}