671 lines
28 KiB
C#
671 lines
28 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Threading.Tasks;
|
||
using DocumentFormat.OpenXml.Spreadsheet;
|
||
using DocumentFormat.OpenXml.Wordprocessing;
|
||
using Infrastructure;
|
||
using Infrastructure.Extensions;
|
||
using Infrastructure.Helpers;
|
||
using Infrastructure.Utilities;
|
||
using Microsoft.AspNetCore.Http;
|
||
using NetModular.DocX.Core;
|
||
using NPOI.HSSF.UserModel;
|
||
using NPOI.SS.Formula.Functions;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.XSSF.UserModel;
|
||
using OpenAuth.App.Base;
|
||
using OpenAuth.App.BaseApp.Base;
|
||
using OpenAuth.App.Config;
|
||
using OpenAuth.App.Interface;
|
||
using OpenAuth.App.Request;
|
||
using OpenAuth.App.Response;
|
||
using OpenAuth.Repository;
|
||
using OpenAuth.Repository.Domain;
|
||
using SixLabors.ImageSharp;
|
||
using SqlSugar;
|
||
using Yitter.IdGenerator;
|
||
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
|
||
|
||
namespace OpenAuth.App
|
||
{
|
||
public class UserManagerApp : SqlSugarBaseApp<SysUser, SugarDbContext>
|
||
{
|
||
private ISqlSugarClient client;
|
||
|
||
#region 构造函数
|
||
public UserManagerApp(
|
||
ISugarUnitOfWork<SugarDbContext> unitWork,
|
||
ISimpleClient<SysUser> repository,
|
||
IAuth auth,
|
||
ISqlSugarClient sqlSugarClient
|
||
) : base(unitWork, repository, auth)
|
||
{
|
||
this.client = sqlSugarClient;
|
||
}
|
||
#endregion
|
||
|
||
#region 用户查询
|
||
|
||
public async Task<Response<PageInfo<List<dynamic>>>> LoadAll(QueryUserListReq request)
|
||
{
|
||
RefAsync<int> totalNumber = 0;
|
||
//过滤orgid传参
|
||
List<long> dpt = new List<long>();
|
||
if (request.orgId != 0)
|
||
{
|
||
dpt = client.Queryable<SysOrg>().ToChildList(it => it.ParentId, request.orgId)?.Select(it => it.Id).ToList();
|
||
}
|
||
var aa = client.Queryable<SysUserOrg>().Where(r => dpt.Contains(r.OrgId)).ToList();
|
||
var table = await base.Repository.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(request.key), u => u.Account.Contains(request.key) || u.Name.Contains(request.key))
|
||
.LeftJoin<SysUserOrg>((u, o) => u.Id == o.UserId)
|
||
.WhereIF(request.orgId != 0, (u, o) => dpt.Contains(o.OrgId))
|
||
.OrderByDescending((u, o) => u.CreateTime)
|
||
.Distinct()
|
||
.Select<dynamic>((u, o) => new
|
||
{
|
||
id = u.Id,
|
||
account = u.Account,
|
||
name = u.Name,
|
||
createtime = u.CreateTime,
|
||
department = SqlFunc.Subqueryable<SysUserOrg>().Where(a => a.UserId == u.Id).LeftJoin<SysOrg>((a, o) => a.OrgId == o.Id).SelectStringJoin((a, o) => o.Name, ","),
|
||
role = SqlFunc.Subqueryable<SysUserRole>().Where(a => a.UserId == u.Id).LeftJoin<SysRole>((a, o) => a.RoleId == o.Id).SelectStringJoin((a, o) => o.Name, ","),
|
||
})
|
||
.ToPageListAsync(request.page, request.limit, totalNumber);
|
||
|
||
return new Response<PageInfo<List<dynamic>>>()
|
||
{
|
||
Result = new PageInfo<List<dynamic>>
|
||
{
|
||
Items = table,
|
||
Total = totalNumber
|
||
}
|
||
};
|
||
}
|
||
public List<long> getAllChildOrgId(long parentId)
|
||
{
|
||
var query = base.Repository.AsSugarClient().Queryable<SysOrg>()
|
||
.Where(c => c.ParentId == parentId)
|
||
.Select(c => new { c.Id, c.ParentId })
|
||
.ToList();
|
||
|
||
var childIds = query.Select(c => c.Id).ToList();
|
||
var grandChildIds = query.SelectMany(c => getAllChildOrgId(c.Id)).ToList();
|
||
|
||
childIds.AddRange(grandChildIds);
|
||
return childIds;
|
||
}
|
||
|
||
|
||
public async Task<Response<PageInfo<List<UserView>>>> Load(QueryUserListReq request)
|
||
{
|
||
|
||
var user = _auth.GetCurrentUser().User;
|
||
|
||
string sqlstr = "select \"min\"(\"Level\") from sys_userorg where \"UserId\"='" + user.Id + "' ";
|
||
var level = client.Ado.GetInt(sqlstr);
|
||
if (level == 0 || user.Id == -1)
|
||
{
|
||
|
||
|
||
RefAsync<int> totalNumber = 0;
|
||
|
||
var table = await base.Repository.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(request.key), u => u.Account.Contains(request.key) || u.Name.Contains(request.key))
|
||
.WhereIF(request.orgId != 0,
|
||
u => SqlFunc.Subqueryable<SysUserOrg>().Where(uo => uo.OrgId == request.orgId && uo.UserId == u.Id).Any())
|
||
.OrderByDescending(u => u.CreateTime)
|
||
.Select<UserView>()
|
||
.ToPageListAsync(request.page, request.limit, totalNumber);
|
||
|
||
return new Response<PageInfo<List<UserView>>>()
|
||
{
|
||
Result = new PageInfo<List<UserView>>
|
||
{
|
||
Items = table,
|
||
Total = totalNumber
|
||
}
|
||
};
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
string sqlstr1 = "select \"OrgId\" from sys_userorg where \"Level\"=" + level + " and \"UserId\"='" + user.Id + "' ";
|
||
List<long> orgIds1 = client.Ado.SqlQuery<long>(sqlstr1);
|
||
int count11 = orgIds1.Count;
|
||
for (int i = 0; i < count11; i++)
|
||
|
||
{
|
||
List<long> longs = getAllChildOrgId(orgIds1[i]);
|
||
orgIds1.AddRange(longs);
|
||
}
|
||
string keyword = "";
|
||
if (!string.IsNullOrEmpty(request.key))
|
||
{
|
||
keyword = keyword + "and a.\"Name\" like '%" + request.key + "%'";
|
||
}
|
||
string orgsql = "";
|
||
if (request.orgId != 0)
|
||
{
|
||
orgsql = " and \"OrgId\" ='" + request.orgId + "'";
|
||
}
|
||
string orgIds = "";
|
||
for (int j = 0; j < orgIds1.Count; j++)
|
||
{
|
||
if (j == orgIds1.Count - 1)
|
||
{
|
||
orgIds = orgIds + orgIds1[j];
|
||
}
|
||
else
|
||
{
|
||
orgIds = orgIds + orgIds1[j] + ",";
|
||
}
|
||
|
||
}
|
||
|
||
string sql = "WITH t as (\r\nselect \"UserId\" from ( select * from sys_userorg where \"UserId\" not in (select \"UserId\" from sys_userorg where \"Level\"<(select \"min\"(\"Level\") from sys_userorg " +
|
||
// " where \"UserId\"='"+ user.Id+ "' ))) a where a.\"OrgId\" in (select \"OrgId\" from sys_userorg where \"UserId\"='"+ user.Id+ "'"+ orgsql + " ) GROUP BY \"UserId\")";
|
||
" where \"UserId\"='" + user.Id + "' ))) a where a.\"OrgId\" =ANY(array[" + orgIds + "]) GROUP BY \"UserId\")";
|
||
string sql1 = "((SELECT a.* FROM t LEFT JOIN sys_user a on t.\"UserId\"=a.\"Id\" where 1=1 " + keyword + " ) UNION (SELECT * FROM sys_user a where a.\"CreateId\"='" + user.Id + "' " + keyword + ")) limit " + request.limit + "OFFSET " + (request.page - 1) * request.limit;
|
||
string sql2 = "(SELECT COUNT(a.*) FROM t LEFT JOIN sys_user a on t.\"UserId\"=a.\"Id\" where 1=1 " + keyword + " ) ";
|
||
string sql3 = "SELECT COUNT(a.*) FROM sys_user a where a.\"CreateId\"='" + user.Id + "' " + keyword;
|
||
|
||
|
||
var table = client.Ado.SqlQuery<UserView>(sql + sql1);
|
||
int count1 = client.Ado.GetInt(sql + sql2);
|
||
int count2 = client.Ado.GetInt(sql + sql3);
|
||
|
||
int count = count1 + count2;
|
||
/* var orgIds = base._auth.GetCurrentUser().Orgs.Select(o => o.Id);
|
||
|
||
RefAsync<int> totalNumber = 0;
|
||
|
||
var table = await base.Repository.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(request.key), u => u.Account.Contains(request.key) || u.Name.Contains(request.key))
|
||
.WhereIF(request.orgId != 0,
|
||
u => SqlFunc.Subqueryable<SysUserOrg>().Where(uo => uo.OrgId == request.orgId && uo.UserId == u.Id).Any())
|
||
.Where(u => SqlFunc.Subqueryable<SysUserOrg>().Where(uo => orgIds.Contains(uo.OrgId) && uo.UserId == u.Id).Any())
|
||
.OrderByDescending(u => u.CreateTime)
|
||
.Select<UserView>()
|
||
.ToPageListAsync(request.page, request.limit, totalNumber);*/
|
||
|
||
return new Response<PageInfo<List<UserView>>>()
|
||
{
|
||
Result = new PageInfo<List<UserView>>
|
||
{
|
||
Items = table,
|
||
Total = count
|
||
}
|
||
};
|
||
}
|
||
}
|
||
|
||
public async Task<Response<PageInfo<List<dynamic>>>> LoadUsers(QueryUserListReq request)
|
||
{
|
||
//获取当前用户
|
||
var user = _auth.GetCurrentUser().User;
|
||
RefAsync<int> totalNumber = 0;
|
||
//该用户下包含所有部门
|
||
List<long> deplist = new List<long>();
|
||
if (user != null)
|
||
{
|
||
var departs = client.Queryable<SysUserOrg>().Where(r => r.UserId == user.Id).ToList();
|
||
foreach (var item in departs)
|
||
{
|
||
var list = client.Queryable<SysOrg>().ToChildList(it => it.ParentId, item.OrgId)?.Select(it => it.Id).ToList();
|
||
deplist = deplist.Union(list).ToList();
|
||
}
|
||
}
|
||
|
||
//过滤orgid传参
|
||
List<long> dpt = new List<long>();
|
||
if (request.orgId != 0)
|
||
{
|
||
dpt = client.Queryable<SysOrg>().ToChildList(it => it.ParentId, request.orgId)?.Select(it => it.Id).ToList();
|
||
}
|
||
|
||
//获取列表数据
|
||
var table = await base.Repository.AsQueryable()
|
||
.WhereIF(!string.IsNullOrEmpty(request.key), u => u.Account.Contains(request.key) || u.Name.Contains(request.key))//过滤key
|
||
.LeftJoin<SysUserOrg>((u, o) => u.Id == o.UserId)
|
||
.Where((u, o) => deplist.Contains(o.OrgId) || u.CreateId == user.Id) //部门及创建人
|
||
.WhereIF(request.orgId != 0, (u, o) => dpt.Contains(o.OrgId)) //部门及左侧选择部门
|
||
.Distinct()
|
||
.OrderByDescending((u, o) => u.CreateTime)
|
||
.Select<dynamic>((u, o) => new
|
||
{
|
||
id = u.Id,
|
||
account = u.Account,
|
||
name = u.Name,
|
||
create = u.CreateTime,
|
||
department = SqlFunc.Subqueryable<SysUserOrg>().Where(a => a.UserId == u.Id).LeftJoin<SysOrg>((a, o) => a.OrgId == o.Id).SelectStringJoin((a, o) => o.Name, ","),
|
||
role = SqlFunc.Subqueryable<SysUserRole>().Where(a => a.UserId == u.Id).LeftJoin<SysRole>((a, o) => a.RoleId == o.Id).SelectStringJoin((a, o) => o.Name, ","),
|
||
})
|
||
.ToPageListAsync(request.page, request.limit, totalNumber);
|
||
|
||
return new Response<PageInfo<List<dynamic>>>()
|
||
{
|
||
Result = new PageInfo<List<dynamic>>
|
||
{
|
||
Items = table,
|
||
Total = totalNumber
|
||
}
|
||
};
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取指定角色包含的用户列表
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
public async Task<Response<PageInfo<List<UserView>>>> LoadByRole(QueryUserListByRoleReq request)
|
||
{
|
||
RefAsync<int> totalCount = 0;
|
||
|
||
var users = await client.Queryable<SysUserRole>()
|
||
.LeftJoin<SysUser>((ur, u) => ur.UserId == u.Id)
|
||
.Where(ur => ur.RoleId == request.roleId)
|
||
.Select((ur, u) => new UserView
|
||
{
|
||
Id = u.Id,
|
||
Account = u.Account,
|
||
Name = u.Name
|
||
}).ToPageListAsync(request.page, request.limit, totalCount);
|
||
|
||
return new Response<PageInfo<List<UserView>>>
|
||
{
|
||
Code = 200,
|
||
Message = "success",
|
||
Result = new PageInfo<List<UserView>>
|
||
{
|
||
Items = users,
|
||
Total = totalCount
|
||
}
|
||
};
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取指定机构包含的用户列表
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
public async Task<TableData> LoadByOrg(QueryUserListByOrgReq request)
|
||
{
|
||
var db = base.Repository.AsSugarClient();
|
||
RefAsync<int> totalCount = 0;
|
||
|
||
var users = await db.CopyNew().Queryable<SysUserOrg>()
|
||
.LeftJoin<SysUser>((uo, u) => uo.UserId == u.Id)
|
||
.Where((uo, u) => uo.OrgId == request.orgId)
|
||
.ToPageListAsync(request.page, request.limit, totalCount);
|
||
|
||
return new TableData
|
||
{
|
||
count = (int)totalCount,
|
||
data = users
|
||
};
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据 account 判断帐号是否存在
|
||
/// </summary>
|
||
/// <param name="account"></param>
|
||
/// <returns></returns>
|
||
public bool IsExistUser(string account)
|
||
{
|
||
return base.Repository.IsAny(a => a.Account == account);
|
||
}
|
||
|
||
public SysUser Get(long id)
|
||
{
|
||
return Repository.GetById(id);
|
||
}
|
||
|
||
public SysUser GetByAccount(string account)
|
||
{
|
||
return Repository.GetFirst(u => u.Account == account);
|
||
}
|
||
#endregion
|
||
|
||
#region 用户增删改
|
||
|
||
#region 添加/修改
|
||
public Response<bool> AddOrUpdate(UpdateUserReq request)
|
||
{
|
||
request.ValidationEntity(u => new { u.Account, u.Name });
|
||
|
||
SysUser requser = request;
|
||
requser.CreateId = _auth.GetCurrentUser().User.Id;
|
||
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
if (request.Id == 0)
|
||
{
|
||
if (uow.User.IsAny(u => u.Account == request.Account))
|
||
{
|
||
throw new Exception("用户账号已存在");
|
||
}
|
||
|
||
requser.Secretkey = Md5Helper.Encrypt(CommonHelper.CreateNo(), 16).ToLower();
|
||
if (string.IsNullOrEmpty(requser.Password))
|
||
{
|
||
requser.Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(Md5Helper.Hash(requser.Account), requser.Secretkey).ToLower(), 32).ToLower(); //如果客户端没提供密码,默认密码同账号
|
||
}
|
||
else
|
||
{
|
||
requser.Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(requser.Password, requser.Secretkey).ToLower(), 32).ToLower();
|
||
}
|
||
requser.CreateTime = DateTime.Now;
|
||
requser.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
||
uow.User.Insert(requser);
|
||
request.Id = requser.Id; //要把保存后的ID存入view
|
||
}
|
||
else
|
||
{
|
||
uow.User.Update(u => new SysUser
|
||
{
|
||
Account = requser.Account,
|
||
BizCode = requser.BizCode,
|
||
Name = requser.Name,
|
||
Sex = requser.Sex,
|
||
Status = requser.Status,
|
||
Signature = requser.Signature,
|
||
}, u => u.Id == request.Id);
|
||
if (!string.IsNullOrEmpty(requser.Password)) //密码为空的时候,不做修改
|
||
{
|
||
var userInfo = uow.User.GetById(requser.Id);
|
||
|
||
requser.Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(requser.Password, userInfo.Secretkey).ToLower(), 32).ToLower();
|
||
uow.User.Update(u => new SysUser
|
||
{
|
||
Password = requser.Password
|
||
}, u => u.Id == request.Id);
|
||
}
|
||
}
|
||
|
||
var flag = uow.Commit();
|
||
|
||
return new Response<bool>
|
||
{
|
||
Result = flag,
|
||
Message = flag == true ? "success" : "error"
|
||
};
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 删除
|
||
/// <summary>
|
||
/// 删除用户,包含用户与组织关系、用户与角色关系
|
||
/// </summary>
|
||
/// <param name="ids"></param>
|
||
public Response<bool> Delete(long[] ids)
|
||
{
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
uow.SysUserOrg.Delete(a => ids.Contains(a.UserId));
|
||
uow.SysUserRole.Delete(a => ids.Contains(a.UserId));
|
||
uow.User.Delete(u => ids.Contains(u.Id));
|
||
var flag = uow.Commit();
|
||
return new Response<bool>
|
||
{
|
||
Result = flag,
|
||
Message = flag == true ? "success" : "error"
|
||
};
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 分配角色
|
||
public async Task<Response<bool>> UserRoles(AssignUserRoles userRoles)
|
||
{
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
//删除用户相关角色
|
||
await uow.SysUserRole.DeleteByIdAsync(userRoles.UserId);
|
||
//重新添加本次角色
|
||
var models = userRoles.RoleIds.Select(r => new SysUserRole { UserId = userRoles.UserId, RoleId = r }).ToList();
|
||
await uow.SysUserRole.InsertRangeAsync(models);
|
||
|
||
var flag = uow.Commit();
|
||
|
||
return new Response<bool>
|
||
{
|
||
Result = flag,
|
||
Message = flag == true ? "success" : "error"
|
||
};
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 分配部门
|
||
public async Task<Response<bool>> UserOrgs(AssignUserOrgs userOrgs)
|
||
{
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
//删除用户相关部门
|
||
await uow.SysUserOrg.DeleteByIdAsync(userOrgs.UserId);
|
||
//重新添加本次部门
|
||
var models = userOrgs.OrgPoses.Select(o => new SysUserOrg { UserId = userOrgs.UserId, OrgId = o.OrgId, PositionId = o.PosId, Level = o.Level }).ToList();
|
||
await uow.SysUserOrg.InsertRangeAsync(models);
|
||
|
||
var flag = uow.Commit();
|
||
|
||
return new Response<bool>
|
||
{
|
||
Result = flag,
|
||
Message = flag == true ? "success" : "error"
|
||
};
|
||
}
|
||
}
|
||
#endregion
|
||
#region 修改密码
|
||
/// <summary>
|
||
/// 修改密码
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
public void ChangePassword(ChangePasswordReq request)
|
||
{
|
||
var user = base.Repository.GetFirst(a => a.Account == request.Account);
|
||
|
||
if (user != null)
|
||
{
|
||
var pwd = Md5Helper.Encrypt(DESEncrypt.Encrypt(request.Password, user.Secretkey).ToLower(), 32).ToLower();
|
||
|
||
Repository.Update(user => new SysUser
|
||
{
|
||
Password = pwd
|
||
}, u => u.Account == request.Account);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 修改用户资料
|
||
/// <summary>
|
||
/// 修改用户资料
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
public void ChangeProfile(ChangeProfileReq request)
|
||
{
|
||
if (request.Account == Define.SYSTEM_USERNAME)
|
||
{
|
||
throw new Exception("不能修改超级管理员信息");
|
||
}
|
||
|
||
Repository.Update(user => new SysUser
|
||
{
|
||
Name = request.Name,
|
||
Sex = request.Sex,
|
||
Signature=request.Signature
|
||
}, u => u.Account == request.Account);
|
||
}
|
||
#endregion
|
||
|
||
#region 更新数据库实体类
|
||
/// <summary>
|
||
/// 更新数据库实体类
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string AddEntity()
|
||
{
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
foreach (var item in uow.Db.DbMaintenance.GetTableInfoList().Where(r => r.Name.ToLower().StartsWith("mi")))
|
||
{
|
||
string entityName = item.Name.Substring(1, 1).ToUpper() + item.Name.Substring(1, 1).ToLower() + item.Name.Substring(2, 1).ToUpper() + item.Name.Substring(3).ToLower();/*实体名大写*/
|
||
//string entityName = "MiParkingUser";
|
||
uow.Db.MappingTables.Add(entityName, item.Name);
|
||
//foreach (var col in db.DbMaintenance.GetColumnInfosByTableName(item.Name))
|
||
//{
|
||
// db.MappingColumns.Add(col.DbColumnName.ToUpper() /*类的属性大写*/, col.DbColumnName, entityName);
|
||
//}
|
||
}
|
||
uow.Db.DbFirst.Where(r => r.ToLower().StartsWith("mi")).IsCreateAttribute().CreateClassFile("E:\\2026\\费县自然资源监管\\code\\OpenAuth.Repository\\Domain", "OpenAuth.Repository.Domain");
|
||
uow.Commit();
|
||
}
|
||
return "更新实体成功";
|
||
}
|
||
#endregion
|
||
|
||
|
||
|
||
#endregion
|
||
|
||
|
||
/// <summary>
|
||
/// 上传用户信息
|
||
/// </summary>
|
||
/// <param name="formFiles"></param>
|
||
/// <returns></returns>
|
||
public Response<bool> ImportUserInfo(IFormFileCollection formFiles)
|
||
{
|
||
IFormFile file = formFiles[0];
|
||
//存储文件到服务器
|
||
if (file != null)
|
||
{
|
||
if (file.FileName.IndexOf(".xls") > 0 || file.FileName.IndexOf(".xlsx") > 0)
|
||
{
|
||
//数据库导入
|
||
IWorkbook workbook = null;
|
||
if (file.FileName.IndexOf(".xlsx") > 0)
|
||
{
|
||
using (var stream = file.OpenReadStream())
|
||
{
|
||
workbook = new XSSFWorkbook(stream);//excel的版本2007
|
||
}
|
||
}
|
||
else if (file.FileName.IndexOf(".xls") > 0)
|
||
{
|
||
using (var stream = file.OpenReadStream())
|
||
{
|
||
workbook = new HSSFWorkbook(stream);//excel的版本2003
|
||
}
|
||
}
|
||
|
||
//数据处理
|
||
using (var uow = base.UnitWork.CreateContext())
|
||
{
|
||
//获取sheet
|
||
ISheet sheet;
|
||
sheet = workbook.GetSheetAt(0);
|
||
//处理sheet数据
|
||
string res = "";
|
||
if (sheet != null)
|
||
{
|
||
IRow firstRow = sheet.GetRow(0);
|
||
//获取有效数据行数
|
||
int lastRow = sheet.LastRowNum;
|
||
int rowCount = 0;
|
||
//具体excel数据解析
|
||
for (int i = 1; i <= lastRow; ++i)
|
||
{
|
||
IRow row = sheet.GetRow(i);
|
||
if (row == null || string.IsNullOrEmpty(row.GetCell(0).ToString())) continue;
|
||
|
||
SysUser user = new SysUser();
|
||
user.Id = YitIdHelper.NextId();
|
||
user.CreateTime = DateTime.Now;
|
||
user.Name = row.GetCell(4).ToString();
|
||
user.CreateId = _auth.GetCurrentUser().User.Id;
|
||
user.Account=row.GetCell(5).ToString();
|
||
user.Password = Md5Helper.Encrypt(user.Account, 32).ToLower();
|
||
|
||
if (uow.User.IsAny(u => u.Account == user.Account))
|
||
{
|
||
res += "账号" + user.Account + "已存在,";
|
||
}
|
||
else
|
||
{
|
||
user.Secretkey = Md5Helper.Encrypt(CommonHelper.CreateNo(), 16).ToLower();
|
||
if (string.IsNullOrEmpty(user.Password))
|
||
{
|
||
user.Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(Md5Helper.Hash(user.Account), user.Secretkey).ToLower(), 32).ToLower(); //如果客户端没提供密码,默认密码同账号
|
||
}
|
||
else
|
||
{
|
||
|
||
user.Password = Md5Helper.Encrypt(DESEncrypt.Encrypt(user.Password, user.Secretkey).ToLower(), 32).ToLower();
|
||
}
|
||
uow.User.Insert(user);
|
||
|
||
if (!string.IsNullOrEmpty(row.GetCell(7).ToString()))
|
||
{
|
||
//为用户分配角色
|
||
SysUserRole userrole = new SysUserRole();
|
||
userrole.UserId = user.Id;
|
||
userrole.RoleId = Convert.ToInt64(row.GetCell(7).ToString());
|
||
//删除用户相关角色
|
||
uow.SysUserRole.DeleteById(user.Id);
|
||
//添加
|
||
uow.SysUserRole.Insert(userrole);
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(row.GetCell(2).ToString()))
|
||
{
|
||
//为用户分配部门
|
||
SysUserOrg userorg = new SysUserOrg();
|
||
userorg.UserId = user.Id;
|
||
userorg.OrgId = Convert.ToInt64(row.GetCell(2).ToString());
|
||
userorg.PositionId = 0;
|
||
userorg.Level = Convert.ToInt16(row.GetCell(3).ToString());
|
||
//删除用户相关部门
|
||
uow.SysUserOrg.DeleteById(user.Id);
|
||
//重新添加本次部门
|
||
uow.SysUserOrg.Insert(userorg);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var flag = uow.Commit();
|
||
|
||
return new Response<bool>
|
||
{
|
||
Result = flag,
|
||
Message = flag == true ? "更新成功 "+res : "更新失败"
|
||
};
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return new Response<bool>
|
||
{
|
||
Result = false,
|
||
Message = "上传文件类型错误,请上传Excel文件"
|
||
};
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return new Response<bool>
|
||
{
|
||
Result = false,
|
||
Message = "文件为空"
|
||
};
|
||
}
|
||
}
|
||
}
|
||
} |