优化以下代码public async Taskdynamic ReceiveElectricityMeterHistoryDTONewdynamic input DateTime recordTime var inputList = inputDataList as Listdynamic; var json = inputListToJ
以下是优化后的代码:
public async Task
var sn = "";
ElectricityMeter_History model = new();
List<KeyValuePair<string, string>> dataList = json.ToList<KeyValuePair<string, string>>();
foreach (var item in dataList)
{
SetProperty(model, item.Key, item.Value);
}
model.Id = IdHelper.GetId();
model.CreateTime = DateTime.Now;
model.Deleted = false;
model.EquipmentId = sn;
model.RecordTime = recordTime;
model.COMMStatus = "正常";
if (model.TotalPower == null || model.TotalPower == 0)
{
_logger.LogError("【电表历史数据采集】电量累计值为0:" + json);
return null;
}
if (string.IsNullOrEmpty(model.EquipmentId))
{
_logger.LogError("【电表历史数据采集】设备Id不能为空!");
return null;
}
var equipment = await (from a in Db.GetIQueryable<Equipment_Info>()
where a.Deleted == false && a.Id == model.EquipmentId
select a).ToListAsync();
if (equipment.Count == 0)
{
_logger.LogError(string.Format("【电表历史数据采集】设备Id【{0}】不存在设备表中", model.EquipmentId));
return null;
}
var mLast = await Db.GetIQueryable<ElectricityMeter_History>()
.Where(p => p.Deleted == false && p.EquipmentId == model.EquipmentId)
.OrderByDescending(p => p.RecordTime)
.Take(1)
.FirstOrDefaultAsync();
var queryElecPrice = await (from a in Db.GetIQueryable<Equipment_Info>().Where(p => p.Deleted == false && p.Id == model.EquipmentId)
join b in Db.GetIQueryable<Config_ElectricityPrice>() on a.EnterpriseId equals b.EnterpriseId
into tmp
from bb in tmp.DefaultIfEmpty()
where bb.BeginTime.Hours == DateTime.Now.Hour
&& bb.Deleted == false
select new { ElecPrice = bb == null ? 0 : bb.Price })
.FirstOrDefaultAsync();
decimal elecPrice = queryElecPrice == null ? 0 : queryElecPrice.ElecPrice;
var queryConfigPrice = await (from a in Db.GetIQueryable<Config_System>()
where a.KeyName == ConfigEnum.ElectricityGeneration_UploadElectricityPrice.ToString()
select new { a.Value1 })
.FirstOrDefaultAsync();
var queryIsUseElec = await (from a in Db.GetIQueryable<Equipment_Info>()
join b in Db.GetIQueryable<Equipment_UseType>() on a.EquipmentUseTypeId equals b.Id into tmp
from bb in tmp.DefaultIfEmpty()
where a.Deleted == false
&& bb.Deleted == false
&& a.Id == model.EquipmentId
select new { a.Id, UseTypeName = bb == null ? "" : bb.UseTypeName })
.FirstOrDefaultAsync();
if (queryIsUseElec != null && queryIsUseElec.UseTypeName == EquipmentUseType.总并网.ToString()) //上网电表
{
if (mLast != null)
{
decimal mLastTotalPower = mLast.TotalPower ?? 0;
model.ThisPower = model.TotalPower - mLastTotalPower; //本次电量=累计电量-上一次的累计电量
if (model.TotalPower - mLastTotalPower < 0)
{
_logger.LogError("【电表历史数据采集】累计电量累计值回滚异常:" + json);
model.ThisPower = 0;
}
}
else
{
model.ThisPower = model.TotalPower ?? 0;
}
model.ThisElectricityPrice = model.ThisPower * decimal.Parse(queryConfigPrice.Value1);
var modelSavePower = new ElectricityMeter_History();
modelSavePower.CreateTime = DateTime.Now;
modelSavePower.Deleted = false;
modelSavePower.RecordTime = recordTime;
modelSavePower.TotalPower = 0;
modelSavePower.COMMStatus = "正常";
modelSavePower.ThisPower = model.ThisPower;
await ReceiveSaveElectricityHistoryDTONew(modelSavePower);
await ReceiveCityElectricityHistoryDTONew(modelSavePower);
}
else //用电电表
{
if (mLast != null)
{
decimal mLastTotalPower = mLast.TotalPower ?? 0;
model.ThisPower = model.TotalPower - mLastTotalPower; //本次电量=累计电量-上一次的累计电量
if (model.TotalPower - mLastTotalPower < 0)
{
_logger.LogError("【电表历史数据采集】累计电量累计值回滚异常:" + json);
return null;
}
}
else
{
model.ThisPower = model.TotalPower ?? 0;
}
model.ThisElectricityPrice = model.ThisPower * elecPrice;
}
try
{
int rows = 0;
rows += await Db.InsertAsync(model);
AjaxResult result = new()
{
ErrorCode = 0,
Success = rows == 1,
Msg = rows == 1 ? "成功!" : "失败!"
};
return result;
}
catch (Exception ex)
{
_logger.LogError("【电表历史数据采集】电表(" + sn + ")表数据发生错误:" + ex.Message);
return null;
}
}
private void SetProperty(ElectricityMeter_History model, string propertyName, string propertyValue) { var property = typeof(ElectricityMeter_History).GetProperty(propertyName); if (property != null) { var convertedValue = Convert.ChangeType(propertyValue, property.PropertyType); property.SetValue(model, convertedValue); }
原文地址: http://www.cveoy.top/t/topic/ihaG 著作权归作者所有。请勿转载和采集!