|
@@ -121,26 +121,26 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
{
|
|
|
if (session.CustomerId == new Guid("009E603C-79CD-4620-A2B8-D9349C0E8AD8"))
|
|
|
{
|
|
|
- //var preauth_status = JsonConvert.DeserializeObject<ID_ReaderStatus>(_request.data);
|
|
|
- //var report = new
|
|
|
- //{
|
|
|
- // ChargeBoxId = session.ChargeBoxId,
|
|
|
- // ConnectorId = preauth_status.ConnectorId,
|
|
|
- // CreditNo = preauth_status.creditNo,
|
|
|
- // readerStatus = preauth_status.readerStatus,
|
|
|
- // SerialNo = preauth_status.SerialNo,
|
|
|
- // ApprovalNo = preauth_status.VEMData,
|
|
|
- // Timestamp = preauth_status.Timestamp
|
|
|
-
|
|
|
- //};
|
|
|
-
|
|
|
- //var response = await httpClient.Post(GlobalConfig.TCC_API_URL + "preauth_status", new Dictionary<string, string>()
|
|
|
- // {
|
|
|
- // { "PartnerId",session.CustomerId.ToString()}
|
|
|
-
|
|
|
- // }, report, GlobalConfig.TCC_SALTKEY);
|
|
|
-
|
|
|
- //logger.Debug(JsonConvert.SerializeObject(response));
|
|
|
+ var preauth_status = JsonConvert.DeserializeObject<ID_ReaderStatus>(_request.data);
|
|
|
+ var report = new
|
|
|
+ {
|
|
|
+ ChargeBoxId = session.ChargeBoxId,
|
|
|
+ ConnectorId = preauth_status.ConnectorId,
|
|
|
+ CreditNo = preauth_status.creditNo,
|
|
|
+ ReaderStatus = preauth_status.readerStatus,
|
|
|
+ SerialNo = preauth_status.SerialNo,
|
|
|
+ VEMData = preauth_status.VEMData,
|
|
|
+ Timestamp = preauth_status.Timestamp
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ var response = await httpClient.Post(GlobalConfig.TCC_API_URL + "preauth_status", new Dictionary<string, string>()
|
|
|
+ {
|
|
|
+ { "PartnerId",session.CustomerId.ToString()}
|
|
|
+
|
|
|
+ }, report, GlobalConfig.TCC_SALTKEY);
|
|
|
+
|
|
|
+
|
|
|
confirm.status = DataTransferStatus.Accepted;
|
|
|
}
|
|
|
}
|
|
@@ -483,11 +483,11 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
MeterStart = _request.meterStart,
|
|
|
CustomerId = _CustomerId,
|
|
|
StartTime = _request.timestamp.ToUniversalTime(),
|
|
|
- ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
|
|
|
- Fee = !session.IsBilling ? string.Empty : JsonConvert.SerializeObject(session.ChargingPrices) + "|+" + accountBalance + "+" + "&" + session.ParkingFee + "&|" + session.Currency
|
|
|
-
|
|
|
+ ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
|
|
|
};
|
|
|
|
|
|
+ _newTransaction.Fee = !session.IsBilling ? string.Empty : session.BillingMethod == 1 ? JsonConvert.SerializeObject(session.ChargingPrices) : session.ChargingFeebyHour.ToString();
|
|
|
+ _newTransaction.Fee += !session.IsBilling ? string.Empty :"|+" + accountBalance + "+" + "&" + session.ParkingFee + "&|" + session.Currency;
|
|
|
db.TransactionRecord.Add(_newTransaction);
|
|
|
|
|
|
db.SaveChanges();
|
|
@@ -751,11 +751,11 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
List<ChargingPrice> chargingPrices = new List<ChargingPrice>();
|
|
|
var txEnergy = JsonConvert.DeserializeObject<TransactionEnergy>(_confirm.data);
|
|
|
var feedto = db.TransactionRecord.Where(x => x.Id == txEnergy.TxId).Select(x => new { Id = x.Id, ConnectorId = x.ConnectorId, Fee = x.Fee, StopTime = x.StopTime, StartTime = x.StartTime }).FirstOrDefault();
|
|
|
-
|
|
|
+ decimal chargedEnergy = 0m;
|
|
|
if (feedto == null || string.IsNullOrEmpty(feedto.Fee)) return result;
|
|
|
string currency = feedto.Fee.Substring(feedto.Fee.Length - 3);
|
|
|
decimal chargingCost = 0;
|
|
|
- if (feedto.Fee.Length > 10)
|
|
|
+ if (feedto.Fee.Length > 58)
|
|
|
{
|
|
|
chargingPrices = JsonConvert.DeserializeObject<List<ChargingPrice>>(feedto.Fee.Split('|')[0]);
|
|
|
foreach (var item in txEnergy.PeriodEnergy)
|
|
@@ -766,6 +766,7 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
|
|
|
//小數點無條件捨去到第4位
|
|
|
var periodEnergy = (decimal)((int)Decimal.Multiply(item.Value, 10000) / (double)10000);
|
|
|
+ chargedEnergy += periodEnergy;
|
|
|
if (chargingPrices.Count == 1)
|
|
|
{
|
|
|
perfee = Decimal.Multiply(periodEnergy, chargingPrices[0].Fee);
|
|
@@ -810,20 +811,34 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //以小時計費
|
|
|
+ foreach (var item in txEnergy.PeriodEnergy)
|
|
|
+ { //小數點無條件捨去到第4位
|
|
|
+ var periodEnergy = (decimal)((int)Decimal.Multiply(item.Value, 10000) / (double)10000);
|
|
|
+ chargedEnergy += periodEnergy;
|
|
|
+ }
|
|
|
+
|
|
|
+ var fee = decimal.Parse(feedto.Fee.Split('|')[0]);
|
|
|
+ var charging_stoptime = feedto.StopTime == GlobalConfig.DefaultNullTime ? DateTime.Parse(DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm")) : DateTime.Parse(feedto.StopTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
+ var charging_starttime = DateTime.Parse(feedto.StartTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
+ chargingCost = Decimal.Multiply((decimal)charging_stoptime.Subtract(charging_starttime).TotalHours, fee);
|
|
|
+ chargingCost = DollarRounding(chargingCost, session.Currency);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 計算停車費
|
|
|
+ var parkingFee = decimal.Parse(feedto.Fee.Split('&')[1]);
|
|
|
+ var stoptime = feedto.StopTime==GlobalConfig.DefaultNullTime ? DateTime.Parse(DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm")) : DateTime.Parse(feedto.StopTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
+ var starttime = DateTime.Parse(feedto.StartTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
+ var totalHours = stoptime.Subtract(starttime).TotalHours;
|
|
|
+ var parkingCost = Decimal.Multiply((decimal)totalHours, parkingFee);
|
|
|
+ parkingCost = DollarRounding(parkingCost, session.Currency);
|
|
|
|
|
|
if (feedto.StopTime != GlobalConfig.DefaultNullTime)
|
|
|
{
|
|
|
-
|
|
|
- // 計算停車費
|
|
|
- var fee = decimal.Parse(feedto.Fee.Split('&')[1]);
|
|
|
decimal accountBalance = 0;
|
|
|
- var stoptime = DateTime.Parse(feedto.StopTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
- var starttime = DateTime.Parse(feedto.StartTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
decimal.TryParse(feedto.Fee.Split('+')[1], out accountBalance);
|
|
|
- var totalHours = stoptime.Subtract(starttime).TotalHours;
|
|
|
- var parkingCost = Decimal.Multiply((decimal)totalHours, fee);
|
|
|
- parkingCost = DollarRounding(parkingCost, session.Currency);
|
|
|
-
|
|
|
|
|
|
var tx = db.TransactionRecord.Where(x => x.Id == txEnergy.TxId).FirstOrDefault();
|
|
|
if (tx == null)
|
|
@@ -834,15 +849,23 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
if (tx.UploadedtoTTIA) return result;
|
|
|
var startTime = new DateTime(tx.StartTime.Year, tx.StartTime.Month, tx.StartTime.Day, tx.StartTime.Hour, 0, 0);
|
|
|
List<ChargingBill> confirmbill = new List<ChargingBill>();
|
|
|
- receipt = string.Format("({0} )Energy:", bill.Sum(x => x.PeriodEnergy));
|
|
|
-
|
|
|
+ receipt = string.Format("({0} )Energy:", chargedEnergy);
|
|
|
|
|
|
while (startTime < tx.StopTime)
|
|
|
{
|
|
|
if (bill.Count == 1)
|
|
|
{
|
|
|
confirmbill = bill;
|
|
|
- receipt += string.Format("| {0} - {1}:| {2} kWh @ ${3}/kWh=${4}", tx.StartTime.ToString("hh:mm tt", new CultureInfo("en-us")), confirmbill[0].PeriodEnergy.ToString("0.0000"), tx.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), bill[0].Fee, bill[0].Total);
|
|
|
+ receipt += string.Format("| {0} - {1}:| {2} kWh @ ${3}/kWh=${4}", tx.StartTime.ToString("hh:mm tt", new CultureInfo("en-us")), tx.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")),
|
|
|
+ confirmbill[0].PeriodEnergy.ToString("0.0000"), bill[0].Fee, bill[0].Total);
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (bill.Count == 0)
|
|
|
+ {
|
|
|
+ receipt += string.Format("| {0} - {1} @ ${2}/hr=${3}", feedto.StartTime.ToString("hh:mm tt", new CultureInfo("en-us")),
|
|
|
+ feedto.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), feedto.Fee.Split('|')[0], chargingCost);
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
if (bill.Count > 1)
|
|
@@ -879,24 +902,21 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
|
|
|
if (session.CustomerId == new Guid("009E603C-79CD-4620-A2B8-D9349C0E8AD8"))
|
|
|
{
|
|
|
- // if (confirmbill.Count > 1)
|
|
|
- {
|
|
|
- chargingCost = confirmbill.Sum(x => x.Total);
|
|
|
- chargingCost = confirmbill.Sum(x => x.PeriodEnergy) == 0 ? 0 : (chargingCost + parkingCost < 1 ? 1 : chargingCost); //台泥最低一元
|
|
|
- receipt += string.Format("|Total Energy Fee : ${0}", chargingCost);
|
|
|
- }
|
|
|
+ chargingCost = confirmbill.Count > 0 ? confirmbill.Sum(x => x.Total) : chargingCost;
|
|
|
+ chargingCost = chargedEnergy == 0 ? 0 : (chargingCost + parkingCost < 1 ? 1 : chargingCost); //台泥最低一元
|
|
|
+ receipt += string.Format("|Total Energy Fee : ${0}", chargingCost);
|
|
|
+
|
|
|
receipt += string.Format("|Parking Fee: | {0} - {1} @ ${2}/hr=${3}", feedto.StartTime.ToString("hh:mm tt", new CultureInfo("en-us")),
|
|
|
- feedto.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), fee, parkingCost);
|
|
|
+ feedto.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), parkingFee, parkingCost);
|
|
|
tx.Cost = chargingCost + parkingCost;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (confirmbill.Count > 1)
|
|
|
- {
|
|
|
- receipt += string.Format("|Total Energy Fee : ${0}", confirmbill.Sum(x => x.Total));
|
|
|
- }
|
|
|
+ chargingCost = confirmbill.Count > 0 ? confirmbill.Sum(x => x.Total) : chargingCost;
|
|
|
+ receipt += string.Format("|Total Energy Fee : ${0}", chargingCost);
|
|
|
+
|
|
|
receipt += string.Format("|Parking Fee: | {0} - {1} @ ${2}/hr=${3}", feedto.StartTime.ToString("hh:mm tt", new CultureInfo("en-us")),
|
|
|
- feedto.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), fee, parkingCost);
|
|
|
+ feedto.StopTime.ToString("hh:mm tt", new CultureInfo("en-us")), parkingFee, parkingCost);
|
|
|
tx.Cost = chargingCost + parkingCost;
|
|
|
}
|
|
|
|
|
@@ -925,7 +945,7 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
txId = txEnergy.TxId,
|
|
|
description = JsonConvert.SerializeObject(new
|
|
|
{
|
|
|
- chargedEnergy = bill.Sum(x => x.PeriodEnergy),
|
|
|
+ chargedEnergy = chargedEnergy,
|
|
|
chargingFee = chargingCost,
|
|
|
parkTime = (int)stoptime.Subtract(starttime).TotalSeconds,
|
|
|
parkingFee = parkingCost,
|
|
@@ -994,17 +1014,6 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
-
|
|
|
- // 計算停車費
|
|
|
- var fee = decimal.Parse(feedto.Fee.Split('&')[1]);
|
|
|
- decimal accountBalance = 0;
|
|
|
- var stoptime = DateTime.Parse(DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm"));
|
|
|
- var starttime = DateTime.Parse(feedto.StartTime.ToString("yyyy/MM/dd HH:mm"));
|
|
|
- decimal.TryParse(feedto.Fee.Split('+')[1], out accountBalance);
|
|
|
- var totalHours = stoptime.Subtract(starttime).TotalHours;
|
|
|
- var parkingCost = Decimal.Multiply((decimal)totalHours, fee);
|
|
|
- parkingCost = DollarRounding(parkingCost, session.Currency);
|
|
|
-
|
|
|
db.ServerMessage.Add(new ServerMessage()
|
|
|
{
|
|
|
ChargeBoxId = session.ChargeBoxId,
|
|
@@ -1019,11 +1028,9 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
data = JsonConvert.SerializeObject(new
|
|
|
{
|
|
|
txId = txEnergy.TxId,
|
|
|
- //description = string.Format("Connection Fee: $0.00 {0}; Session Fee: ${1} {0}; Occupancy Fee: " +
|
|
|
- //"${2} {0}; Total Cost: ${3} {0}; Account Balance: $0.00 {0}", currency, sum, parkingCost, sum + parkingCost),
|
|
|
description = JsonConvert.SerializeObject(new
|
|
|
{
|
|
|
- chargedEnergy = bill.Sum(x => x.PeriodEnergy),
|
|
|
+ chargedEnergy = chargedEnergy,
|
|
|
chargingFee = chargingCost,
|
|
|
parkTime = (int)stoptime.Subtract(starttime).TotalSeconds,
|
|
|
parkingFee = parkingCost,
|
|
@@ -1083,7 +1090,8 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
ConnectorId = txUserInfo.ConnectorId,
|
|
|
SessionId = txUserInfo.TxId,
|
|
|
SerialNo = txUserInfo.SerialNo,
|
|
|
- StartTime = txUserInfo.StartTime.ToString(GlobalConfig.UTC_DATETIMEFORMAT)
|
|
|
+ StartTime = txUserInfo.StartTime.ToString(GlobalConfig.UTC_DATETIMEFORMAT),
|
|
|
+ VEMData = txUserInfo.VEMData
|
|
|
};
|
|
|
|
|
|
var response = httpClient.Post(GlobalConfig.TCC_API_URL + "start_session", new Dictionary<string, string>()
|