CoreProfileHandler.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Entity;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using EVCB_OCPP.Domain;
  9. using EVCB_OCPP.Domain.Models.Database;
  10. using EVCB_OCPP.Packet.Features;
  11. using EVCB_OCPP.Packet.Messages;
  12. using EVCB_OCPP.Packet.Messages.Core;
  13. using EVCB_OCPP.Packet.Messages.SubTypes;
  14. using EVCB_OCPP.WSServer.Dto;
  15. using Newtonsoft.Json;
  16. using OCPPPackage.Profiles;
  17. using OCPPServer.Protocol;
  18. namespace EVCB_OCPP.WSServer.Message
  19. {
  20. internal partial class ProfileHandler
  21. {
  22. private List<string> idtag_RejecttionList = new List<string>() { "AC5CDC3D", "48C4CBD9257A","3DDC5CAC" };
  23. int counnter = 0;
  24. internal MessageResult ExecuteCoreRequest(Actions action, ClientData session, IRequest request)
  25. {
  26. MessageResult result = new MessageResult() { Success = false };
  27. switch (action)
  28. {
  29. case Actions.BootNotification:
  30. {
  31. BootNotificationRequest _request = request as BootNotificationRequest;
  32. int heartbeat_interval = GlobalConfig.GetHEARTBEAT_INTERVAL();
  33. using (var db = new MainDBContext())
  34. {
  35. var _machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
  36. _machine.ChargeBoxSerialNumber = string.IsNullOrEmpty(_request.chargeBoxSerialNumber) ? string.Empty : _request.chargeBoxSerialNumber;
  37. _machine.ChargePointModel = string.IsNullOrEmpty(_request.chargePointModel) ? string.Empty : _request.chargePointModel;
  38. _machine.ChargePointVendor = string.IsNullOrEmpty(_request.chargePointVendor) ? string.Empty : _request.chargePointVendor;
  39. _machine.FW_CurrentVersion = string.IsNullOrEmpty(_request.firmwareVersion) ? string.Empty : _request.firmwareVersion;
  40. _machine.Iccid = string.IsNullOrEmpty(_request.iccid) ? string.Empty : _request.iccid;
  41. _machine.Imsi = string.IsNullOrEmpty(_request.imsi) ? string.Empty : _request.imsi;
  42. _machine.MeterSerialNumber = string.IsNullOrEmpty(_request.meterSerialNumber) ? string.Empty : _request.meterSerialNumber;
  43. _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
  44. db.SaveChanges();
  45. var configVaule = db.MachineConfigure.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
  46. .Select(x => x.ConfigureSetting).FirstOrDefault();
  47. if (configVaule != null)
  48. {
  49. int.TryParse(configVaule, out heartbeat_interval);
  50. }
  51. }
  52. var confirm = new BootNotificationConfirmation() { currentTime = DateTime.Now, interval = heartbeat_interval, status = Packet.Messages.SubTypes.RegistrationStatus.Accepted };
  53. result.Message = confirm;
  54. result.Success = true;
  55. }
  56. break;
  57. case Actions.StatusNotification:
  58. {
  59. //只保留最新上報狀況
  60. StatusNotificationRequest _request = request as StatusNotificationRequest;
  61. {
  62. List<string> removeIds = new List<string>();
  63. ConnectorErrorStauts _oldStatus = null;
  64. using (var oldDB = new MainDBContext())
  65. {
  66. if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
  67. {
  68. _oldStatus = oldDB.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
  69. && x.ConnectorId == _request.connectorId).Select(x => new ConnectorErrorStauts
  70. {
  71. Status = x.Status,
  72. ChargePointErrorCodeId = x.ChargePointErrorCodeId,
  73. ErrorInfo = x.ErrorInfo,
  74. VendorId = x.VendorId,
  75. VendorErrorCode = x.VendorErrorCode
  76. }).FirstOrDefault();
  77. }
  78. removeIds = oldDB.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
  79. && x.ConnectorId == _request.connectorId).Select(x => x.Id).ToList();
  80. }
  81. using (var db = new MainDBContext())
  82. {
  83. foreach (var id in removeIds)
  84. {
  85. string query = "DELETE FROM [dbo].[ConnectorStatus] WHERE [Id]={0} ";
  86. db.Database.ExecuteSqlCommand(query, id);
  87. }
  88. db.SaveChanges();
  89. var _currentStatus = new Domain.Models.Database.ConnectorStatus()
  90. {
  91. ChargeBoxId = session.ChargeBoxId,
  92. ConnectorId = (byte)_request.connectorId,
  93. CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
  94. Status = (int)_request.status,
  95. ChargePointErrorCodeId = (int)_request.errorCode,
  96. ErrorInfo = _request.info,
  97. VendorId = _request.vendorId,
  98. VendorErrorCode = _request.vendorErrorCode,
  99. Id = Guid.NewGuid().ToString()
  100. };
  101. db.ConnectorStatus.Add(_currentStatus);
  102. if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
  103. {
  104. db.MachineError.Add(new MachineError()
  105. {
  106. ConnectorId = (byte)_request.connectorId,
  107. CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
  108. Status = (int)_request.status,
  109. ChargeBoxId = session.ChargeBoxId,
  110. ErrorCodeId = (int)_request.errorCode,
  111. ErrorInfo = _request.info,
  112. PreStatus = _oldStatus.Status,
  113. VendorErrorCode = _request.vendorErrorCode,
  114. VendorId = _request.vendorId
  115. });
  116. }
  117. db.SaveChanges();
  118. }
  119. }
  120. var confirm = new StatusNotificationConfirmation() { };
  121. result.Message = confirm;
  122. result.Success = true;
  123. }
  124. break;
  125. case Actions.Heartbeat:
  126. {
  127. using (var db = new MainDBContext())
  128. {
  129. var machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
  130. if (machine != null)
  131. {
  132. db.Configuration.AutoDetectChangesEnabled = false;
  133. db.Configuration.ValidateOnSaveEnabled = false;
  134. db.Machine.Attach(machine);
  135. machine.HeartbeatUpdatedOn = DateTime.Now;
  136. db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
  137. db.SaveChanges();
  138. }
  139. var confirm = new HeartbeatConfirmation() { currentTime = DateTime.Now };
  140. result.Message = confirm;
  141. result.Success = true;
  142. }
  143. }
  144. break;
  145. case Actions.MeterValues:
  146. {
  147. MeterValuesRequest _request = request as MeterValuesRequest;
  148. if (_request.meterValue.Count > 0)
  149. {
  150. using (var db = new MeterValueDBContext())
  151. {
  152. foreach (var item in _request.meterValue)
  153. {
  154. foreach (var sampleVaule in item.sampledValue)
  155. {
  156. decimal value = Convert.ToDecimal(sampleVaule.value);
  157. string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
  158. "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
  159. List<SqlParameter> parameter = new List<SqlParameter>
  160. {
  161. new SqlParameter("ChargeBoxId",session.ChargeBoxId),
  162. new SqlParameter("ConnectorId", (byte)_request.connectorId),
  163. new SqlParameter("Value",value),
  164. new SqlParameter("CreatedOn",item.timestamp),
  165. new SqlParameter("ContextId",sampleVaule.context.HasValue ? (int)sampleVaule.context : 0),
  166. new SqlParameter("FormatId",sampleVaule.format.HasValue ? (int)sampleVaule.format : 0),
  167. new SqlParameter("MeasurandId",sampleVaule.measurand.HasValue ? (int)sampleVaule.measurand : 0),
  168. new SqlParameter("PhaseId",sampleVaule.phase.HasValue ? (int)sampleVaule.phase : 0),
  169. new SqlParameter("LocationId",sampleVaule.location.HasValue ? (int)sampleVaule.location : 0),
  170. new SqlParameter("UnitId",sampleVaule.unit.HasValue ? (int)sampleVaule.unit : 0),
  171. new SqlParameter("TransactionId",_request.transactionId.HasValue?_request.transactionId:-1),
  172. };
  173. db.Database.ExecuteSqlCommand(sp, parameter.ToArray());
  174. }
  175. }
  176. }
  177. }
  178. var confirm = new MeterValuesConfirmation() { };
  179. result.Message = confirm;
  180. result.Success = true;
  181. }
  182. break;
  183. case Actions.StartTransaction:
  184. {
  185. StartTransactionRequest _request = request as StartTransactionRequest;
  186. long _pastTime = DateTimeOffset.Now.AddYears(-20).ToUnixTimeSeconds();
  187. int _tranId = (int)(_pastTime % 100000000) * 10 + _request.connectorId;
  188. //需處理StopTransactionOnInvalidId 情境,時間若和當前時間差距10秒,發動Authorize詢問後在回覆
  189. using (var db = new MainDBContext())
  190. {
  191. var _CustomerId = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).Include(x => x.Customer).
  192. Select(x => x.CustomerId).FirstOrDefault();
  193. db.TransactionRecord.Add(new TransactionRecord()
  194. {
  195. ChargeBoxId = session.ChargeBoxId,
  196. ConnectorId = (byte)_request.connectorId,
  197. CreatedOn = DateTime.Now,
  198. StartIdTag = _request.idTag,
  199. MeterStart = _request.meterStart,
  200. CustomerId = _CustomerId,
  201. StartTime = _request.timestamp,
  202. ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
  203. TransactionId = _tranId
  204. });
  205. db.SaveChanges();
  206. }
  207. var confirm = new StartTransactionConfirmation()
  208. {
  209. idTagInfo = new Packet.Messages.SubTypes.IdTagInfo()
  210. {
  211. status = idtag_RejecttionList.Contains(_request.idTag) ? AuthorizationStatus.Invalid : AuthorizationStatus.Accepted
  212. },
  213. transactionId = _tranId
  214. };
  215. result.Message = confirm;
  216. result.Success = true;
  217. }
  218. break;
  219. case Actions.StopTransaction:
  220. {
  221. StopTransactionRequest _request = request as StopTransactionRequest;
  222. List<TransactionDataRecord> _TransactionDatas = new List<TransactionDataRecord>();
  223. if (_request.transactionData != null)
  224. {
  225. if (_request.transactionData.Count > 0)
  226. {
  227. foreach (var item in _request.transactionData)
  228. {
  229. foreach (var sampleVaule in item.sampledValue)
  230. {
  231. _TransactionDatas.Add(new TransactionDataRecord()
  232. {
  233. ChargeBoxId = session.ChargeBoxId,
  234. MeasuredOn = item.timestamp,
  235. TransactionId = _request.transactionId,
  236. ContextId = sampleVaule.context.HasValue ? (int)sampleVaule.context : 0,
  237. FormatId = sampleVaule.format.HasValue ? (int)sampleVaule.format : 0,
  238. LocationId = sampleVaule.location.HasValue ? (int)sampleVaule.location : 0,
  239. MeasurandId = sampleVaule.measurand.HasValue ? (int)sampleVaule.measurand : 0,
  240. PhaseId = sampleVaule.phase.HasValue ? (int)sampleVaule.phase : 0,
  241. UnitId = sampleVaule.unit.HasValue ? (int)sampleVaule.unit : 0,
  242. Value = sampleVaule.value
  243. });
  244. }
  245. }
  246. }
  247. }
  248. using (var db = new MainDBContext())
  249. {
  250. var transaction = db.TransactionRecord.Where(x => x.TransactionId == _request.transactionId
  251. && x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
  252. if (transaction != null)
  253. {
  254. transaction.MeterStop = _request.meterStop;
  255. transaction.StopTime = _request.timestamp;
  256. transaction.StopReasonId = _request.reason.HasValue ? (int)_request.reason.Value : 0;
  257. transaction.StopIdTag = _request.idTag;
  258. if (_TransactionDatas.Count > 0)
  259. {
  260. _TransactionDatas.ForEach(x => x.ConnectorId = (byte)transaction.ConnectorId);
  261. }
  262. db.SaveChanges();
  263. var confirm = new StopTransactionConfirmation()
  264. {
  265. idTagInfo = new Packet.Messages.SubTypes.IdTagInfo()
  266. {
  267. status = Packet.Messages.SubTypes.AuthorizationStatus.Accepted
  268. }
  269. };
  270. result.Message = confirm;
  271. result.Success = true;
  272. }
  273. else
  274. {
  275. result.Exception = new Exception("Can't find transactionId " + _request.transactionId);
  276. }
  277. }
  278. }
  279. break;
  280. case Actions.Authorize:
  281. {
  282. AuthorizeRequest _request = request as AuthorizeRequest;
  283. var confirm = new AuthorizeConfirmation()
  284. {
  285. idTagInfo = new Packet.Messages.SubTypes.IdTagInfo()
  286. {
  287. status = idtag_RejecttionList.Contains(_request.idTag) ? AuthorizationStatus.Invalid : AuthorizationStatus.Accepted
  288. }
  289. };
  290. result.Message = confirm;
  291. result.Success = true;
  292. }
  293. break;
  294. default:
  295. {
  296. Console.WriteLine(string.Format("Not Implement {0} Logic", request.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
  297. }
  298. break;
  299. }
  300. return result;
  301. }
  302. internal MessageResult ExecuteCoreConfirm(Actions action, ClientData session, IConfirmation confirm, string requestId)
  303. {
  304. MessageResult result = new MessageResult() { Success = true };
  305. switch (action)
  306. {
  307. case Actions.ChangeAvailability:
  308. {
  309. ChangeAvailabilityConfirmation _confirm = confirm as ChangeAvailabilityConfirmation;
  310. ChangeAvailabilityRequest _request = _confirm.GetRequest() as ChangeAvailabilityRequest;
  311. using (var db = new MainDBContext())
  312. {
  313. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  314. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  315. if (operation != null)
  316. {
  317. operation.FinishedOn = DateTime.Now;
  318. operation.Status = 1;//電樁有回覆
  319. operation.EVSE_Status = (int)_confirm.status;
  320. operation.EVSE_Value = _confirm.status.ToString();
  321. db.SaveChanges();
  322. }
  323. }
  324. }
  325. break;
  326. case Actions.ClearCache:
  327. {
  328. ClearCacheConfirmation _confirm = confirm as ClearCacheConfirmation;
  329. ClearCacheRequest _request = _confirm.GetRequest() as ClearCacheRequest;
  330. using (var db = new MainDBContext())
  331. {
  332. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  333. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  334. if (operation != null)
  335. {
  336. operation.FinishedOn = DateTime.Now;
  337. operation.Status = 1;//電樁有回覆
  338. operation.EVSE_Status = (int)_confirm.status;
  339. operation.EVSE_Value = _confirm.status.ToString();
  340. db.SaveChanges();
  341. }
  342. }
  343. }
  344. break;
  345. case Actions.RemoteStartTransaction:
  346. {
  347. RemoteStartTransactionConfirmation _confirm = confirm as RemoteStartTransactionConfirmation;
  348. RemoteStartTransactionRequest _request = _confirm.GetRequest() as RemoteStartTransactionRequest;
  349. using (var db = new MainDBContext())
  350. {
  351. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  352. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  353. if (operation != null)
  354. {
  355. operation.FinishedOn = DateTime.Now;
  356. operation.Status = 1;//電樁有回覆
  357. operation.EVSE_Status = (int)_confirm.status;
  358. operation.EVSE_Value = _confirm.status.ToString();
  359. db.SaveChanges();
  360. }
  361. }
  362. }
  363. break;
  364. case Actions.RemoteStopTransaction:
  365. {
  366. RemoteStopTransactionConfirmation _confirm = confirm as RemoteStopTransactionConfirmation;
  367. RemoteStopTransactionRequest _request = _confirm.GetRequest() as RemoteStopTransactionRequest;
  368. using (var db = new MainDBContext())
  369. {
  370. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  371. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  372. if (operation != null)
  373. {
  374. operation.FinishedOn = DateTime.Now;
  375. operation.Status = 1;//電樁有回覆
  376. operation.EVSE_Status = (int)_confirm.status;
  377. operation.EVSE_Value = _confirm.status.ToString();
  378. db.SaveChanges();
  379. }
  380. }
  381. }
  382. break;
  383. case Actions.Reset:
  384. {
  385. ResetConfirmation _confirm = confirm as ResetConfirmation;
  386. ResetRequest _request = _confirm.GetRequest() as ResetRequest;
  387. using (var db = new MainDBContext())
  388. {
  389. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  390. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  391. if (operation != null)
  392. {
  393. operation.FinishedOn = DateTime.Now;
  394. operation.Status = 1;//電樁有回覆
  395. operation.EVSE_Status = (int)_confirm.status;
  396. operation.EVSE_Value = _confirm.status.ToString();
  397. db.SaveChanges();
  398. }
  399. }
  400. }
  401. break;
  402. case Actions.ChangeConfiguration:
  403. {
  404. ChangeConfigurationConfirmation _confirm = confirm as ChangeConfigurationConfirmation;
  405. ChangeConfigurationRequest _request = _confirm.GetRequest() as ChangeConfigurationRequest;
  406. using (var db = new MainDBContext())
  407. {
  408. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  409. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  410. if (operation != null)
  411. {
  412. operation.FinishedOn = DateTime.Now;
  413. operation.Status = 1;//電樁有回覆
  414. operation.EVSE_Status = (int)_confirm.status;
  415. operation.EVSE_Value = _confirm.status.ToString();
  416. }
  417. if (_confirm.status == Packet.Messages.SubTypes.ConfigurationStatus.Accepted || _confirm.status == Packet.Messages.SubTypes.ConfigurationStatus.RebootRequired)
  418. {
  419. var configure = db.MachineConfigure.Where(x => x.ChargeBoxId == session.ChargeBoxId).ToList();
  420. var foundConfig = configure.Find(x => x.ConfigureName == _request.key);
  421. if (foundConfig != null)
  422. {
  423. foundConfig.ReadOnly = false;
  424. foundConfig.ConfigureSetting = _request.value;
  425. }
  426. else
  427. {
  428. db.MachineConfigure.Add(new MachineConfigure()
  429. {
  430. ChargeBoxId = session.ChargeBoxId,
  431. ConfigureName = _request.key,
  432. ReadOnly = false,
  433. ConfigureSetting = _request.value
  434. });
  435. }
  436. }
  437. db.SaveChanges();
  438. }
  439. }
  440. break;
  441. case Actions.GetConfiguration:
  442. {
  443. GetConfigurationConfirmation _confirm = confirm as GetConfigurationConfirmation;
  444. GetConfigurationRequest _request = _confirm.GetRequest() as GetConfigurationRequest;
  445. using (var db = new MainDBContext())
  446. {
  447. var configure = db.MachineConfigure.Where(x => x.ChargeBoxId == session.ChargeBoxId).ToList();
  448. if (_confirm.configurationKey != null)
  449. {
  450. foreach (var item in _confirm.configurationKey)
  451. {
  452. var foundConfig = configure.Find(x => x.ConfigureName == item.key);
  453. if (foundConfig != null)
  454. {
  455. foundConfig.ReadOnly = item.IsReadOnly;
  456. foundConfig.ConfigureSetting = item.value;
  457. }
  458. else
  459. {
  460. db.MachineConfigure.Add(new MachineConfigure()
  461. {
  462. ChargeBoxId = session.ChargeBoxId,
  463. ConfigureName = item.key,
  464. ReadOnly = item.IsReadOnly,
  465. ConfigureSetting = item.value,
  466. Exists=true
  467. });
  468. }
  469. }
  470. }
  471. if (_confirm.unknownKey != null)
  472. {
  473. foreach (var item in _confirm.unknownKey)
  474. {
  475. var foundConfig = configure.Find(x => x.ConfigureName == item);
  476. if (foundConfig != null)
  477. {
  478. foundConfig.ReadOnly = true;
  479. foundConfig.ConfigureSetting = string.Empty;
  480. foundConfig.Exists = false;
  481. }
  482. else
  483. {
  484. db.MachineConfigure.Add(new MachineConfigure()
  485. {
  486. ChargeBoxId = session.ChargeBoxId,
  487. ConfigureName = item
  488. });
  489. }
  490. }
  491. }
  492. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  493. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  494. if (operation != null)
  495. {
  496. operation.FinishedOn = DateTime.Now;
  497. operation.Status = 1;//電樁有回覆
  498. operation.EVSE_Status = 1;
  499. operation.EVSE_Value = JsonConvert.SerializeObject(_confirm.configurationKey, Formatting.None);
  500. }
  501. db.SaveChanges();
  502. }
  503. }
  504. break;
  505. default:
  506. {
  507. Console.WriteLine(string.Format("Not Implement {0} Logic", confirm.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
  508. }
  509. break;
  510. }
  511. return result;
  512. }
  513. internal MessageResult ReceivedCoreError(Actions action, string errorMsg, ClientData session, string requestId)
  514. {
  515. MessageResult result = new MessageResult() { Success = true };
  516. switch (action)
  517. {
  518. case Actions.ChangeAvailability:
  519. case Actions.ChangeConfiguration:
  520. case Actions.ClearCache:
  521. case Actions.RemoteStartTransaction:
  522. case Actions.RemoteStopTransaction:
  523. case Actions.Reset:
  524. case Actions.GetConfiguration:
  525. {
  526. using (var db = new MainDBContext())
  527. {
  528. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  529. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  530. if (operation != null)
  531. {
  532. operation.FinishedOn = DateTime.Now;
  533. operation.Status = 1;//電樁有回覆
  534. operation.EVSE_Status = (int)255;//錯誤
  535. operation.EVSE_Value = errorMsg;
  536. db.SaveChanges();
  537. }
  538. }
  539. }
  540. break;
  541. default:
  542. {
  543. Console.WriteLine(string.Format("Not Implement {0} Logic", action));
  544. }
  545. break;
  546. }
  547. return result;
  548. }
  549. }
  550. }