AuthController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. 
  2. using OASystem.Infrastructure.Repositories.Login;
  3. using System.IdentityModel.Tokens.Jwt;
  4. using System.Security.Claims;
  5. using OASystem.Domain.Dtos.UserDto;
  6. using OASystem.API.OAMethodLib;
  7. using Serilog.Parsing;
  8. using OASystem.Domain.Dtos.System;
  9. using System.Drawing.Drawing2D;
  10. using System.Collections;
  11. using OASystem.API.OAMethodLib.JuHeAPI;
  12. using OASystem.API.OAMethodLib.QiYeWeChatAPI;
  13. using OASystem.Domain.Dtos.QiYeWeChat;
  14. using OASystem.Domain.Entities.System;
  15. using TinyPinyin;
  16. namespace OASystem.API.Controllers
  17. {
  18. /// <summary>
  19. /// 鉴权相关
  20. /// </summary>
  21. [Route("api/")]
  22. public class AuthController : ControllerBase
  23. {
  24. private readonly IMapper _mapper;
  25. private readonly IConfiguration _config;
  26. private readonly LoginRepository _loginRep;
  27. private readonly MessageRepository _message;
  28. private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
  29. private readonly IQiYeWeChatApiService _qiYeWeChatApiServic;
  30. public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper,MessageRepository message,
  31. SystemMenuPermissionRepository systemMenuPermissionRepository, IQiYeWeChatApiService qiYeWeChatApiService)
  32. {
  33. _config = config;
  34. _loginRep = loginRep;
  35. _mapper = mapper;
  36. _message = message;
  37. _SystemMenuPermissionRepository = systemMenuPermissionRepository;
  38. _qiYeWeChatApiServic = qiYeWeChatApiService;
  39. }
  40. /// <summary>
  41. /// 用户登录
  42. /// </summary>
  43. /// <param name="dto"></param>
  44. /// <returns></returns>
  45. [Route("login")]
  46. [HttpPost]
  47. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  48. public async Task<IActionResult> LoginAsync(LoginDto dto)
  49. {
  50. #region 校验用户信息
  51. var userData = _loginRep.Login(dto).Result;
  52. if (userData.Code != 0)
  53. {
  54. if (userData.Code != 0) { return Ok(JsonView(false, userData.Msg)); }
  55. return Ok(JsonView(false, "暂无该员工信息!"));
  56. }
  57. #endregion
  58. Result authData = null;
  59. if (userData.Data != null)
  60. {
  61. var uid = (userData.Data as UserLoginInfoView).UserId;
  62. authData = _SystemMenuPermissionRepository.QueryMenuLoad(uid, dto.PortType);
  63. }
  64. var view = new LoginView
  65. {
  66. UserInfo = userData == null ? null : userData.Data,
  67. AuthData = authData == null ? null : authData.Data,
  68. };
  69. DateTime createZebraTime = DateTime.Now;
  70. string authorId = dto.Number + "Token";
  71. string authorToken = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>(authorId);//string 取
  72. if (authorToken != null)
  73. {
  74. #region 解析出过期时间
  75. var jwtHandler = new JwtSecurityTokenHandler();
  76. JwtSecurityToken securityToken = jwtHandler.ReadJwtToken(authorToken);
  77. DateTime expDt = (securityToken.Payload[JwtRegisteredClaimNames.Exp] ?? 0).GetInt().GetTimeSpmpToDate();
  78. #endregion
  79. if (expDt >= createZebraTime) //超时重新获取token
  80. {
  81. authorToken = GeneralMethod.GetToken(_config, dto.Number, createZebraTime);
  82. }
  83. view.Expires = expDt;
  84. view.Token = authorToken;
  85. }
  86. else
  87. {
  88. view.Expires = createZebraTime.AddMinutes(30);
  89. view.Token = GeneralMethod.GetToken(_config, dto.Number, createZebraTime);
  90. TimeSpan ts = view.Expires.AddMinutes(-1) - createZebraTime; //设置redis 过期时间 比 jwt 时间 快一分钟
  91. await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>(authorId, view.Token, ts);//string 存
  92. }
  93. #region 测试添加系统消息
  94. //await _message.AddMsg(new MessageDto()
  95. //{
  96. // Type = 1,
  97. // IssuerId = 208,
  98. // Title = "测试添加消息标题",
  99. // Content = "消息体测试",
  100. // ReleaseTime = DateTime.Now,
  101. // UIdList = new List<int> {
  102. // 5,
  103. // 208,
  104. // 219
  105. // }
  106. //});
  107. #endregion
  108. return Ok(JsonView(view));
  109. }
  110. /// <summary>
  111. /// 申请注册 数据Data
  112. /// </summary>
  113. /// <param name="dto"></param>
  114. /// <returns></returns>
  115. //[Authorize]
  116. [HttpPost]
  117. [Route("register/daraSource")]
  118. public async Task<IActionResult> RegisterDataSource()
  119. {
  120. string sql = string.Format(@"Select sc.Id CompanyId,sc.CompanyName,sd.Id DepId,sd.DepName,sjp.Id JobId,sjp.JobName From Sys_Company sc
  121. Left Join Sys_Department sd On sd.IsDel = 0 And sc.Id = sd.CompanyId
  122. Left Join Sys_JobPost sjp On sjp.IsDel = 0 And sjp.DepId = sd.Id
  123. Where sc.IsDel = 0");
  124. var companyDetails = _loginRep._sqlSugar.SqlQueryable<CompanyDetailsView>(sql).ToList();
  125. List<CompanyDetailsView1> detailsView1 = new List<CompanyDetailsView1>();
  126. if (companyDetails.Count > 0)
  127. {
  128. var companyDetails1 = companyDetails.GroupBy(it => it.CompanyId).Select(it => it.First()).ToList();
  129. detailsView1 = companyDetails1.Select(it =>
  130. {
  131. CompanyDetailsView1 itemCompany = new CompanyDetailsView1();
  132. List<DepDetailsView> depDetailsView = new List<DepDetailsView>();
  133. var companyDetails2 = companyDetails.GroupBy(it => it.DepId).Select(it => it.First()).ToList();
  134. //部门
  135. depDetailsView = companyDetails2.Where(depIt => depIt.CompanyId == it.CompanyId).Select(depIt => {
  136. DepDetailsView depDetails = new DepDetailsView();
  137. List<JobDetailsView> jobDetails = new List<JobDetailsView>();
  138. //岗位
  139. jobDetails = companyDetails.Where(jobIt => jobIt.DepId == depIt.DepId).Select(jobIt => {
  140. JobDetailsView jobDetail = new JobDetailsView() {
  141. JobId = jobIt.JobId,
  142. JobName = jobIt.JobName,
  143. };
  144. return jobDetail;
  145. }).ToList();
  146. depDetails.DepId = depIt.DepId;
  147. depDetails.DepName = depIt.DepName;
  148. depDetails.SubJob = jobDetails;
  149. return depDetails;
  150. }).ToList();
  151. itemCompany.CompanyId = it.CompanyId;
  152. itemCompany.CompanyName = it.CompanyName;
  153. itemCompany.SubDep = depDetailsView;
  154. return itemCompany;
  155. }).ToList();
  156. }
  157. return Ok(new { Code = 200, Msg = "查询成功!", Data = detailsView1 });
  158. }
  159. /// <summary>
  160. /// 申请注册
  161. /// </summary>
  162. /// <param name="dto"></param>
  163. /// <returns></returns>
  164. //[Authorize]
  165. [HttpPost]
  166. [Route("register")]
  167. public async Task<IActionResult> Register(RegisterDto dto)
  168. {
  169. #region 企业微信添加员工
  170. //string lastName = dto.CnName.Substring(0, 1);
  171. //string lastNamePy = string.Empty;
  172. //if (PinyinHelper.IsChinese(Convert.ToChar(lastName)))
  173. //{
  174. // lastNamePy = PinyinHelper.GetPinyin(lastName);
  175. //}
  176. //string userId = string.Format("{0}.{1}", dto.EnName, lastNamePy.ToLower());
  177. //Create_Request request = new Create_Request()
  178. //{
  179. // userid = userId,
  180. // name = dto.CnName,
  181. // mobile = dto.Phone,
  182. // department = new List<long>() { dto.DepId },
  183. // position = dto.JobPostId.ToString(),
  184. // gender = dto.Sex == 0 ? 1 : dto.Sex == 1 ? 2 : 1,
  185. // biz_mail = dto.Email
  186. //};
  187. //var qiYeWeChatCreateData = await _qiYeWeChatApiServic.CreateAsync(request);
  188. #endregion
  189. var userData = _loginRep.Register(dto);
  190. if (userData.Result.Code != 0)
  191. {
  192. return Ok(JsonView(false, userData.Result.Msg));
  193. }
  194. return Ok(JsonView(true, userData.Result.Msg));
  195. }
  196. /// <summary>
  197. /// 修改密码
  198. /// </summary>
  199. /// <param name="dto"></param>
  200. /// <returns></returns>
  201. [Authorize]
  202. [HttpPost]
  203. [Route("UpdPassword")]
  204. public async Task<IActionResult> UpdateUserPassword(UpdateDto dto)
  205. {
  206. Result result = new Result();
  207. Sys_Users sys_Users = _mapper.Map<Sys_Users>(dto);
  208. var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
  209. if (_UpdateState)
  210. {
  211. result.Code = 0;
  212. result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
  213. }
  214. else
  215. {
  216. result.Code = -2;
  217. result.Msg = "用户修改失败!";
  218. }
  219. return Ok(JsonView(result));
  220. }
  221. /// <summary>
  222. /// 测试auth
  223. /// </summary>
  224. /// <param name="dto"></param>
  225. /// <returns></returns>
  226. [OASystemAuthentication]
  227. [HttpPost("TestToken")]
  228. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  229. public async Task<IActionResult> TestToken(LoginDto dto)
  230. {
  231. string authorId = dto.Number + "Token";
  232. // 从Redis里面取数据
  233. //string userToken = _redis.StringGet(authorId);
  234. string userToken = "";
  235. var view = new LoginView
  236. {
  237. Token = authorId + ":" + userToken
  238. };
  239. return Ok(JsonView(view));
  240. }
  241. /// <summary>
  242. /// 员工信息 迁移
  243. /// Old OA To New OA
  244. /// </summary>
  245. /// <returns></returns>
  246. [HttpPost("UpdateUserDataOldOAToNewOA")]
  247. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  248. public async Task<IActionResult> UpdateUserDataOldOAToNewOA()
  249. {
  250. dynamic view = null;
  251. try
  252. {
  253. var _sqlSuar = _loginRep._sqlSugar;
  254. var oldOaUsersData = await _sqlSuar.Queryable<OA2014UsersView>().AS("OA2014.dbo.Users").ToListAsync();
  255. var newOaCompanyData = await _sqlSuar.Queryable<Sys_Company>().ToListAsync();
  256. var newOaDepartmentData = await _sqlSuar.Queryable<Sys_Department>().ToListAsync();
  257. var newOaJobPostData = await _sqlSuar.Queryable<Sys_JobPost>().ToListAsync();
  258. List<Sys_Users> newOaUserDatas = new List<Sys_Users>();
  259. foreach (var oldUser in oldOaUsersData)
  260. {
  261. int depId = 0, postId = 0;
  262. DateTime? birthday = null;
  263. DateTime? startWorkDate = null;
  264. int education = 0;
  265. int theOrAdultEducation = 0;
  266. string maritalStatus = string.Empty;
  267. Sys_Users user = new Sys_Users() {
  268. CnName = oldUser.CnName,
  269. EnName = oldUser.EnName,
  270. Number = oldUser.Number,
  271. CompanyId = 2,
  272. DepId = depId,
  273. JobPostId = postId,
  274. Password = oldUser.Password,
  275. Sex = oldUser.Sex,
  276. Phone = oldUser.Phone,
  277. UrgentPhone = oldUser.UrgentPhone,
  278. Email = oldUser.Email,
  279. Address = oldUser.Address,
  280. Edate = oldUser.Edate,
  281. Rdate = oldUser.Rdate,
  282. Seniority = oldUser.Seniority,
  283. Birthday = birthday,
  284. IDCard = oldUser.IDCard,
  285. StartWorkDate = startWorkDate,
  286. GraduateInstitutions = oldUser.GraduateInstitutions,
  287. Professional = oldUser.Professional,
  288. Education = education,
  289. TheOrAdultEducation = theOrAdultEducation,
  290. MaritalStatus = maritalStatus,
  291. HomeAddress = oldUser.HomeAddress,
  292. UsePeriod = oldUser.UsePeriod,
  293. };
  294. }
  295. view = new
  296. {
  297. Code = 200,
  298. Msg = "操作成功!",
  299. Data = oldOaUsersData
  300. };
  301. }
  302. catch (Exception ex)
  303. {
  304. view = new
  305. {
  306. Code = 400,
  307. Msg = ex.Message
  308. };
  309. }
  310. return Ok(JsonView(view));
  311. }
  312. }
  313. }