988 lines
44 KiB
C#
988 lines
44 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Data.Entity;
|
|||
|
using System.Linq;
|
|||
|
using System.Web;
|
|||
|
using Weee.DAL;
|
|||
|
using Weee.Models;
|
|||
|
using Weee.Models.Paramemter;
|
|||
|
using Weee.ViewModels.DataTransferObject;
|
|||
|
|
|||
|
namespace Weee.Service
|
|||
|
{
|
|||
|
public class LifecycleAssmtDataService : WeeeLCADataService
|
|||
|
{
|
|||
|
public LifecycleAssmtDataService(WeeeDataContext db)
|
|||
|
: base(db)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 將用電量同步到風險評估的C2,C4生命週期項目
|
|||
|
/// </summary>
|
|||
|
/// <param name="Scalar"></param>
|
|||
|
/// <param name="para"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public string power2lifeCycle(string userID, int LCAID, decimal Scalar, string curArea
|
|||
|
, int curYear, Weee.Models.Paramemter.Parameter para)
|
|||
|
{
|
|||
|
string ret = "";
|
|||
|
//同步到風險評估的C2電力項目
|
|||
|
var qry2 = (from a in _db.LCARiskAssmtSurveyForm_LifecycleAssmts
|
|||
|
where a.LCAID == LCAID && a.LifeCycleStage == 3
|
|||
|
&& a.category == "2" && a.GHGinventoryItemNo == "2.1"
|
|||
|
select a);
|
|||
|
if (qry2.Any())//有資料則修改
|
|||
|
{
|
|||
|
foreach (var rec in qry2.ToList())
|
|||
|
{
|
|||
|
rec.ActivityIntensity = Scalar;
|
|||
|
rec.KgCO2e = para.CO2Value > 0 ? para.CO2Value : para.Value;
|
|||
|
rec.EmissionKg = rec.ActivityIntensity * rec.KgCO2e;
|
|||
|
rec.EmissionT = rec.EmissionKg / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
else//無資料則新增
|
|||
|
{
|
|||
|
LCARiskAssmtSurveyForm_LifecycleAssmt rec = new LCARiskAssmtSurveyForm_LifecycleAssmt();
|
|||
|
rec.LCAID = LCAID;
|
|||
|
rec.Unit = "用電度";//from para
|
|||
|
rec.CreatedBy = userID;
|
|||
|
rec.CreatedDate = DateTime.Now;
|
|||
|
rec.LifeCycleStage = 3;
|
|||
|
//rec.Instruction = ""; from para
|
|||
|
rec.GHGEvaluateItem = "輸入電力";
|
|||
|
rec.category = "2";
|
|||
|
rec.categorySubItem = "輸入電力";
|
|||
|
rec.GHGinventoryItemNo = "2.1";
|
|||
|
rec.ActivityIntensity = Scalar;
|
|||
|
rec.KgCO2e = para.CO2Value > 0 ? para.CO2Value : para.Value;
|
|||
|
rec.EmissionKg = rec.ActivityIntensity * rec.KgCO2e;
|
|||
|
rec.EmissionT = rec.EmissionKg / 1000;
|
|||
|
_db.LCARiskAssmtSurveyForm_LifecycleAssmts.Add(rec);
|
|||
|
}
|
|||
|
//同步到風險評估的C4電力上游採購
|
|||
|
Weee.Models.Paramemter.Parameter paraC4 = getC4coeff(curArea, curYear);
|
|||
|
var qry4 = (from a in _db.LCARiskAssmtSurveyForm_LifecycleAssmts
|
|||
|
where a.LCAID == LCAID && a.LifeCycleStage == 3
|
|||
|
&& a.category == "4" && a.GHGinventoryItemNo == "4.1b"
|
|||
|
select a);
|
|||
|
if (qry4.Any())//有資料則修改
|
|||
|
{
|
|||
|
foreach (var rec in qry4.ToList())
|
|||
|
{
|
|||
|
rec.ActivityIntensity = Scalar;
|
|||
|
rec.KgCO2e = paraC4==null ? 0 : paraC4.CO2Value;
|
|||
|
rec.EmissionKg = rec.ActivityIntensity * rec.KgCO2e;
|
|||
|
rec.EmissionT = rec.EmissionKg / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
else//無資料則新增
|
|||
|
{
|
|||
|
LCARiskAssmtSurveyForm_LifecycleAssmt rec = new LCARiskAssmtSurveyForm_LifecycleAssmt();
|
|||
|
rec.LCAID = LCAID;
|
|||
|
rec.Unit = "用電度";//from paraC4
|
|||
|
rec.CreatedBy = userID;
|
|||
|
rec.CreatedDate= DateTime.Now;
|
|||
|
rec.LifeCycleStage = 3;
|
|||
|
//rec.Instruction = ""; from paraC4
|
|||
|
rec.GHGEvaluateItem = "輸入電力上游";
|
|||
|
rec.category = "4";
|
|||
|
rec.categorySubItem = "輸入電力上游";
|
|||
|
rec.GHGinventoryItemNo = "4.1b";
|
|||
|
rec.ActivityIntensity = Scalar;
|
|||
|
rec.KgCO2e = paraC4==null ? 0 : paraC4.CO2Value;
|
|||
|
rec.EmissionKg = rec.ActivityIntensity * rec.KgCO2e;
|
|||
|
rec.EmissionT = rec.EmissionKg / 1000;
|
|||
|
_db.LCARiskAssmtSurveyForm_LifecycleAssmts.Add(rec);
|
|||
|
}
|
|||
|
_db.SaveChanges();
|
|||
|
//最後還要更新風險評估資料的逐項百分比
|
|||
|
UpdatePercentage(LCAID);
|
|||
|
_db.SaveChanges();
|
|||
|
return ret;
|
|||
|
}
|
|||
|
private Weee.Models.Paramemter.Parameter getC4coeff(string curArea
|
|||
|
, int curYear)
|
|||
|
{
|
|||
|
Weee.Models.Paramemter.Parameter ret = null;
|
|||
|
var qry = (from p in _db.Parameters
|
|||
|
join yp in _db.YearlyParameters on p.ID equals yp.ID
|
|||
|
join t in _db.YearlyParameterTypes on yp.TypeID equals t.ID
|
|||
|
join c in _db.YearlyParameterCategories on t.CategoryID equals c.ID
|
|||
|
where yp.Year==curYear && yp.IsHistory==false &&
|
|||
|
c.Category==Categories.Electric && t.DisplayNameTW=="用電量上游排放"
|
|||
|
select p).FirstOrDefault();
|
|||
|
if (qry!=null)
|
|||
|
ret = qry;
|
|||
|
return ret;
|
|||
|
}
|
|||
|
public IQueryable<LCARiskAssmtSurveyForm_LifecycleAssmt> GetList(int LCAID)
|
|||
|
{
|
|||
|
if (!AuthorizedLCAs.Contains(LCAID)) throw new Exception("not authorized");
|
|||
|
return _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>().Where(x => x.LCAID == LCAID)
|
|||
|
.OrderByDescending(x => x.ID);
|
|||
|
}
|
|||
|
|
|||
|
public IEnumerable<LifecycleAssmtItemDto> GetItems()
|
|||
|
{
|
|||
|
return _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmtItem>()
|
|||
|
.ToList()
|
|||
|
.Select(x => new LifecycleAssmtItemDto()
|
|||
|
{
|
|||
|
ID = x.ID,
|
|||
|
LifeCycleStage = x.LifeCycleStage,
|
|||
|
DisplayName = x.DisplayName
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
public IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> Sync(int LCAID, UpdateLIfecycleAssmtDTO input)
|
|||
|
{
|
|||
|
// 生命週期階段的大update
|
|||
|
var oldLifecycleAssmtDataData = _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var newLifecycleAssmtData = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
|
|||
|
if (input.Material)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateMaterial(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 1)
|
|||
|
, LCAID, input.MaterialDelete));
|
|||
|
if (input.UpstreamDelivery)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateUpstreamDelivery(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 2)
|
|||
|
, LCAID, input.UpstreamDeliveryDelete));
|
|||
|
if (input.Service)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateService(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 3)
|
|||
|
, LCAID, input.ServiceDelete));
|
|||
|
if (input.DownstreamDelivery)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateDownstreamDelivery(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 4)
|
|||
|
, LCAID, input.DownstreamDeliveryDelete));
|
|||
|
if (input.Product)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateProduct(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 5)
|
|||
|
, LCAID, input.ProductDelete));
|
|||
|
if (input.Waste)
|
|||
|
newLifecycleAssmtData.AddRange(
|
|||
|
UpdateWaste(oldLifecycleAssmtDataData.Where(x => x.LifeCycleStage == 6)
|
|||
|
, LCAID, input.WasteDelete));
|
|||
|
|
|||
|
UpdatePercentage(newLifecycleAssmtData);
|
|||
|
|
|||
|
_db.SaveChanges();
|
|||
|
|
|||
|
return newLifecycleAssmtData;
|
|||
|
}
|
|||
|
|
|||
|
private Dictionary<int, string> GetYearlyParameterOptions(Categories cate)
|
|||
|
{
|
|||
|
|
|||
|
var ret = _db.YearlyParameters
|
|||
|
.Include(x => x.Type)
|
|||
|
.Include(x => x.Area)
|
|||
|
.Where(x => x.Area.Category.Category == cate && x.IsHistory == false)
|
|||
|
.OrderBy(x => x.AreaID)
|
|||
|
.ThenBy(x => x.Year)
|
|||
|
.ToDictionary(x => x.ID, x => x.Area.DisplayName + "," + x.Type.DisplayName + "," + x.Year);
|
|||
|
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
private void UpdatePercentage(IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> lifecycleAssmtData)
|
|||
|
{
|
|||
|
var sumEmissionT = lifecycleAssmtData.Sum(x => x.EmissionT);
|
|||
|
|
|||
|
foreach (var data in lifecycleAssmtData)
|
|||
|
{
|
|||
|
data.Percentage = sumEmissionT==0 ? 0 : Math.Round((data.EmissionT / sumEmissionT) * 100, 4);
|
|||
|
}
|
|||
|
}
|
|||
|
private void UpdatePercentage(int LCAID)
|
|||
|
{
|
|||
|
var qry = (from a in _db.LCARiskAssmtSurveyForm_LifecycleAssmts
|
|||
|
where a.LCAID == LCAID
|
|||
|
select a);
|
|||
|
if (qry.Any())
|
|||
|
UpdatePercentage(qry.ToList());
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 更新原料取得资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateMaterial(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> materialData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in materialData)
|
|||
|
{
|
|||
|
if (data.LCAID==LCAID)
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
result.AddRange(materialData);
|
|||
|
}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var material = _db.Set<LCARiskAssmtSurveyForm_MaterialC3Emission>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
foreach (var item in material)
|
|||
|
{
|
|||
|
if (delete || !materialData.Any(x => x.GHGEvaluateItem == item.MaterialName))
|
|||
|
{
|
|||
|
var materialAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
MaterialNo = item.MaterialNo,
|
|||
|
LifeCycleStage = 1,
|
|||
|
GHGEvaluateItem = item.MaterialName,
|
|||
|
ActivityIntensity = item.ActivityIntensity,
|
|||
|
KgCO2e = item.KgCO2e,
|
|||
|
Unit = item.Unit,
|
|||
|
EmissionKg = item.ActivityIntensity * item.KgCO2e,
|
|||
|
EmissionT = item.ActivityIntensity * item.KgCO2e / 1000,
|
|||
|
Instruction = item.Comment
|
|||
|
};
|
|||
|
result.Add(materialAssmt);
|
|||
|
_db.Entry(materialAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新上游运输资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateUpstreamDelivery(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> deliveryData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in deliveryData)
|
|||
|
{
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
result.AddRange(deliveryData);
|
|||
|
}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var purchase = _db.Set<LCARiskAssmtSurveyForm_ItemPurchase>().Where(x => x.LCAID == LCAID).ToList(); // 採購及運輸地址
|
|||
|
var travel = _db.Set<LCARiskAssmtSurveyForm_IntlTravel>().Where(x => x.LCAID == LCAID).ToList(); // 商務旅行(國際)
|
|||
|
foreach (var item in purchase)
|
|||
|
{
|
|||
|
if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == item.ElementName))
|
|||
|
{
|
|||
|
var materialAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 2,
|
|||
|
MaterialNo=item.MaterialNo,
|
|||
|
GHGEvaluateItem = item.ElementName,
|
|||
|
ActivityIntensity = item.TKM,
|
|||
|
KgCO2e = 0.235m,
|
|||
|
Unit = "tkm",
|
|||
|
EmissionKg = item.TKM * 0.235m,
|
|||
|
EmissionT = item.TKM * 0.235m / 1000,
|
|||
|
Instruction= @"產品碳足跡計算服務平台營業用大貨車https://cfp-calculate.tw/cfpc/WebPage/WebSites/CoefficientDB.aspx"
|
|||
|
};
|
|||
|
result.Add(materialAssmt);
|
|||
|
_db.Entry(materialAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
//// 商務旅行(國際)
|
|||
|
//var travelItems = new List<IntlTravel>();
|
|||
|
//foreach (var item in travel)
|
|||
|
//{
|
|||
|
// if (string.IsNullOrEmpty(item.AirportFrom) || string.IsNullOrEmpty(item.AirportTo))
|
|||
|
// {
|
|||
|
// continue;
|
|||
|
// }
|
|||
|
// var airportFrom = TryAddTravelItem(item.AirportFrom, item.TransferStation1);
|
|||
|
// airportFrom = TryAddTravelItem(airportFrom, item.TransferStation2);
|
|||
|
// airportFrom = TryAddTravelItem(airportFrom, item.AirportTo);
|
|||
|
//}
|
|||
|
//foreach (var item in travelItems)
|
|||
|
//{
|
|||
|
// var ghgEvaluateItem = $"商務旅行({item.From}-{item.To})";
|
|||
|
// if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == ghgEvaluateItem))
|
|||
|
// {
|
|||
|
// var materialAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
// {
|
|||
|
// LCAID = LCAID,
|
|||
|
// LifeCycleStage = 2,
|
|||
|
// GHGEvaluateItem = ghgEvaluateItem,
|
|||
|
// ActivityIntensity = item.Count,
|
|||
|
// KgCO2e = 0m,
|
|||
|
// Unit = "kgco2e",
|
|||
|
// EmissionKg = 0m,
|
|||
|
// EmissionT = 0m,
|
|||
|
// };
|
|||
|
// result.Add(materialAssmt);
|
|||
|
// _db.Entry(materialAssmt).State = EntityState.Added;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// var updateItem = deliveryData.FirstOrDefault(x => x.GHGEvaluateItem == ghgEvaluateItem && x.ActivityIntensity != item.Count);
|
|||
|
// if (updateItem != null)
|
|||
|
// {
|
|||
|
// updateItem.ActivityIntensity = item.Count;
|
|||
|
// updateItem.EmissionKg = item.Count * updateItem.KgCO2e;
|
|||
|
// updateItem.EmissionT = item.Count * updateItem.KgCO2e / 1000;
|
|||
|
// }
|
|||
|
// }
|
|||
|
//}
|
|||
|
//if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "員工通勤"))
|
|||
|
//{
|
|||
|
// var employeeAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
// {
|
|||
|
// LCAID = LCAID,
|
|||
|
// LifeCycleStage = 2,
|
|||
|
// GHGEvaluateItem = "員工通勤",
|
|||
|
// ActivityIntensity = 0,
|
|||
|
// KgCO2e = 0.0951m,
|
|||
|
// Unit = "延人公里(PKM)",
|
|||
|
// EmissionKg = 0m,
|
|||
|
// EmissionT = 0m,
|
|||
|
// };
|
|||
|
// result.Add(employeeAssmt);
|
|||
|
// _db.Entry(employeeAssmt).State = EntityState.Added;
|
|||
|
//}
|
|||
|
//if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "客戶和訪客運輸造成之排放"))
|
|||
|
//{
|
|||
|
// var customerAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
// {
|
|||
|
// LCAID = LCAID,
|
|||
|
// LifeCycleStage = 2,
|
|||
|
// GHGEvaluateItem = "客戶和訪客運輸造成之排放",
|
|||
|
// ActivityIntensity = 0,
|
|||
|
// KgCO2e = 0.115m,
|
|||
|
// Unit = "延人公里(PKM)",
|
|||
|
// EmissionKg = 0m,
|
|||
|
// EmissionT = 0m,
|
|||
|
// };
|
|||
|
// result.Add(customerAssmt);
|
|||
|
// _db.Entry(customerAssmt).State = EntityState.Added;
|
|||
|
//}
|
|||
|
//string TryAddTravelItem(string airportFrom, string airportTo)
|
|||
|
//{
|
|||
|
// if (!string.IsNullOrEmpty(airportTo))
|
|||
|
// {
|
|||
|
// var travelItem = travelItems.FirstOrDefault(x => x.From == airportFrom && x.To == airportTo);
|
|||
|
// if (travelItem != null)
|
|||
|
// {
|
|||
|
// travelItem.Count += 1;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// {
|
|||
|
// travelItems.Add(new IntlTravel() { From = airportFrom, To = airportTo, Count = 1 });
|
|||
|
// }
|
|||
|
// return airportTo;
|
|||
|
// }
|
|||
|
// return airportFrom;
|
|||
|
//}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新运作支援及服务资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateService(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> serviceData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in serviceData)
|
|||
|
{
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// result.AddRange(serviceData);
|
|||
|
//}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var vehicles = _db.Set<LCACommonSurveyForm_Vehicles>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var powerUsages = _db.Set<LCACommonSurveyForm_PowerUsages>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var waterUsages = _db.Set<LCARiskAssmtSurveyForm_WaterUsages>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var options = GetYearlyParameterOptions(Categories.Vehicle);
|
|||
|
var vehicleItems = new List<Vehicle>();
|
|||
|
foreach (var item in vehicles)
|
|||
|
{
|
|||
|
if (!item.ParameterID.HasValue)
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (options.TryGetValue(item.ParameterID.Value, out string parameter))
|
|||
|
{
|
|||
|
var fuelType = GetFuelType(parameter);
|
|||
|
var vehicleItem = vehicleItems.FirstOrDefault(x => x.FuelType == fuelType);
|
|||
|
|
|||
|
if (vehicleItem != null)
|
|||
|
{
|
|||
|
vehicleItem.Scalar += item.Scalar;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
vehicleItems.Add(new Vehicle() { FuelType = fuelType, Scalar = item.Scalar });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
foreach (var item in vehicleItems)
|
|||
|
{
|
|||
|
var ghgEvaluteItem = $"車輛用油上游能源採購({item.FuelType})";
|
|||
|
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == ghgEvaluteItem))
|
|||
|
{
|
|||
|
var vehicleAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = ghgEvaluteItem,
|
|||
|
ActivityIntensity = item.Scalar,
|
|||
|
KgCO2e = 0m,
|
|||
|
Unit = "L",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(vehicleAssmt);
|
|||
|
_db.Entry(vehicleAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
var sumPowerNormal = powerUsages.Where(x => x.Type == LCACommonSurveyForm_PowerUsages.PowerType.Normal).Sum(x => x.Scalar);
|
|||
|
var sumPowerGreen = powerUsages.Where(x => x.Type == LCACommonSurveyForm_PowerUsages.PowerType.GreenNoCarbon).Sum(x => x.Scalar);
|
|||
|
if (sumPowerNormal > 0)
|
|||
|
{
|
|||
|
var powerNormalGHGEvaluateItem1 = "電力上游能源採購(一般用電)";
|
|||
|
var powerNormalGHGEvaluateItem2 = "C2外購電力(一般用電)";
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == powerNormalGHGEvaluateItem1))
|
|||
|
{
|
|||
|
var powerAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = powerNormalGHGEvaluateItem1,
|
|||
|
ActivityIntensity = sumPowerNormal,
|
|||
|
KgCO2e = 0.0923m,
|
|||
|
Unit = "每度電(Kw/h)",
|
|||
|
EmissionKg = sumPowerNormal * 0.0923m,
|
|||
|
EmissionT = sumPowerNormal * 0.0923m / 1000
|
|||
|
};
|
|||
|
result.Add(powerAssmt);
|
|||
|
_db.Entry(powerAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = serviceData.FirstOrDefault(x => x.GHGEvaluateItem == powerNormalGHGEvaluateItem1 && x.ActivityIntensity != sumPowerNormal);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumPowerNormal;
|
|||
|
updateItem.EmissionKg = sumPowerNormal * 0.0923m;
|
|||
|
updateItem.EmissionT = sumPowerNormal * 0.0923m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == powerNormalGHGEvaluateItem2))
|
|||
|
{
|
|||
|
var powerAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = powerNormalGHGEvaluateItem2,
|
|||
|
ActivityIntensity = sumPowerNormal,
|
|||
|
KgCO2e = 0.8042m,
|
|||
|
Unit = "每度電(Kw/h)",
|
|||
|
EmissionKg = sumPowerNormal * 0.8042m,
|
|||
|
EmissionT = sumPowerNormal * 0.8042m / 1000
|
|||
|
};
|
|||
|
result.Add(powerAssmt);
|
|||
|
_db.Entry(powerAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = serviceData.FirstOrDefault(x => x.GHGEvaluateItem == powerNormalGHGEvaluateItem2 && x.ActivityIntensity != sumPowerNormal);
|
|||
|
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumPowerNormal;
|
|||
|
updateItem.EmissionKg = sumPowerNormal * 0.8042m;
|
|||
|
updateItem.EmissionT = sumPowerNormal * 0.8042m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//if (sumPowerGreen > 0)
|
|||
|
//{
|
|||
|
//}
|
|||
|
var sumWaterUsage = waterUsages.Sum(x => x.Scalar);
|
|||
|
if (sumWaterUsage > 0)
|
|||
|
{
|
|||
|
var waterUsageGHGEvaluateItem = "用水";
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == waterUsageGHGEvaluateItem))
|
|||
|
{
|
|||
|
var powerAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = waterUsageGHGEvaluateItem,
|
|||
|
ActivityIntensity = sumWaterUsage,
|
|||
|
KgCO2e = 0.299m,
|
|||
|
Unit = "m3",
|
|||
|
EmissionKg = sumWaterUsage * 0.299m,
|
|||
|
EmissionT = sumWaterUsage * 0.299m / 1000
|
|||
|
};
|
|||
|
result.Add(powerAssmt);
|
|||
|
_db.Entry(powerAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = serviceData.FirstOrDefault(x => x.GHGEvaluateItem == waterUsageGHGEvaluateItem && x.ActivityIntensity != sumWaterUsage);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumWaterUsage;
|
|||
|
updateItem.EmissionKg = sumWaterUsage * 0.299m;
|
|||
|
updateItem.EmissionT = sumWaterUsage * 0.299m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == "購買顧問服務"))
|
|||
|
{
|
|||
|
var buyAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = "購買顧問服務",
|
|||
|
ActivityIntensity = 0,
|
|||
|
KgCO2e = 0.66m,
|
|||
|
Unit = "度",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(buyAssmt);
|
|||
|
_db.Entry(buyAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
if (delete || !serviceData.Any(x => x.GHGEvaluateItem == "資本貨物"))
|
|||
|
{
|
|||
|
var goodsAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 3,
|
|||
|
GHGEvaluateItem = "資本貨物",
|
|||
|
ActivityIntensity = 0,
|
|||
|
KgCO2e = 0.007m,
|
|||
|
Unit = "kg CO2e/台幣",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(goodsAssmt);
|
|||
|
_db.Entry(goodsAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
string GetFuelType(string value)
|
|||
|
{
|
|||
|
var index = value.IndexOf(',');
|
|||
|
var lastIndex = value.LastIndexOf(',');
|
|||
|
|
|||
|
return value.Substring(value.IndexOf(",") + 1, lastIndex - index - 1);
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新下游运输资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateDownstreamDelivery(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> deliveryData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in deliveryData)
|
|||
|
{
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// result.AddRange(deliveryData);
|
|||
|
//}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var waste = _db.Set<LCARiskAssmtSurveyForm_WasteMaterial>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var deliveries = _db.Set<LCARiskAssmtSurveyForm_ItemDelivery>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var lca = base.GetLCA(LCAID);
|
|||
|
if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "廢棄物運輸"))
|
|||
|
{
|
|||
|
var wasteAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 4,
|
|||
|
GHGEvaluateItem = "廢棄物運輸",
|
|||
|
ActivityIntensity = lca.WasteMaterialTotalOutputKg,
|
|||
|
KgCO2e = 0.235m,
|
|||
|
Unit = "tkm",
|
|||
|
EmissionKg = lca.WasteMaterialTotalOutputKg * 0.235m,
|
|||
|
EmissionT = lca.WasteMaterialTotalOutputKg * 0.235m / 1000,
|
|||
|
};
|
|||
|
result.Add(wasteAssmt);
|
|||
|
_db.Entry(wasteAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = deliveryData.FirstOrDefault(x => x.GHGEvaluateItem == "廢棄物運輸" && x.ActivityIntensity != lca.WasteMaterialTotalOutputKg);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = lca.WasteMaterialTotalOutputKg;
|
|||
|
updateItem.EmissionKg = lca.WasteMaterialTotalOutputKg * 0.235m;
|
|||
|
updateItem.EmissionT = lca.WasteMaterialTotalOutputKg * 0.235m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
var sumWasteQuantity = waste.Sum(x => x.TotalQuantity);
|
|||
|
if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "回收物運輸"))
|
|||
|
{
|
|||
|
var wasteAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 4,
|
|||
|
GHGEvaluateItem = "回收物運輸",
|
|||
|
ActivityIntensity = sumWasteQuantity,
|
|||
|
KgCO2e = 0.235m,
|
|||
|
Unit = "tkm",
|
|||
|
EmissionKg = sumWasteQuantity * 0.235m,
|
|||
|
EmissionT = sumWasteQuantity * 0.235m / 1000,
|
|||
|
};
|
|||
|
result.Add(wasteAssmt);
|
|||
|
_db.Entry(wasteAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = deliveryData.FirstOrDefault(x => x.GHGEvaluateItem == "回收物運輸" && x.ActivityIntensity != sumWasteQuantity);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumWasteQuantity;
|
|||
|
updateItem.EmissionKg = sumWasteQuantity * 0.235m;
|
|||
|
updateItem.EmissionT = sumWasteQuantity * 0.235m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
var sumTkmland = deliveries.Sum(x => x.TotalTkmland);
|
|||
|
var sumTkmsea = deliveries.Sum(x => x.TransportTkmsea);
|
|||
|
if (sumTkmland > 0)
|
|||
|
{
|
|||
|
if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "貨物運輸(陸運)"))
|
|||
|
{
|
|||
|
var landAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 4,
|
|||
|
GHGEvaluateItem = "貨物運輸(陸運)",
|
|||
|
ActivityIntensity = sumTkmland,
|
|||
|
KgCO2e = 0.235m,
|
|||
|
Unit = "tkm",
|
|||
|
EmissionKg = sumTkmland * 0.235m,
|
|||
|
EmissionT = sumTkmland * 0.235m / 1000
|
|||
|
};
|
|||
|
result.Add(landAssmt);
|
|||
|
_db.Entry(landAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = deliveryData.FirstOrDefault(x => x.GHGEvaluateItem == "貨物運輸(陸運)" && x.ActivityIntensity != sumTkmland);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumTkmland;
|
|||
|
updateItem.EmissionKg = sumTkmland * 0.235m;
|
|||
|
updateItem.EmissionT = sumTkmland * 0.235m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (sumTkmsea > 0)
|
|||
|
{
|
|||
|
if (delete || !deliveryData.Any(x => x.GHGEvaluateItem == "貨物運輸(海運)"))
|
|||
|
{
|
|||
|
var seaAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 4,
|
|||
|
GHGEvaluateItem = "貨物運輸(海運)",
|
|||
|
ActivityIntensity = sumTkmsea,
|
|||
|
KgCO2e = 0.0198m,
|
|||
|
Unit = "tkm",
|
|||
|
EmissionKg = sumTkmsea * 0.0198m,
|
|||
|
EmissionT = sumTkmsea * 0.0198m / 1000
|
|||
|
};
|
|||
|
result.Add(seaAssmt);
|
|||
|
_db.Entry(seaAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = deliveryData.FirstOrDefault(x => x.GHGEvaluateItem == "貨物運輸(海運)" && x.ActivityIntensity != sumTkmsea);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = sumTkmsea;
|
|||
|
updateItem.EmissionKg = sumTkmsea * 0.0198m;
|
|||
|
updateItem.EmissionT = sumTkmsea * 0.0198m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新产品使用及废弃资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateProduct(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> productData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in productData)
|
|||
|
{
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// result.AddRange(productData);
|
|||
|
//}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var deliveries = _db.Set<LCARiskAssmtSurveyForm_ItemDelivery>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
var power = _db.Set<LCARiskAssmtSurveyForm_PowerConsumption>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
foreach (var group in power.GroupBy(x => x.ModelType))
|
|||
|
{
|
|||
|
var modelType = group.Key;
|
|||
|
var ghgEvaluateItem = $"產品使用造成溫室氣體排放({modelType})";
|
|||
|
var delivery = deliveries.FirstOrDefault(x => x.ModelName == modelType);
|
|||
|
if (delivery != null)
|
|||
|
{
|
|||
|
var activityIntensity = delivery.DeliveryAmount * group.Sum(x => x.PowerLossPerYear);
|
|||
|
if (delete || !productData.Any(x => x.GHGEvaluateItem == ghgEvaluateItem))
|
|||
|
{
|
|||
|
var seaAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 5,
|
|||
|
GHGEvaluateItem = ghgEvaluateItem,
|
|||
|
ActivityIntensity = activityIntensity,
|
|||
|
KgCO2e = 0.509m,
|
|||
|
Unit = "kgCO2e",
|
|||
|
EmissionKg = activityIntensity * 0.509m,
|
|||
|
EmissionT = activityIntensity * 0.509m / 1000
|
|||
|
};
|
|||
|
result.Add(seaAssmt);
|
|||
|
_db.Entry(seaAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var updateItem = productData.FirstOrDefault(x => x.GHGEvaluateItem == ghgEvaluateItem && x.ActivityIntensity != activityIntensity);
|
|||
|
if (updateItem != null)
|
|||
|
{
|
|||
|
updateItem.ActivityIntensity = activityIntensity;
|
|||
|
updateItem.EmissionKg = activityIntensity * 0.509m;
|
|||
|
updateItem.EmissionT = activityIntensity * 0.509m / 1000;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (delete || !productData.Any(x => x.GHGEvaluateItem == "產品廢棄階段溫室氣體排放(回收)"))
|
|||
|
{
|
|||
|
var productAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 5,
|
|||
|
GHGEvaluateItem = "產品廢棄階段溫室氣體排放(回收)",
|
|||
|
ActivityIntensity = 0,
|
|||
|
KgCO2e = 0.12m,
|
|||
|
Unit = "kg",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(productAssmt);
|
|||
|
_db.Entry(productAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
if (delete || !productData.Any(x => x.GHGEvaluateItem == "產品廢棄階段溫室氣體排放(焚化)"))
|
|||
|
{
|
|||
|
var productAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 5,
|
|||
|
GHGEvaluateItem = "產品廢棄階段溫室氣體排放(焚化)",
|
|||
|
ActivityIntensity = 0,
|
|||
|
KgCO2e = 360m,
|
|||
|
Unit = "噸",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(productAssmt);
|
|||
|
_db.Entry(productAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 更新废弃物处理资料
|
|||
|
/// </summary>
|
|||
|
/// <param name="LCAID"></param>
|
|||
|
/// <param name="delete"></param>
|
|||
|
private IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> UpdateWaste(
|
|||
|
IEnumerable<LCARiskAssmtSurveyForm_LifecycleAssmt> wasteData
|
|||
|
, int LCAID, /*bool update,*/ bool delete)
|
|||
|
{
|
|||
|
var result = new List<LCARiskAssmtSurveyForm_LifecycleAssmt>();
|
|||
|
if (delete)
|
|||
|
{
|
|||
|
foreach (var data in wasteData)
|
|||
|
{
|
|||
|
_db.Entry(data).State = EntityState.Deleted;
|
|||
|
}
|
|||
|
}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// result.AddRange(wasteData);
|
|||
|
//}
|
|||
|
//if (update)
|
|||
|
{
|
|||
|
var waste = _db.Set<LCARiskAssmtSurveyForm_WasteMaterial>().Where(x => x.LCAID == LCAID).ToList();
|
|||
|
foreach (var item in waste)
|
|||
|
{
|
|||
|
if (delete || !wasteData.Any(x => x.GHGEvaluateItem == item.MaterialName))
|
|||
|
{
|
|||
|
var wasteAssmt = new LCARiskAssmtSurveyForm_LifecycleAssmt()
|
|||
|
{
|
|||
|
LCAID = LCAID,
|
|||
|
LifeCycleStage = 6,
|
|||
|
GHGEvaluateItem = item.MaterialName,
|
|||
|
ActivityIntensity = item.TotalQuantity,
|
|||
|
KgCO2e = 0m,
|
|||
|
Unit = "kg",
|
|||
|
EmissionKg = 0m,
|
|||
|
EmissionT = 0m,
|
|||
|
};
|
|||
|
result.Add(wasteAssmt);
|
|||
|
_db.Entry(wasteAssmt).State = EntityState.Added;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
public LCARiskAssmtSurveyForm_LifecycleAssmt Save(LCARiskAssmtSurveyForm_LifecycleAssmt toBeSave)
|
|||
|
{
|
|||
|
var user = GetUserContext();
|
|||
|
|
|||
|
if (!AuthorizedLCAs.Contains(toBeSave.LCAID))
|
|||
|
throw new Exception("not authorized");
|
|||
|
|
|||
|
ThrowExceptionIfDuplicate(toBeSave);
|
|||
|
|
|||
|
var entry = _db.Entry(toBeSave);
|
|||
|
var other = _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>()
|
|||
|
.Where(x => x.LCAID == toBeSave.LCAID && x.ID != toBeSave.ID).ToList();
|
|||
|
var sumEmissionT = other.Sum(x => x.EmissionT);
|
|||
|
|
|||
|
toBeSave.ActivityIntensity = Math.Round(toBeSave.ActivityIntensity, 4);
|
|||
|
toBeSave.KgCO2e = Math.Round(toBeSave.KgCO2e, 10);
|
|||
|
if (toBeSave.ID == 0)
|
|||
|
{
|
|||
|
toBeSave.CreatedBy = user.Id;
|
|||
|
toBeSave.CreatedDate = DateTime.Now;
|
|||
|
entry.State = EntityState.Added;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
toBeSave.ModifiedBy = user.Id;
|
|||
|
toBeSave.ModifiedDate = DateTime.Now;
|
|||
|
entry.State = EntityState.Modified;
|
|||
|
entry.Property(x => x.LCAID).IsModified = false;
|
|||
|
}
|
|||
|
|
|||
|
sumEmissionT += toBeSave.EmissionT;
|
|||
|
|
|||
|
foreach (var data in other)
|
|||
|
{
|
|||
|
data.Percentage = Math.Round((data.EmissionT / sumEmissionT) * 100, 4);
|
|||
|
}
|
|||
|
|
|||
|
_db.SaveChanges();
|
|||
|
|
|||
|
return toBeSave;
|
|||
|
}
|
|||
|
|
|||
|
private void ThrowExceptionIfDuplicate(LCARiskAssmtSurveyForm_LifecycleAssmt toBeSave)
|
|||
|
{
|
|||
|
var qry = _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>().Where(x => x.LCAID == toBeSave.LCAID
|
|||
|
&& x.ID != toBeSave.ID && x.LifeCycleStage == toBeSave.LifeCycleStage
|
|||
|
&& x.GHGEvaluateItem == toBeSave.GHGEvaluateItem);
|
|||
|
if (qry!=null && qry.ToList().Count>0)
|
|||
|
{
|
|||
|
throw new Exception($"同一生命周期,評估項目 {toBeSave.GHGEvaluateItem} 不能重複");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Delete(int ID)
|
|||
|
{
|
|||
|
var entry = _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>().Where(x => x.ID == ID).Single();
|
|||
|
var left = _db.Set<LCARiskAssmtSurveyForm_LifecycleAssmt>().Where(x => x.LCAID == entry.LCAID && x.ID != ID).ToList();
|
|||
|
var LCA = GetLCA(entry.LCAID);
|
|||
|
if (LCA.Status != LCAStatus.New && LCA.Status != LCAStatus.Processing) throw new Exception("Business logic error , should not delete data in this status: " + LCA.Status.ToString());
|
|||
|
|
|||
|
var ToBeDelete = _db.Entry(entry);
|
|||
|
ToBeDelete.State = EntityState.Deleted;
|
|||
|
|
|||
|
if (left.Count > 0)
|
|||
|
{
|
|||
|
UpdatePercentage(left);
|
|||
|
}
|
|||
|
|
|||
|
_db.SaveChanges();
|
|||
|
}
|
|||
|
|
|||
|
public class IntlTravel
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 起點(機場)
|
|||
|
/// </summary>
|
|||
|
public string From { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 中轉站/迄點(機場)
|
|||
|
/// </summary>
|
|||
|
public string To { get; set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 组数
|
|||
|
/// </summary>
|
|||
|
public int Count { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public class Vehicle
|
|||
|
{
|
|||
|
public string FuelType { get; set; }
|
|||
|
|
|||
|
public decimal Scalar { get; set; }
|
|||
|
}
|
|||
|
}
|
|||
|
}
|