Browse Source

调整 remark缓存和数据库更新次序

datasub12_previous
H Vs 1 year ago
parent
commit
7e7c072411
2 changed files with 136 additions and 55 deletions
  1. +133
    -54
      HealthMonitor.Service/Biz/IotWebApiService.cs
  2. +3
    -1
      HealthMonitor.Service/Cache/PersonCacheManager.cs

+ 133
- 54
HealthMonitor.Service/Biz/IotWebApiService.cs View File

@@ -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;
}
*/

///// <summary>
///// 初次开通更新 gps_person remark和对应的缓存
///// </summary>
///// <param name="imei"></param>
///// <param name="systolicRefValue"></param>
///// <param name="diastolicRefValue"></param>
///// <param name="systolicIncValue"></param>
///// <param name="diastolicIncValue"></param>
///// <returns></returns>
//public async Task<bool> UpdatePersonRemarksAsync0(string imei, int systolicRefValue, int diastolicRefValue,int systolicIncValue,int diastolicIncValue)
//{
// var flag = false;
// try
// {
// GeneralParam condition = new()
// {
// Filters = new List<QueryFilterCondition> {
// new QueryFilterCondition {
// Key=nameof(GpsDevice.Serialno),
// Value=imei,
// Operator= QueryOperatorEnum.Equal,
// ValueType=QueryValueTypeEnum.String
// }
// },
// OrderBys = new List<OrderByCondition> { 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<KeyValuePair<string, string>> headers = new()
// //{
// // new KeyValuePair<string, string>("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;
//}

/// <summary>
/// 初次开通更新 gps_person remark和对应的缓存
/// 更新 gps_person remark缓存和数据库
/// </summary>
/// <param name="imei"></param>
/// <param name="systolicRefValue"></param>
@@ -184,27 +274,17 @@ namespace HealthMonitor.Service.Biz
/// <param name="systolicIncValue"></param>
/// <param name="diastolicIncValue"></param>
/// <returns></returns>
public async Task<bool> UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue,int systolicIncValue,int diastolicIncValue)
public async Task<bool> UpdatePersonRemarksAsync(string imei, int systolicRefValue, int diastolicRefValue, int systolicIncValue, int diastolicIncValue)
{
var flag = false;
try
{
GeneralParam condition = new()
{
Filters = new List<QueryFilterCondition> {
new QueryFilterCondition {
Key=nameof(GpsDevice.Serialno),
Value=imei,
Operator= QueryOperatorEnum.Equal,
ValueType=QueryValueTypeEnum.String
}
},
OrderBys = new List<OrderByCondition> { 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<QueryFilterCondition> {
new QueryFilterCondition {
Key=nameof(GpsDevice.Serialno),
Value=imei,
Operator= QueryOperatorEnum.Equal,
ValueType=QueryValueTypeEnum.String
}
},
OrderBys = new List<OrderByCondition> { 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<KeyValuePair<string, string>> headers = new()
//{
// new KeyValuePair<string, string>("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<bool> UpdatePersonInfoCacheAsync(string imei)
{


+ 3
- 1
HealthMonitor.Service/Cache/PersonCacheManager.cs View File

@@ -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)


Loading…
Cancel
Save