using OASystem.Infrastructure.Repositories.Login;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using OASystem.Domain.Dtos.UserDto;
using OASystem.API.OAMethodLib;
using Serilog.Parsing;
using OASystem.Domain.Dtos.System;
using System.Drawing.Drawing2D;
using System.Collections;
using OASystem.API.OAMethodLib.JuHeAPI;
using OASystem.API.OAMethodLib.QiYeWeChatAPI;
using OASystem.Domain.Dtos.QiYeWeChat;
using OASystem.Domain.Entities.System;
using TinyPinyin;
using System.Globalization;
namespace OASystem.API.Controllers
{
///
/// 鉴权相关
///
[Route("api/")]
public class AuthController : ControllerBase
{
private readonly IMapper _mapper;
private readonly IConfiguration _config;
private readonly LoginRepository _loginRep;
private readonly MessageRepository _message;
private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
private readonly IQiYeWeChatApiService _qiYeWeChatApiServic;
public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper,MessageRepository message,
SystemMenuPermissionRepository systemMenuPermissionRepository, IQiYeWeChatApiService qiYeWeChatApiService)
{
_config = config;
_loginRep = loginRep;
_mapper = mapper;
_message = message;
_SystemMenuPermissionRepository = systemMenuPermissionRepository;
_qiYeWeChatApiServic = qiYeWeChatApiService;
}
///
/// 用户登录
///
///
///
[Route("login")]
[HttpPost]
[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
public async Task LoginAsync(LoginDto dto)
{
#region 校验用户信息
var userData = _loginRep.Login(dto).Result;
if (userData.Code != 0)
{
if (userData.Code != 0) { return Ok(JsonView(false, userData.Msg)); }
return Ok(JsonView(false, "暂无该员工信息!"));
}
#endregion
Result authData = null;
if (userData.Data != null)
{
var uid = (userData.Data as UserLoginInfoView).UserId;
authData = _SystemMenuPermissionRepository.QueryMenuLoad(uid, dto.PortType);
}
var view = new LoginView
{
UserInfo = userData == null ? null : userData.Data,
AuthData = authData == null ? null : authData.Data,
};
DateTime createZebraTime = DateTime.Now;
string authorId = dto.Number + "Token";
string authorToken = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync(authorId);//string 取
if (authorToken != null)
{
#region 解析出过期时间
var jwtHandler = new JwtSecurityTokenHandler();
JwtSecurityToken securityToken = jwtHandler.ReadJwtToken(authorToken);
DateTime expDt = (securityToken.Payload[JwtRegisteredClaimNames.Exp] ?? 0).GetInt().GetTimeSpmpToDate();
#endregion
if (expDt >= createZebraTime) //超时重新获取token
{
authorToken = GeneralMethod.GetToken(_config, dto.Number, createZebraTime);
}
view.Expires = expDt;
view.Token = authorToken;
}
else
{
view.Expires = createZebraTime.AddMinutes(30);
view.Token = GeneralMethod.GetToken(_config, dto.Number, createZebraTime);
TimeSpan ts = view.Expires.AddMinutes(-1) - createZebraTime; //设置redis 过期时间 比 jwt 时间 快一分钟
await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync(authorId, view.Token, ts);//string 存
}
#region 测试添加系统消息
//await _message.AddMsg(new MessageDto()
//{
// Type = 1,
// IssuerId = 208,
// Title = "测试添加消息标题",
// Content = "消息体测试",
// ReleaseTime = DateTime.Now,
// UIdList = new List {
// 5,
// 208,
// 219
// }
//});
#endregion
return Ok(JsonView(view));
}
///
/// 申请注册 数据Data
///
///
///
//[Authorize]
[HttpPost]
[Route("register/daraSource")]
public async Task RegisterDataSource()
{
string sql = string.Format(@"Select sc.Id CompanyId,sc.CompanyName,sd.Id DepId,sd.DepName,sjp.Id JobId,sjp.JobName From Sys_Company sc
Left Join Sys_Department sd On sd.IsDel = 0 And sc.Id = sd.CompanyId
Left Join Sys_JobPost sjp On sjp.IsDel = 0 And sjp.DepId = sd.Id
Where sc.IsDel = 0");
var companyDetails = _loginRep._sqlSugar.SqlQueryable(sql).ToList();
List detailsView1 = new List();
if (companyDetails.Count > 0)
{
var companyDetails1 = companyDetails.GroupBy(it => it.CompanyId).Select(it => it.First()).ToList();
detailsView1 = companyDetails1.Select(it =>
{
CompanyDetailsView1 itemCompany = new CompanyDetailsView1();
List depDetailsView = new List();
var companyDetails2 = companyDetails.GroupBy(it => it.DepId).Select(it => it.First()).ToList();
//部门
depDetailsView = companyDetails2.Where(depIt => depIt.CompanyId == it.CompanyId).Select(depIt => {
DepDetailsView depDetails = new DepDetailsView();
List jobDetails = new List();
//岗位
jobDetails = companyDetails.Where(jobIt => jobIt.DepId == depIt.DepId).Select(jobIt => {
JobDetailsView jobDetail = new JobDetailsView() {
JobId = jobIt.JobId,
JobName = jobIt.JobName,
};
return jobDetail;
}).ToList();
depDetails.DepId = depIt.DepId;
depDetails.DepName = depIt.DepName;
depDetails.SubJob = jobDetails;
return depDetails;
}).ToList();
itemCompany.CompanyId = it.CompanyId;
itemCompany.CompanyName = it.CompanyName;
itemCompany.SubDep = depDetailsView;
return itemCompany;
}).ToList();
}
return Ok(new { Code = 200, Msg = "查询成功!", Data = detailsView1 });
}
///
/// 申请注册
///
///
///
//[Authorize]
[HttpPost]
[Route("register")]
public async Task Register(RegisterDto dto)
{
#region 企业微信添加员工
//string lastName = dto.CnName.Substring(0, 1);
//string lastNamePy = string.Empty;
//if (PinyinHelper.IsChinese(Convert.ToChar(lastName)))
//{
// lastNamePy = PinyinHelper.GetPinyin(lastName);
//}
//string userId = string.Format("{0}.{1}", dto.EnName, lastNamePy.ToLower());
//Create_Request request = new Create_Request()
//{
// userid = userId,
// name = dto.CnName,
// mobile = dto.Phone,
// department = new List() { dto.DepId },
// position = dto.JobPostId.ToString(),
// gender = dto.Sex == 0 ? 1 : dto.Sex == 1 ? 2 : 1,
// biz_mail = dto.Email
//};
//var qiYeWeChatCreateData = await _qiYeWeChatApiServic.CreateAsync(request);
#endregion
var userData = _loginRep.Register(dto);
if (userData.Result.Code != 0)
{
return Ok(JsonView(false, userData.Result.Msg));
}
return Ok(JsonView(true, userData.Result.Msg));
}
///
/// 修改密码
///
///
///
[Authorize]
[HttpPost]
[Route("UpdPassword")]
public async Task UpdateUserPassword(UpdateDto dto)
{
Result result = new Result();
Sys_Users sys_Users = _mapper.Map(dto);
var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
if (_UpdateState)
{
result.Code = 0;
result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
}
else
{
result.Code = -2;
result.Msg = "用户修改失败!";
}
return Ok(JsonView(result));
}
///
/// 测试auth
///
///
///
[OASystemAuthentication]
[HttpPost("TestToken")]
[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
public async Task TestToken(LoginDto dto)
{
string authorId = dto.Number + "Token";
// 从Redis里面取数据
//string userToken = _redis.StringGet(authorId);
string userToken = "";
var view = new LoginView
{
Token = authorId + ":" + userToken
};
return Ok(JsonView(view));
}
///
/// 员工信息 迁移
/// Old OA To New OA
///
///
[HttpPost("UpdateUserDataOldOAToNewOA")]
[ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
public async Task UpdateUserDataOldOAToNewOA()
{
dynamic view = null;
try
{
var _sqlSuar = _loginRep._sqlSugar;
var oldOaUsersData = await _sqlSuar.Queryable().AS("OA2014.dbo.Users").ToListAsync();
var newOaCompanyData = await _sqlSuar.Queryable().ToListAsync();
var newOaDepartmentData = await _sqlSuar.Queryable().ToListAsync();
var newOaJobPostData = await _sqlSuar.Queryable().ToListAsync();
List newOaUserDatas = new List();
foreach (var oldUser in oldOaUsersData)
{
int depId = 0, postId = 0;
#region 处理部门岗位
int did = oldUser.Did;
string post = oldUser.Post;
switch (did)
{
case 1 : //信息部
depId = 2;
if (post.Equals("信息部经理")) postId = 4;
else if (post.Equals("美工")) { depId = 5; postId = 18; }
else if(post.Equals("网络推广")) postId = 46;
else if (post.Equals("软件开发")) postId = 5;
else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
else if (post.Equals("平面设计")) { depId = 5; postId = 18; }
else if (post.Equals("平面设计师")) { depId = 5; postId = 18; }
else if (post.Equals("软件工程师")) postId = 5;
else if (post.Equals("OP操作")) { depId = 7; postId = 28; }
else if (post.Equals("软件工程师.")) postId = 5;
else if (post.Equals(".net工程师")) postId = 5;
else if (post.Equals("安卓开发工程师")) postId = 7;
else if (post.Equals("web前端")) postId = 6;
else if (post.Equals("Web后端开发")) postId = 5;
break;
case 2 : //财务部
depId=3;
if (post.Equals("主管")) postId = 47;
else if (post.Equals("财务总监")) { postId = 9; }
else if (post.Equals("会计")) { postId = 10; }
else if (post.Equals("财务经理")) { postId = 47; }
else if (post.Equals("财务助理")) { postId = 50; }
else if (post.Equals("出纳")) { postId = 48; }
else { postId = 10; }
break;
case 3: //人事部
depId = 4;
if (post.Equals("主管")) postId = 51;
else if (post.Equals("人事部主管")) { postId = 51; }
else if (post.Equals("人事行政主管")) { postId = 51; }
else if (post.Equals("行政人事助理")) { postId = 52; }
else if (post.Equals("人事助理")) { postId = 52; }
else if (post.Equals("人事主管")) { postId = 51; }
else if (post.Equals("行政人事专员")) { postId = 12; }
else if (post.Equals("行政司机")) { postId = 14; }
else if (post.Equals("司机")) { postId = 14; }
else if (post.Equals("统筹执行")) { postId = 12; }
else if (post.Equals("培训专员")) { postId = 13; }
else if (post.Equals("人事经理")) { postId = 11; }
else if (post.Equals("前台")) { postId = 33; }
else if (post.Equals("人事行政经理")) { postId = 11; }
else if (post.Equals("人事部经理")) { postId = 11; }
else if (post.Equals("人事专员")) { postId = 12; }
else if (post.Equals("人事经理")) { postId = 11; }
else postId = 12;
break;
case 4: //国交部
//22 7 主管
//23 7 计调
//24 7 机票
//25 7 酒店
//26 7 签证
//27 7 商邀
//28 7 OP
//32 7 经理
depId = 7;
if (post.Equals("酒店")) postId = 25;
else if (post.Equals("经理")) { postId = 32; }
else if (post.Equals("OP专员")) { postId = 28; }
else if (post.Equals("酒店预订")) { postId = 25; }
else if (post.Equals("商务邀请")) { postId = 27; }
else if (post.Equals("-")) { postId = 0; }
else if (post.Equals("签证专员")) { postId = 26; }
else if (post.Equals("OP操作")) { postId = 28; }
else if (post.Equals("司机")) { postId = 14; }
else if (post.Equals("国际交流部经理")) { postId = 32; }
else if (post.Equals("机票酒店")) { postId = 24; }
else if (post.Equals("签证")) { postId = 26; }
else if (post.Equals("票房")) { postId = 24; }
else if (post.Equals("票务专员")) { postId = 24; }
else if (post.Equals("酒店/机票")) { postId = 24; }
else if (post.Equals("OP")) { postId = 28; }
else if (post.Equals("主管")) { postId = 22; }
else if (post.Equals("订票专员")) { postId = 24; }
else if (post.Equals("机票")) { postId = 24; }
else if (post.Equals("国交部经理")) { postId = 32; }
else if (post.Equals("计调")) { postId = 23; }
else if (post.Equals("票务")) { postId = 24; }
else if (post.Equals("国交部主管")) { postId = 22; }
else if (post.Equals("暂无")) { postId = 22; }
else if (post.Equals("初级OP")) { postId = 28; }
else if (post.Equals("计调")) { postId = 23; }
else { postId = 0; }
break;
case 5: //会展部
//15 5 经理
//16 5 文案策划
//17 5 活动执行
//18 5 平面设计师
//19 5 3D设计师
depId = 5;
if (post.Equals("-")) postId = 16;
break;
case 6: //市场销售部
//20 6 经理
//21 6 市场专员
//53 6 主管
depId = 6;
if (post.Equals("主管")) postId = 53;
else if (post.Equals("-")) postId = 21;
else if (post.Equals("销售总监")) postId = 53;
else if (post.Equals("市场专员")) postId = 21;
else if (post.Equals("销售专员")) postId = 54;
else if (post.Equals("市场助理")) postId = 55;
else if (post.Equals("销售")) postId = 54;
break;
case 99: //总经办
//1 1 总经理
//2 1 副总经理
//3 1 总经理助理
depId = 1;
if (post.Equals("总经理")) postId = 1;
else if (post.Equals("副总")) postId = 2;
break;
case 107: //会议会展策划部
//15 5 经理
//16 5 文案策划
//17 5 活动执行
//18 5 平面设计师
//19 5 3D设计师
//56 5 销售
//46 5 网络推广
//57 5 市场推广
depId = 5;
if (post.Equals("销售")) postId = 56;
else if (post.Equals("策划执行")) postId = 16;
else if (post.Equals("策活动划")) postId = 16;
else if (post.Equals("活动执行")) postId = 17;
else if (post.Equals("网络媒介推广")) postId = 46;
else if (post.Equals("媒介主任")) postId = 46;
else if (post.Equals("公关部经理")) postId = 15;
else if (post.Equals("项目执行")) postId = 17;
else if (post.Equals("市场推广")) postId = 57;
else if (post.Equals("策划")) postId = 16;
else if (post.Equals("3D设计师")) postId = 19;
else if (post.Equals("平面设计")) postId = 18;
else if (post.Equals("设计")) postId = 18;
else if (post.Equals("活动策划")) postId = 16;
else if (post.Equals("活动策划执行")) postId = 17;
else if (post.Equals("高级活动策划")) postId = 16;
else postId = 0;
break;
case 115:
if (post.Equals("系统管理员")) { depId = 9; postId = 31; }
else if (post.Equals("后勤专员")) { depId = 5; postId = 58; }
break;
case 287: //会展部
//59 2 17 经理
//60 2 17 主管
//61 2 17 会展专员
//62 2 17 会展销售
//63 2 17 会展策划
//64 2 17 招商专员
//65 2 17 媒介专员
depId = 17;
if (post.Equals("会展部经理")) postId = 59;
else if (post.Equals("会展专员")) postId = 61;
else if (post.Equals("会展销售")) postId = 62;
else if (post.Equals("招商招展")) postId = 63;
else if (post.Equals("会展部主管")) postId = 60;
else if (post.Equals("媒介专员")) postId = 65;
else if (post.Equals("会展策划")) postId = 63;
else if (post.Equals("招商专员")) postId = 64;
else postId = 61;
break;
case 304: //总经理助理
//1 1 总经理
//2 1 副总经理
//3 1 总经理助理
depId = 1;
postId = 3;
break;
case 323: //海外游学部
//66 3 19 游学顾问
depId = 19;
postId = 66;
break;
case 335: //会议会展策划部
//15 5 经理
//16 5 文案策划
//17 5 活动执行
//18 5 平面设计师
//19 5 3D设计师
//56 5 销售
//46 5 网络推广
//57 5 市场推广
//67 5 策划主管
depId = 5;
if (post.Equals("会展专员")) { depId = 17; postId = 61; }
else if (post.Equals("策划执行")) postId = 16;
else if (post.Equals("策划主管")) postId = 67;
else if (post.Equals("策划")) postId = 16;
else if (post.Equals("文案")) postId = 16;
else if (post.Equals("策划执行")) postId = 17;
else if (post.Equals("执行专员 ")) postId = 17;
break;
case 761://项目部
//20 6 经理
//21 6 市场专员
//53 6 主管
if (post.Equals("销售主管")) { depId = 6; postId = 20; }
else if (post.Equals("场站经理")) { depId = 6; postId = 53; }
else if (post.Equals("暂无")) { depId = 5; postId = 58; }
else
{
if (oldUser.CnName.Equals("许婷"))
{
depId = 5; postId = 16;
}
else if (oldUser.CnName.Equals("陈雪"))
{
depId = 5; postId = 17;
}
}
break;
default:
break;
}
#endregion
string idCrad = string.Empty;
string idCradNumber = string.Empty;
DateTime? birthday = null;
if (!string.IsNullOrEmpty(oldUser.IDCard))
{
idCrad = oldUser.IDCard.Trim();
#region 处理身份证Number 出生日期
if (idCrad.ValidateIdNumber())
{
idCradNumber = idCrad.ToString();
string birthDate = idCrad.Substring(6, 8); // 提取从第6位开始的8个字符,即出生日期部分
birthday = new DateTime(int.Parse(birthDate.Substring(0, 4)), int.Parse(birthDate.Substring(4, 2)), int.Parse(birthDate.Substring(6, 2)));
}
#endregion
}
DateTime? startWorkDate = null;
#region 判断是否是日期格式的字符串
string format = "yyyy-MM-dd"; // 日期格式
DateTime date;
bool isParsed = DateTime.TryParseExact(oldUser.StartWorkDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
if (isParsed)
{
startWorkDate = date;
}
#endregion
int education = 0;
#region 处理学历
if (!string.IsNullOrEmpty(oldUser.Education))
{
//0 未设置 1 小学、2 初中、3 高中、4 专科、5 本科、6 研究生
if (oldUser.Education.Equals("本科")) education = 5;
else if (oldUser.Education.Equals("大学专科")) education = 4;
else if (oldUser.Education.Equals("大专")) education = 4;
else if (oldUser.Education.Equals("全日制本科")) education = 5;
else if (oldUser.Education.Equals("硕士")) education = 6;
else if (oldUser.Education.Equals("硕士研究生")) education = 6;
else if (oldUser.Education.Equals("学士")) education = 6;
else if (oldUser.Education.Equals("研究生")) education = 6;
else if (oldUser.Education.Equals("专科")) education = 4;
}
#endregion
int theOrAdultEducation = 0;
#region 处理统招/成人
if (!string.IsNullOrEmpty(oldUser.TheOrAdultEducation))
{
//0 未设置 1 成教 2 统招 3 留学
if (oldUser.TheOrAdultEducation.Equals("成教")) theOrAdultEducation = 1;
if (oldUser.TheOrAdultEducation.Equals("自考")) theOrAdultEducation = 1;
else if (oldUser.TheOrAdultEducation.Equals("统招")) theOrAdultEducation = 2;
else if (oldUser.TheOrAdultEducation.Equals("留学")) theOrAdultEducation = 3;
}
#endregion
Sys_Users user = new Sys_Users()
{
Id = oldUser.Id,
CnName = oldUser.CnName,
EnName = oldUser.EnName,
Number = oldUser.Number,
CompanyId = 2,
DepId = depId,
JobPostId = postId,
Password = oldUser.Password,
Sex = oldUser.Sex,
Ext = oldUser.Ext,
Phone = oldUser.Phone,
UrgentPhone = oldUser.UrgentPhone,
Email = oldUser.Email,
Address = oldUser.Address,
Edate = oldUser.Edate,
Rdate = oldUser.Rdate,
Seniority = oldUser.Seniority,
Birthday = birthday,
IDCard = idCradNumber,
StartWorkDate = startWorkDate,
GraduateInstitutions = oldUser.GraduateInstitutions,
Professional = oldUser.Professional,
Education = education,
TheOrAdultEducation = theOrAdultEducation,
MaritalStatus = oldUser.MaritalStatus,
HomeAddress = oldUser.HomeAddress,
UsePeriod = oldUser.UsePeriod,
WorkExperience = oldUser.WorkExperience,
Certificate = oldUser.Certificate,
HrAudit = 1,
CreateUserId = 208,
CreateTime = DateTime.Now,
DeleteUserId = null,
DeleteTime = string.Empty,
Remark = oldUser.Remark,
IsDel = oldUser.IsDel,
};
newOaUserDatas.Add(user);
}
if (newOaUserDatas.Count > 0)
{
//执行删除
bool resetStatus = _sqlSuar.DbMaintenance.TruncateTable();
//执行批量添加
int addTotal = await _sqlSuar.Insertable(newOaUserDatas).IgnoreColumns(it => it.Id).ExecuteCommandAsync();
}
view = new
{
Code = 200,
Msg = "操作成功!",
Data = newOaUserDatas
};
}
catch (Exception ex)
{
view = new
{
Code = 400,
Msg = ex.Message
};
}
return Ok(JsonView(view));
}
}
}