MonthlyReportController.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  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. using System.Text;
  16. using System.Collections.Generic;
  17. using Newtonsoft.Json;
  18. using Newtonsoft.Json.Linq;
  19. namespace FMSApp.Controllers {
  20. [Authorize]
  21. [ApiController]
  22. [ApiVersion("1")]
  23. [Route("api/app/[controller]")]
  24. public class MonthlyReportController : Controller {
  25. private readonly ILogger<MonthlyReportController> _logger;
  26. private readonly FMSContext _context;
  27. private readonly MonthlyReportService _service;
  28. private readonly FMSAdmin.Services.SiteWeatherInfoService _siteWeatherInfoService;
  29. private readonly StorageHelper _storage;
  30. public enum WorkTypeId {
  31. PeriodicInspection = 1,
  32. ForensicExamination = 2,
  33. CivilComplaint = 3,
  34. SiAlarm = 4,
  35. Occasional = 5,
  36. Construct = 6,
  37. ForensicEducation = 7,
  38. }
  39. public enum WorkProgressId {
  40. WorkStatusPending = 3,
  41. WorkStatusInProgress = 4,
  42. WorkStatusComplete = 5,
  43. WorkStatusApproved = 6,
  44. WorkStatusDeferred = 7,
  45. }
  46. public enum AdjustmentTypeId {
  47. Regular = 0,
  48. Loss = 1,
  49. Return = 2
  50. }
  51. public MonthlyReportController(
  52. ILogger<MonthlyReportController> logger,
  53. FMSContext context,
  54. MonthlyReportService service,
  55. FMSAdmin.Services.SiteWeatherInfoService siteWeatherInfoService,
  56. StorageHelper storage
  57. ) {
  58. _logger = logger;
  59. _context = context;
  60. _service = service;
  61. _siteWeatherInfoService = siteWeatherInfoService;
  62. _storage = storage;
  63. }
  64. /// <summary>
  65. /// 목록
  66. /// </summary>
  67. [HttpGet]
  68. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId, bool businessAuth) {
  69. var query = _FilterAndSort(req);
  70. query = BusinessFieldHelper.Apply<FmsMonthlyReport>(_context, User, businessAuth, query);
  71. query = query.Where(x => x.SiteId == Util.ToInt(siteId));
  72. var list = query.Select(x => new {
  73. x.SiteId,
  74. x.AddDate,
  75. x.BusinessFieldId,
  76. x.Name,
  77. x.Contents,
  78. x.RegisterUserId,
  79. RegisterUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.RegisterUserId).Name,
  80. x.ApproveDate,
  81. x.RegisterDate,
  82. x.ApproverUserId,
  83. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  84. });
  85. var paging = PagingList.Pagination(list, req.page, req.limit);
  86. return Ok(paging);
  87. }
  88. [HttpGet("[action]")]
  89. public IActionResult Get([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  90. var query = _service.GetAll();
  91. var item = query.Where(
  92. x => x.SiteId == Util.ToInt(siteId)
  93. && x.AddDate.Year == addDate.Date.Year
  94. && x.AddDate.Month == addDate.Date.Month
  95. && x.BusinessFieldId == Util.ToInt(businessFieldId)
  96. ).Select(x => new {
  97. x.SiteId,
  98. AddDate = x.AddDate.ToString("yyyy-MM"),
  99. x.BusinessFieldId,
  100. x.Name,
  101. x.Contents,
  102. x.SiteInfoDatas,
  103. x.FacilityStandards,
  104. x.RentalStandards,
  105. ParkingManagement = new {
  106. FileId = x.ParkingManagement.FileId,
  107. Path = _storage.getFilePath(x.ParkingManagement),
  108. Name = x.ParkingManagement.Name
  109. },
  110. RentalManagement = new {
  111. FileId = x.RentalManagement.FileId,
  112. Path = _storage.getFilePath(x.RentalManagement),
  113. Name = x.RentalManagement.Name
  114. },
  115. MonthlyPriorityWork = new {
  116. FileId = x.MonthlyPriorityWork.FileId,
  117. Path = _storage.getFilePath(x.MonthlyPriorityWork),
  118. Name = x.MonthlyPriorityWork.Name
  119. },
  120. ImprovementReport = new {
  121. FileId = x.ImprovementReport.FileId,
  122. Path = _storage.getFilePath(x.ImprovementReport),
  123. Name = x.ImprovementReport.Name
  124. },
  125. NextMonthPriorityWork = new {
  126. FileId = x.NextMonthPriorityWork.FileId,
  127. Path = _storage.getFilePath(x.NextMonthPriorityWork),
  128. Name = x.NextMonthPriorityWork.Name
  129. },
  130. Cost = new {
  131. FileId = x.Cost.FileId,
  132. Path = _storage.getFilePath(x.Cost),
  133. Name = x.Cost.Name
  134. },
  135. SurroundingStatus = new {
  136. FileId = x.SurroundingStatus.FileId,
  137. Path = _storage.getFilePath(x.SurroundingStatus),
  138. Name = x.SurroundingStatus.Name
  139. },
  140. x.HumanCountStatus,
  141. x.ManagementOfficeContact,
  142. x.RelatedInstitutionsContact,
  143. x.UserChangeStatus,
  144. x.TenantContact,
  145. x.RegisterUserId,
  146. x.RegisterDate,
  147. x.ApproveDate,
  148. x.ApproverUserId,
  149. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  150. x.ApproverUserId2,
  151. ApproverUserName2 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId2).Name,
  152. x.ApproverUserId3,
  153. ApproverUserName3 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId3).Name,
  154. x.ApproverUserId4,
  155. ApproverUserName4 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId4).Name,
  156. x.ApproverUserId5,
  157. ApproverUserName5 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId5).Name,
  158. x.FacilityTime,
  159. x.FacilityTimeGraph,
  160. x.EnergyUsage,
  161. x.EnergyUsageGraph,
  162. x.EnergyCost,
  163. x.EnergyCharge,
  164. x.EnergyChargeGraph,
  165. x.EnergyAnalysis,
  166. }).FirstOrDefault();
  167. var organizationChartStatus =
  168. _context.CmOrganizationChartStatus.Where(
  169. x => x.SiteId == Util.ToInt(siteId)
  170. && x.Year == addDate.Date.Year
  171. && x.Month == addDate.Date.Month
  172. ).Select(x => new {
  173. x.CmFile.FileId,
  174. Path = _storage.getFilePath(x.CmFile),
  175. x.CmFile.Name
  176. }).FirstOrDefault();
  177. var rentalStatus =
  178. _context.CmRentalStatus.Where(
  179. x => x.SiteId == Util.ToInt(siteId)
  180. && x.Year == addDate.Date.Year
  181. && x.Month == addDate.Date.Month
  182. ).Select(x => new {
  183. x.CmFile.FileId,
  184. Path = _storage.getFilePath(x.CmFile),
  185. x.CmFile.Name
  186. }).FirstOrDefault();
  187. _logger.LogInformation("========================== 법정검사 =======================");
  188. DataTable legalExamination = _service.GetLegalExamination(Util.ToInt(siteId), addDate);
  189. var layoutStatus =
  190. _context.CmLayout.Where(
  191. x => x.SiteId == Util.ToInt(siteId)
  192. && x.Year == addDate.Date.Year
  193. && x.Month == addDate.Date.Month
  194. ).Select(x => new {
  195. x.CmFile.FileId,
  196. Path = _storage.getFilePath(x.CmFile),
  197. x.CmFile.Name
  198. }).FirstOrDefault();
  199. return Ok(new {
  200. report = item,
  201. OrganizationChartStatus = organizationChartStatus,
  202. RentalStatus = rentalStatus,
  203. LayoutStatus = layoutStatus,
  204. LegalExamination = legalExamination,
  205. });
  206. }
  207. [AllowAnonymous]
  208. [HttpGet("[action]")]
  209. public string GetJson(string siteId, DateTime? addDate, string tabName, string year, string month) {
  210. _logger.LogInformation(tabName);
  211. var query = _service.GetAll();
  212. if (addDate == null) {
  213. if (string.IsNullOrEmpty(year) || string.IsNullOrEmpty(month)) {
  214. throw new Exception("날짜가 입력되지 않았습니다.");
  215. }
  216. }
  217. // Date or year,month
  218. int currentYear = addDate != null ? addDate.Value.Year : Util.ToInt(year);
  219. int currentMonth = addDate != null ? addDate.Value.Month : Util.ToInt(month);
  220. DateTime currentDate = addDate != null ? addDate.Value : new DateTime(currentYear, currentMonth, 1);
  221. var item = query.Where(
  222. x => x.SiteId == Util.ToInt(siteId)
  223. && x.AddDate.Year == currentYear
  224. && x.AddDate.Month == currentMonth
  225. ).Select(x => new {
  226. CmSite = new {
  227. x.Name
  228. },
  229. AddDate = x.AddDate.ToString("yyyy-MM"),
  230. x.Name,
  231. x.Contents,
  232. x.SiteInfoDatas,
  233. x.FacilityStandards,
  234. x.RentalStandards,
  235. x.HumanCountStatus,
  236. x.UserChangeStatus,
  237. x.ManagementOfficeContact,
  238. x.RelatedInstitutionsContact,
  239. x.TenantContact,
  240. x.ParkingManagement,
  241. x.RentalManagement,
  242. x.MonthlyPriorityWork,
  243. x.ImprovementReport,
  244. x.NextMonthPriorityWork,
  245. x.Cost,
  246. x.SurroundingStatus,
  247. x.FacilityTime,
  248. x.FacilityTimeGraph,
  249. x.EnergyUsage,
  250. x.EnergyUsageGraph,
  251. x.EnergyCost,
  252. x.EnergyCharge,
  253. x.EnergyChargeGraph,
  254. x.EnergyAnalysis,
  255. x.ApproveDate,
  256. x.ApproveDate2,
  257. x.ApproveDate3,
  258. x.ApproverUserId,
  259. x.ApproverUserId2,
  260. x.ApproverUserId3
  261. }).FirstOrDefault();
  262. string approve = "";
  263. if (item != null) {
  264. approve += "[" + getApproverInfo(item.ApproverUserId, item.ApproveDate);
  265. approve += getApproverInfo(item.ApproverUserId2, item.ApproveDate2);
  266. approve += getApproverInfo(item.ApproverUserId3, item.ApproveDate3);
  267. approve += "]";
  268. }
  269. string json = "";
  270. if (item != null) {
  271. if (tabName == "Building") {
  272. json = $@"
  273. {{
  274. Building : {{
  275. SiteInfo: {item.SiteInfoDatas},
  276. FacilityStandards: {item.FacilityStandards},
  277. RentalStandards: {item.RentalStandards},
  278. Approver : {approve}
  279. }}
  280. }}";
  281. } else if (tabName == "UserInfo") {
  282. var OrganizationChartStatus = _context.CmOrganizationChartStatus.Where(x =>
  283. x.SiteId == Util.ToInt(siteId) &&
  284. x.Year == currentYear &&
  285. x.Month == currentMonth).Select(x => x.CmFile).SingleOrDefault();
  286. json = $@"
  287. {{
  288. UserInfo : {{
  289. OrganizationChartStatus: {JsonConvert.SerializeObject(_storage.GetPdfImages(OrganizationChartStatus))},
  290. HumanCountStatus : {item.HumanCountStatus},
  291. ManagementOfficeContact: {item.ManagementOfficeContact},
  292. RelatedInstitutionsContact : {item.RelatedInstitutionsContact},
  293. UserChangeStatus: {item.UserChangeStatus},
  294. Approver : {approve}
  295. }}
  296. }}";
  297. } else if (tabName == "TenantInfo") {
  298. var RentalStatus = _context.CmRentalStatus.Where(x =>
  299. x.SiteId == Util.ToInt(siteId) &&
  300. x.Year == currentYear &&
  301. x.Month == currentMonth).Select(x => x.CmFile).SingleOrDefault();
  302. json = $@"
  303. {{
  304. Images :{JsonConvert.SerializeObject(_storage.GetPdfImages(RentalStatus))},
  305. Approver : {approve}
  306. }}";
  307. } else if (tabName == "TenantInfoFloor") {
  308. var LayoutStatus = _context.CmLayout.Where(x =>
  309. x.SiteId == Util.ToInt(siteId) &&
  310. x.Year == currentYear &&
  311. x.Month == currentMonth).Select(x => x.CmFile).SingleOrDefault();
  312. json = $@"
  313. {{
  314. TenantInfoFloor : {{
  315. LayoutStatus: {JsonConvert.SerializeObject(_storage.GetPdfImages(LayoutStatus))},
  316. TenantContact : {item.TenantContact},
  317. Approver : {approve}
  318. }}
  319. }}";
  320. } else if (tabName == "ParkingManagement") {
  321. json = $@"
  322. {{
  323. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.ParkingManagement))},
  324. Approver : {approve}
  325. }}";
  326. } else if (tabName == "RentalManagement") {
  327. json = $@"
  328. {{
  329. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.RentalManagement))},
  330. Approver : {approve}
  331. }}";
  332. } else if (tabName == "LegalExamination") {
  333. DataTable legalExamination = _service.GetLegalExamination(Util.ToInt(siteId), currentDate);
  334. json = $@"
  335. {{
  336. Images : {JsonConvert.SerializeObject(legalExamination)},
  337. Approver : {approve}
  338. }}";
  339. } else if (tabName == "MonthlyPriorityWork") {
  340. json = $@"
  341. {{
  342. Images :{JsonConvert.SerializeObject(_storage.GetPdfImages(item.MonthlyPriorityWork))},
  343. Approver : {approve}
  344. }}";
  345. } else if (tabName == "ImprovementReport") {
  346. json = $@"
  347. {{
  348. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.ImprovementReport))},
  349. Approver : {approve}
  350. }}";
  351. } else if (tabName == "NextMonthPriorityWork") {
  352. json = $@"
  353. {{
  354. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.NextMonthPriorityWork))},
  355. Approver : {approve}
  356. }}";
  357. } else if (tabName == "Cost") {
  358. json = $@"
  359. {{
  360. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.Cost))},
  361. Approver : {approve}
  362. }}";
  363. } else if (tabName == "SurroundingStatus") {
  364. json = $@"
  365. {{
  366. Images : {JsonConvert.SerializeObject(_storage.GetPdfImages(item.SurroundingStatus))},
  367. Approver : {approve}
  368. }}";
  369. } else if (tabName == "FacilityTime") {
  370. json = $@"
  371. {{
  372. FacilityTime : {{
  373. FacilityTime: {item.FacilityTime},
  374. FacilityTimeGraph: {item.FacilityTimeGraph},
  375. Approver : {approve}
  376. }}
  377. }}";
  378. } else if (tabName == "EnergyUsageElect") {
  379. string energyUsage = "", energyUsageGraph = "", energyCost = "";
  380. JArray jarr1 = JArray.Parse(item.EnergyUsage);
  381. foreach (var val in jarr1) {
  382. if (val["FuelTypeId"].ToString() == "1") {
  383. energyUsage += (energyUsage != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  384. }
  385. }
  386. JArray jarr2 = JArray.Parse(item.EnergyUsageGraph);
  387. foreach (var val in jarr2) {
  388. if (val["FuelTypeId"].ToString() == "1") {
  389. energyUsageGraph += (energyUsageGraph != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  390. }
  391. }
  392. JArray jarr3 = JArray.Parse(item.EnergyCost);
  393. foreach (var val in jarr3) {
  394. if (val["FuelTypeId"].ToString() == "1") {
  395. energyCost += (energyCost != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  396. }
  397. }
  398. json = $@"
  399. {{
  400. EnergyUsageElect : {{
  401. EnergyUsage: [{energyUsage}],
  402. EnergyUsageGraph: [{energyUsageGraph}],
  403. EnergyCost: [{energyCost}],
  404. Approver : {approve}
  405. }}
  406. }}";
  407. } else if (tabName == "EnergyUsageGasWater") {
  408. string energyUsage = "", energyUsageGraph = "", energyCost = "";
  409. JArray jarr1 = JArray.Parse(item.EnergyUsage);
  410. foreach (var val in jarr1) {
  411. if (val["FuelTypeId"].ToString() != "1") {
  412. energyUsage += (energyUsage != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  413. }
  414. }
  415. JArray jarr2 = JArray.Parse(item.EnergyUsageGraph);
  416. foreach (var val in jarr2) {
  417. if (val["FuelTypeId"].ToString() != "1") {
  418. energyUsageGraph += (energyUsageGraph != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  419. }
  420. }
  421. JArray jarr3 = JArray.Parse(item.EnergyCost);
  422. foreach (var val in jarr3) {
  423. if (val["FuelTypeId"].ToString() != "1") {
  424. energyCost += (energyCost != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  425. }
  426. }
  427. json = $@"
  428. {{
  429. EnergyUsageGasWater : {{
  430. EnergyUsage: [{energyUsage}],
  431. EnergyUsageGraph: [{energyUsageGraph}],
  432. EnergyCost: [{energyCost}],
  433. Approver : {approve}
  434. }}
  435. }}";
  436. } else if (tabName == "EnergyChargeElect") {
  437. string energyCharge = "", energyChargeGraph = "", energyAnalysis = "";
  438. JArray jarr1 = JArray.Parse(item.EnergyCharge);
  439. foreach (var val in jarr1) {
  440. if (val["FuelTypeId"].ToString() == "1") {
  441. energyCharge += (energyCharge != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  442. }
  443. }
  444. JArray jarr2 = JArray.Parse(item.EnergyChargeGraph);
  445. foreach (var val in jarr2) {
  446. if (val["FuelTypeId"].ToString() == "1") {
  447. energyChargeGraph += (energyChargeGraph != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  448. }
  449. }
  450. JArray jarr3 = JArray.Parse(item.EnergyAnalysis);
  451. foreach (var val in jarr3) {
  452. if (val["FuelTypeId"].ToString() == "1") {
  453. energyAnalysis += (energyAnalysis != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  454. }
  455. }
  456. json = $@"
  457. {{
  458. EnergyChargeElect : {{
  459. EnergyCharge: [{energyCharge}],
  460. EnergyChargeGraph: [{energyChargeGraph}],
  461. EnergyAnalysis: [{energyAnalysis}],
  462. Approver : {approve}
  463. }}
  464. }}";
  465. } else if (tabName == "EnergyChargeGasWater") {
  466. string energyCharge = "", energyChargeGraph = "", energyAnalysis = "";
  467. JArray jarr1 = JArray.Parse(item.EnergyCharge);
  468. foreach (var val in jarr1) {
  469. if (val["FuelTypeId"].ToString() != "1") {
  470. energyCharge += (energyCharge != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  471. }
  472. }
  473. JArray jarr2 = JArray.Parse(item.EnergyChargeGraph);
  474. foreach (var val in jarr2) {
  475. if (val["FuelTypeId"].ToString() != "1") {
  476. energyChargeGraph += (energyChargeGraph != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  477. }
  478. }
  479. JArray jarr3 = JArray.Parse(item.EnergyAnalysis);
  480. foreach (var val in jarr3) {
  481. if (val["FuelTypeId"].ToString() != "1") {
  482. energyAnalysis += (energyAnalysis != "" ? "," : "") + val.ToString(Newtonsoft.Json.Formatting.None);
  483. }
  484. }
  485. json = $@"
  486. {{
  487. EnergyChargeGasWater : {{
  488. EnergyCharge: [{energyCharge}],
  489. EnergyChargeGraph: [{energyChargeGraph}],
  490. EnergyAnalysis: [{energyAnalysis}],
  491. Approver : {approve}
  492. }}
  493. }}";
  494. }
  495. } else {
  496. json = "{}";
  497. if (tabName == "TenantInfo") {
  498. json = "{ Images :[], Approver : [] }";
  499. } else if (tabName == "ParkingManagement") {
  500. json = "{ Images :[], Approver : [] }";
  501. } else if (tabName == "RentalManagement") {
  502. json = "{ Images :[], Approver : [] }";
  503. } else if (tabName == "MonthlyPriorityWork") {
  504. json = "{ Images :[], Approver : [] }";
  505. } else if (tabName == "ImprovementReport") {
  506. json = "{ Images :[], Approver : [] }";
  507. } else if (tabName == "NextMonthPriorityWork") {
  508. json = "{ Images :[], Approver : [] }";
  509. } else if (tabName == "Cost") {
  510. json = "{ Images :[], Approver : [] }";
  511. } else if (tabName == "SurroundingStatus") {
  512. json = "{ Images :[], Approver : [] }";
  513. }
  514. }
  515. return json;
  516. }
  517. public string getApproverInfo(string id, DateTime? date) {
  518. if (!Util.IsNullOrEmpty(id)) {
  519. var userInfo = _context.CmUser.Where(x => x.UserId == id).Select(x => new {
  520. GroupNm = x.CmUserGroup.Name,
  521. Date = date.Value.ToString("yyyy-MM-dd"),
  522. image = x.CmFile1 != null ? _storage.GetFullUrl(x.CmFile1.Path) + _storage.getFilePath(x.CmFile1) : ""
  523. }).SingleOrDefault();
  524. return JsonConvert.SerializeObject(userInfo) + ",";
  525. } else return "";
  526. }
  527. private static string AreaParse(String areaVal) {
  528. string returnVal = "";
  529. float val;
  530. if (!Util.IsNullOrEmpty(areaVal) && float.TryParse(areaVal, out val)) {
  531. returnVal = val.ToString("#,##0.00") + "㎡ (" + (val / 3.3058).ToString("#,##0.00") + "평)";
  532. }
  533. return returnVal;
  534. }
  535. [HttpGet("[action]")]
  536. public IActionResult GetCurrentInfo([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  537. var today = addDate.Date;
  538. _logger.LogInformation("========================== 기본사항! =======================");
  539. var siteInfo = _context.CmSite.Where(
  540. x => x.SiteId == Util.ToInt(siteId)
  541. ).Select(x => new {
  542. x.SiteId,
  543. x.Name,
  544. x.PhoneNo,
  545. x.AddressZip1,
  546. x.CompletionDate,
  547. Address1 = x.Address1 + x.Adderss2,
  548. x.BuildingSize,
  549. GrossArea = AreaParse(x.GrossArea),
  550. BuildingArea = AreaParse(x.BuildingArea),
  551. x.FloorAreaRatio,
  552. x.BuildingCoverageRatio,
  553. x.MainUse,
  554. x.Standard,
  555. x.Url,
  556. ImageFile = _storage.ParseFile(x.ImageFile),
  557. x.DesignSupervision,
  558. x.ConstructionCompany,
  559. x.ConstructionPeriod,
  560. x.Structure,
  561. x.LobbyFloor,
  562. x.OfficeFloor,
  563. x.ToiletFloor,
  564. x.EVHall,
  565. x.ParkingLot,
  566. x.ParkingFacilities,
  567. x.OuterWall,
  568. LandArea = AreaParse(x.LandArea),
  569. LandscapingArea = AreaParse(x.LandscapingArea),
  570. x.BuildingFloors,
  571. x.BuildingHeight,
  572. x.ConversionRate,
  573. x.AuditoriumFacilities
  574. }).FirstOrDefault();
  575. _logger.LogInformation("========================== 조직도현황! =======================");
  576. var organizationChartStatus = _context.CmOrganizationChartStatus.Where(
  577. x => x.SiteId == Util.ToInt(siteId) &&
  578. x.Year == addDate.Year &&
  579. x.Month == addDate.Month
  580. ).Select(x => new {
  581. FileId = x.FileId,
  582. Path = _storage.getFilePath(x.CmFile),
  583. Name = x.CmFile.Name
  584. }).FirstOrDefault();
  585. _logger.LogInformation("========================== 입주사현황(임대현황)! =======================");
  586. var rentalStatus = _context.CmRentalStatus.Where(
  587. x => x.SiteId == Util.ToInt(siteId) &&
  588. x.Year == addDate.Year &&
  589. x.Month == addDate.Month
  590. ).Select(x => new {
  591. FileId = x.FileId,
  592. Path = _storage.getFilePath(x.CmFile),
  593. Name = x.CmFile.Name
  594. }).FirstOrDefault();
  595. _logger.LogInformation("========================== 층별사용현황(레이아웃)! =======================");
  596. var layoutStatus = _context.CmLayout.Where(
  597. x => x.SiteId == Util.ToInt(siteId) &&
  598. x.Year == addDate.Year &&
  599. x.Month == addDate.Month
  600. ).Select(x => new {
  601. FileId = x.FileId,
  602. Path = _storage.getFilePath(x.CmFile),
  603. Name = x.CmFile.Name
  604. }).FirstOrDefault();
  605. _logger.LogInformation("========================== 기온및설비관리(설비가동현황) =======================");
  606. DataTable facilityTime = _service.GetFacilityTime(Util.ToInt(siteId), today);
  607. //그래프
  608. DataTable facilityTimeGraph = _service.GetFacilityTimeGraph(Util.ToInt(siteId), today);
  609. _logger.LogInformation("========================== 에너지사용량(전기/가스/수도) =======================");
  610. // 에너지사용량 - 사용량
  611. DataTable energyUsage = _service.GetEnergyData(Util.ToInt(siteId), today, 1, false);
  612. // 에너지사용량 - 사용량 그래프
  613. DataTable energyUsageGraph = _service.GetEnergyData(Util.ToInt(siteId), today, 1, true);
  614. // 에너지사용량 - 단가변동
  615. DataTable energyCost = _service.GetEnergyData(Util.ToInt(siteId), today, 2, false);
  616. _logger.LogInformation("========================== 에너지요금분석(전기/가스/수도) =======================");
  617. // 에너지요금분석 - 요금분석
  618. DataTable energyCharge = _service.GetEnergyData(Util.ToInt(siteId), today, 3, false);
  619. // 에너지요금분석 - 요금분석 그래프
  620. DataTable energyChargeGraph = _service.GetEnergyData(Util.ToInt(siteId), today, 3, true);
  621. // 에너지요금분석 - 증감사유
  622. var energyAnalysis = _context.FmsEnergyAnalysis.Where(x => x.SiteId == Util.ToInt(siteId) && x.Year == addDate.Year && x.Month == addDate.Month)
  623. .Select(x => new {
  624. x.FuelTypeId,
  625. x.PriceTypeId,
  626. x.Content
  627. }).ToList();
  628. _logger.LogInformation("========================== 법정검사 =======================");
  629. DataTable legalExamination = _service.GetLegalExamination(Util.ToInt(siteId), addDate);
  630. _logger.LogInformation("========================== 지난달 월간보고서 데이터! =======================");
  631. var lastMonthDatas = _context.FmsMonthlyReport.Where(
  632. x => x.SiteId == Util.ToInt(siteId) &&
  633. x.AddDate.Year == addDate.AddMonths(-1).Year &&
  634. x.AddDate.Month == addDate.AddMonths(-1).Month
  635. ).Select(x => new {
  636. x.FacilityStandards,
  637. x.RentalStandards,
  638. x.HumanCountStatus,
  639. x.ManagementOfficeContact,
  640. x.RelatedInstitutionsContact,
  641. x.UserChangeStatus,
  642. x.TenantContact,
  643. }).FirstOrDefault();
  644. return Ok(new {
  645. SiteInfo = siteInfo,
  646. OrganizationChartStatus = organizationChartStatus,
  647. LastMonthDatas = lastMonthDatas,
  648. RentalStatus = rentalStatus,
  649. LayoutStatus = layoutStatus,
  650. FacilityTime = facilityTime,
  651. FacilityTimeGraph = facilityTimeGraph,
  652. LegalExamination = legalExamination,
  653. EnergyUsage = energyUsage,
  654. EnergyUsageGraph = energyUsageGraph,
  655. EnergyCost = energyCost,
  656. EnergyCharge = energyCharge,
  657. EnergyChargeGraph = energyChargeGraph,
  658. EnergyAnalysis = energyAnalysis,
  659. });
  660. }
  661. /// <summary>
  662. /// 저장
  663. /// </summary>
  664. /// <param name="data"></param>
  665. /// <returns></returns>
  666. [HttpPost("[action]")]
  667. public IActionResult Save([FromBody] FmsMonthlyReport data, [FromQuery] bool isCreate) {
  668. _logger.LogInformation($"Save isCreate({isCreate})");
  669. //_logger.LogInformation(data.Dump());
  670. if (ModelState.IsValid) {
  671. _service.Save(data, isCreate);
  672. } else {
  673. return BadRequest(ModelState);
  674. }
  675. return Ok();
  676. }
  677. [HttpPost("[action]")]
  678. public IActionResult Approve([FromQuery] string siteId, [FromQuery] string approverUserId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  679. _service.Approve(Util.ToInt(siteId), approverUserId, addDate, Util.ToInt(businessFieldId));
  680. return Ok();
  681. }
  682. // 검색 & 정렬 공통
  683. private IQueryable<FmsMonthlyReport> _FilterAndSort(PagingRequest req) {
  684. var query = _service.GetAll();
  685. // 기본 Entity 검색
  686. query = query.Filter(req.conditions);
  687. // 기본 Entity 정렬
  688. query = query.Sort(req.sort);
  689. return query;
  690. }
  691. [HttpDelete("[action]")]
  692. public IActionResult Delete([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  693. _service.Delete(Util.ToInt(siteId), addDate, Util.ToInt(businessFieldId));
  694. return Ok();
  695. }
  696. }
  697. }