using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.IO;
|
using System.Linq;
|
using System.Threading.Tasks;
|
using JiepeiWMS.AuthHelper.OverWrite;
|
using JiepeiWMS.Common.Config;
|
using JiepeiWMS.Common.Helper;
|
using JiepeiWMS.Common.HttpContextUser;
|
using JiepeiWMS.Filter;
|
using JiepeiWMS.IRepository.UnitOfWork;
|
using JiepeiWMS.IServices;
|
using JiepeiWMS.Model;
|
using JiepeiWMS.Model.Models;
|
using JiepeiWMS.Model.ViewModels;
|
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.Extensions.Logging;
|
|
namespace JiepeiWMS.Controllers
|
{
|
/// <summary>
|
/// 用户管理
|
/// </summary>
|
[Route("api/[controller]/[action]")]
|
[ApiController]
|
[Authorize(Permissions.Name)]
|
public class UserController : ControllerBase
|
{
|
private readonly IUnitOfWork _unitOfWork;
|
readonly ISysUserInfoServices _sysUserInfoServices;
|
readonly IUserRoleServices _userRoleServices;
|
readonly IRoleServices _roleServices;
|
private readonly IUser _user;
|
private readonly ILogger<UserController> _logger;
|
private readonly IDepartmentServices _departmentServices;
|
private readonly IUserSysOrgServices _BllUserSysOrg;
|
private readonly ISysOrgServices _BllSysOrg;
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public UserController(IUnitOfWork unitOfWork, ISysUserInfoServices sysUserInfoServices,
|
IUserRoleServices userRoleServices, IRoleServices roleServices, IUser user, ILogger<UserController> logger,
|
IDepartmentServices departmentServices, IUserSysOrgServices BllUserSysOrg, ISysOrgServices BllSysOrg)
|
{
|
_unitOfWork = unitOfWork;
|
_sysUserInfoServices = sysUserInfoServices;
|
_userRoleServices = userRoleServices;
|
_roleServices = roleServices;
|
_user = user;
|
_logger = logger;
|
_departmentServices = departmentServices;
|
_BllUserSysOrg = BllUserSysOrg;
|
_BllSysOrg = BllSysOrg;
|
}
|
|
/// <summary>
|
/// 获取全部用户
|
/// </summary>
|
/// <param name="page"></param>
|
/// <param name="key"></param>
|
/// <returns></returns>
|
// GET: api/User
|
[HttpGet]
|
public async Task<MessageModel<PageModel<sysUserInfo>>> Get(int page = 1, string key = "")
|
{
|
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
|
{
|
key = "";
|
}
|
int intPageSize = 20;
|
|
|
var data = await _sysUserInfoServices.QueryPage(a => a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key.Trim())) || (a.uRealName != null && a.uRealName.Contains(key.Trim()))
|
|| (a.JobNo != null && a.JobNo.Contains(key.Trim()))
|
), page, intPageSize, " uID desc ");
|
|
|
#region MyRegion
|
|
// 这里可以封装到多表查询,此处简单处理
|
var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false);
|
var allRoles = await _roleServices.Query(d => d.IsDeleted == false);
|
var allSysOrgIds = await _BllUserSysOrg.Query();
|
|
var sysUserInfos = data.data;
|
foreach (var item in sysUserInfos)
|
{
|
var currentUserRoles = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList();
|
item.RIDs = currentUserRoles;
|
item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList();
|
item.SysOrgIds = allSysOrgIds.Where(t => t.UserId == item.uID).Select(t => t.SysOrgId).ToList();
|
if (item.DepartmentId > 0)
|
{
|
var departmentModel = await _departmentServices.QueryById(item.DepartmentId);
|
if (departmentModel != null)
|
item.DepartMentName = departmentModel.Name;
|
}
|
item.uLoginPWD = "";
|
}
|
|
data.data = sysUserInfos;
|
|
#endregion
|
|
|
return new MessageModel<PageModel<sysUserInfo>>()
|
{
|
msg = "获取成功",
|
success = data.dataCount >= 0,
|
response = data
|
};
|
|
}
|
|
// GET: api/User/5
|
[HttpGet("{id}")]
|
[AllowAnonymous]
|
public string Get(string id)
|
{
|
_logger.LogError("test wrong");
|
return "value";
|
}
|
|
// GET: api/User/5
|
/// <summary>
|
/// 获取用户详情根据token
|
/// 【无权限】
|
/// </summary>
|
/// <param name="token">令牌</param>
|
/// <returns></returns>
|
[HttpGet]
|
[AllowAnonymous]
|
public async Task<MessageModel<sysUserInfo>> GetInfoByToken(string token)
|
{
|
var data = new MessageModel<sysUserInfo>();
|
if (!string.IsNullOrEmpty(token))
|
{
|
var tokenModel = JwtHelper.SerializeJwt(token);
|
if (tokenModel != null && tokenModel.Uid > 0)
|
{
|
var userinfo = await _sysUserInfoServices.QueryById(tokenModel.Uid);
|
if (userinfo != null)
|
{
|
data.response = userinfo;
|
data.success = true;
|
data.msg = "获取成功";
|
}
|
}
|
|
}
|
return data;
|
}
|
|
/// <summary>
|
/// 添加一个用户
|
/// </summary>
|
/// <param name="sysUserInfo"></param>
|
/// <returns></returns>
|
// POST: api/User
|
[HttpPost]
|
public async Task<MessageModel<string>> Post([FromBody] sysUserInfo sysUserInfo)
|
{
|
var data = new MessageModel<string>();
|
|
var userInfoModel = await _sysUserInfoServices.GetModel(x => x.JobNo == sysUserInfo.JobNo);
|
if (userInfoModel != null)
|
{
|
data.msg = "已有相同工号";
|
return data;
|
}
|
if (sysUserInfo!=null&&string.IsNullOrEmpty(sysUserInfo.Mobile))
|
{
|
sysUserInfo.Mobile = "15000000000";
|
}
|
|
sysUserInfo.uLoginPWD = MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWD);
|
var id = await _sysUserInfoServices.Add(sysUserInfo);
|
|
//更新主体关系
|
if (sysUserInfo.SysOrgIds.Count > 0)
|
{
|
var vals = new List<object>();
|
foreach (var SysOrgId in sysUserInfo.SysOrgIds)
|
{
|
vals.Add(new { UserId = sysUserInfo.uID, SysOrgId = SysOrgId });
|
}
|
_BllUserSysOrg.UpdateJoinInfo(
|
"UserSysOrg", new List<string> { "UserId", "SysOrgId" }, vals,
|
new List<string> { "UserId" }, new List<object> { new { UserId = sysUserInfo.uID } }
|
);
|
}
|
|
data.success = id > 0;
|
if (data.success)
|
{
|
data.response = id.ObjToString();
|
data.msg = "添加成功";
|
}
|
|
return data;
|
}
|
|
/// <summary>
|
/// 更新用户与角色
|
/// </summary>
|
/// <param name="sysUserInfo"></param>
|
/// <returns></returns>
|
// PUT: api/User/5
|
[HttpPut]
|
public async Task<MessageModel<string>> Put([FromBody] sysUserInfo sysUserInfo)
|
{
|
// 这里使用事务处理
|
|
var data = new MessageModel<string>();
|
try
|
{
|
_unitOfWork.BeginTran();
|
|
var userInfoModel = await _sysUserInfoServices.GetModel(x => x.JobNo == sysUserInfo.JobNo && x.uID != sysUserInfo.uID);
|
if (userInfoModel != null)
|
{
|
data.msg = "工号已存在";
|
return data;
|
}
|
if (sysUserInfo != null && string.IsNullOrEmpty(sysUserInfo.Mobile))
|
{
|
sysUserInfo.Mobile = "15000000000";
|
}
|
if (sysUserInfo != null && sysUserInfo.uID > 0)
|
{
|
if (sysUserInfo.RIDs.Count > 0)
|
{
|
// 无论 Update Or Add , 先删除当前用户的全部 U_R 关系
|
var usreroles = (await _userRoleServices.Query(d => d.UserId == sysUserInfo.uID)).Select(d => d.Id.ToString()).ToArray();
|
if (usreroles.Count() > 0)
|
{
|
var isAllDeleted = await _userRoleServices.DeleteByIds(usreroles);
|
}
|
|
// 然后再执行添加操作
|
var userRolsAdd = new List<UserRole>();
|
sysUserInfo.RIDs.ForEach(rid =>
|
{
|
userRolsAdd.Add(new UserRole(sysUserInfo.uID, rid));
|
});
|
|
await _userRoleServices.Add(userRolsAdd);
|
|
}
|
|
//更新主体关系
|
if (sysUserInfo.SysOrgIds.Count > 0)
|
{
|
var vals = new List<object>();
|
foreach (var SysOrgId in sysUserInfo.SysOrgIds)
|
{
|
vals.Add(new { UserId = sysUserInfo.uID, SysOrgId = SysOrgId });
|
}
|
_BllUserSysOrg.UpdateJoinInfo(
|
"UserSysOrg", new List<string> { "UserId", "SysOrgId" }, vals,
|
new List<string> { "UserId" }, new List<object> { new { UserId = sysUserInfo.uID } }
|
);
|
sysUserInfo.SysOrgId = sysUserInfo.SysOrgIds.FirstOrDefault();
|
}
|
|
var olduser = await _sysUserInfoServices.QueryById(sysUserInfo.uID);
|
|
if (!string.IsNullOrEmpty(sysUserInfo.uLoginPWD))
|
{
|
sysUserInfo.uLoginPWD = MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWD);
|
}
|
else
|
{
|
sysUserInfo.uLoginPWD = olduser.uLoginPWD;
|
}
|
|
data.success = await _sysUserInfoServices.Update(sysUserInfo);
|
|
_unitOfWork.CommitTran();
|
|
if (data.success)
|
{
|
data.msg = "更新成功";
|
data.response = sysUserInfo?.uID.ObjToString();
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
_unitOfWork.RollbackTran();
|
_logger.LogError(e, e.Message);
|
}
|
|
return data;
|
}
|
|
/// <summary>
|
/// 修改密码
|
/// </summary>
|
/// <param name="sysUserInfo"></param>
|
/// <returns></returns>
|
// PUT: api/User/5
|
[HttpPut]
|
public async Task<MessageModel<string>> PutPwd([FromBody] sysUserInfo sysUserInfo)
|
{
|
var data = new MessageModel<string>();
|
try
|
{
|
|
var userInfoModel = await _sysUserInfoServices.GetModel(x => x.uID == _user.ID);
|
if (userInfoModel != null)
|
{
|
if (userInfoModel.uLoginPWD != MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWD))
|
{
|
data.msg = "旧密码输入不正确请重新输入,若忘记旧密码请联系管理员修改!";
|
return data;
|
throw new Exception("旧密码输入不正确请重新输入,若忘记旧密码请联系管理员修改!");
|
|
}
|
userInfoModel.uLoginPWD = MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWDNew);
|
userInfoModel.uRealName = sysUserInfo.uRealName;
|
userInfoModel.uRemark = sysUserInfo.uRemark;
|
data.success = await _sysUserInfoServices.Update(userInfoModel);
|
if (data.success)
|
{
|
data.msg = "更新成功";
|
data.response = userInfoModel?.uID.ObjToString();
|
}
|
}
|
|
}
|
catch (Exception ex)
|
{
|
|
_logger.LogError(ex, ex.Message);
|
}
|
return data;
|
}
|
|
/// <summary>
|
/// 删除用户
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
// DELETE: api/ApiWithActions/5
|
[HttpDelete]
|
public async Task<MessageModel<string>> Delete(int id)
|
{
|
var data = new MessageModel<string>();
|
if (id > 0)
|
{
|
var userDetail = await _sysUserInfoServices.QueryById(id);
|
userDetail.tdIsDelete = true;
|
data.success = await _sysUserInfoServices.Update(userDetail);
|
if (data.success)
|
{
|
data.msg = "删除成功";
|
data.response = userDetail?.uID.ObjToString();
|
}
|
}
|
|
return data;
|
}
|
|
/// <summary>
|
/// 导入用户表格
|
/// </summary>
|
[HttpPost]
|
[AllowAnonymous]
|
public async Task<MessageModel<string>> ImportUserInfo([FromForm] IFormCollection files)
|
{
|
var data = new MessageModel<string>();
|
var importUserInfoModel = new ImportUserInfoViewModels();
|
var importUserInfoList = new List<ImportUserInfoViewModels>();
|
|
try
|
{
|
//创建事务
|
_unitOfWork.BeginTran();
|
var path = Directory.GetCurrentDirectory();
|
var fileFolder = Path.Combine(path, "ImportFile");
|
if (!Directory.Exists(fileFolder))
|
Directory.CreateDirectory(fileFolder);
|
|
FormFileCollection fileCollection = (FormFileCollection)files.Files;
|
foreach (var file in fileCollection)
|
{
|
var fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(file.FileName);
|
var filePath = Path.Combine(fileFolder, fileName);
|
using (var stream = new FileStream(filePath, FileMode.Create))
|
{
|
file.CopyTo(stream);
|
}
|
|
var dtExcel = ExcelHelper.ImportExcel(filePath);
|
foreach (DataRow myRow in dtExcel.Rows)
|
{
|
if (string.IsNullOrWhiteSpace(myRow[0].ToString()))
|
continue;
|
if (string.IsNullOrWhiteSpace(myRow[1].ToString()))
|
continue;
|
if (string.IsNullOrWhiteSpace(myRow[2].ToString()))
|
continue;
|
if (string.IsNullOrWhiteSpace(myRow[3].ToString()))
|
continue;
|
|
importUserInfoModel = new ImportUserInfoViewModels()
|
{
|
JobNo = myRow[0].ToString(),
|
OrgName = myRow[1].ToString(),
|
DepartmentName = myRow[2].ToString(),
|
Name = myRow[3].ToString(),
|
};
|
importUserInfoList.Add(importUserInfoModel);
|
}
|
|
foreach (var item in importUserInfoList)
|
{
|
var now = DateTime.Now;
|
var departmentModel = await _departmentServices.GetModel(x => x.Name == item.DepartmentName);
|
var sysOrgModel = await _BllSysOrg.GetShortName(item.OrgName);
|
var Account = PinYinHelper.ConvertToAllSpell(item.Name);
|
|
//匹配名称和用户名
|
var productListModel = await _sysUserInfoServices.GetModel(x => x.uLoginName == Account && x.uRealName == item.Name);
|
if (productListModel != null)
|
{
|
//更新用户表
|
productListModel.JobNo = item.JobNo;
|
productListModel.DepartmentId = departmentModel == null ? 0 : departmentModel.Id;
|
await _sysUserInfoServices.Update(productListModel);
|
|
var vals = new List<object>();
|
vals.Add(new { UserId = productListModel.uID, SysOrgId = sysOrgModel == null ? 0 : sysOrgModel.Id });
|
|
_BllUserSysOrg.UpdateJoinInfo(
|
"UserSysOrg", new List<string> { "UserId", "SysOrgId" }, vals,
|
new List<string> { "UserId" }, new List<object> { new { UserId = productListModel.uID } }
|
);
|
}
|
else
|
{
|
//添加用户表
|
var sysUserInfo = new sysUserInfo
|
{
|
uLoginName = Account,
|
uLoginPWD = MD5Helper.MD5Encrypt32("123456"),
|
uRealName = item.Name,
|
uStatus = 0,
|
uCreateTime = now,
|
uUpdateTime = now,
|
uLastErrTime = now,
|
uErrorCount = 0,
|
name = item.Name,
|
sex = 1,
|
age = 0,
|
birth = now,
|
tdIsDelete = false,
|
JobNo = item.JobNo,
|
DepartmentId = departmentModel == null ? 0 : departmentModel.Id,
|
SysOrgId = sysOrgModel == null ? 0 : sysOrgModel.Id
|
};
|
var result = await _sysUserInfoServices.Add(sysUserInfo);
|
if (result > 0)
|
{
|
var vals = new List<object>();
|
vals.Add(new { UserId = result, SysOrgId = sysOrgModel == null ? 0 : sysOrgModel.Id });
|
|
_BllUserSysOrg.UpdateJoinInfo(
|
"UserSysOrg", new List<string> { "UserId", "SysOrgId" }, vals,
|
new List<string> { "UserId" }, new List<object> { new { UserId = result } }
|
);
|
|
//添加用户角色关联表
|
var roleModel = await _roleServices.GetModel(x => x.Name == RoleConfig.SaleProductionStaff);
|
if (roleModel != null)
|
{
|
// 无论 Update Or Add , 先删除当前用户的全部 U_R 关系
|
var usreroles = (await _userRoleServices.Query(d => d.UserId == result)).Select(d => d.Id.ToString()).ToArray();
|
if (usreroles.Count() > 0)
|
{
|
var isAllDeleted = await _userRoleServices.DeleteByIds(usreroles);
|
}
|
|
// 然后再执行添加操作
|
await _sysUserInfoServices.InitializePermission(Account, sysOrgModel == null ? 0 : sysOrgModel.Id, RoleConfig.SaleProductionStaff);
|
}
|
}
|
}
|
}
|
}
|
|
_unitOfWork.CommitTran();
|
data.response = 1.ObjToString();
|
data.msg = "导入用户成功";
|
data.success = true;
|
return data;
|
}
|
catch (Exception ex)
|
{
|
_unitOfWork.RollbackTran();
|
data.msg = ex.Message;
|
data.response = 0.ObjToString();
|
data.status = 500;
|
return data;
|
}
|
}
|
|
/// <summary>
|
/// 绑定用户
|
/// </summary>
|
/// <param name="realName">用户名</param>
|
/// <param name="jobNo">工号</param>
|
/// <param name="sex">性别</param>
|
/// <param name="orgId">主体ID</param>
|
/// <param name="mobile">手机号</param>
|
/// <returns></returns>
|
[HttpGet, AllowAnonymous, AuthKeySecret]
|
public async Task<MessageModel<string>> BindingUser(string realName, string jobNo, int sex, int orgId)
|
{
|
var msg = string.Empty;
|
|
if (string.IsNullOrWhiteSpace(realName))
|
{
|
msg = "realName必须设置值";
|
goto ErrorResult;
|
}
|
if (string.IsNullOrWhiteSpace(jobNo))
|
{
|
msg = "jobNo必须设置值";
|
goto ErrorResult;
|
}
|
if (sex < 0 || sex > 2)
|
{
|
msg = "sex值是0女或1男";
|
goto ErrorResult;
|
}
|
if (orgId <= 0)
|
{
|
msg = "orgId必须设置值";
|
goto ErrorResult;
|
}
|
//if (string.IsNullOrWhiteSpace(mobile))
|
//{
|
// msg = "Mobile必须设置值";
|
// goto ErrorResult;
|
//}
|
|
var result = await _sysUserInfoServices.BindingUser(realName, jobNo, sex, orgId);
|
msg = result.Item1;
|
|
if (!string.IsNullOrEmpty(msg))
|
{
|
goto ErrorResult;
|
}
|
|
return new MessageModel<string>()
|
{
|
msg = "绑定用户成功",
|
success = true,
|
response = result.Item2.ObjToString()
|
};
|
|
ErrorResult:
|
return new MessageModel<string>()
|
{
|
msg = msg,
|
success = false
|
};
|
}
|
|
/// <summary>
|
/// 初始化菜单
|
/// </summary>
|
/// <param name="realName">用户名</param>
|
/// <param name="orgId">主体ID</param>
|
/// <param name="roleName">角色名称</param>
|
/// <returns></returns>
|
[HttpGet, AllowAnonymous]
|
public async Task<MessageModel<string>> InitializePermission(string realName, int orgId, string roleName)
|
{
|
var msg = string.Empty;
|
|
if (string.IsNullOrWhiteSpace(realName))
|
{
|
msg = "realName必须设置值";
|
goto ErrorResult;
|
}
|
if (orgId <= 0)
|
{
|
msg = "orgId必须设置值";
|
goto ErrorResult;
|
}
|
if (string.IsNullOrWhiteSpace(roleName))
|
{
|
msg = "roleName必须设置值";
|
goto ErrorResult;
|
}
|
|
var result = await _sysUserInfoServices.InitializePermission(realName, orgId, roleName);
|
msg = result.Item1;
|
|
if (!string.IsNullOrEmpty(msg))
|
{
|
goto ErrorResult;
|
}
|
|
return new MessageModel<string>()
|
{
|
msg = "初始化菜单成功",
|
success = true,
|
response = result.Item2.ObjToString()
|
};
|
|
ErrorResult:
|
return new MessageModel<string>()
|
{
|
msg = msg,
|
success = false
|
};
|
}
|
|
|
}
|
}
|