using IStation.CalcModel;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
namespace IStation.DAL
{
///
/// 数据库访问基类
///
public partial class AnaProject
{
///
/// 构造函数
///
public AnaProject()
{
}
///
/// 数据库连接
///
public virtual ISqlSugarClient Connection
{
get
{
var connection = CreateConnection();
return connection;
}
}
public static ISqlSugarClient CreateConnection()
{
var path = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "AnaProject.db");
if (!System.IO.File.Exists(path))
{
throw new Exception($"缺少Project.db文件");
}
ConnectionConfig connectionConfig = new ConnectionConfig()
{
DbType = SqlSugar.DbType.Sqlite,
ConnectionString = "Data Source=" + path,// + ";Version=3;",
IsAutoCloseConnection = true,//是否自动关闭
};
ISqlSugarClient conn = new SqlSugarClient(connectionConfig);
return conn;
}
#region Insert
///
/// 插入指定对象到数据库中
///
public long Insert(IStation.CalcModel.AnaPrj result_prj, IStation.CalcModel.AnaRequest ana_request)
{
RefreshSameTime(result_prj.StartTime, result_prj.EndTime);
IStation.Entity.AnaProjectEntity entity = new Entity.AnaProjectEntity();
entity.PrjID = result_prj.ID;
entity.PrjName = result_prj.Name;
entity.StartTime = result_prj.StartTime;
entity.EndTime = result_prj.EndTime;
entity.CreateTime = DateTime.Now;
entity.UseStatus = 0;
if (ana_request.TotalFlowIn != null)
{
entity.TotalFlowIn = ana_request.TotalFlowIn.ToString();
}
if (ana_request.PerHourFlowOut != null)
{
entity.TotalFlowOut = string.Join(",", ana_request.PerHourFlowOut);
}
if (ana_request.MaxReservoirLevel != null)
{
entity.LevelRequest = string.Format("{0}@{1}", ana_request.MaxReservoirLevel, ana_request.MaxReservoirLevelTime);
}
ana_request.StartReservoirLevel = ana_request.StartReservoirLevel;
entity.CalcOptType = (int)ana_request.CalcOptType;
if (ana_request.IsKnownStartOpenPump && ana_request.StartOpenPumpIndexArray != null)
{
entity.StartOpenPumpIndexs = string.Join(",", ana_request.StartOpenPumpIndexArray);
}
if (result_prj.EndTimeOpenPumpStatus != null)
{
entity.EndOpenPumpIndexs = string.Join(",", result_prj.EndTimeOpenPumpStatus);
}
entity.StartReservoirLevel = ana_request.StartReservoirLevel.ToString();
if (result_prj.BlockTimes != null && result_prj.BlockTimes.Count > 0)
{
entity.EndReservoirLevel = result_prj.BlockTimes.Last().ReservoirEndHeight.ToString();
}
SnowFlakeSingle.WorkId = 1;
using (ISqlSugarClient db = Connection)
{
return db.Insertable(entity).ExecuteReturnSnowflakeId();
}
}
///
/// 插入指定对象到数据库中
///
public long Insert(IStation.CalcModel.AnaPrj result_prj, IStation.CalcModel.AnaRequestBase ana_request)
{
RefreshSameTime(result_prj.StartTime, result_prj.EndTime);
IStation.Entity.AnaProjectEntity entity = new Entity.AnaProjectEntity();
entity.PrjID = result_prj.ID;
entity.StartTime = result_prj.StartTime;
entity.EndTime = result_prj.EndTime;
entity.CreateTime = DateTime.Now;
entity.UseStatus = 1;
if (ana_request.TotalFlowIn != null)
{
entity.TotalFlowIn = ana_request.TotalFlowIn.ToString();
}
if (ana_request.PerHourFlowOut != null)
{
entity.TotalFlowOut = string.Join(",", ana_request.PerHourFlowOut);
}
if (ana_request.MaxReservoirLevel != null)
{
entity.LevelRequest = string.Format("{0}@{1}", ana_request.MaxReservoirLevel, ana_request.MaxReservoirLevelTime);
}
entity.CalcOptType = (int)ana_request.CalcOptType;
if (ana_request.IsKnownStartOpenPump && ana_request.StartOpenPumpIndexArray != null)
{
entity.StartOpenPumpIndexs = string.Join(",", ana_request.StartOpenPumpIndexArray);
}
if (result_prj.EndTimeOpenPumpStatus != null)
{
entity.EndOpenPumpIndexs = string.Join(",", result_prj.EndTimeOpenPumpStatus);
}
entity.StartReservoirLevel = ana_request.StartReservoirLevel.ToString();
if (result_prj.BlockTimes != null && result_prj.BlockTimes.Count > 0)
{
entity.EndReservoirLevel = result_prj.BlockTimes.Last().ReservoirEndHeight.ToString();
}
SnowFlakeSingle.WorkId = 1;
using (ISqlSugarClient db = Connection)
{
return db.Insertable(entity).ExecuteReturnSnowflakeId();
}
}
private void RefreshSameTime(DateTime startTime, DateTime endTime)
{
using (ISqlSugarClient db = Connection)
{
//db.Updateable(updateObj).UpdateColumns(it => new { it.Name, it.CreateTime }).ExecuteCommand();
var list = db.Queryable().Where(x => x.StartTime == startTime && x.EndTime == endTime).ToList();
if (list == null || list.Count == 0)
return;
foreach (var m in list)
{
if (m.UseStatus == 1)
{
m.UseStatus = 0;
db.Updateable(m).UpdateColumns(x => x.UseStatus ).ExecuteCommand();
}
}
}
}
//确认方案
public string SetConfirmStatusByID(string PrjID)
{
using (ISqlSugarClient db = Connection)
{
var f_p = db.Queryable().Where(x => x.PrjID == PrjID).First();
if (f_p == null)
return "未找到对应项目";
var startTime = f_p.StartTime.Date;
var all = db.Queryable().Where(x => x.StartTime >= startTime && x.StartTime <= startTime.AddDays(1)).ToList();
if(all == null || all.Count == 0)
{
return "未找到对应项目 StartTime = " + f_p.StartTime.Date;
}
//IStation.LogHelper.Info("Count" + all.Count);
foreach(var m in all)
{
if (m.ID == f_p.ID)
{
//IStation.LogHelper.Info("id set 1 :" + m.ID);
m.UseStatus = 1;
db.Updateable(m).UpdateColumns(x => x.UseStatus).ExecuteCommand();
}
else
{
if (m.UseStatus == 1)
{//设置为失效
//IStation.LogHelper.Info("id set 0:" + m.ID);
m.UseStatus = 0;
db.Updateable(m).UpdateColumns(x => x.UseStatus).ExecuteCommand();
}
}
}
}
return null;
}
#endregion
#region Query
///
/// 返回数据库所有的对象集合
///
public List GetAll()
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable()?.ToList();
}
}
///
/// 查询数据库,返回指定ID的对象
///
public Entity.AnaProjectEntity GetByPrjID(string prj_id)
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().Single(x => x.PrjID == prj_id);
}
}
///
/// 完整时间(带小时)
///
public List GetByEndTimeH相同(DateTime endTime)
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().Where(x => x.EndTime == endTime && x.UseStatus == 1).ToList();
}
}
///
/// 完整时间(带小时)
///
public List GetByEndTimeH大于(DateTime endTime)
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().Where(x => x.EndTime >= endTime && x.UseStatus == 1).ToList();
}
}
///
/// 日期(不带小时)
///
public List GetByEndDay(DateTime endTime)
{
using (ISqlSugarClient db = Connection)
{
var end_day = endTime.Date;
return db.Queryable().Where(x => x.EndTime>= endTime && x.StartTime <= endTime.AddDays(1) && x.UseStatus == 1).ToList();
}
}
///
/// 日期(不带小时)
///
///
///
public List GetByStartDay(DateTime startTime)
{
using (ISqlSugarClient db = Connection)
{
var start_day = startTime.Date;
return db.Queryable().Where(x => x.StartTime >= start_day && x.StartTime <= start_day.AddDays(1) && x.UseStatus == 1).ToList();
}
}
///
/// 日期(不带小时)
///
///
///
public List GetByCreateDay(DateTime startTime)
{
using (ISqlSugarClient db = Connection)
{
var start_day = startTime.Date;
return db.Queryable().Where(x => x.CreateTime >= start_day && x.CreateTime <= start_day.AddDays(1) && x.UseStatus == 1).ToList();
}
}
///
/// 日期(不带小时)
///
///
///
public List GetAllByCreateDay(DateTime startTime)
{
using (ISqlSugarClient db = Connection)
{
var start_day = startTime.Date;
return db.Queryable().Where(x => x.CreateTime >= start_day && x.CreateTime <= start_day.AddDays(1)).ToList();
}
}
///
/// 完整时间( 带小时)
///
///
///
public List GetByStartTimeH(DateTime startTime)
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().Where(x => x.StartTime == startTime && x.UseStatus == 1).ToList();
}
}
///
/// 完整时间( 带小时)
///
///
///
public List GetByTimeRangeH(DateTime startTime,DateTime endTime)
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().Where(x => x.StartTime == startTime && x.EndTime == endTime && x.UseStatus == 1).ToList();
}
}
///
/// 最后一条记录
///
///
public Entity.AnaProjectEntity GetLastRecord()
{
using (ISqlSugarClient db = Connection)
{
return db.Queryable().OrderByDescending(i => i.ID).Take(1).First();
}
}
#endregion
}
}