123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Data.Entity;
- using System.Data.Entity.Infrastructure;
- using System.Diagnostics;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Web;
- using System.Web.Http;
- using System.Web.Http.Description;
- using iBemsDataService;
- using iBemsDataService.Model;
- using iBemsDataService.Util;
- namespace iBemsDataService.Controllers
- {
- public class FmsEquipmentRentInfoController : ApiController
- {
- private iBemsEntities db = new iBemsEntities();
- [ResponseType(typeof(void))]
- [ActionName("InsertEquipments")]
- public IHttpActionResult PostFmsEquipmentRentInfoEquipments(List<RentEquipment> equipments)
- {
- if (!ModelState.IsValid)
- {
- return BadRequest(ModelState);
- }
- Uri uri = Request.RequestUri;
- var uriQuery = HttpUtility.ParseQueryString(uri.Query);
- int siteId, equipmentRentId;
- if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
- int.TryParse(uriQuery.Get("EquipmentRentId"), out equipmentRentId) == false)
- {
- return BadRequest("Not Found Parameters.");
- }
- try
- {
- foreach (var equip in equipments)
- {
- var originHistory = db.FmsEquipmentHistory
- .Where(fe =>
- fe.SiteId == siteId &&
- fe.EquipmentId == equip.EquipmentId)
- .OrderByDescending(fe => fe.EquipmentHistoryId)
- .Take(1).FirstOrDefault();
- if (originHistory == null) { return BadRequest("Not Found Stored Info."); }
- FmsEquipmentHistory targetHistory = new FmsEquipmentHistory()
- {
- AddDate = DateTime.Now,
- CurrentStockCount = originHistory.CurrentStockCount - equip.CurrentRentCount,
- EquipmentId = originHistory.EquipmentId,
- EquipmentRentId = equipmentRentId,
- EquipmentStateTypeId = equip.EquipmentStateTypeId,
- LossCount = 0,
- RentCount = equip.CurrentRentCount, // 신규추가인 경우
- CurrentRentCount = equip.CurrentRentCount,
- ReturnCount = 0,
- SiteId = siteId,
- StoredCount = 0,
- TotalStockCount = originHistory.TotalStockCount,
- UpdateDate = DateTime.Now,
- IsReturned = false
- };
- db.FmsEquipmentHistory.Add(targetHistory);
- }
- db.SaveChanges();
- }
- catch (DbUpdateException e) { throw e; }
- return StatusCode(HttpStatusCode.NoContent);
- }
- [ResponseType(typeof(void))]
- [ActionName("UpdateEquipments")]
- public IHttpActionResult PostFmsEquipmentRentInfoEquipments(List<UpdateRentEquipment> equipments)
- {
- if (!ModelState.IsValid)
- {
- return BadRequest(ModelState);
- }
- Uri uri = Request.RequestUri;
- var uriQuery = HttpUtility.ParseQueryString(uri.Query);
- int siteId, equipmentRentId;
- if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
- int.TryParse(uriQuery.Get("EquipmentRentId"), out equipmentRentId) == false)
- {
- return BadRequest("Not Found Parameters.");
- }
- // 불출내역에 포함된 공기구 리스트
- var originHistoryList = db.FmsEquipmentHistory.Where(fe =>
- fe.SiteId == siteId &&
- fe.EquipmentRentId == equipmentRentId)
- .OrderByDescending(fe => fe.EquipmentHistoryId)
- .ToList();
- try
- {
- foreach (var equip in equipments)
- {
- var originHistory = originHistoryList.Where(h =>
- h.SiteId == siteId &&
- h.EquipmentId == equip.EquipmentId)
- .FirstOrDefault();
- if (originHistory == null)
- {
- // 이전 정보가 없는 경우 신규 저장
- var lastestHistory = db.FmsEquipmentHistory
- .Where(fe => fe.EquipmentId == equip.EquipmentId)
- .OrderByDescending(fe => fe.EquipmentHistoryId)
- .Take(1).FirstOrDefault();
- FmsEquipmentHistory targetHistory = new FmsEquipmentHistory()
- {
- AddDate = DateTime.Now,
- CurrentStockCount = lastestHistory.CurrentStockCount - equip.RentCount,
- EquipmentId = lastestHistory.EquipmentId,
- EquipmentRentId = equipmentRentId,
- EquipmentStateTypeId = equip.EquipmentStateTypeId,
- LossCount = 0,
- RentCount = equip.RentCount,
- CurrentRentCount = equip.RentCount,
- ReturnCount = 0,
- SiteId = siteId,
- StoredCount = 0,
- TotalStockCount = lastestHistory.TotalStockCount,
- UpdateDate = DateTime.Now,
- IsReturned = false,
- };
- db.FmsEquipmentHistory.Add(targetHistory);
- }
- else
- {
- if (originHistory.CurrentRentCount != equip.CurrentRentCount)
- {
- // 현재 넘어온 값과 원래 데이터를 비교 하여 재고량을 다시 계산
- if (originHistory.CurrentRentCount > equip.CurrentRentCount)
- {
- originHistory.CurrentStockCount += (originHistory.CurrentRentCount - equip.CurrentRentCount);
- }
- else if (originHistory.CurrentRentCount < equip.CurrentRentCount)
- {
- originHistory.CurrentStockCount -= (equip.CurrentRentCount - originHistory.CurrentRentCount);
- }
- originHistory.CurrentRentCount = equip.CurrentRentCount;
- originHistory.UpdateDate = DateTime.Now;
- }
- }
- }
- // 이전 정보 수가 현재 정보 수 보다 많은 경우, 공기구를 삭제하였을 경우
- if (originHistoryList.Count > equipments.Count)
- {
- List<int> originEquipIdList = originHistoryList.Select(e => e.EquipmentId).ToList();
- List<int> targetEquipIdList = equipments.Select(e => e.EquipmentId).ToList();
- List<int> deleteTargetEquipIdList = originEquipIdList.Except(targetEquipIdList).ToList();
- foreach (var equipId in deleteTargetEquipIdList)
- {
- var deleteTarget = originHistoryList.Where(h =>
- h.SiteId == siteId &&
- h.EquipmentId == equipId)
- .FirstOrDefault();
- db.FmsEquipmentHistory.Remove(deleteTarget);
- }
- }
- db.SaveChanges();
- }
- catch (DbUpdateException e) { throw e; }
- return StatusCode(HttpStatusCode.NoContent);
- }
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- db.Dispose();
- }
- base.Dispose(disposing);
- }
- }
- public class RentEquipment
- {
- public int SiteId { get; set; }
- public int EquipmentId { get; set; }
- public int RentCount { get; set; }
- public int CurrentRentCount { get; set; }
- public int ReturnCount { get; set; }
- public int LossCount { get; set; }
- public int StoredCount { get; set; }
- public int EquipmentRentId { get; set; }
- public short EquipmentStateTypeId { get; set; }
- }
- public class UpdateRentEquipment : RentEquipment
- {
- }
- }
|