demo20230512/Controllers/Api/ProductLCA/VehicleController.cs
2023-05-12 10:20:28 +08:00

182 lines
8.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Weee.Models;
using Weee.Models.Paramemter;
using Weee.Service;
using PagedList;
using Weee.Filter;
using System.Web;
using System.IO;
using NLog;
namespace Weee.Controllers
{
public class VehicleController : ApiControllerBase
{
private readonly WeeeParameterDataService parameterservice;
private readonly WeeeSheetDataService service;
public VehicleController(WeeeSheetDataService d, WeeeParameterDataService s)
: base(d)
{
service = d;
parameterservice = s;
}
[Route("api/Vehicle/GetByLcaId/{LCAID}")]
//[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not
public object GetByLcaId(int LCAID, int page = 1, string search = "", int pagesize = 15)
{
//var type = service.GetLCAType(LCAID);
LCA lca = service.GetLCA(LCAID);
//options = parameterservice.GetYearlyParameterOptions((lca.LCAType.Name == "ProductLCA") ? Models.Paramemter.Categories.WaterProduct : Models.Paramemter.Categories.WaterProduct),
var options =// type == typeof(ProductLCA) ?
parameterservice.GetYearlyParameterOptions((lca.LCAType.Name == "ProductLCA") ? Categories.VehicleProduct : Categories.Vehicle);
var query = //service.GetSheet<LCACommonSurveyForm_Vehicles>(LCAID);
service.getVehicleWithFactor(LCAID);
object ret = new
{
Vehicles = query.ToList(),
Options = options,
SheetHeader = service.GetSheetHeader(LCAID, (lca.LCAType.Name == "ProductLCA") ? Categories.VehicleProduct : Categories.Vehicle),
ActivityOptions = activityItems,
EmitParaOptions = emitParaItems
};
return ret;
}
[Route("api/Vehicle/SaveSheetHeader")]
[HttpPost]
public HttpResponseMessage SaveHeader(SheetHeader header)
{
LCA lca = service.GetLCA(header.LCAID);
return this.SaveSheetHeader(service, (lca.LCAType.Name == "ProductLCA") ? Weee.Models.Paramemter.Categories.VehicleProduct : Weee.Models.Paramemter.Categories.Vehicle, header);
}
[Route("api/Vehicle/SaveAll")]
[HttpPost]
[ApiEditableAttribute("toBeSave", true)]
public object SaveAll(IEnumerable<LCACommonSurveyForm_Vehicles> toBeSave)
{
if (!ModelState.IsValid)
{
throw new Exception("error");
}
var dic = service.getN2OandCH4Factors(toBeSave.First().LCAID);
LCA lca = service.GetLCA(toBeSave.First().LCAID);
foreach (var rec in toBeSave)
{
if (rec.ParameterID > 0)
{
if (rec.Parameter == null)
rec.Parameter = parameterservice.GetYearlyParameter((int)rec.ParameterID);
//return this.SaveSheetHeader(service, (lca.LCAType.Name == "ProductLCA") ? Weee.Models.Paramemter.Categories.VehicleProduct : Weee.Models.Paramemter.Categories.Vehicle, header);
rec.ParameterValue = (lca.LCAType.Name == "ProductLCA") ? rec.Parameter.Value : (rec.Parameter.CO2Value + rec.Parameter.CH4Value * dic["CH4"] + rec.Parameter.N2OValue * dic["N2O"]);
//rec.ParameterValue = rec.Parameter.CO2Value + rec.Parameter.CH4Value * dic["CH4"] + rec.Parameter.N2OValue * dic["N2O"];
rec.KgCO2e = rec.ParameterValue * rec.Scalar;
if (rec.activityDataType == 0) // 帶出年度預設值
{
rec.activityDataType =rec.Parameter.Type.activityDataType;
}
if (rec.emitParaType == 0) // 帶出年度預設值
{
rec.emitParaType = rec.Parameter.Type.emitParaType;
}
}
}
var result = service.SaveSheet(toBeSave);
var resultIDs = result.Select(y => y.ID).ToList();
var query = service.getVehicleWithFactor(result.First().LCAID).Where(x => resultIDs.Contains(x.ID )).ToList();
return new { result = query };
}
[Route("api/Vehicle/Save/{LCAID}/{id}")]
[HttpPost]
[ApiEditableAttribute("toBeSave", false)]
public object Save(int LCAID, int id, LCACommonSurveyForm_Vehicles toBeSave)
{
//toBeSave.ReferenceFileUrl = getBaseUrl() + toBeSave.ReferenceFileUrl;
//toBeSave.ReferencePhotoUrl=getBaseUrl() + toBeSave.ReferencePhotoUrl;
Logger log = NLog.LogManager.GetCurrentClassLogger();
//log.Info($"toBeSave:: {CScommon.JsonUtl.fromT(toBeSave)}");
if (!ModelState.IsValid)
{
return BadRequest();
}
if (id != toBeSave.ID || LCAID != toBeSave.LCAID)
{
return BadRequest();
}
toBeSave.Scalar = Math.Round(toBeSave.Scalar, 4);
if (toBeSave.ParameterID > 0)
{
if (toBeSave.Parameter == null)
toBeSave.Parameter = parameterservice.GetYearlyParameter((int)toBeSave.ParameterID);
var dic = service.getN2OandCH4Factors(LCAID);
LCA lca = service.GetLCA(LCAID);
//return this.SaveSheetHeader(service, (lca.LCAType.Name == "ProductLCA") ? Weee.Models.Paramemter.Categories.VehicleProduct : Weee.Models.Paramemter.Categories.Vehicle, header);
toBeSave.ParameterValue = (lca.LCAType.Name == "ProductLCA") ? toBeSave.Parameter.Value : (toBeSave.Parameter.CO2Value + toBeSave.Parameter.CH4Value * dic["CH4"] + toBeSave.Parameter.N2OValue * dic["N2O"]);
toBeSave.KgCO2e = toBeSave.ParameterValue * toBeSave.Scalar;
if (toBeSave.activityDataType == 0) // 帶出年度預設值
{
toBeSave.activityDataType = toBeSave.Parameter.Type.activityDataType;
}
if (toBeSave.emitParaType == 0) // 帶出年度預設值
{
toBeSave.emitParaType = toBeSave.Parameter.Type.emitParaType;
}
}
service.SaveSheetItem(toBeSave);
var storage = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(Storage.AzureStorage)) as Storage.AzureStorage;
try
{
if (!string.IsNullOrWhiteSpace(toBeSave.ReferenceFileUrl) && toBeSave.ReferenceFileUrl.Contains("vf_"))
{
var uri = toBeSave.ReferenceFileUrl;
uri = uri.Replace("vf_", "vf" + toBeSave.ID + "_");
storage.MoveToAzure(toBeSave.ReferenceFileUrl, uri);
toBeSave.ReferenceFileUrl = uri;
}
if (!string.IsNullOrWhiteSpace(toBeSave.ReferencePhotoUrl) && toBeSave.ReferencePhotoUrl.Contains("vp_"))
{
var uri = toBeSave.ReferencePhotoUrl;
uri = uri.Replace("vp_", "vp" + toBeSave.ID + "_");
storage.MoveToAzure(toBeSave.ReferencePhotoUrl, uri);
toBeSave.ReferencePhotoUrl = uri;
}
}
catch(Exception ex)
{
log.Error(ex);
log.Error(CScommon.Exceptions.inner(ex));
log.Error(ex.StackTrace);
return Json(new { Success = false, Msg = ex.ToString() });
}
service.SaveSheetItem(toBeSave);
var query = service.getVehicleWithFactor(LCAID).Where(x => x.ID == toBeSave.ID);
return query.ToList().First();
}
[Route("api/Vehicle/DeleteAll/{LCAID}")]
[HttpDelete]
public IHttpActionResult DeleteAll(int LCAID)
{
service.DeleteSheet<LCACommonSurveyForm_Vehicles>(LCAID);
return Ok();
}
[Route("api/Vehicle/Delete/{ID}")]
[HttpDelete]
public IHttpActionResult Delete(int ID)
{
service.DeleteSheetItem<LCACommonSurveyForm_Vehicles>(ID);
return Ok();
}
}
}