776250bf38206c11b666a4c9cfd1b95e47f01e16.svn-base 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Web;
  11. using System.Web.Http;
  12. using System.Web.Http.Description;
  13. using iBemsDataService;
  14. using iBemsDataService.Model;
  15. using iBemsDataService.Util;
  16. namespace iBemsDataService.Controllers
  17. {
  18. public class FmsEquipmentRentInfoController : ApiController
  19. {
  20. private iBemsEntities db = new iBemsEntities();
  21. [ResponseType(typeof(void))]
  22. [ActionName("InsertEquipments")]
  23. public IHttpActionResult PostFmsEquipmentRentInfoEquipments(List<RentEquipment> equipments)
  24. {
  25. if (!ModelState.IsValid)
  26. {
  27. return BadRequest(ModelState);
  28. }
  29. Uri uri = Request.RequestUri;
  30. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  31. int siteId, equipmentRentId;
  32. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  33. int.TryParse(uriQuery.Get("EquipmentRentId"), out equipmentRentId) == false)
  34. {
  35. return BadRequest("Not Found Parameters.");
  36. }
  37. try
  38. {
  39. foreach (var equip in equipments)
  40. {
  41. var originHistory = db.FmsEquipmentHistory
  42. .Where(fe =>
  43. fe.SiteId == siteId &&
  44. fe.EquipmentId == equip.EquipmentId)
  45. .OrderByDescending(fe => fe.EquipmentHistoryId)
  46. .Take(1).FirstOrDefault();
  47. if (originHistory == null) { return BadRequest("Not Found Stored Info."); }
  48. FmsEquipmentHistory targetHistory = new FmsEquipmentHistory()
  49. {
  50. AddDate = DateTime.Now,
  51. CurrentStockCount = originHistory.CurrentStockCount - equip.CurrentRentCount,
  52. EquipmentId = originHistory.EquipmentId,
  53. EquipmentRentId = equipmentRentId,
  54. EquipmentStateTypeId = equip.EquipmentStateTypeId,
  55. LossCount = 0,
  56. RentCount = equip.CurrentRentCount, // 신규추가인 경우
  57. CurrentRentCount = equip.CurrentRentCount,
  58. ReturnCount = 0,
  59. SiteId = siteId,
  60. StoredCount = 0,
  61. TotalStockCount = originHistory.TotalStockCount,
  62. UpdateDate = DateTime.Now,
  63. IsReturned = false
  64. };
  65. db.FmsEquipmentHistory.Add(targetHistory);
  66. }
  67. db.SaveChanges();
  68. }
  69. catch (DbUpdateException e) { throw e; }
  70. return StatusCode(HttpStatusCode.NoContent);
  71. }
  72. [ResponseType(typeof(void))]
  73. [ActionName("UpdateEquipments")]
  74. public IHttpActionResult PostFmsEquipmentRentInfoEquipments(List<UpdateRentEquipment> equipments)
  75. {
  76. if (!ModelState.IsValid)
  77. {
  78. return BadRequest(ModelState);
  79. }
  80. Uri uri = Request.RequestUri;
  81. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  82. int siteId, equipmentRentId;
  83. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  84. int.TryParse(uriQuery.Get("EquipmentRentId"), out equipmentRentId) == false)
  85. {
  86. return BadRequest("Not Found Parameters.");
  87. }
  88. // 불출내역에 포함된 공기구 리스트
  89. var originHistoryList = db.FmsEquipmentHistory.Where(fe =>
  90. fe.SiteId == siteId &&
  91. fe.EquipmentRentId == equipmentRentId)
  92. .OrderByDescending(fe => fe.EquipmentHistoryId)
  93. .ToList();
  94. try
  95. {
  96. foreach (var equip in equipments)
  97. {
  98. var originHistory = originHistoryList.Where(h =>
  99. h.SiteId == siteId &&
  100. h.EquipmentId == equip.EquipmentId)
  101. .FirstOrDefault();
  102. if (originHistory == null)
  103. {
  104. // 이전 정보가 없는 경우 신규 저장
  105. var lastestHistory = db.FmsEquipmentHistory
  106. .Where(fe => fe.EquipmentId == equip.EquipmentId)
  107. .OrderByDescending(fe => fe.EquipmentHistoryId)
  108. .Take(1).FirstOrDefault();
  109. FmsEquipmentHistory targetHistory = new FmsEquipmentHistory()
  110. {
  111. AddDate = DateTime.Now,
  112. CurrentStockCount = lastestHistory.CurrentStockCount - equip.RentCount,
  113. EquipmentId = lastestHistory.EquipmentId,
  114. EquipmentRentId = equipmentRentId,
  115. EquipmentStateTypeId = equip.EquipmentStateTypeId,
  116. LossCount = 0,
  117. RentCount = equip.RentCount,
  118. CurrentRentCount = equip.RentCount,
  119. ReturnCount = 0,
  120. SiteId = siteId,
  121. StoredCount = 0,
  122. TotalStockCount = lastestHistory.TotalStockCount,
  123. UpdateDate = DateTime.Now,
  124. IsReturned = false,
  125. };
  126. db.FmsEquipmentHistory.Add(targetHistory);
  127. }
  128. else
  129. {
  130. if (originHistory.CurrentRentCount != equip.CurrentRentCount)
  131. {
  132. // 현재 넘어온 값과 원래 데이터를 비교 하여 재고량을 다시 계산
  133. if (originHistory.CurrentRentCount > equip.CurrentRentCount)
  134. {
  135. originHistory.CurrentStockCount += (originHistory.CurrentRentCount - equip.CurrentRentCount);
  136. }
  137. else if (originHistory.CurrentRentCount < equip.CurrentRentCount)
  138. {
  139. originHistory.CurrentStockCount -= (equip.CurrentRentCount - originHistory.CurrentRentCount);
  140. }
  141. originHistory.CurrentRentCount = equip.CurrentRentCount;
  142. originHistory.UpdateDate = DateTime.Now;
  143. }
  144. }
  145. }
  146. // 이전 정보 수가 현재 정보 수 보다 많은 경우, 공기구를 삭제하였을 경우
  147. if (originHistoryList.Count > equipments.Count)
  148. {
  149. List<int> originEquipIdList = originHistoryList.Select(e => e.EquipmentId).ToList();
  150. List<int> targetEquipIdList = equipments.Select(e => e.EquipmentId).ToList();
  151. List<int> deleteTargetEquipIdList = originEquipIdList.Except(targetEquipIdList).ToList();
  152. foreach (var equipId in deleteTargetEquipIdList)
  153. {
  154. var deleteTarget = originHistoryList.Where(h =>
  155. h.SiteId == siteId &&
  156. h.EquipmentId == equipId)
  157. .FirstOrDefault();
  158. db.FmsEquipmentHistory.Remove(deleteTarget);
  159. }
  160. }
  161. db.SaveChanges();
  162. }
  163. catch (DbUpdateException e) { throw e; }
  164. return StatusCode(HttpStatusCode.NoContent);
  165. }
  166. protected override void Dispose(bool disposing)
  167. {
  168. if (disposing)
  169. {
  170. db.Dispose();
  171. }
  172. base.Dispose(disposing);
  173. }
  174. }
  175. public class RentEquipment
  176. {
  177. public int SiteId { get; set; }
  178. public int EquipmentId { get; set; }
  179. public int RentCount { get; set; }
  180. public int CurrentRentCount { get; set; }
  181. public int ReturnCount { get; set; }
  182. public int LossCount { get; set; }
  183. public int StoredCount { get; set; }
  184. public int EquipmentRentId { get; set; }
  185. public short EquipmentStateTypeId { get; set; }
  186. }
  187. public class UpdateRentEquipment : RentEquipment
  188. {
  189. }
  190. }