28ba311d7890647d45213eff511e6d4141bfef4f.svn-base 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Web;
  9. using System.Web.Http;
  10. using System.Web.Http.Description;
  11. using DevExpress.Office.Utils;
  12. using iBemsDataService.Model;
  13. using iBemsDataService.Util;
  14. using System.Transactions;
  15. using System.Collections.Specialized;
  16. namespace iBemsDataService.Controllers
  17. {
  18. public class DailyReportController : ApiController
  19. {
  20. private iBemsEntities db = new iBemsEntities();
  21. public enum WorkTypeId
  22. {
  23. PeriodicInspection = 1,
  24. ForensicExamination = 2,
  25. CivilComplaint = 3,
  26. Etc1 = 4,
  27. Occasional = 5
  28. }
  29. public enum WorkProgressId
  30. {
  31. WorkStatusPending = 3,
  32. WorkStatusInProgress = 4,
  33. WorkStatusComplete = 5,
  34. WorkStatusApproved = 6,
  35. WorkStatusDeferred = 7,
  36. }
  37. public enum AdjustmentTypeId
  38. {
  39. Regular = 0,
  40. Loss = 1,
  41. Return = 2
  42. }
  43. // jhLee 2016-05-12
  44. [ActionName("CurrentDate")]
  45. public DateTime GetCurrentDate()
  46. {
  47. return DateTime.Now;
  48. }
  49. [ActionName("WorkStatus")]
  50. public WorkStatus GetWorkStatus()
  51. {
  52. Uri uri = Request.RequestUri;
  53. NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  54. WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  55. return workStatusGenerator.GetWorkStatus();
  56. }
  57. [ActionName("FmsWorkRequestForDailyReport")]
  58. public List<FmsWorkRequestForDailyReport> GetFmsWorkRequestForDailyReport()
  59. {
  60. Uri uri = Request.RequestUri;
  61. NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  62. WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  63. return workStatusGenerator.GetFmsWorkRequestForDailyReport();
  64. }
  65. [ActionName("FmsWorkOrderForDailyReport")]
  66. public List<FmsWorkOrderForDailyReport> GetFmsWorkOrderForDailyReport()
  67. {
  68. Uri uri = Request.RequestUri;
  69. NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  70. WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  71. return workStatusGenerator.GetFmsWorkOrderForDailyReport(WorkTypeId.PeriodicInspection, WorkTypeId.ForensicExamination);
  72. }
  73. [ActionName("FmsWorkEtcForDailyReport")]
  74. public List<FmsWorkOrderForDailyReport> GetFmsWorkEtcForDailyReport()
  75. {
  76. Uri uri = Request.RequestUri;
  77. NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  78. WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  79. return workStatusGenerator.GetFmsWorkOrderForDailyReport(WorkTypeId.Etc1, WorkTypeId.Occasional);
  80. }
  81. [ActionName("FmsMaterialForDailyReport")]
  82. public List<FmsMaterialForDailyReport> GetFmsMaterialForDailyReport()
  83. {
  84. Uri uri = Request.RequestUri;
  85. NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  86. WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  87. return workStatusGenerator.GetFmsMaterialForDailyReport();
  88. }
  89. [ActionName("FileUpload")]
  90. public String FileUpload()
  91. {
  92. //Uri uri = Request.RequestUri;
  93. //NameValueCollection uriQuery = HttpUtility.ParseQueryString(uri.Query);
  94. //String siteId = uriQuery.Get("SiteId");
  95. //WorkStatusGenerator workStatusGenerator = new WorkStatusGenerator(db, uriQuery);
  96. var httpPostedFile = HttpContext.Current.Request.Files[0];
  97. if (httpPostedFile != null)
  98. {
  99. try
  100. {
  101. var fileSavePath = System.IO.Path.Combine(HttpContext.Current.Server.MapPath("..\\..\\App_Data\\files\\report2"), httpPostedFile.FileName);
  102. //var fileSavePath = System.IO.Path.Combine("../", httpPostedFile.FileName);
  103. // Save the uploaded file to "UploadedFiles" folder
  104. httpPostedFile.SaveAs(fileSavePath);
  105. return fileSavePath;
  106. }
  107. catch (Exception e)
  108. {
  109. throw new Exception(e.Message.ToString());
  110. }
  111. }
  112. else
  113. {
  114. throw new Exception("File length error");
  115. }
  116. }
  117. class WorkStatusGenerator
  118. {
  119. iBemsEntities db;
  120. int siteId;
  121. int year;
  122. int month;
  123. int day;
  124. int businessFieldId;
  125. public WorkStatusGenerator(iBemsEntities db, NameValueCollection uriQuery)
  126. {
  127. int siteId, businessFieldId;
  128. String addDate;
  129. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  130. (addDate = uriQuery.Get("AddDate")) == null ||
  131. int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false)
  132. {
  133. throw new Exception(string.Format("Not Found Parameters: {0} {1} {2}", "SiteId", "addDate", "BusinessFieldId"));
  134. }
  135. this.db = db;
  136. this.siteId = siteId;
  137. String[] addDateArrayStr = addDate.Split('-');
  138. if (int.TryParse(addDateArrayStr[0], out year) == false ||
  139. int.TryParse(addDateArrayStr[1], out month) == false ||
  140. int.TryParse(addDateArrayStr[2], out day) == false)
  141. {
  142. throw new Exception(string.Format("addDate Parsing Error: {0}", addDate));
  143. }
  144. this.businessFieldId = businessFieldId;
  145. }
  146. /* 작업 현황 테이블 정보 추출 */
  147. public WorkStatus GetWorkStatus()
  148. {
  149. WorkStatus workStatus = new WorkStatus();
  150. workStatus.WorkStatusTypeOccasional = GetWorkStatusByWorkTypeId(WorkTypeId.Occasional);
  151. workStatus.WorkStatusTypePeriodicInspection = GetWorkStatusByWorkTypeId(WorkTypeId.PeriodicInspection);
  152. workStatus.WorkStatusTypeForensicExamination = GetWorkStatusByWorkTypeId(WorkTypeId.ForensicExamination);
  153. workStatus.WorkStatusTypeEtc = GetWorkStatusByWorkTypeId(WorkTypeId.Etc1) + GetWorkStatusByWorkTypeId(WorkTypeId.CivilComplaint);
  154. workStatus.WorkStatusTypeTotal = workStatus.WorkStatusTypePeriodicInspection + workStatus.WorkStatusTypeForensicExamination + workStatus.WorkStatusTypeEtc + workStatus.WorkStatusTypeOccasional;
  155. workStatus.WorkStatusPending = GetWorkStatusByWorkProgressId(WorkProgressId.WorkStatusPending);
  156. workStatus.WorkStatusInProgress = GetWorkStatusByWorkProgressId(WorkProgressId.WorkStatusInProgress);
  157. workStatus.WorkStatusDeferred = GetWorkStatusByWorkProgressId(WorkProgressId.WorkStatusDeferred);
  158. workStatus.WorkStatusComplete = GetFmsWorkResultComplete(WorkProgressId.WorkStatusComplete);
  159. workStatus.WorkStatusApproved = GetFmsWorkResultApproval(WorkProgressId.WorkStatusApproved);
  160. workStatus.WorkStatusTotal = workStatus.WorkStatusPending +
  161. workStatus.WorkStatusInProgress + workStatus.WorkStatusDeferred + workStatus.WorkStatusComplete + workStatus.WorkStatusApproved;
  162. return workStatus;
  163. }
  164. private int GetWorkStatusByWorkTypeId(WorkTypeId workTypeId)
  165. {
  166. return (from x in db.FmsWorkOrder
  167. let y = from y in db.FmsWorkRequest
  168. where y.SiteId == siteId && // 2019.07.12
  169. y.WorkTypeId == (int)workTypeId
  170. select y.WorkRequestId
  171. where x.SiteId == siteId &&
  172. x.OrderDate.Year == year &&
  173. x.OrderDate.Month == month &&
  174. x.OrderDate.Day == day &&
  175. y.Contains(x.WorkRequestId)
  176. select x
  177. ).Count();
  178. }
  179. private int GetWorkStatusByWorkTypeIdEtc()
  180. {
  181. return (from x in db.FmsWorkOrder
  182. let y = from y in db.FmsWorkRequest
  183. where y.SiteId == siteId && //2019.07.12
  184. y.WorkTypeId >= (int)WorkTypeId.Etc1
  185. select y.WorkRequestId
  186. where x.SiteId == siteId &&
  187. x.OrderDate.Year == year &&
  188. x.OrderDate.Month == month &&
  189. x.OrderDate.Day == day &&
  190. y.Contains(x.WorkRequestId)
  191. select x
  192. ).Count();
  193. }
  194. private int GetWorkStatusByWorkProgressId(WorkProgressId workProgressId)
  195. {
  196. return (from x in db.FmsWorkOrder
  197. let y = from y in db.FmsWorkRequest
  198. where y.SiteId == siteId && //2019.07.12
  199. y.WorkProgressId == (int)workProgressId &&
  200. y.StartWorkDate <= new DateTime(year, month, day)
  201. select y.WorkRequestId
  202. where x.SiteId == siteId &&
  203. y.Contains(x.WorkRequestId)
  204. select x
  205. ).Count();
  206. }
  207. private int GetFmsWorkResultComplete(WorkProgressId workProgressId)
  208. {
  209. return (from x in db.FmsWorkResult
  210. let y = from y in db.FmsWorkRequest
  211. where y.SiteId == siteId && //2019.07.12
  212. y.WorkProgressId == (int)workProgressId &&
  213. y.StartWorkDate <= new DateTime(year, month, day)
  214. select y.WorkRequestId
  215. where x.SiteId == siteId &&
  216. y.Contains(x.WorkRequestId)
  217. select x
  218. ).Count();
  219. }
  220. private int GetFmsWorkResultApproval(WorkProgressId workProgressId)
  221. {
  222. return (from x in db.FmsWorkResult
  223. let y = from y in db.FmsWorkRequest
  224. where y.SiteId == siteId && //2019.07.12
  225. y.WorkProgressId == (int)workProgressId
  226. select y.WorkRequestId
  227. where x.SiteId == siteId &&
  228. y.Contains(x.WorkRequestId) &&
  229. x.ConfirmedDate.Value.Year == year &&
  230. x.ConfirmedDate.Value.Month == month &&
  231. x.ConfirmedDate.Value.Day == day
  232. select x
  233. ).Count();
  234. }
  235. /* 공통 업무 테이블 정보 추출 */
  236. public List<FmsWorkRequestForDailyReport> GetFmsWorkRequestForDailyReport()
  237. {
  238. var list = (from x in db.FmsWorkRequest
  239. let y = from y in db.FmsWorkResult
  240. where (y.IsConfirmed == false && (y.StartDate <= new DateTime(year, month, day))) || //&& (y.StartDate <= new DateTime(year, month, day))) 추가
  241. (y.ConfirmedDate.Value.Year == year &&//ConfirmedDate.Value
  242. y.ConfirmedDate.Value.Month == month &&//ConfirmedDate.Value
  243. y.ConfirmedDate.Value.Day == day) &&
  244. y.SiteId == siteId
  245. select y.WorkRequestId
  246. where
  247. (y.Contains(x.WorkRequestId) && x.BusinessFieldId == businessFieldId) ||
  248. (x.WorkProgressId <= (int)WorkProgressId.WorkStatusComplete && x.WorkProgressId >= (int)WorkProgressId.WorkStatusInProgress && x.BusinessFieldId == businessFieldId) && (x.StartWorkDate <= new DateTime(year, month, day)) &&
  249. x.SiteId == siteId
  250. orderby x.RequestDate, x.WorkProgressId ascending
  251. select new FmsWorkRequestForDailyReport
  252. {
  253. WorkRequestId = x.WorkRequestId,
  254. BusinessFieldId = x.BusinessFieldId,
  255. WorkProgressId = x.FmsWorkCodeProgress.Name,
  256. WorkTypeId = x.FmsWorkCodeType.Name,
  257. RequestDate = x.RequestDate,
  258. Title = x.Title
  259. }).ToList();
  260. for (int i = 0; i < list.Count; i++)
  261. {
  262. list[i].No = i + 1;
  263. int tempWorkRequestId = list[i].WorkRequestId;
  264. /////////////////////////////////////////
  265. db = new iBemsEntities();
  266. var TextResultData = db.FmsWorkResultCheckItem.Where(x =>
  267. x.SiteId == siteId &&
  268. x.WorkRequestId == tempWorkRequestId)
  269. .ToList();//list[i].WorkRequestId
  270. if (TextResultData == null) { }
  271. else
  272. {
  273. using (var transaction = new TransactionScope())
  274. {
  275. var j = 0;
  276. foreach (var TextData in TextResultData)
  277. {
  278. if (list[i].TextResult == null)
  279. list[i].TextResult = new String[TextResultData.Count];
  280. if (list[i].TextResultDate == null)
  281. list[i].TextResultDate = new DateTime[TextResultData.Count];
  282. list[i].TextResult[j] = TextData.TextResult;
  283. list[i].TextResultDate[j] = TextData.CheckDate;
  284. j++;
  285. }
  286. transaction.Complete();
  287. }
  288. }
  289. }
  290. return list;
  291. }
  292. /* 정기/법정 테이블 정보 추출 */
  293. /* 기타 테이블 정보 추출 */
  294. public List<FmsWorkOrderForDailyReport> GetFmsWorkOrderForDailyReport(WorkTypeId workTypeId1, WorkTypeId workTypeId2)
  295. {
  296. var list = (from x in db.FmsWorkOrder
  297. let y = from y in db.FmsWorkRequest
  298. where y.SiteId == siteId &&
  299. (y.WorkTypeId == (int)workTypeId1 ||
  300. y.WorkTypeId == (int)workTypeId2)
  301. select y.WorkRequestId
  302. let z = from z in db.FmsWorkResult
  303. where z.SiteId == siteId &&
  304. z.ConfirmedDate.Value.Year == year &&
  305. z.ConfirmedDate.Value.Month == month &&
  306. z.ConfirmedDate.Value.Day == day
  307. select z.WorkRequestId
  308. where
  309. x.SiteId == siteId &&
  310. x.BusinessFieldId == businessFieldId &&
  311. y.Contains(x.WorkRequestId) &&
  312. z.Contains(x.WorkRequestId)
  313. orderby x.OrderDate ascending
  314. select new FmsWorkOrderForDailyReport
  315. {
  316. OrderDate = x.OrderDate,
  317. Title = x.Title
  318. }).ToList();
  319. for (int i = 0; i < list.Count; i++)
  320. {
  321. list[i].No = i + 1;
  322. }
  323. return list;
  324. }
  325. /* 자재사용현황 */
  326. public List<FmsMaterialForDailyReport> GetFmsMaterialForDailyReport()
  327. {
  328. var list =
  329. (from x in db.FmsMaterialRelease
  330. where
  331. x.SiteId == siteId &&
  332. x.ReleaseDate.Year == year &&
  333. x.ReleaseDate.Month == month &&
  334. x.ReleaseDate.Day == day &&
  335. x.BusinessFieldId == businessFieldId &&
  336. (x.AdjustmentTypeId == (int)AdjustmentTypeId.Regular ||
  337. x.AdjustmentTypeId == (int)AdjustmentTypeId.Loss)
  338. orderby x.ReleaseDate ascending
  339. select new FmsMaterialForDailyReport
  340. {
  341. ReleaseType = x.FmsMaterialCodeReleaseType.Name,
  342. //MaterialCode = x.FmsMaterial.MaterialCode,
  343. FirstClassId = x.FmsMaterial.FirstClassId,
  344. SecondClassId = x.FmsMaterial.SecondClassId,
  345. ThirdClassId = x.FmsMaterial.ThirdClassId,
  346. Standard = x.FmsMaterial.Standard,
  347. MaterialName = x.FmsMaterial.Name,
  348. WorkName = x.FmsWorkResult.FmsWorkOrder.Title,
  349. Unit = x.FmsMaterial.Unit,
  350. MaterialCount = (int)x.MaterialCount,
  351. WorkerName = x.FmsWorkResult.CmUser.Name
  352. }).ToList();
  353. for (int i = 0; i < list.Count; i++)
  354. {
  355. list[i].No = i + 1;
  356. }
  357. return list;
  358. }
  359. }
  360. }
  361. public class WorkStatus
  362. {
  363. public int WorkStatusTypeOccasional { get; set; }
  364. public int WorkStatusTypePeriodicInspection { get; set; }
  365. public int WorkStatusTypeForensicExamination { get; set; }
  366. public int WorkStatusTypeEtc { get; set; }
  367. public int WorkStatusTypeTotal { get; set; }
  368. public int WorkStatusPending { get; set; }
  369. public int WorkStatusInProgress { get; set; }
  370. public int WorkStatusDeferred { get; set; }
  371. public int WorkStatusComplete { get; set; }
  372. public int WorkStatusApproved { get; set; }
  373. public int WorkStatusTotal { get; set; }
  374. }
  375. public class FmsEnergyDailyReport
  376. {
  377. //public int FacilityCode { get; set; }
  378. //public int PropertyId { get; set; }
  379. public String Name { get; set; }
  380. //public int FuelTypeId { get; set; }
  381. public string Today { get; set; }
  382. public string Daybefore { get; set; }
  383. public string Dailyusage { get; set; }
  384. public string Monthusage { get; set; }
  385. }
  386. public class FmsWorkRequestForDailyReport
  387. {
  388. public int No { get; set; }
  389. public int WorkRequestId { get; set; }
  390. public int BusinessFieldId { get; set; }
  391. public DateTime RequestDate { get; set; }
  392. public String WorkTypeId { get; set; }
  393. public String WorkProgressId { get; set; }
  394. public String Title { get; set; }
  395. public DateTime[] TextResultDate { get; set; }
  396. public String[] TextResult { get; set; }
  397. }
  398. public class FmsWorkOrderForDailyReport
  399. {
  400. public int No { get; set; }
  401. public DateTime OrderDate { get; set; }
  402. public String Title { get; set; }
  403. }
  404. public class FmsMaterialForDailyReport
  405. {
  406. public int No { get; set; }
  407. public String ReleaseType { get; set; }
  408. //public String MaterialCode { get; set; }
  409. public Nullable<int> FirstClassId { get; set; }
  410. public Nullable<int> SecondClassId { get; set; }
  411. public Nullable<int> ThirdClassId { get; set; }
  412. public string StringFirstClassId { get; set; }
  413. public string StringSecondClassId { get; set; }
  414. public string StringThirdClassId { get; set; }
  415. public String MaterialName { get; set; }
  416. public String Standard { get; set; }
  417. public String WorkName { get; set; }
  418. public String Unit { get; set; }
  419. public int MaterialCount { get; set; }
  420. public String WorkerName { get; set; }
  421. }
  422. public class FmsMaterialForDailyReport2
  423. {
  424. public int No { get; set; }
  425. public string ReleaseType { get; set; }
  426. public string StringFirstClassId { get; set; }
  427. public string StringSecondClassId { get; set; }
  428. public string StringThirdClassId { get; set; }
  429. public string MaterialName { get; set; }
  430. public string Standard { get; set; }
  431. public string WorkName { get; set; }
  432. public string Unit { get; set; }
  433. public string MaterialCount { get; set; }
  434. public string WorkerName { get; set; }
  435. }
  436. public class CurrentDate
  437. {
  438. public DateTime Date { get; set; }
  439. }
  440. }