From 7e7c072411ec61ef63381c0be7681d9e908dba7f Mon Sep 17 00:00:00 2001 From: H Vs Date: Wed, 22 Nov 2023 09:17:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20remark=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9B=B4=E6=96=B0=E6=AC=A1?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HealthMonitor.Service/Biz/IotWebApiService.cs | 187 +++++++++++++----- .../Cache/PersonCacheManager.cs | 4 +- 2 files changed, 136 insertions(+), 55 deletions(-) diff --git a/HealthMonitor.Service/Biz/IotWebApiService.cs b/HealthMonitor.Service/Biz/IotWebApiService.cs index 9be427a..a7fdb8b 100644 --- a/HealthMonitor.Service/Biz/IotWebApiService.cs +++ b/HealthMonitor.Service/Biz/IotWebApiService.cs @@ -17,6 +17,7 @@ using TelpoDataService.Util.Clients; using TelpoDataService.Util.Models; using TelpoDataService.Util.QueryObjects; using HealthMonitor.Service.Cache; +using HealthMonitor.Model.Cache; namespace HealthMonitor.Service.Biz { @@ -174,9 +175,98 @@ namespace HealthMonitor.Service.Biz return flag; } */ - + + ///// + ///// 初次开通更新 gps_person remark和对应的缓存 + ///// + ///// + ///// + ///// + ///// + ///// + ///// + //public async Task UpdatePersonRemarksAsync0(string imei, int systolicRefValue, int diastolicRefValue,int systolicIncValue,int diastolicIncValue) + //{ + // var flag = false; + // try + // { + // GeneralParam condition = new() + // { + // Filters = new List { + // new QueryFilterCondition { + // Key=nameof(GpsDevice.Serialno), + // Value=imei, + // Operator= QueryOperatorEnum.Equal, + // ValueType=QueryValueTypeEnum.String + // } + // }, + // OrderBys = new List { new OrderByCondition { Key = "serialno", IsDesc = true } } + + // }; + // var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); + // // 若remark为空,更新person remark字段 + // if (string.IsNullOrWhiteSpace(person?.Remarks)) + // { + // var newRemarkData = new + // { + // imei, + // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + // commandValue = new + // { + // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效 + // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效 + // systolicIncValue, //收缩压显示增量,值为0 表示不生效 + // diastolicIncValue //舒张压显示增量,值为0 表示不生效 + // } + // }; + // person!.Remarks = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|"; + // await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); + // _logger.LogInformation($"更新Person remarks字段|{person.Remarks}"); + + // // 更新缓存 + // var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false); + + // if (personCache != null) + // { + + // //personCache.Person.Remarks = person!.Remarks; + // personCache["person"]!["remarks"] = person!.Remarks; + // bool cacheFlag= await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei); + + // // flag = true; + // if (cacheFlag) + // { + // flag = true; + // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}"); + // } + // else + // { + // flag = false; + // _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}"); + // } + // } + + + // //var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}"; + // //List> headers = new() + // //{ + // // new KeyValuePair("AuthKey", "key1") + // //}; + // //var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false); + // //_logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)},响应:{res}"); + // //var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken; + // //flag = resJToken?["message"]?.ToString().Equals("ok") ?? false; + // } + // } + // catch (Exception ex) + // { + // _logger.LogError($"{nameof(UpdatePersonRemarksAsync)} 更新个人信息异常:{ex.Message}, {ex.StackTrace}"); + // } + // return flag; + //} + /// - /// 初次开通更新 gps_person remark和对应的缓存 + /// 更新 gps_person remark缓存和数据库 /// /// /// @@ -184,27 +274,17 @@ namespace HealthMonitor.Service.Biz /// /// /// - public async Task UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue,int systolicIncValue,int diastolicIncValue) + public async Task UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue, int systolicIncValue, int diastolicIncValue) { var flag = false; try { - GeneralParam condition = new() - { - Filters = new List { - new QueryFilterCondition { - Key=nameof(GpsDevice.Serialno), - Value=imei, - Operator= QueryOperatorEnum.Equal, - ValueType=QueryValueTypeEnum.String - } - }, - OrderBys = new List { new OrderByCondition { Key = "serialno", IsDesc = true } } - - }; - var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); - // 若remark为空,更新person remark字段 - if (string.IsNullOrWhiteSpace(person?.Remarks)) + // 保证实时性,先更新缓存,再更新数据库 + var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false); + if (personCache != null + && + string.IsNullOrWhiteSpace(personCache["person"]!["remarks"]!.ToString()) + ) { var newRemarkData = new { @@ -218,43 +298,43 @@ namespace HealthMonitor.Service.Biz diastolicIncValue //舒张压显示增量,值为0 表示不生效 } }; - person!.Remarks = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|"; - await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); - _logger.LogInformation($"更新Person remarks字段|{person.Remarks}"); - - // 更新缓存 - var personCache = await _personCacheMgr.GetDeviceGpsPersonCacheObjectBySerialNoAsync(new Guid().ToString(), imei).ConfigureAwait(false); - - if (personCache != null) + var newRemarkStr = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|"; + personCache["person"]!["remarks"] = newRemarkStr; + bool cacheFlag = await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei); + if (cacheFlag) { - - //personCache.Person.Remarks = person!.Remarks; - personCache["person"]!["remarks"] = person!.Remarks; - bool cacheFlag= await _personCacheMgr.UpdateDeviceGpsPersonCacheObjectBySerialNoAsync(personCache, imei); - - // flag = true; - if (cacheFlag) + GeneralParam condition = new() { - flag = true; - _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}"); - } - else - { - flag = false; - _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}"); - } + Filters = new List { + new QueryFilterCondition { + Key=nameof(GpsDevice.Serialno), + Value=imei, + Operator= QueryOperatorEnum.Equal, + ValueType=QueryValueTypeEnum.String + } + }, + OrderBys = new List { new OrderByCondition { Key = "serialno", IsDesc = true } } + + }; + _logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)}成功,{JsonConvert.SerializeObject(personCache)}"); + // 读取数据库 + var person = await _gpsPersonApiClient.GetFirstAsync(condition, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); + // 更新字段 + person!.Remarks = newRemarkStr; + await _gpsPersonApiClient.UpdateAsync(person, new RequestHeader() { RequestId = $"{imei}" }).ConfigureAwait(false); + _logger.LogInformation($"更新Person remarks字段|{person.Remarks}"); + + } + else + { + _logger.LogInformation($"{imei} 更新缓存和数据库{nameof(UpdatePersonRemarksAsync)}失败,{JsonConvert.SerializeObject(personCache)}"); + } - - - //var url = $"{_configService.IotWebApiUrl}Device/UpdatePersonInfoCache?imei={imei}"; - //List> headers = new() - //{ - // new KeyValuePair("AuthKey", "key1") - //}; - //var res = await _httpHelper.HttpToGetAsync(url, headers).ConfigureAwait(false); - //_logger.LogInformation($"{imei} 更新缓存{nameof(UpdatePersonRemarksAsync)},响应:{res}"); - //var resJToken = JsonConvert.DeserializeObject(res ?? string.Empty) as JToken; - //flag = resJToken?["message"]?.ToString().Equals("ok") ?? false; + flag = cacheFlag; + } + else + { + _logger.LogInformation($"Person remarks数据异常,检查缓存和数据库"); } } catch (Exception ex) @@ -263,7 +343,6 @@ namespace HealthMonitor.Service.Biz } return flag; } - /** 取消 public async Task UpdatePersonInfoCacheAsync(string imei) { diff --git a/HealthMonitor.Service/Cache/PersonCacheManager.cs b/HealthMonitor.Service/Cache/PersonCacheManager.cs index bc51bd4..ae97234 100644 --- a/HealthMonitor.Service/Cache/PersonCacheManager.cs +++ b/HealthMonitor.Service/Cache/PersonCacheManager.cs @@ -153,7 +153,9 @@ namespace HealthMonitor.Service.Cache if (string.IsNullOrWhiteSpace(sn)) return flag; try { - return await RedisHelperDb7.HSetAsync(CACHE_HASH_KEY_GPSDEVICEPERSON, sn, person).ConfigureAwait(false); + // 覆盖 返回false + await RedisHelperDb7.HSetAsync(CACHE_HASH_KEY_GPSDEVICEPERSON, sn, person).ConfigureAwait(false); + flag = true; } catch (Exception ex)