123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- using System;
- using System.Collections.Generic;
- using System.Data.Entity;
- using System.Linq;
- using System.Net;
- using System.Transactions;
- using System.Web;
- using System.Web.Http;
- using System.Web.Http.Description;
- using iBemsDataService.Model;
- using iBemsDataService.Util;
- using System.Diagnostics;
- namespace iBemsDataService.Controllers.Fms.CheckSchedule
- {
-
- public class FmsWorkOrderController : ApiController
- {
- private iBemsEntities db = new iBemsEntities();
- private const int WORK_ORDER = 3;
- private const int WORK_STANDBY = 4;
- private const int EMERGENCY_B = 1;
- // POST: api/FmsWorkOrderController/GenerateWorkRequestOrder
- [ActionName( "GenerateWorkRequestOrder" )]
- [ResponseType( typeof ( void ) )]
- public IHttpActionResult PostGenerateWorkRequestOrder( List<CheckScheduleToGenerate> checkSchedules )
- {
- if ( !ModelState.IsValid )
- {
- return BadRequest( ModelState );
- }
- /*
- Uri uri = Request.RequestUri;
- var uriQuery = HttpUtility.ParseQueryString( uri.Query );
- DateTime date;
- String userId = uriQuery.Get( "UserId" );
- if( DateTime.TryParse( uriQuery.Get( "Date" ) , out date ) == false )
- {
- return BadRequest("Not Found Parameters.");
- }
- var qm = new QueryManager<FmsWorkOrderToFacility>( db );
- try
- {
- // 선임정보가 있는 사용자 정보 목록 쿼리문을 준비한다.
- var querySenior = from s in db.FmsBusinessSenior
- from si in db.FmsBusinessSeniorItem
- from user in db.CmUser
- where s.SeniorUserId == user.UserId &&
- s.SeniorItemId == si.SeniorItemId
- select new SeniorForOrder
- {
- SiteId = s.SiteId,
- SeniorId = s.SeniorId ,
- SeniorUserName = user.Name ,
- SeniorItemName = si.Name ,
- };
- // 지시 생성을 요청한 사용자 이름을 가져온다.
- var userInfo = db.CmUser.Select( x => new { x.UserId, x.Name } ).FirstOrDefault( x => x.UserId == userId );
- using (var transaction = new TransactionScope())
- {
- // 요청한 점검 계획 목록을 처리한다.
- foreach( CheckScheduleToGenerate cs in checkSchedules )
- {
- // 요청한 점검계획, 이에 해당하는 점검그룹을 연결하고 이에 해당하는 선임이 있다면 이를 가져오는 쿼리 생성
- var sQuery = from ss in db.FmsFacilitySchedule
- from stocg in db.FmsFacilityScheduleToCheckGroup
- from cg in db.FmsFacilityScheduleCheckGroup
- join senior in querySenior on cg.SiteId equals senior.SiteId into seniors
- from subSenior in seniors.Where( x => x.SeniorId == cg.SeniorId ).DefaultIfEmpty()
- where (ss.SiteId == cs.SiteId && ss.ScheduleId == cs.ScheduleId) &&
- (ss.SiteId == stocg.SiteId && ss.ScheduleId == stocg.ScheduleId) &&
- (stocg.SiteId == cg.SiteId && stocg.CheckGroupId == cg.CheckGroupId)
- select new FacilityScheduleForOrder
- {
- SiteId = ss.SiteId ,
- ScheduleId = ss.ScheduleId ,
- BusinessFieldId = ss.BusinessFieldId ,
- ScheduleName = ss.Name ,
- CheckGroupId = cg.CheckGroupId ,
- WorkTypeId = cg.WorkTypeId ,
- SeniorId = subSenior.SeniorId == null ? 0 : subSenior.SeniorId ,
- WorkerName = subSenior.SeniorUserName == null ? string.Empty : subSenior.SeniorUserName
- };
- if( sQuery.Any() )
- {
- // 데이터가 존재한다면 당연히 하나의 점검계획을 가져온다.
- var schedule = sQuery.First();
- if( userInfo != null )
- {
- // 요청자 정보가 있다면 점검 계획
- schedule.UserId = userInfo.UserId;
- schedule.UserName = userInfo.Name;
- }
- var workRequestQuery = db.FmsWorkRequest.Where( x => x.SiteId == schedule.SiteId &&
- x.ScheduleId == schedule.ScheduleId &&
- x.RequestedDate == date );
- FmsWorkRequest wr = null;
- if( workRequestQuery.Any() )
- {
- wr = workRequestQuery.First();
- }
- FmsWorkOrder wo = null;
- if( wr != null )
- {
- var workOrderQuery = db.FmsWorkOrder.Where( x => x.SiteId == schedule.SiteId &&
- x.RequestId == schedule.ScheduleId &&
- x.OrderedDate == date );
- if( workOrderQuery.Any() )
- {
- wo = workOrderQuery.First();
- }
- }
- bool needInsert = false;
- if( wr == null )
- {
- wr = new FmsWorkRequest();
- needInsert = true;
- }
- wr.SiteId = schedule.SiteId;
- wr.WorkTypeId = schedule.WorkTypeId.GetValueOrDefault();
- wr.BusinessFieldId = schedule.BusinessFieldId.GetValueOrDefault();
- wr.ScheduleId = schedule.ScheduleId;
- wr.CheckGroupId = schedule.CheckGroupId;
- wr.ProgressId = WORK_ORDER;
- wr.RequesterUserId = schedule.UserId;
- wr.RequesterName = schedule.UserName;
- //wr.RequesterCompanyId = ;
- //wr.RequesterDepartmentId = ;
- //wr.RequesterPost = ;
- //wr.RequesterMobileNo = ;
- wr.Title = schedule.ScheduleName;
- wr.Note = schedule.ScheduleName;
- wr.RequestedDate = DateTime.Now;
- if( needInsert )
- {
- wr = db.FmsWorkRequest.Add( wr );
- db.SaveChanges();
- needInsert = false;
- }
- if( wo == null )
- {
- wo = new FmsWorkOrder();
- needInsert = true;
- }
- wo.SiteId = schedule.SiteId;
- wo.EmergencyId = EMERGENCY_B;
- wo.RequestId = wr.RequestId;
- wo.OrderUserId = schedule.UserId;
- wo.OrderedDate = DateTime.Now;
- wo.Title = wr.Title;
- wo.Contents = wr.Note;
- wo.WorkerUserName = schedule.WorkerName;
- if( needInsert )
- {
- wo = db.FmsWorkOrder.Add( wo );
- db.SaveChanges();
- }
- var facilityQueryToDelete = from wotof in db.FmsWorkOrderToFacility
- where wotof.SiteId == schedule.SiteId &&
- wotof.OrderId == wo.OrderId
- select wotof;
- var facilityQuery = from sctof in db.FmsFacilityScheduleCheckGroupToFacility
- where sctof.SiteId == schedule.SiteId &&
- sctof.CheckGroupId == schedule.CheckGroupId
- select new { FacilityCode = sctof.FacilityCode };
- var list = new List<FmsWorkOrderToFacility>();
- foreach( var f in facilityQuery )
- {
- var orderToFacility = new FmsWorkOrderToFacility
- {
- SiteId = schedule.SiteId ,
- OrderId = wo.OrderId ,
- FacilityCode = f.FacilityCode ,
- ProgressId = WORK_STANDBY
- };
- list.Add( orderToFacility );
- Trace.WriteLine( orderToFacility.SiteId + ", " + orderToFacility.OrderId + ", " + orderToFacility.FacilityCode );
- // db.FmsWorkOrderToFacility.Add( orderToFacility );
- }
- qm.DeleteAndInsert( db.FmsWorkOrderToFacility , list , facilityQueryToDelete );
- }
- }
- transaction.Complete();
- }
- }
- catch ( Exception e )
- {
- Trace.WriteLine( e.Message );
- throw;
- }
- */
- return StatusCode( HttpStatusCode.NoContent );
- }
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- db.Dispose();
- }
- base.Dispose(disposing);
- }
- }
- public class SeniorForOrder
- {
- public int SiteId { get; set; }
- public int SeniorId { get; set; }
- public string SeniorUserName { get; set; }
- public string SeniorItemName { get; set; }
- }
- public class FacilityScheduleForOrder
- {
- public int SiteId { get; set;}
- public int ScheduleId { get; set;}
- public Nullable<int> BusinessFieldId { get; set;}
- public string ScheduleName { get; set;}
- public Nullable<int> CheckGroupId { get; set; }
- public Nullable<int> WorkTypeId { get; set; }
- public string UserId { get; set;}
- public string UserName { get; set;}
- public Nullable<int> SeniorId { get; set;}
- public string WorkerName { get; set; }
- }
- public class CheckScheduleToGenerate
- {
- public int SiteId { get; set; }
- public int ScheduleId { get; set; }
- };
- }
|