Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

627 lines
32KB

  1. using HealthMonitor.Common.helper;
  2. using HealthMonitor.Model.Config;
  3. using HealthMonitor.Service.Resolver;
  4. using Microsoft.Extensions.Logging;
  5. using Microsoft.Extensions.Options;
  6. using Newtonsoft.Json.Linq;
  7. using Newtonsoft.Json;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using HealthMonitor.Model.Service;
  14. using TelpoDataService.Util.Entities.GpsCard;
  15. using TelpoDataService.Util;
  16. using TelpoDataService.Util.Clients;
  17. using TelpoDataService.Util.Models;
  18. using TelpoDataService.Util.QueryObjects;
  19. using HealthMonitor.Service.Cache;
  20. using HealthMonitor.Model.Cache;
  21. namespace HealthMonitor.Service.Biz
  22. {
  23. public class IotWebApiService
  24. {
  25. private readonly ServiceConfig _configService;
  26. private readonly ILogger<IotWebApiService> _logger;
  27. private readonly PersonCacheManager _personCacheMgr;
  28. private readonly HttpHelper _httpHelper = default!;
  29. private readonly GpsCardAccessorClient<GpsPerson> _gpsPersonApiClient;
  30. public IotWebApiService(ILogger<IotWebApiService> logger, HttpHelper httpHelper, GpsCardAccessorClient<GpsPerson> gpsPersonApiClient, IOptions<ServiceConfig> optConfigService, PersonCacheManager personCacheMgr)
  31. {
  32. _configService = optConfigService.Value;
  33. _httpHelper=httpHelper;
  34. _logger = logger;
  35. _personCacheMgr = personCacheMgr;
  36. _gpsPersonApiClient = gpsPersonApiClient;
  37. }
  38. /// <summary>
  39. /// 平台下发血压标定参数
  40. /// </summary>
  41. /// <param name="bpsCalibrationConfig"></param>
  42. /// <returns></returns>
  43. public async Task<bool> SetBloodPressCalibrationConfigAsync(BloodPressCalibrationConfigModel bpsCalibrationConfig)
  44. {
  45. #if DEBUG
  46. var flag = true;
  47. #else
  48. //systolicCalibrationValue = 0, //收缩压标定值,值为0 表示不生效
  49. //diastolicCalibrationValue 0, //舒张压标定值,值为0表示不生效
  50. //systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效
  51. //diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效
  52. var flag = false;
  53. try
  54. {
  55. var url = $"{_configService.IotWebApiUrl}Command/SetBloodPressCalibrationConfig";
  56. List<KeyValuePair<string, string>> headers = new()
  57. {
  58. new KeyValuePair<string, string>("AuthKey", "key1")
  59. };
  60. var res = await _httpHelper.HttpToPostAsync(url, bpsCalibrationConfig, headers).ConfigureAwait(false);
  61. _logger.LogInformation($"向{bpsCalibrationConfig.Imei}下发增量值数据:{JsonConvert.SerializeObject(bpsCalibrationConfig)},响应:{res}");
  62. var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  63. flag= resJToken?["message"]?.ToString().Equals("ok") ?? false;
  64. }
  65. catch (Exception ex)
  66. {
  67. _logger.LogError($"{nameof(SetBloodPressCalibrationConfigAsync)} 下发血压增量值异常:{ex.Message}, {ex.StackTrace}");
  68. }
  69. #endif
  70. return flag;
  71. }
  72. public async Task<BloodPressCalibrationConfigModelReponse> SetBloodPressCalibrationConfig2Async(BloodPressCalibrationConfigModel bpsCalibrationConfig)
  73. {
  74. BloodPressCalibrationConfigModelReponse response = new BloodPressCalibrationConfigModelReponse();
  75. response.Flag = false;
  76. response.Message = string.Empty;
  77. #if DEBUG
  78. //var flag = true;
  79. response.Flag=true;
  80. #else
  81. //systolicCalibrationValue = 0, //收缩压标定值,值为0 表示不生效
  82. //diastolicCalibrationValue 0, //舒张压标定值,值为0表示不生效
  83. //systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效
  84. //diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效
  85. // var flag = false;
  86. try
  87. {
  88. var url = $"{_configService.IotWebApiUrl}Command/SetBloodPressCalibrationConfig";
  89. List<KeyValuePair<string, string>> headers = new()
  90. {
  91. new KeyValuePair<string, string>("AuthKey", "key1")
  92. };
  93. var res = await _httpHelper.HttpToPostAsync(url, bpsCalibrationConfig, headers).ConfigureAwait(false);
  94. _logger.LogInformation($"向{bpsCalibrationConfig.Imei}下发增量值数据:{JsonConvert.SerializeObject(bpsCalibrationConfig)},响应:{res}");
  95. var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  96. //response.Flag= resJToken?["message"]?.ToString().Equals("ok") ?? false;
  97. response.Flag = Convert.ToBoolean(resJToken?["succeed"]?.ToString());
  98. if (!response.Flag)
  99. {
  100. response.Message = resJToken?["message"]?.ToString()!;
  101. }
  102. }
  103. catch (Exception ex)
  104. {
  105. _logger.LogError($"{nameof(SetBloodPressCalibrationConfigAsync)} 下发血压增量值异常:{ex.Message}, {ex.StackTrace}");
  106. }
  107. #endif
  108. return response;
  109. }
  110. /** 取消
  111. /// <summary>
  112. /// 更新 gps_person remark和缓存
  113. /// </summary>
  114. /// <param name="imei"></param>
  115. /// <param name="systolicRefValue"></param>
  116. /// <param name="diastolicRefValue"></param>
  117. /// <returns></returns>
  118. public async Task<bool> UpdatePersonRemarksAsync(string imei,int systolicRefValue,int diastolicRefValue)
  119. {
  120. var flag = false;
  121. try
  122. {
  123. GeneralParam condition = new ()
  124. {
  125. Filters = new List<QueryFilterCondition> {
  126. new QueryFilterCondition {
  127. Key=nameof(GpsDevice.Serialno),
  128. Value=imei,
  129. Operator= QueryOperatorEnum.Equal,
  130. ValueType=QueryValueTypeEnum.String
  131. }
  132. },
  133. OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  134. };
  135. var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  136. //// 若remark为空,更新person remark字段
  137. //if (string.IsNullOrWhiteSpace(person?.Remarks))
  138. //{
  139. // var newRemarkData = new
  140. // {
  141. // imei,
  142. // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  143. // commandValue = new
  144. // {
  145. // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  146. // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  147. // systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效
  148. // diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效
  149. // }
  150. // };
  151. // person!.Remarks = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|";
  152. // await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  153. // _logger.LogInformation($"更新Person remarks字段|{person.Remarks}");
  154. // // 更新缓存
  155. // var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}";
  156. // List<KeyValuePair<string, string>> headers = new()
  157. // {
  158. // new KeyValuePair<string, string>("AuthKey", "key1")
  159. // };
  160. // var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false);
  161. // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)},响应:{res}");
  162. // var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  163. // flag = resJToken?["message"]?.ToString().Equals("ok") ?? false;
  164. //}
  165. var newRemarkData = new
  166. {
  167. imei,
  168. time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  169. commandValue = new
  170. {
  171. systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  172. diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  173. systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效
  174. diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效
  175. }
  176. };
  177. person!.Remarks = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|";
  178. await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  179. _logger.LogInformation($"更新Person remarks字段|{person.Remarks}");
  180. // 更新缓存
  181. var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}";
  182. List<KeyValuePair<string, string>> headers = new()
  183. {
  184. new KeyValuePair<string, string>("AuthKey", "key1")
  185. };
  186. var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false);
  187. _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)},响应:{res}");
  188. var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  189. flag = resJToken?["message"]?.ToString().Equals("ok") ?? false;
  190. }
  191. catch (Exception ex)
  192. {
  193. _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} 更新个人信息异常:{ex.Message}, {ex.StackTrace}");
  194. }
  195. return flag;
  196. }
  197. */
  198. ///// <summary>
  199. ///// 初次开通更新 gps_person remark和对应的缓存
  200. ///// </summary>
  201. ///// <param name="imei"></param>
  202. ///// <param name="systolicRefValue"></param>
  203. ///// <param name="diastolicRefValue"></param>
  204. ///// <param name="systolicIncValue"></param>
  205. ///// <param name="diastolicIncValue"></param>
  206. ///// <returns></returns>
  207. //public async Task<bool> UpdatePersonRemarksAsync0(string imei, int systolicRefValue, int diastolicRefValue,int systolicIncValue,int diastolicIncValue)
  208. //{
  209. // var flag = false;
  210. // try
  211. // {
  212. // GeneralParam condition = new()
  213. // {
  214. // Filters = new List<QueryFilterCondition> {
  215. // new QueryFilterCondition {
  216. // Key=nameof(GpsDevice.Serialno),
  217. // Value=imei,
  218. // Operator= QueryOperatorEnum.Equal,
  219. // ValueType=QueryValueTypeEnum.String
  220. // }
  221. // },
  222. // OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  223. // };
  224. // var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  225. // // 若remark为空,更新person remark字段
  226. // if (string.IsNullOrWhiteSpace(person?.Remarks))
  227. // {
  228. // var newRemarkData = new
  229. // {
  230. // imei,
  231. // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  232. // commandValue = new
  233. // {
  234. // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  235. // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  236. // systolicIncValue, //收缩压显示增量,值为0 表示不生效
  237. // diastolicIncValue //舒张压显示增量,值为0 表示不生效
  238. // }
  239. // };
  240. // person!.Remarks = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|";
  241. // await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  242. // _logger.LogInformation($"更新Person remarks字段|{person.Remarks}");
  243. // // 更新缓存
  244. // var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false);
  245. // if (personCache != null)
  246. // {
  247. // //personCache.Person.Remarks = person!.Remarks;
  248. // personCache["person"]!["remarks"] = person!.Remarks;
  249. // bool cacheFlag= await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei);
  250. // // flag = true;
  251. // if (cacheFlag)
  252. // {
  253. // flag = true;
  254. // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}");
  255. // }
  256. // else
  257. // {
  258. // flag = false;
  259. // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}");
  260. // }
  261. // }
  262. // //var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}";
  263. // //List<KeyValuePair<string, string>> headers = new()
  264. // //{
  265. // // new KeyValuePair<string, string>("AuthKey", "key1")
  266. // //};
  267. // //var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false);
  268. // //_logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)},响应:{res}");
  269. // //var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  270. // //flag = resJToken?["message"]?.ToString().Equals("ok") ?? false;
  271. // }
  272. // }
  273. // catch (Exception ex)
  274. // {
  275. // _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} 更新个人信息异常:{ex.Message}, {ex.StackTrace}");
  276. // }
  277. // return flag;
  278. //}
  279. /**
  280. /// <summary>
  281. /// 更新 gps_person remark缓存和数据库
  282. /// </summary>
  283. /// <param name="imei"></param>
  284. /// <param name="systolicRefValue"></param>
  285. /// <param name="diastolicRefValue"></param>
  286. /// <param name="systolicIncValue"></param>
  287. /// <param name="diastolicIncValue"></param>
  288. /// <param name="isInitRemakers">是否初始化,即清空remakers</param>
  289. /// <returns></returns>
  290. public async Task<bool> UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue, int systolicIncValue, int diastolicIncValue, bool isInitRemakers=false)
  291. {
  292. var flag = false;
  293. try
  294. {
  295. // 保证实时性,先更新缓存,再更新数据库
  296. var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false);
  297. if (personCache == null)
  298. {
  299. _logger.LogInformation($"{imei} -- Person remarks数据异常,检查缓存和数据库");
  300. }
  301. else if (string.IsNullOrWhiteSpace(personCache["person"]!["remarks"]!.ToString()))
  302. {
  303. var newRemarkData = new
  304. {
  305. imei,
  306. time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  307. commandValue = new
  308. {
  309. systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  310. diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  311. systolicIncValue, //收缩压显示增量,值为0 表示不生效
  312. diastolicIncValue //舒张压显示增量,值为0 表示不生效
  313. }
  314. };
  315. var newRemarkStr = isInitRemakers ? string.Empty:$"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|";
  316. personCache["person"]!["remarks"] = newRemarkStr;
  317. bool cacheFlag = await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei);
  318. if (cacheFlag)
  319. {
  320. GeneralParam condition = new()
  321. {
  322. Filters = new List<QueryFilterCondition> {
  323. new QueryFilterCondition {
  324. Key=nameof(GpsDevice.Serialno),
  325. Value=imei,
  326. Operator= QueryOperatorEnum.Equal,
  327. ValueType=QueryValueTypeEnum.String
  328. }
  329. },
  330. OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  331. };
  332. _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}");
  333. // 读取数据库
  334. var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  335. // 更新字段
  336. person!.Remarks = newRemarkStr;
  337. await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  338. _logger.LogInformation($"{imei} 更新Person remarks字段|{person.Remarks}");
  339. }
  340. else
  341. {
  342. _logger.LogInformation($"{imei} 更新缓存和数据库{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}");
  343. }
  344. flag = cacheFlag;
  345. }
  346. }
  347. catch (Exception ex)
  348. {
  349. _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} {imei}--更新个人信息异常:{ex.Message}, {ex.StackTrace}");
  350. }
  351. return flag;
  352. }
  353. */
  354. /// <summary>
  355. ///// 更新 gps_person remark缓存和数据库
  356. ///// </summary>
  357. ///// <param name="imei"></param>
  358. ///// <param name="systolicRefValue"></param>
  359. ///// <param name="diastolicRefValue"></param>
  360. ///// <param name="systolicIncValue"></param>
  361. ///// <param name="diastolicIncValue"></param>
  362. ///// <param name="remarks"></param>
  363. ///// <returns></returns>
  364. //public async Task<bool> UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue, int systolicIncValue, int diastolicIncValue, string remarks= "is_blood_press")
  365. //{
  366. // var flag = false;
  367. // try
  368. // {
  369. // // 保证实时性,先更新缓存,再更新数据库
  370. // var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false);
  371. // if (personCache == null)
  372. // {
  373. // _logger.LogInformation($"{imei} -- Person remarks数据异常,检查缓存和数据库");
  374. // }
  375. // else if (string.IsNullOrWhiteSpace(personCache["person"]!["remarks"]!.ToString()))
  376. // {
  377. // var newRemarkData = new
  378. // {
  379. // imei,
  380. // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  381. // commandValue = new
  382. // {
  383. // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  384. // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  385. // systolicIncValue, //收缩压显示增量,值为0 表示不生效
  386. // diastolicIncValue //舒张压显示增量,值为0 表示不生效
  387. // }
  388. // };
  389. // var newRemarkStr = $"{remarks}:{JsonConvert.SerializeObject(newRemarkData)}|";
  390. // personCache["person"]!["remarks"] = newRemarkStr;
  391. // bool cacheFlag = await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei);
  392. // if (cacheFlag)
  393. // {
  394. // GeneralParam condition = new()
  395. // {
  396. // Filters = new List<QueryFilterCondition> {
  397. // new QueryFilterCondition {
  398. // Key=nameof(GpsDevice.Serialno),
  399. // Value=imei,
  400. // Operator= QueryOperatorEnum.Equal,
  401. // ValueType=QueryValueTypeEnum.String
  402. // }
  403. // },
  404. // OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  405. // };
  406. // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}");
  407. // // 读取数据库
  408. // var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  409. // // 更新字段
  410. // person!.Remarks = newRemarkStr;
  411. // await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  412. // _logger.LogInformation($"{imei} 更新Person remarks字段|{person.Remarks}");
  413. // }
  414. // else
  415. // {
  416. // _logger.LogInformation($"{imei} 更新缓存和数据库{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}");
  417. // }
  418. // flag = cacheFlag;
  419. // }
  420. // }
  421. // catch (Exception ex)
  422. // {
  423. // _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} {imei}--更新个人信息异常:{ex.Message}, {ex.StackTrace}");
  424. // }
  425. // return flag;
  426. //}
  427. /// 更新 gps_person remark缓存和数据库
  428. /// </summary>
  429. /// <param name="imei"></param>
  430. /// <param name="systolicRefValue"></param>
  431. /// <param name="diastolicRefValue"></param>
  432. /// <param name="systolicIncValue"></param>
  433. /// <param name="diastolicIncValue"></param>
  434. /// <param name="remarks"></param>
  435. /// <returns></returns>
  436. public async Task<bool> UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue, int systolicIncValue, int diastolicIncValue, string remarks = "is_blood_press")
  437. {
  438. var flag = false;
  439. try
  440. {
  441. // 保证实时性,先更新缓存,再更新数据库
  442. var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false);
  443. if (personCache == null)
  444. {
  445. _logger.LogInformation($"{imei} -- Person remarks数据异常,检查缓存和数据库");
  446. }
  447. else
  448. {
  449. var newRemarkData = new
  450. {
  451. imei,
  452. time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  453. commandValue = new
  454. {
  455. systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  456. diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  457. systolicIncValue, //收缩压显示增量,值为0 表示不生效
  458. diastolicIncValue //舒张压显示增量,值为0 表示不生效
  459. }
  460. };
  461. var newRemarkStr = $"{remarks}:{JsonConvert.SerializeObject(newRemarkData)}|";
  462. personCache["person"]!["remarks"] = newRemarkStr;
  463. bool cacheFlag = await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei);
  464. if (cacheFlag)
  465. {
  466. GeneralParam condition = new()
  467. {
  468. Filters = new List<QueryFilterCondition> {
  469. new QueryFilterCondition {
  470. Key=nameof(GpsDevice.Serialno),
  471. Value=imei,
  472. Operator= QueryOperatorEnum.Equal,
  473. ValueType=QueryValueTypeEnum.String
  474. }
  475. },
  476. OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  477. };
  478. _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}");
  479. // 读取数据库
  480. var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  481. // 更新字段
  482. person!.Remarks = newRemarkStr;
  483. await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  484. _logger.LogInformation($"{imei} 更新Person remarks字段|{person.Remarks}");
  485. }
  486. else
  487. {
  488. _logger.LogInformation($"{imei} 更新缓存和数据库{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}");
  489. }
  490. flag = cacheFlag;
  491. }
  492. // else if (string.IsNullOrWhiteSpace(personCache["person"]!["remarks"]!.ToString()))
  493. //else if (personCache?["person"]!["remarks"]!.ToString()!=null)
  494. //{
  495. // var newRemarkData = new
  496. // {
  497. // imei,
  498. // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  499. // commandValue = new
  500. // {
  501. // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
  502. // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
  503. // systolicIncValue, //收缩压显示增量,值为0 表示不生效
  504. // diastolicIncValue //舒张压显示增量,值为0 表示不生效
  505. // }
  506. // };
  507. // var newRemarkStr = $"{remarks}:{JsonConvert.SerializeObject(newRemarkData)}|";
  508. // personCache["person"]!["remarks"] = newRemarkStr;
  509. // bool cacheFlag = await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei);
  510. // if (cacheFlag)
  511. // {
  512. // GeneralParam condition = new()
  513. // {
  514. // Filters = new List<QueryFilterCondition> {
  515. // new QueryFilterCondition {
  516. // Key=nameof(GpsDevice.Serialno),
  517. // Value=imei,
  518. // Operator= QueryOperatorEnum.Equal,
  519. // ValueType=QueryValueTypeEnum.String
  520. // }
  521. // },
  522. // OrderBys = new List<OrderByCondition> { new OrderByCondition { Key = "serialno", IsDesc = true } }
  523. // };
  524. // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}");
  525. // // 读取数据库
  526. // var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  527. // // 更新字段
  528. // person!.Remarks = newRemarkStr;
  529. // await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false);
  530. // _logger.LogInformation($"{imei} 更新Person remarks字段|{person.Remarks}");
  531. // }
  532. // else
  533. // {
  534. // _logger.LogInformation($"{imei} 更新缓存和数据库{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}");
  535. // }
  536. // flag = cacheFlag;
  537. //}
  538. }
  539. catch (Exception ex)
  540. {
  541. _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} {imei}--更新个人信息异常:{ex.Message}, {ex.StackTrace}");
  542. }
  543. return flag;
  544. }
  545. /** 取消
  546. public async Task<bool> UpdatePersonInfoCacheAsync(string imei)
  547. {
  548. var flag = false;
  549. try
  550. {
  551. var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}";
  552. List<KeyValuePair<string, string>> headers = new()
  553. {
  554. new KeyValuePair<string, string>("AuthKey", "key1")
  555. };
  556. var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false);
  557. _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonInfoCacheAsync)},响应:{res}");
  558. var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken;
  559. flag = resJToken?["message"]?.ToString().Equals("ok") ?? false;
  560. }
  561. catch (Exception ex)
  562. {
  563. _logger.LogError($"{nameof(UpdatePersonInfoCacheAsync)} 更新缓存异常:{ex.Message}, {ex.StackTrace}");
  564. }
  565. return flag;
  566. }
  567. */
  568. }
  569. }