2c20cf0027a782b6dcf8c04cb1c47ed86c42024b.svn-base 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  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. namespace iBemsDataService.Controllers
  16. {
  17. public class BemsMonitoringPointController : ApiController
  18. {
  19. private iBemsEntities db = new iBemsEntities();
  20. private const int VIRTUAL_FACILITY_UPPERBOUND = 100;
  21. [ActionName( "AddLocation" )]
  22. [ResponseType( typeof ( void ) )]
  23. public IHttpActionResult PostBemsMonitoringPoint( List<PointToLocation> pointToLocationList )
  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;
  32. int buildingId, floorId, zoneId;
  33. if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false ||
  34. int.TryParse( uriQuery.Get( "BuildingId" ) , out buildingId ) == false )
  35. {
  36. return BadRequest("Not Found Parameters.");
  37. }
  38. int? nullableFloorId = null;
  39. int? nullableZoneId = null;
  40. if( int.TryParse( uriQuery.Get( "FloorId" ) , out floorId ) )
  41. {
  42. nullableFloorId = floorId;
  43. if( int.TryParse( uriQuery.Get( "ZoneId" ) , out zoneId ) )
  44. {
  45. nullableZoneId = zoneId;
  46. }
  47. }
  48. //var query = db.BemsMonitoringPoint.Where( x => x.SiteId == siteId &&
  49. // x.BuildingId == buildingId &&
  50. // x.FloorId == nullableFloorId &&
  51. // x.ZoneId == nullableZoneId );
  52. try
  53. {
  54. //foreach( var item in query )
  55. //{
  56. // item.BuildingId = null;
  57. // item.FloorId = null;
  58. // item.ZoneId = null;
  59. //}
  60. foreach( var location in pointToLocationList )
  61. {
  62. var foundQuery = db.BemsMonitoringPoint.Where(
  63. x =>
  64. x.SiteId == location.SiteId &&
  65. x.FacilityCode == location.FacilityCode &&
  66. x.PropertyId == location.PropertyId );
  67. if( foundQuery.Any() == false )
  68. continue;
  69. var found = foundQuery.First();
  70. found.BuildingId = location.BuildingId;
  71. found.FloorId = location.FloorId;
  72. found.ZoneId = location.ZoneId;
  73. }
  74. db.SaveChanges();
  75. }
  76. catch ( Exception )
  77. {
  78. throw;
  79. }
  80. return StatusCode( HttpStatusCode.NoContent );
  81. }
  82. [ActionName( "RemoveLocation" )]
  83. [ResponseType( typeof( void ) )]
  84. public IHttpActionResult PostBemsMonitoringPoint( List<PointToRemove> points )
  85. {
  86. if( !ModelState.IsValid )
  87. {
  88. return BadRequest( ModelState );
  89. }
  90. try
  91. {
  92. foreach( var point in points )
  93. {
  94. var foundQuery = db.BemsMonitoringPoint.Where(
  95. x =>
  96. x.SiteId == point.SiteId &&
  97. x.FacilityCode == point.FacilityCode &&
  98. x.PropertyId == point.PropertyId );
  99. if( foundQuery.Any() == false )
  100. continue;
  101. var found = foundQuery.First();
  102. found.BuildingId = null;
  103. found.FloorId = null;
  104. found.ZoneId = null;
  105. }
  106. db.SaveChanges();
  107. }
  108. catch( Exception )
  109. {
  110. throw;
  111. }
  112. return StatusCode( HttpStatusCode.NoContent );
  113. }
  114. [ResponseType( typeof( void ) )]
  115. public IHttpActionResult DeleteBemsMonitoringPoint( List<PointToRemove> points )
  116. {
  117. if( !ModelState.IsValid )
  118. {
  119. return BadRequest( ModelState );
  120. }
  121. try
  122. {
  123. foreach( var point in points )
  124. {
  125. var p = new BemsMonitoringPoint
  126. {
  127. SiteId = point.SiteId,
  128. FacilityCode = point.FacilityCode,
  129. PropertyId = point.PropertyId
  130. };
  131. db.BemsMonitoringPoint.Attach( p );
  132. db.BemsMonitoringPoint.Remove( p );
  133. }
  134. db.SaveChanges();
  135. }
  136. catch( Exception )
  137. {
  138. throw;
  139. }
  140. return StatusCode( HttpStatusCode.NoContent );
  141. }
  142. // [ActionName( "ListExceptLocation" )]
  143. //[Queryable]
  144. //public IQueryable<PointWithLocation> GetBemsMonitoringPoint()
  145. //{
  146. // var query = from p in db.BemsMonitoringPoint
  147. // join facility in db.CmFacility on p.FacilityCode equals facility.FacilityCode into groupFacility
  148. // from subFacility in groupFacility
  149. // join b in db.CmBuilding on p.BuildingId equals b.BuildingId into groupBuilding
  150. // from subBuilding in groupBuilding.DefaultIfEmpty()
  151. // join z in db.CmZone on p.ZoneId equals z.ZoneId into groupZone
  152. // from subZone in groupZone.DefaultIfEmpty()
  153. // join f in db.CmFloor on p.FloorId equals f.FloorId into groupFloor
  154. // from subFloor in groupFloor.DefaultIfEmpty()
  155. // select new PointWithLocation
  156. // {
  157. // SiteId = p.SiteId,
  158. // FacilityTypeId = p.FacilityTypeId,
  159. // FacilityCode = p.FacilityCode,
  160. // PropertyId = p.PropertyId,
  161. // ValueType = p.ValueType,
  162. // ServiceTypeId = p.ServiceTypeId,
  163. // FuelTypeId = p.FuelTypeId,
  164. // BuildingId = p.BuildingId ?? 0,
  165. // FloorId = p.FloorId ?? 0,
  166. // ZoneId = p.ZoneId ?? 0,
  167. // Name = p.Name,
  168. // Description = p.Description,
  169. // FacilityName = subFacility.Name,
  170. // BuildingName = (subBuilding == null) ? string.Empty : subBuilding.Name ,
  171. // ZoneName = (subZone == null) ? string.Empty : subZone.Name ,
  172. // FloorName = (subFloor == null) ? string.Empty : subFloor.Name
  173. // };
  174. // return query;
  175. //}
  176. private void GeneratePoints( int siteId , int facilityTypeId , int facilityCode )
  177. {
  178. try
  179. {
  180. var realFacilityTypeId = (from f in db.CmFacility
  181. where f.SiteId == siteId && f.FacilityCode == facilityCode && f.IsUse == true
  182. select f.FacilityTypeId).FirstOrDefault();
  183. if (realFacilityTypeId != 0) { facilityTypeId = realFacilityTypeId; }
  184. var queryToDeleteParam = from p in db.BemsFormulaParameter
  185. where p.SiteId == siteId && p.ParameterFacilityCode == facilityCode
  186. select p;
  187. new QueryManager<BemsFormulaParameter>(db).Delete(db.BemsFormulaParameter, queryToDeleteParam);
  188. var queryToDeletePoint = from p in db.BemsMonitoringPoint
  189. where p.SiteId == siteId && p.FacilityCode == facilityCode
  190. select p;
  191. new QueryManager<BemsMonitoringPoint>(db).Delete(db.BemsMonitoringPoint, queryToDeletePoint);
  192. var query = from p in db.BemsMonitoringPointBaseData
  193. //where p.SiteId == siteId && p.FacilityTypeId == facilityTypeId
  194. where p.FacilityTypeId == facilityTypeId
  195. select p;
  196. foreach ( var p in query )
  197. {
  198. var point = new BemsMonitoringPoint
  199. {
  200. //SiteId = p.SiteId,
  201. SiteId = siteId,
  202. FacilityTypeId = p.FacilityTypeId,
  203. PropertyId = p.PropertyId,
  204. ValueType = p.ValueType,
  205. //IsAccumulated = p.IsAccumulated, 2015 04 28 삭제 hcLee
  206. ServiceTypeId = p.ServiceTypeId,
  207. FuelTypeId = p.FuelTypeId,
  208. Name = p.Name,
  209. Description = p.Description,
  210. FacilityCode = facilityCode
  211. };
  212. db.BemsMonitoringPoint.Add( point );
  213. }
  214. }
  215. catch(Exception)
  216. {
  217. // TODO : 관제점 전체 생성중 오류 발생
  218. // TODO : 삭제 명령이 실행되지 않아 트랜잭션 롤백된 것으로 보임
  219. throw;
  220. }
  221. }
  222. [ActionName( "Generation" )]
  223. [ResponseType( typeof( void ) )]
  224. public IHttpActionResult PostBemsMonitoringPoint( GenerationPointInfo info )
  225. {
  226. if( !ModelState.IsValid )
  227. {
  228. return BadRequest( ModelState );
  229. }
  230. try
  231. {
  232. using (var transaction = new TransactionScope(TransactionScopeOption.Required ,
  233. new System.TimeSpan(0,30,0)))
  234. {
  235. if ( info.FacilityTypeId == null )
  236. {
  237. var query = from f in db.CmFacility
  238. where f.FacilityCode > VIRTUAL_FACILITY_UPPERBOUND
  239. select new
  240. {
  241. SiteId = f.SiteId ,
  242. FacilityTypeId = f.FacilityTypeId ,
  243. FacilityCode = f.FacilityCode
  244. };
  245. foreach ( var f in query )
  246. {
  247. GeneratePoints( f.SiteId , f.FacilityTypeId , f.FacilityCode );
  248. }
  249. }
  250. else
  251. {
  252. GeneratePoints( info.SiteId , info.FacilityTypeId.Value , info.FacilityCode.Value );
  253. }
  254. db.SaveChanges();
  255. transaction.Complete();
  256. }
  257. }
  258. catch( Exception )
  259. {
  260. throw;
  261. }
  262. return StatusCode( HttpStatusCode.NoContent );
  263. }
  264. [ActionName("AddZoneTempHumiSet")]
  265. [ResponseType(typeof(void))]
  266. public IHttpActionResult AddZoneTempHumi (CmZoneTempHumiSet data)
  267. {
  268. if (!ModelState.IsValid)
  269. {
  270. return BadRequest(ModelState);
  271. }
  272. /*
  273. Uri uri = Request.RequestUri;
  274. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  275. int siteId;
  276. int buildingId, floorId, zoneId;
  277. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  278. int.TryParse(uriQuery.Get("BuildingId"), out buildingId) == false)
  279. {
  280. return BadRequest("Not Found Parameters.");
  281. }
  282. int? nullableFloorId = null;
  283. int? nullableZoneId = null;
  284. if (int.TryParse(uriQuery.Get("FloorId"), out floorId))
  285. {
  286. nullableFloorId = floorId;
  287. if (int.TryParse(uriQuery.Get("ZoneId"), out zoneId))
  288. {
  289. nullableZoneId = zoneId;
  290. }
  291. }*/
  292. try
  293. {
  294. using (var transaction = new TransactionScope())
  295. {
  296. var newData = db.CmZoneTempHumiSet.Add(new CmZoneTempHumiSet
  297. {
  298. SiteId = data.SiteId,
  299. BuildingId = data.BuildingId,
  300. FloorId = data.FloorId,
  301. ZoneId = data.ZoneId,
  302. T1 = 20, T2 = 20, T3 = 20, T4 = 20, T5 = 20, T6 = 20, T7 = 20, T8 = 20,T9 = 20,T10 = 20, T11 = 20, T12 = 20,
  303. H1 = 40, H2 = 40, H3 = 40, H4 = 40, H5 = 40, H6 = 40, H7 = 40, H8 = 40, H9 = 40, H10 = 40, H11 = 40, H12 = 40,
  304. });
  305. db.SaveChanges();
  306. transaction.Complete();
  307. }
  308. }
  309. catch (Exception)
  310. {
  311. throw;
  312. }
  313. return StatusCode(HttpStatusCode.NoContent);
  314. }
  315. [ActionName("RemoveZoneTempHumiSet")]
  316. [ResponseType(typeof(void))]
  317. public IHttpActionResult RemoveZoneTempHumiSet(CmZoneTempHumiSet data)
  318. {
  319. if (!ModelState.IsValid)
  320. {
  321. return BadRequest(ModelState);
  322. }
  323. try
  324. {
  325. /*var foundQuery = db.CmZoneTempHumiSet.Where(x =>
  326. x.SiteId == data.SiteId && x.BuildingId == data.BuildingId &&
  327. x.FloorId == data.FloorId && x.ZoneId == data.ZoneId);
  328. if (foundQuery.Any() == false)
  329. {
  330. var found = foundQuery.First();
  331. db.CmZoneTempHumiSet.Remove(found);
  332. db.SaveChanges();
  333. }
  334. */
  335. var foundQuery = from x in db.CmZoneTempHumiSet where
  336. x.SiteId == data.SiteId && x.BuildingId == data.BuildingId &&
  337. x.FloorId == data.FloorId && x.ZoneId == data.ZoneId select x;
  338. new QueryManager<CmZoneTempHumiSet>(db).Delete(db.CmZoneTempHumiSet, foundQuery);
  339. db.SaveChanges();
  340. }
  341. catch (Exception)
  342. {
  343. throw;
  344. }
  345. return StatusCode(HttpStatusCode.NoContent);
  346. }
  347. [ActionName("RemovePatrolGroupUser")]
  348. [ResponseType(typeof(void))]
  349. //public IHttpActionResult RemovePatrolGroupUser(CmUser data)
  350. public int RemovePatrolGroupUser(CmUser data)
  351. {
  352. int ret = -1;
  353. if (!ModelState.IsValid)
  354. {
  355. //return BadRequest(ModelState);
  356. return -1;
  357. }
  358. try
  359. {
  360. IEnumerable<CmPatrolGroupUser> user = (from d in db.CmPatrolGroupUser
  361. where d.SiteId == data.SiteId && d.UserId == data.UserId select d);
  362. ret = user.Count();
  363. if (ret > 0)
  364. {
  365. string sqlDel = String.Format("delete from CmPatrolGroupUser where SiteId = {0} and UserId = '{1}'", data.SiteId, data.UserId);
  366. db.Database.ExecuteSqlCommand(sqlDel);
  367. db.SaveChanges();
  368. }
  369. }
  370. catch (Exception)
  371. {
  372. throw;
  373. }
  374. return ret;
  375. }
  376. [ActionName("AddAirTempSet")] // 2015 07 29 공조기 등록시 공조기 설정온도 테이블에도 추가 한다. hcLee
  377. [ResponseType(typeof(void))]
  378. public IHttpActionResult AddZoneTempHumi(CmFacilityTempSet data)
  379. {
  380. if (!ModelState.IsValid)
  381. {
  382. return BadRequest(ModelState);
  383. }
  384. try
  385. {
  386. using (var transaction = new TransactionScope())
  387. {
  388. var newData = db.CmFacilityTempSet.Add(new CmFacilityTempSet
  389. {
  390. SiteId = data.SiteId,
  391. FacilityCode = data.FacilityCode,
  392. T1 = 20,
  393. T2 = 20,
  394. T3 = 20,
  395. T4 = 20,
  396. T5 = 20,
  397. T6 = 20,
  398. T7 = 20,
  399. T8 = 20,
  400. T9 = 20,
  401. T10 = 20,
  402. T11 = 20,
  403. T12 = 20,
  404. });
  405. db.SaveChanges();
  406. transaction.Complete();
  407. }
  408. }
  409. catch (Exception)
  410. {
  411. throw;
  412. }
  413. return StatusCode(HttpStatusCode.NoContent);
  414. }
  415. [ActionName("RemoveAirTempSet")]
  416. [ResponseType(typeof(void))]
  417. public IHttpActionResult RemoveAirTempSet(CmFacilityTempSet data)
  418. {
  419. if (!ModelState.IsValid)
  420. {
  421. return BadRequest(ModelState);
  422. }
  423. try
  424. {
  425. var foundQuery = from x in db.CmFacilityTempSet
  426. where
  427. x.SiteId == data.SiteId && x.FacilityCode == data.FacilityCode
  428. select x;
  429. new QueryManager<CmFacilityTempSet>(db).Delete(db.CmFacilityTempSet, foundQuery);
  430. db.SaveChanges();
  431. }
  432. catch (Exception)
  433. {
  434. throw;
  435. }
  436. return StatusCode(HttpStatusCode.NoContent);
  437. }
  438. protected override void Dispose(bool disposing)
  439. {
  440. if (disposing)
  441. {
  442. db.Dispose();
  443. }
  444. base.Dispose(disposing);
  445. }
  446. [ActionName("CheckSameEquipCodeType")]
  447. public int PostCheckSameEquipCodeType(FmsEquipmentCodeType param)
  448. {
  449. IEnumerable<FmsEquipmentCodeType> newKeyData = (from data in db.FmsEquipmentCodeType
  450. where data.SiteId == param.SiteId && data.Name == param.Name
  451. select data).Take(1);
  452. if (newKeyData.Count() > 0)
  453. {
  454. //return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!");
  455. return 1;
  456. }
  457. return 0;
  458. }
  459. [ActionName("GetMaxPropertyId")]
  460. public int PostGetMaxPropertyId(GetMaxPropertyId_Param param)
  461. {
  462. IEnumerable<BemsMonitoringPoint> newKeyData = (from data in db.BemsMonitoringPoint
  463. where data.SiteId == param.SiteId && data.FacilityCode == param.FacilityCode
  464. orderby data.PropertyId descending
  465. select data).Take(1);
  466. if (newKeyData == null) return 1;
  467. if (newKeyData.Count() == 0)
  468. {
  469. return 1;
  470. }
  471. BemsMonitoringPoint tf = newKeyData.First();
  472. return tf.PropertyId + 1;
  473. }
  474. [ActionName("GetMaxSiteId")]
  475. public int PostGetMaxSiteId()
  476. {
  477. IEnumerable<CmSite> newKeyData = (from data in db.CmSite orderby data.SiteId descending select data).Take(1);
  478. if (newKeyData == null) return 1;
  479. if (newKeyData.Count() == 0)
  480. {
  481. return 1;
  482. }
  483. CmSite tf = newKeyData.First();
  484. return tf.SiteId + 1;
  485. }
  486. }
  487. public class GenerationPointInfo
  488. {
  489. public int SiteId { get; set; }
  490. public Nullable<int> FacilityTypeId { get; set; }
  491. public Nullable<int> FacilityCode { get; set; }
  492. };
  493. public class PointToRemove
  494. {
  495. public int SiteId { get; set; }
  496. public int FacilityCode { get; set; }
  497. public int PropertyId { get; set; }
  498. };
  499. public class GetMaxPropertyId_Param
  500. {
  501. public int SiteId { get; set; }
  502. //public Nullable<int> FacilityCode { get; set; }
  503. public int FacilityCode { get; set; }
  504. };
  505. }