DailyReportController.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  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 FMSAdmin.Services;
  13. using System.Data;
  14. using System.IO;
  15. using OfficeOpenXml;
  16. using System.Text;
  17. using System.Collections.Generic;
  18. using Newtonsoft.Json;
  19. using System.Text.RegularExpressions;
  20. using Newtonsoft.Json.Linq;
  21. namespace FMSAdmin.Controllers {
  22. [Authorize]
  23. [ApiController]
  24. [ApiVersion("1")]
  25. [Route("api/[controller]")]
  26. public class DailyReportController : Controller {
  27. private readonly ILogger<DailyReportController> _logger;
  28. private readonly FMSContext _context;
  29. private readonly FMSApp.Services.DailyReportService _service;
  30. private readonly SiteWeatherInfoService _siteWeatherInfoService;
  31. private readonly StorageHelper _storage;
  32. public enum WorkTypeId {
  33. PeriodicInspection = 1,
  34. ForensicExamination = 2,
  35. CivilComplaint = 3,
  36. SiAlarm = 4,
  37. Occasional = 5,
  38. Construct = 6,
  39. ForensicEducation = 7,
  40. }
  41. public enum WorkProgressId {
  42. WorkStatusPending = 3,
  43. WorkStatusInProgress = 4,
  44. WorkStatusComplete = 5,
  45. WorkStatusApproved = 6,
  46. WorkStatusDeferred = 7,
  47. }
  48. public enum AdjustmentTypeId {
  49. Regular = 0,
  50. Loss = 1,
  51. Return = 2
  52. }
  53. public DailyReportController(
  54. ILogger<DailyReportController> logger,
  55. FMSContext context,
  56. FMSApp.Services.DailyReportService service,
  57. SiteWeatherInfoService siteWeatherInfoService,
  58. StorageHelper storage
  59. ) {
  60. _logger = logger;
  61. _context = context;
  62. _service = service;
  63. _siteWeatherInfoService = siteWeatherInfoService;
  64. _storage = storage;
  65. }
  66. /// <summary>
  67. /// 목록
  68. /// </summary>
  69. [HttpGet]
  70. public IActionResult List([FromQuery] PagingRequest req) {
  71. var query = _FilterAndSort(req);
  72. var list = _ListSelect(query);
  73. var paging = PagingList.Pagination(list, req.page, req.limit);
  74. return Ok(paging);
  75. }
  76. public dynamic _ListSelect(IQueryable<FmsDailyReport> query) {
  77. // var query = _FilterAndSort(req);
  78. // query = BusinessFieldHelper.Apply<FmsDailyReport>(_context, User, businessAuth, query);
  79. // query = query.Where(x => x.SiteId == Util.ToInt(siteId));
  80. var list = query.Select(x => new {
  81. x.SiteId,
  82. SiteName = _context.CmSite.FirstOrDefault(site => site.SiteId == x.SiteId).Name,
  83. AddDate = x.AddDate.ToString("yyyy-MM-dd"),
  84. x.BusinessFieldId,
  85. x.Name,
  86. x.Contents,
  87. x.RegisterUserId,
  88. RegisterUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.RegisterUserId).Name,
  89. x.ApproveDate,
  90. RegisterDate = x.RegisterDate.Value.ToString("yyyy-MM-dd"),
  91. x.ApproverUserId,
  92. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  93. });
  94. return list;
  95. }
  96. [HttpGet("[action]")]
  97. public IActionResult Get([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  98. var query = _service.GetAll();
  99. // 업무분야 필드가 있는경우만 추가
  100. if (businessFieldId != null) {
  101. query = query.Where(x => x.BusinessFieldId == Util.ToInt(businessFieldId) || x.CmBusinessField.Name == "공통");
  102. }
  103. var item = query.Where(
  104. x => x.SiteId == Util.ToInt(siteId)
  105. && x.AddDate == addDate.Date
  106. //&& x.BusinessFieldId == Util.ToInt(businessFieldId)
  107. ).Select(x => new {
  108. x.SiteId,
  109. SiteName = _context.CmSite.FirstOrDefault(site => site.SiteId == x.SiteId).Name,
  110. AddDate = x.AddDate.ToString("yyyy-MM-dd"),
  111. x.BusinessFieldId,
  112. x.Name,
  113. x.Contents,
  114. x.Datas,
  115. x.RegisterUserId,
  116. RegisterDate = x.RegisterDate.Value.ToString("yyyy-MM-dd"),
  117. x.ApproveDate,
  118. x.ApproverUserId,
  119. ApproverUserName = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId).Name,
  120. x.ApproverUserId2,
  121. ApproverUserName2 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId2).Name,
  122. x.ApproverUserId3,
  123. ApproverUserName3 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId3).Name,
  124. x.ApproverUserId4,
  125. ApproverUserName4 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId4).Name,
  126. x.ApproverUserId5,
  127. ApproverUserName5 = _context.CmUser.FirstOrDefault(user => user.UserId == x.ApproverUserId5).Name,
  128. }).FirstOrDefault();
  129. return Ok(item);
  130. }
  131. [HttpGet("[action]")]
  132. public IActionResult GetCurrentInfo([FromQuery] string siteId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  133. var today = addDate.Date;
  134. var yesterday = addDate.Date.AddDays(-1);
  135. var tomorrow = addDate.Date.AddDays(1);
  136. var currentMonthFirstDay = new DateTime(addDate.Year, addDate.Month, 1);
  137. // var prevMonthFirstDay = new DateTime(addDate.Year, addDate.Month - 1, 1);
  138. var prevMonthFirstDay = addDate.Date.AddMonths(-1).AddDays(1 - addDate.Day);
  139. var site = _context.CmSite.FirstOrDefault(x => x.SiteId == Util.ToInt(siteId));
  140. var sido = _siteWeatherInfoService.ReplaceSido(site.ApiSido);
  141. var sigun = site.ApiSigun;
  142. var weatherDateTime = new DateTime(addDate.Year, addDate.Month, addDate.Day, 10, 0, 0);
  143. SiteWeatherInfo weather = null;
  144. if (!string.IsNullOrEmpty(sido) && !string.IsNullOrEmpty(sigun)) {
  145. weather = _context.SiteWeatherInfo.Where(
  146. x => x.Sido == sido
  147. && x.Sigun == sigun
  148. && x.BaseTime >= weatherDateTime
  149. && x.BaseTime < weatherDateTime.Date.AddDays(1)
  150. ).OrderBy(x => x.BaseTime).FirstOrDefault();
  151. }
  152. var workStatus = new Dictionary<string, int> {
  153. ["WorkStatusTypePeriodicInspection"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.PeriodicInspection, addDate),
  154. ["WorkStatusTypeForensicExamination"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.ForensicExamination, addDate),
  155. ["WorkStatusTypeForensicEducation"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.ForensicEducation, addDate),
  156. ["WorkStatusTypeOccasional"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.Occasional, addDate),
  157. ["WorkStatusTypeConstruct"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.Construct, addDate),
  158. ["WorkStatusTypeEtc"] = _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.SiAlarm, addDate)
  159. + _service.GetWorkStatusByWorkTypeId(Util.ToInt(siteId), (int)WorkTypeId.CivilComplaint, addDate),
  160. ["WorkStatusPending"] = _service.GetWorkStatusByWorkProgressId(Util.ToInt(siteId), (int)WorkProgressId.WorkStatusPending, addDate),
  161. ["WorkStatusInProgress"] = _service.GetWorkStatusByWorkProgressId(Util.ToInt(siteId), (int)WorkProgressId.WorkStatusInProgress, addDate),
  162. ["WorkStatusDeferred"] = _service.GetWorkStatusByWorkProgressId(Util.ToInt(siteId), (int)WorkProgressId.WorkStatusDeferred, addDate),
  163. ["WorkStatusComplete"] = _service.GetFmsWorkResultComplete(Util.ToInt(siteId), (int)WorkProgressId.WorkStatusComplete, addDate),
  164. ["WorkStatusApproved"] = _service.GetFmsWorkResultApproval(Util.ToInt(siteId), (int)WorkProgressId.WorkStatusApproved, addDate),
  165. };
  166. workStatus["WorkStatusTypeTotal"] = workStatus["WorkStatusTypeOccasional"]
  167. + workStatus["WorkStatusTypePeriodicInspection"]
  168. + workStatus["WorkStatusTypeForensicExamination"]
  169. + workStatus["WorkStatusTypeEtc"];
  170. workStatus["WorkStatusTotal"] = workStatus["WorkStatusPending"]
  171. + workStatus["WorkStatusInProgress"]
  172. + workStatus["WorkStatusDeferred"]
  173. + workStatus["WorkStatusComplete"]
  174. + workStatus["WorkStatusApproved"];
  175. var energies = _context.BemsFormula.Where(
  176. x => x.SiteId == Util.ToInt(siteId)
  177. && x.FormulaId == 1
  178. && (new int[] { 100, 101, 102 }).Contains(x.FacilityTypeId)
  179. ).Select(x => new {
  180. x.FacilityTypeId,
  181. FacilityTypeName = _context.BemsFacilityType.FirstOrDefault(ft => ft.FacilityTypeId == x.FacilityTypeId).Name,
  182. x.FacilityCode,
  183. List = x.BemsFormulaParameter.Select(p => new {
  184. Parameter = new {
  185. p.ParameterFacilityCode,
  186. p.ParameterPropertyId,
  187. p.FormulaId,
  188. p.ParameterId,
  189. },
  190. MonitoringPoint = _context.BemsMonitoringPoint.Where(
  191. mp => mp.SiteId == p.SiteId
  192. && mp.FacilityCode == p.ParameterFacilityCode
  193. && mp.PropertyId == p.ParameterPropertyId
  194. ).Select(mp => new {
  195. mp.FuelTypeId,
  196. mp.Name,
  197. // 당일(15minRaw 에서 해당 일자의 마지막 검침값)
  198. Today = mp.BemsMonitoringPointHistory15minRawData.Where(
  199. raw => raw.CreatedDateTime >= today && raw.CreatedDateTime < tomorrow
  200. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue,
  201. // 전일(15minRaw 에서 해당 일자 전날의 마지막 검침값)
  202. DayBefore = mp.BemsMonitoringPointHistory15minRawData.Where(
  203. raw => raw.CreatedDateTime >= yesterday && raw.CreatedDateTime < today
  204. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue,
  205. // 당일 - 전일(당일 사용한 값이므로 당일 - 전일)
  206. DailyUsage = mp.BemsMonitoringPointHistory15minRawData.Where(
  207. raw => raw.CreatedDateTime >= today && raw.CreatedDateTime < tomorrow
  208. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue
  209. - mp.BemsMonitoringPointHistory15minRawData.Where(
  210. raw => raw.CreatedDateTime >= yesterday && raw.CreatedDateTime < today
  211. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue,
  212. // 당월(당월 사용한 값이므로 15minRaw 의 [당월 마지막 검침값] - [전월 마지막 검침값])
  213. // 기존에는 Daily 테이블의 DailyValue 를 1일 - 당일 까지 합산하였으나,
  214. // Daily 에는 값이 들어오지 않을거라 하여 15minRaw 로 계산.
  215. MonthUsage = mp.BemsMonitoringPointHistory15minRawData.Where(
  216. raw => raw.CreatedDateTime >= currentMonthFirstDay && raw.CreatedDateTime < tomorrow
  217. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue
  218. - mp.BemsMonitoringPointHistory15minRawData.Where(
  219. raw => raw.CreatedDateTime >= prevMonthFirstDay && raw.CreatedDateTime < currentMonthFirstDay
  220. ).OrderByDescending(raw => raw.CreatedDateTime).FirstOrDefault().CurrentValue,
  221. }).FirstOrDefault()
  222. }).ToList()
  223. }).ToList();
  224. var works = _context.CmBusinessField.Where(
  225. x => x.IsUse == true
  226. ).OrderBy(x => x.BusinessFieldId).Select(x => new {
  227. x.BusinessFieldId,
  228. BusinessFieldName = x.Name,
  229. /* 기존 Bems 소스 그대로 가져 넣음... where 절의 and 와 or 가 난해함... 의도한건지 정확하지 않음. */
  230. List = (from req in _context.FmsWorkRequest
  231. let res = from res in _context.FmsWorkResult
  232. where (res.IsConfirmed == false && (res.StartDate <= addDate.Date)) ||
  233. (res.ConfirmedDate.Value.Year == addDate.Year &&
  234. res.ConfirmedDate.Value.Month == addDate.Month &&
  235. res.ConfirmedDate.Value.Day == addDate.Day) &&
  236. res.SiteId == Util.ToInt(siteId)
  237. select res.WorkRequestId
  238. where
  239. (res.Contains(req.WorkRequestId) && req.BusinessFieldId == x.BusinessFieldId)
  240. || (req.WorkProgressId <= 5 && req.WorkProgressId >= 4 && req.BusinessFieldId == x.BusinessFieldId)
  241. && (req.StartWorkDate <= addDate.Date)
  242. && req.SiteId == Util.ToInt(siteId)
  243. orderby req.RequestDate, req.WorkProgressId ascending
  244. select new {
  245. WorkRequestId = req.WorkRequestId,
  246. BusinessFieldId = req.BusinessFieldId,
  247. WorkProgressId = req.WorkProgressId,
  248. WorkProgressName = req.WorkProgress.Name,
  249. WorkTypeId = req.WorkTypeId,
  250. WorkTypeName = req.WorkType.Name,
  251. RequestDate = req.RequestDate,
  252. Title = req.Title,
  253. WorkUsers = req.WorkUsers,
  254. WorkPartnerId = req.WorkPartnerId,
  255. WorkPartnerName = req.WorkPartner.Name,
  256. req.FmsWorkResult.StartDate,
  257. req.FmsWorkResult.EndDate,
  258. CheckItems = _context.FmsWorkResultCheckItem.Where(
  259. check => check.SiteId == req.SiteId
  260. && check.WorkRequestId == req.WorkRequestId
  261. ).OrderBy(check => check.CheckItemId).Select(check => new {
  262. check.CheckDate,
  263. check.TextResult,
  264. }).ToList()
  265. }).ToList()
  266. }).ToList();
  267. var materials = _context.CmBusinessField.Where(
  268. x => x.IsUse == true
  269. ).OrderBy(x => x.BusinessFieldId).Select(x => new {
  270. x.BusinessFieldId,
  271. BusinessFieldName = x.Name,
  272. List = _context.FmsMaterialRelease.Where(
  273. release => release.SiteId == Util.ToInt(siteId)
  274. && release.ReleaseDate.Date == addDate.Date
  275. && release.BusinessFieldId == x.BusinessFieldId
  276. && (release.AdjustmentTypeId == 0 || release.AdjustmentTypeId == 1)
  277. ).OrderBy(release => release.ReleaseDate).Select(release => new {
  278. ReleaseTypeName = release.ReleaseType.Name,
  279. FirstClassId = release.FmsMaterial.FirstClassId,
  280. FirstClassName = release.FmsMaterial.FmsMaterialCodeClass.Name,
  281. SecondClassId = release.FmsMaterial.SecondClassId,
  282. SecondClassName = release.FmsMaterial.FmsMaterialCodeClass1.Name,
  283. ThirdClassId = release.FmsMaterial.ThirdClassId,
  284. ThirdClassName = release.FmsMaterial.FmsMaterialCodeClass2.Name,
  285. MaterialName = release.FmsMaterial.Name,
  286. Standard = release.FmsMaterial.Standard,
  287. WorkName = release.FmsWorkResult.FmsWorkOrder.Title,
  288. Unit = release.FmsMaterial.Unit,
  289. MaterialCount = (int)release.MaterialCount,
  290. WorkerName = release.FmsWorkResult.CmUser.Name
  291. }).ToList()
  292. }).ToList();
  293. var accidents = _context.FmsAccident.Where(
  294. x => x.StartDate >= today
  295. && x.StartDate < tomorrow
  296. ).OrderBy(x => x.AccidentId).Select(x => new {
  297. x.AccidentTypeId,
  298. AccidentTypeName = x.FmsAccidentCodeType.Name,
  299. x.AccidentId,
  300. x.Name,
  301. x.DepartmentId,
  302. DepartmentName = x.CmDepartment.Name,
  303. x.StartDate,
  304. x.EndDate,
  305. }).ToList();
  306. var alarms = _context.FmsAlarmLog.Where(
  307. x => x.SiteId == Util.ToInt(siteId)
  308. && x.CreatedDateTime >= today
  309. && x.CreatedDateTime < tomorrow
  310. && x.CurrentValue != 0
  311. ).OrderBy(x => x.CreatedDateTime).Select(x => new {
  312. x.FacilityTypeId,
  313. FacilityTypeName = x.AlarmPoint.FacilityType.Name,
  314. x.FacilityCode,
  315. x.PropertyId,
  316. MonitoringPointName = x.AlarmPoint.BemsMonitoringPoint.Name,
  317. FacilityName = x.AlarmPoint.Facility.Name,
  318. x.CreatedDateTime,
  319. x.CurrentValue,
  320. }).ToList();
  321. return Ok(new {
  322. Weather = weather,
  323. WorkStatus = workStatus,
  324. Energies = energies,
  325. Works = works,
  326. Materials = materials,
  327. Accidents = accidents,
  328. Alarms = alarms,
  329. });
  330. }
  331. /// <summary>
  332. /// 저장
  333. /// </summary>
  334. /// <param name="data"></param>
  335. /// <returns></returns>
  336. [HttpPost("[action]")]
  337. public IActionResult Save([FromBody] FmsDailyReport data, [FromQuery] bool isCreate) {
  338. _logger.LogInformation($"Save isCreate({isCreate})");
  339. //_logger.LogInformation(data.Dump());
  340. if (ModelState.IsValid) {
  341. _service.Save(data, isCreate);
  342. } else {
  343. return BadRequest(ModelState);
  344. }
  345. return Ok();
  346. }
  347. [HttpPost("[action]")]
  348. public IActionResult Approve([FromQuery] string siteId, [FromQuery] string approverUserId, [FromQuery] DateTime addDate, [FromQuery] string businessFieldId) {
  349. _service.Approve(Util.ToInt(siteId), approverUserId, addDate, Util.ToInt(businessFieldId));
  350. return Ok();
  351. }
  352. /// <summary>
  353. /// 삭제
  354. /// </summary>
  355. /// <param name="siteId"></param>
  356. /// <param name="id"></param>
  357. /// <returns></returns>
  358. [HttpDelete("{siteId}/{addData}")]
  359. public IActionResult Delete(int siteId, DateTime addData) {
  360. _service.Delete(siteId, addData);
  361. return Ok();
  362. }
  363. // 검색 & 정렬 공통
  364. private IQueryable<FmsDailyReport> _FilterAndSort(PagingRequest req) {
  365. var query = _service.GetAll();
  366. // 기본 Entity 검색
  367. query = query.Filter(req.conditions);
  368. if (req.siteId != null) {
  369. query = query.Where(x => x.SiteId == Util.ToInt(req.siteId));
  370. }
  371. if (req.siteIds != null && req.siteIds.Length > 0) {
  372. query = query.Where(x => req.siteIds.Contains(x.SiteId));
  373. }
  374. // 업무분야 필드가 있는경우만 추가
  375. if (req.businessFieldId != null) {
  376. query = query.Where(x => x.SiteId == User.GetSiteId());
  377. query = query.Where(x => x.BusinessFieldId == req.businessFieldId || x.CmBusinessField.Name == "공통");
  378. }
  379. // 기본 Entity 정렬
  380. query = query.Sort(req.sort);
  381. return query;
  382. }
  383. [AllowAnonymous]
  384. [HttpGet("GetJson/{siteId}/{date}")]
  385. public string GetJson(string siteId, DateTime date) {
  386. var query = _service.GetAll();
  387. var item = query.Where(
  388. x => x.SiteId == Util.ToInt(siteId)
  389. && x.AddDate.Date == date.Date
  390. ).Select(x => new {
  391. CmSite = new {
  392. x.Site.Name
  393. },
  394. AddDate = x.AddDate.ToString("yyyy-MM-dd"),
  395. x.Name,
  396. x.Contents,
  397. x.Datas,
  398. x.ApproveDate,
  399. x.ApproveDate2,
  400. x.ApproveDate3,
  401. x.ApproverUserId,
  402. x.ApproverUserId2,
  403. x.ApproverUserId3
  404. }).FirstOrDefault();
  405. string approve = "";
  406. if (item != null) {
  407. approve += "[" + getApproverInfo(item.ApproverUserId, item.ApproveDate);
  408. approve += getApproverInfo(item.ApproverUserId2, item.ApproveDate2);
  409. approve += getApproverInfo(item.ApproverUserId3, item.ApproveDate3);
  410. approve += "]";
  411. }
  412. string datas = "{}";
  413. if (!string.IsNullOrEmpty(item.Datas)) {
  414. dynamic jsonObject = JObject.Parse(item.Datas);
  415. var energiesTotal = new JArray();
  416. foreach (dynamic energy in jsonObject.Energies) {
  417. if (energy != null) {
  418. energy.List = null; // 에너지 합계만 표출
  419. if (energy.List == null) {
  420. energy.List = new JArray();
  421. } else {
  422. foreach (dynamic i in energy.List) {
  423. energiesTotal.Add(JToken.FromObject(new {
  424. Name = i.Name,
  425. Today = i.Today,
  426. DayBefore = i.DayBefore,
  427. DailyUsage = i.DailyUsage,
  428. MonthUsage = i.MonthUsage,
  429. }));
  430. }
  431. }
  432. energiesTotal.Add(JToken.FromObject(new {
  433. Name = energy.Total.Name,
  434. Today = energy.Total.Today,
  435. DayBefore = energy.Total.DayBefore,
  436. DailyUsage = energy.Total.DailyUsage,
  437. MonthUsage = energy.Total.MonthUsage,
  438. }));
  439. }
  440. }
  441. var workList = new JArray();
  442. foreach (dynamic work in jsonObject.Works) {
  443. if (work != null) {
  444. if (work.List == null) {
  445. work.List = new JArray();
  446. }
  447. foreach (dynamic i in work.List) {
  448. workList.Add(JToken.FromObject(new {
  449. BusinessFieldName = work.BusinessFieldName,
  450. WorkProgressName = i.WorkProgressName,
  451. WorkTypeName = i.WorkTypeName,
  452. Title = i.Title,
  453. }));
  454. }
  455. }
  456. }
  457. var materialList = new JArray();
  458. if (jsonObject.Materials != null)
  459. foreach (dynamic material in jsonObject.Materials) {
  460. if (material != null) {
  461. if (material.List == null) {
  462. material.List = new JArray();
  463. }
  464. foreach (dynamic i in material.List) {
  465. materialList.Add(JToken.FromObject(new {
  466. BusinessFieldName = material.BusinessFieldName,
  467. ReleaseType = i.ReleaseTypeName,
  468. FirstClass = i.FirstClassName,
  469. SecondClass = i.SecondClassName,
  470. ThirdClass = i.ThirdClassName,
  471. MaterialName = i.MaterialName,
  472. Standard = i.Standard,
  473. Unit = i.Unit,
  474. MaterialCount = i.MaterialCount,
  475. WorkName = i.WorkName,
  476. WorkerName = i.WorkerName
  477. }));
  478. }
  479. }
  480. }
  481. jsonObject.EnergiesTotal = energiesTotal;
  482. jsonObject.WorkList = workList;
  483. jsonObject.MaterialList = materialList;
  484. datas = JsonConvert.SerializeObject(jsonObject);
  485. }
  486. string json = "";
  487. if (item != null)
  488. json = $@"
  489. {{
  490. SiteNm : ""{item.CmSite.Name}"",
  491. Datas: {datas},
  492. Approver : {approve}
  493. }}";
  494. return json;
  495. }
  496. public string getApproverInfo(string id, DateTime? date) {
  497. if (!Util.IsNullOrEmpty(id)) {
  498. var userInfo = _context.CmUser.Where(x => x.UserId == id).Select(x => new {
  499. GroupNm = x.CmUserGroup.Name,
  500. Date = date.Value.ToString("yyyy-MM-dd"),
  501. image = x.CmFile1 != null ? _storage.GetFullUrl(x.CmFile1.Path) + _storage.getFilePath(x.CmFile1) : ""
  502. }).SingleOrDefault();
  503. return JsonConvert.SerializeObject(userInfo) + ",";
  504. } else return "";
  505. }
  506. }
  507. }