ecd7826f3dbbcc3821f958762a3b4bc680871ded.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Entity;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Transactions;
  7. using System.Web;
  8. using System.Web.Http;
  9. using System.Web.Http.Description;
  10. using iBemsDataService.Model;
  11. using iBemsDataService.Util;
  12. using System.Diagnostics;
  13. namespace iBemsDataService.Controllers.Fms.CheckSchedule
  14. {
  15. public class FmsWorkOrderController : ApiController
  16. {
  17. private iBemsEntities db = new iBemsEntities();
  18. private const int WORK_ORDER = 3;
  19. private const int WORK_STANDBY = 4;
  20. private const int EMERGENCY_B = 1;
  21. // POST: api/FmsWorkOrderController/GenerateWorkRequestOrder
  22. [ActionName( "GenerateWorkRequestOrder" )]
  23. [ResponseType( typeof ( void ) )]
  24. public IHttpActionResult PostGenerateWorkRequestOrder( List<CheckScheduleToGenerate> checkSchedules )
  25. {
  26. if ( !ModelState.IsValid )
  27. {
  28. return BadRequest( ModelState );
  29. }
  30. /*
  31. Uri uri = Request.RequestUri;
  32. var uriQuery = HttpUtility.ParseQueryString( uri.Query );
  33. DateTime date;
  34. String userId = uriQuery.Get( "UserId" );
  35. if( DateTime.TryParse( uriQuery.Get( "Date" ) , out date ) == false )
  36. {
  37. return BadRequest("Not Found Parameters.");
  38. }
  39. var qm = new QueryManager<FmsWorkOrderToFacility>( db );
  40. try
  41. {
  42. // 선임정보가 있는 사용자 정보 목록 쿼리문을 준비한다.
  43. var querySenior = from s in db.FmsBusinessSenior
  44. from si in db.FmsBusinessSeniorItem
  45. from user in db.CmUser
  46. where s.SeniorUserId == user.UserId &&
  47. s.SeniorItemId == si.SeniorItemId
  48. select new SeniorForOrder
  49. {
  50. SiteId = s.SiteId,
  51. SeniorId = s.SeniorId ,
  52. SeniorUserName = user.Name ,
  53. SeniorItemName = si.Name ,
  54. };
  55. // 지시 생성을 요청한 사용자 이름을 가져온다.
  56. var userInfo = db.CmUser.Select( x => new { x.UserId, x.Name } ).FirstOrDefault( x => x.UserId == userId );
  57. using (var transaction = new TransactionScope())
  58. {
  59. // 요청한 점검 계획 목록을 처리한다.
  60. foreach( CheckScheduleToGenerate cs in checkSchedules )
  61. {
  62. // 요청한 점검계획, 이에 해당하는 점검그룹을 연결하고 이에 해당하는 선임이 있다면 이를 가져오는 쿼리 생성
  63. var sQuery = from ss in db.FmsFacilitySchedule
  64. from stocg in db.FmsFacilityScheduleToCheckGroup
  65. from cg in db.FmsFacilityScheduleCheckGroup
  66. join senior in querySenior on cg.SiteId equals senior.SiteId into seniors
  67. from subSenior in seniors.Where( x => x.SeniorId == cg.SeniorId ).DefaultIfEmpty()
  68. where (ss.SiteId == cs.SiteId && ss.ScheduleId == cs.ScheduleId) &&
  69. (ss.SiteId == stocg.SiteId && ss.ScheduleId == stocg.ScheduleId) &&
  70. (stocg.SiteId == cg.SiteId && stocg.CheckGroupId == cg.CheckGroupId)
  71. select new FacilityScheduleForOrder
  72. {
  73. SiteId = ss.SiteId ,
  74. ScheduleId = ss.ScheduleId ,
  75. BusinessFieldId = ss.BusinessFieldId ,
  76. ScheduleName = ss.Name ,
  77. CheckGroupId = cg.CheckGroupId ,
  78. WorkTypeId = cg.WorkTypeId ,
  79. SeniorId = subSenior.SeniorId == null ? 0 : subSenior.SeniorId ,
  80. WorkerName = subSenior.SeniorUserName == null ? string.Empty : subSenior.SeniorUserName
  81. };
  82. if( sQuery.Any() )
  83. {
  84. // 데이터가 존재한다면 당연히 하나의 점검계획을 가져온다.
  85. var schedule = sQuery.First();
  86. if( userInfo != null )
  87. {
  88. // 요청자 정보가 있다면 점검 계획
  89. schedule.UserId = userInfo.UserId;
  90. schedule.UserName = userInfo.Name;
  91. }
  92. var workRequestQuery = db.FmsWorkRequest.Where( x => x.SiteId == schedule.SiteId &&
  93. x.ScheduleId == schedule.ScheduleId &&
  94. x.RequestedDate == date );
  95. FmsWorkRequest wr = null;
  96. if( workRequestQuery.Any() )
  97. {
  98. wr = workRequestQuery.First();
  99. }
  100. FmsWorkOrder wo = null;
  101. if( wr != null )
  102. {
  103. var workOrderQuery = db.FmsWorkOrder.Where( x => x.SiteId == schedule.SiteId &&
  104. x.RequestId == schedule.ScheduleId &&
  105. x.OrderedDate == date );
  106. if( workOrderQuery.Any() )
  107. {
  108. wo = workOrderQuery.First();
  109. }
  110. }
  111. bool needInsert = false;
  112. if( wr == null )
  113. {
  114. wr = new FmsWorkRequest();
  115. needInsert = true;
  116. }
  117. wr.SiteId = schedule.SiteId;
  118. wr.WorkTypeId = schedule.WorkTypeId.GetValueOrDefault();
  119. wr.BusinessFieldId = schedule.BusinessFieldId.GetValueOrDefault();
  120. wr.ScheduleId = schedule.ScheduleId;
  121. wr.CheckGroupId = schedule.CheckGroupId;
  122. wr.ProgressId = WORK_ORDER;
  123. wr.RequesterUserId = schedule.UserId;
  124. wr.RequesterName = schedule.UserName;
  125. //wr.RequesterCompanyId = ;
  126. //wr.RequesterDepartmentId = ;
  127. //wr.RequesterPost = ;
  128. //wr.RequesterMobileNo = ;
  129. wr.Title = schedule.ScheduleName;
  130. wr.Note = schedule.ScheduleName;
  131. wr.RequestedDate = DateTime.Now;
  132. if( needInsert )
  133. {
  134. wr = db.FmsWorkRequest.Add( wr );
  135. db.SaveChanges();
  136. needInsert = false;
  137. }
  138. if( wo == null )
  139. {
  140. wo = new FmsWorkOrder();
  141. needInsert = true;
  142. }
  143. wo.SiteId = schedule.SiteId;
  144. wo.EmergencyId = EMERGENCY_B;
  145. wo.RequestId = wr.RequestId;
  146. wo.OrderUserId = schedule.UserId;
  147. wo.OrderedDate = DateTime.Now;
  148. wo.Title = wr.Title;
  149. wo.Contents = wr.Note;
  150. wo.WorkerUserName = schedule.WorkerName;
  151. if( needInsert )
  152. {
  153. wo = db.FmsWorkOrder.Add( wo );
  154. db.SaveChanges();
  155. }
  156. var facilityQueryToDelete = from wotof in db.FmsWorkOrderToFacility
  157. where wotof.SiteId == schedule.SiteId &&
  158. wotof.OrderId == wo.OrderId
  159. select wotof;
  160. var facilityQuery = from sctof in db.FmsFacilityScheduleCheckGroupToFacility
  161. where sctof.SiteId == schedule.SiteId &&
  162. sctof.CheckGroupId == schedule.CheckGroupId
  163. select new { FacilityCode = sctof.FacilityCode };
  164. var list = new List<FmsWorkOrderToFacility>();
  165. foreach( var f in facilityQuery )
  166. {
  167. var orderToFacility = new FmsWorkOrderToFacility
  168. {
  169. SiteId = schedule.SiteId ,
  170. OrderId = wo.OrderId ,
  171. FacilityCode = f.FacilityCode ,
  172. ProgressId = WORK_STANDBY
  173. };
  174. list.Add( orderToFacility );
  175. Trace.WriteLine( orderToFacility.SiteId + ", " + orderToFacility.OrderId + ", " + orderToFacility.FacilityCode );
  176. // db.FmsWorkOrderToFacility.Add( orderToFacility );
  177. }
  178. qm.DeleteAndInsert( db.FmsWorkOrderToFacility , list , facilityQueryToDelete );
  179. }
  180. }
  181. transaction.Complete();
  182. }
  183. }
  184. catch ( Exception e )
  185. {
  186. Trace.WriteLine( e.Message );
  187. throw;
  188. }
  189. */
  190. return StatusCode( HttpStatusCode.NoContent );
  191. }
  192. protected override void Dispose(bool disposing)
  193. {
  194. if (disposing)
  195. {
  196. db.Dispose();
  197. }
  198. base.Dispose(disposing);
  199. }
  200. }
  201. public class SeniorForOrder
  202. {
  203. public int SiteId { get; set; }
  204. public int SeniorId { get; set; }
  205. public string SeniorUserName { get; set; }
  206. public string SeniorItemName { get; set; }
  207. }
  208. public class FacilityScheduleForOrder
  209. {
  210. public int SiteId { get; set;}
  211. public int ScheduleId { get; set;}
  212. public Nullable<int> BusinessFieldId { get; set;}
  213. public string ScheduleName { get; set;}
  214. public Nullable<int> CheckGroupId { get; set; }
  215. public Nullable<int> WorkTypeId { get; set; }
  216. public string UserId { get; set;}
  217. public string UserName { get; set;}
  218. public Nullable<int> SeniorId { get; set;}
  219. public string WorkerName { get; set; }
  220. }
  221. public class CheckScheduleToGenerate
  222. {
  223. public int SiteId { get; set; }
  224. public int ScheduleId { get; set; }
  225. };
  226. }