UserController.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Models;
  6. using FMSAdmin.Entities;
  7. using FMSApp.Services;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.AspNetCore.Authorization;
  11. using FMSAdmin.Helpers;
  12. using System.Data;
  13. using System.IO;
  14. using OfficeOpenXml;
  15. namespace FMSApp.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/app/users")]
  20. public class UserController : Controller {
  21. private readonly ILogger<UserController> _logger;
  22. private readonly FMSContext _context;
  23. private readonly UserService _service;
  24. private readonly StorageHelper _storage;
  25. public UserController(
  26. ILogger<UserController> logger,
  27. FMSContext context,
  28. UserService service,
  29. StorageHelper storage
  30. ) {
  31. _logger = logger;
  32. _context = context;
  33. _service = service;
  34. _storage = storage;
  35. }
  36. /// <summary>
  37. /// 로그인
  38. /// </summary>
  39. [AllowAnonymous]
  40. [HttpPost("[action]")]
  41. public IActionResult SignIn([FromBody] SignInModel model) {
  42. _logger.LogInformation(model.Dump());
  43. var user = _service.Login(int.Parse(model.SiteId), model.UserId, model.Passwd, null);
  44. if (user == null)
  45. return BadRequest("아이디나 비밀번호가 잘못되었습니다.");
  46. if (user.EmploymentStatus == EmploymentStatus.퇴직)
  47. return BadRequest("로그인 할 수 없습니다.");
  48. return Ok(new {
  49. user.SiteId,
  50. SiteName = user.CmSite.Name,
  51. user.UserId,
  52. user.UserGroupId,
  53. user.Name,
  54. user.OfficePhoneNo,
  55. user.Email,
  56. user.AccessToken,
  57. IsChangePassword = (user.PasswordUpdatedDate != null && user.PasswordUpdatedDate < DateTime.Now.AddMonths(-3))
  58. });
  59. }
  60. [HttpPost("verify/{siteid}/{userid}")]
  61. public IActionResult Verify(int siteid, string userid) {
  62. var verifyKey = User.Identity.Name;
  63. _logger.LogInformation(verifyKey.ToString());
  64. var user = _service.GetByUserId(siteid, userid);
  65. if (user == null) return NotFound();
  66. if (verifyKey != user.UserId) return NotFound();
  67. return Ok(new {
  68. user.SiteId,
  69. user.UserId,
  70. user.UserGroupId,
  71. user.Name,
  72. user.OfficePhoneNo,
  73. user.Email,
  74. IsChangePassword = (user.PasswordUpdatedDate != null && user.PasswordUpdatedDate < DateTime.Now.AddMonths(-3))
  75. });
  76. }
  77. /// <summary>
  78. /// 목록
  79. /// </summary>
  80. [HttpGet]
  81. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId) {
  82. _logger.LogInformation(req.Dump());
  83. var query = _FilterAndSort(req);
  84. query = query.Where(x => x.IsUse == true && x.IsSysop == false);
  85. if (!string.IsNullOrEmpty(siteId)) {
  86. query = query.Where(x => x.SiteId == Util.ToInt(siteId));
  87. }
  88. var list = query.Select(emp => new {
  89. emp.SiteId,
  90. emp.UserId,
  91. emp.UserGroupId,
  92. emp.CompanyId,
  93. CmCompany = new {
  94. emp.CmCompany.Name,
  95. emp.CmCompany.CompanyTypeId,
  96. CmCompanyType = new {
  97. emp.CmCompany.CmCompanyType.Name
  98. }
  99. },
  100. CmDepartment = new {
  101. emp.CmDepartment.Name,
  102. emp.CmDepartment.DepartmentId
  103. },
  104. emp.PositionId,
  105. CmPosition = new {
  106. emp.CmPosition.Name
  107. },
  108. emp.BusinessFieldId,
  109. CmBusinessField = new {
  110. emp.CmBusinessField.Name
  111. },
  112. emp.Name,
  113. emp.MobilePhoneNo,
  114. emp.OfficePhoneNo,
  115. emp.Email,
  116. emp.EnterDate,
  117. //UserGroupName = emp.CmUserGroup.Name,
  118. emp.AccessToken,
  119. CmFile = _storage.ParseFile(emp.CmFile),
  120. });
  121. var paging = PagingList.Pagination(list, req.page, req.limit);
  122. return Ok(paging);
  123. }
  124. // 엑셀 다운로드
  125. [AllowAnonymous]
  126. [HttpGet("excel")]
  127. public IActionResult ExportExcel([FromQuery] PagingRequest req, [FromQuery] string mapping) {
  128. var query = _FilterAndSort(req);
  129. var stream = new MemoryStream();
  130. using (var package = new ExcelPackage(stream)) {
  131. var workSheet = package.Workbook.Worksheets.Add("Sheet1");
  132. workSheet.Cells.LoadFromCollection(query, true);
  133. package.Save();
  134. }
  135. stream.Position = 0;
  136. string excelName = $"UserList-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx";
  137. //return File(stream, "application/octet-stream", excelName);
  138. return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", excelName);
  139. }
  140. /// <summary>
  141. /// 상세조회
  142. /// </summary>
  143. [HttpGet("[action]")]
  144. public IActionResult GetByUserId([FromQuery] string siteId, [FromQuery] string userId) {
  145. var emp = _service.GetByUserId(userId);
  146. if (emp == null)
  147. return NotFound();
  148. //return Ok(emp);
  149. return Ok(new {
  150. emp.UserId,
  151. emp.Passwd,
  152. emp.CompanyId,
  153. CompanyName = emp.CmCompany?.Name,
  154. emp.DepartmentId,
  155. DepartmentName = emp.CmDepartment?.Name,
  156. emp.PositionId,
  157. PositionName = emp.CmPosition?.Name,
  158. emp.BusinessFieldId,
  159. BusinessFieldName = emp.CmBusinessField?.Name,
  160. emp.UserGroupId,
  161. emp.Name,
  162. emp.EmploymentType,
  163. emp.EmploymentStatus,
  164. emp.MobilePhoneNo,
  165. emp.HomePhoneNo,
  166. emp.OfficePhoneNo,
  167. emp.Comment,
  168. emp.Email,
  169. emp.EnterDate,
  170. emp.RetireDate,
  171. emp.Certificated, //자격증
  172. emp.IsScheduleUser, //제어스케쥴담당자
  173. emp.IsSi, //SI접근권한
  174. emp.IsMobile, //모바일접근권한
  175. emp.IsUse,
  176. CmFile = _storage.ParseFile(emp.CmFile),
  177. CmFile1 = _storage.ParseFile(emp.CmFile1),
  178. //UserGroupName = emp.CmUserGroup.Name,
  179. //emp.AccessToken,
  180. });
  181. }
  182. /// <summary>
  183. /// 저장
  184. /// </summary>
  185. /// <param name="data"></param>
  186. /// <returns></returns>
  187. [HttpPost("[action]")]
  188. public IActionResult Save([FromBody] CmUser data) {
  189. _logger.LogInformation("Save");
  190. //_logger.LogInformation(data.Dump());
  191. if (ModelState.IsValid) {
  192. _service.Save(data);
  193. } else {
  194. return BadRequest(ModelState);
  195. }
  196. return Ok();
  197. }
  198. [HttpDelete("{siteId}/{userId}")]
  199. public IActionResult Delete(int siteId, string userId) {
  200. _service.Delete(siteId, userId);
  201. return Ok();
  202. }
  203. [HttpPost("[action]")]
  204. public IActionResult UpdatePushToken([FromBody] CmUser data) {
  205. _service.UpdatePushToken(data);
  206. return Ok();
  207. }
  208. // Role 제한 테스트
  209. [AllowAnonymous]
  210. [HttpGet("auth")]
  211. public IActionResult Auth() {
  212. return Ok();
  213. }
  214. // 검색 & 정렬 공통
  215. private IQueryable<CmUser> _FilterAndSort(PagingRequest req) {
  216. var query = _service.GetAll();
  217. // 기본 Entity 검색
  218. query = query.Filter(req.conditions);
  219. // 기본 Entity 정렬
  220. query = query.Sort(req.sort);
  221. return query;
  222. }
  223. }
  224. }