以下是优化后的代码:

public async Task ReceiveElectricityMeterHistoryDTONew(dynamic input, DateTime recordTime) { var inputList = input.DataList as List; var json = inputList.ToJson(); _logger.LogInformation("接收电表历史数据:" + json);

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); }

优化以下代码public async Taskdynamic ReceiveElectricityMeterHistoryDTONewdynamic input DateTime recordTime var inputList = inputDataList as Listdynamic; var json = inputListToJ

原文地址: http://www.cveoy.top/t/topic/ihaG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录