DeviceManager/DeviceRepair.DataAccess/FieldAccess.cs
2024-07-22 15:50:10 +08:00

276 lines
10 KiB
C#

using DeviceRepair.Models;
using DeviceRepair.Models.History;
using DeviceRepair.Models.Logs;
using NLog;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace DeviceRepair.DataAccess
{
public class FieldAccess : DbContext<FieldsInfo>
{
private static readonly Logger log = LogManager.GetCurrentClassLogger();
private static FieldAccess manager;
public static FieldAccess Instance
{
get
{
if (manager == null)
manager = new FieldAccess();
return manager;
}
}
/// <summary>
/// 根据字段编码获取数据
/// </summary>
/// <param name="Codes">字段编码(多字段用逗号分割)</param>
/// <returns></returns>
public APIResponseData GetFieldsByCodes(string Codes)
{
APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"获取数据失败!" };
try
{
db.ChangeDatabase("main");
string[] cds = Codes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
List<FieldsInfo> Datas = CurrentDb.AsQueryable().Where(x => SqlFunc.ContainsArray(cds, x.FieldCode)).ToList();
apiResponseData.Code = 1;
apiResponseData.Data = Datas;
apiResponseData.Message = "";
}
catch (SqlSugarException e)
{
log.Error(e);
return new APIResponseData { Code = -1, Message = e.Message };
}
catch (Exception ex)
{
log.Error(ex);
throw new Exception(ex.Message);
}
return apiResponseData;
}
/// <summary>
/// 检验数据是否存在
/// </summary>
/// <param name="Code"></param>
/// <param name="Text"></param>
/// <returns></returns>
public APIResponseData TextIsExists(string Code, string Text)
{
APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"检测数据出错!" };
try
{
db.ChangeDatabase("main");
int Count = CurrentDb.Count(x => x.FieldCode.Equals(Code, StringComparison.CurrentCultureIgnoreCase) && x.FieldText.Equals(Text, StringComparison.CurrentCultureIgnoreCase));
apiResponseData.Code = 1;
apiResponseData.Data = Count;
apiResponseData.Message = "";
}
catch (SqlSugarException e)
{
log.Error(e);
return new APIResponseData { Code = -1, Message = e.Message };
}
catch (Exception ex)
{
log.Error(ex);
throw new Exception(ex.Message);
}
return apiResponseData;
}
/// <summary>
/// 新增或者编辑
/// </summary>
/// <param name="entity"></param>
/// <param name="Operation"></param>
/// <returns></returns>
public APIResponseData InsertOrEdit(FieldsInfo entity, HeaderModel Operation)
{
APIResponseData apiResponseData = new APIResponseData { Code = -1 };
try
{
if (entity == null || Operation == null)
throw new Exception("传入的参数不能为空!");
DateTime CurrentDate = DateTime.Now;
bool isSuccess = false;
EnumOperationType operationType = EnumOperationType.Add;
db.ChangeDatabase("main");
db.BeginTran();
FieldsHistory his = null;
FieldLog log = null;
if (entity.AutoID != 0)
{
// 修改
operationType = EnumOperationType.Change;
var old = db.Queryable<FieldsInfo>().Single(x => x.AutoID == entity.AutoID);
if (old == null)
throw new Exception($"传入的修改对象出错,主键编号为【{entity.AutoID}】的数据不存在!");
//记录历史信息
his = new FieldsHistory
{
FieldID = entity.AutoID,
GUID = entity.GUID,
FieldCode = entity.FieldCode,
FieldText = entity.FieldText,
FieldValue = entity.FieldValue,
FieldType = entity.FieldType,
Status = entity.Status,
Description = entity.Description,
CreatBy = entity.CreatBy,
CreatOn = entity.CreatOn,
ModifyBy = entity.ModifyBy,
ModifyOn = entity.ModifyOn,
Operator = Operation.Operator,
OperationDate = CurrentDate
};
// 修改
int Count = db.Updateable<FieldsInfo>().UpdateColumns(x => new { x.FieldText, x.FieldValue, x.FieldType, x.ModifyBy, x.ModifyOn })
.SetColumns(x => new FieldsInfo() { FieldText = entity.FieldText, FieldValue = entity.FieldValue, FieldType = entity.FieldType, ModifyBy = Operation.Operator, ModifyOn = CurrentDate })
.Where(x => x.AutoID == entity.AutoID)
.ExecuteCommand();
isSuccess = Count > 0;
}
else
{
// 新增
entity.GUID = Guid.NewGuid();
entity.CreatBy = Operation.Operator;
entity.CreatOn = CurrentDate;
entity.Status = true;
int Count = CurrentDb.Count(x => x.FieldCode.Equals(entity.FieldCode, StringComparison.CurrentCultureIgnoreCase)
&& x.FieldText.Equals(entity.FieldText, StringComparison.CurrentCultureIgnoreCase));
if (Count > 0)
throw new Exception($"已存在名称为【{entity.FieldText}】的数据,无法重复添加!");
Count = db.Insertable(entity).ExecuteCommand();
isSuccess = Count > 0;
}
// 记录操作记录
if (isSuccess)
{
log = new FieldLog
{
FieldHisGuid = entity.GUID,
OperationComputer = Operation.ClientName,
OperationDate = CurrentDate,
OperationIP = Operation.IPAddress,
OperationType = operationType.ToDescription(),
Operator = Operation.Operator
};
}
db.CommitTran();
apiResponseData.Code = 1;
apiResponseData.Message = "操作成功!";
db.ChangeDatabase("log");
db.Insertable(log).ExecuteCommand();
db.Insertable(his).ExecuteCommand();
}
catch (SqlSugarException ex)
{
db.RollbackTran();
log.Error(ex);
apiResponseData.Code = -1;
apiResponseData.Message = ex.Message;
}
catch (Exception ex)
{
db.RollbackTran();
log.Error(ex);
apiResponseData.Code = -1;
apiResponseData.Message = ex.Message;
}
return apiResponseData;
}
/// <summary>
/// 修改状态
/// </summary>
/// <param name="AutoID"></param>
/// <param name="Status"></param>
/// <param name="Operation"></param>
/// <returns></returns>
public APIResponseData ChangeStatus(int AutoID, bool Status, string Description, HeaderModel Operation)
{
APIResponseData apiResponseData = new APIResponseData { Code = -1 };
try
{
DateTime CurrentDate = DateTime.Now;
bool isSuccess = false;
EnumOperationType operationType = Status ? EnumOperationType.UnLock : EnumOperationType.Lock;
db.ChangeDatabase("main");
db.BeginTran();
FieldLog log = null;
FieldsInfo data = db.Queryable<FieldsInfo>().Single(x => x.AutoID == AutoID);
if (data == null)
throw new Exception($"{operationType.ToDescription()}出错,主键编号为【{AutoID}】的数据不存在!");
int Count = db.Updateable<FieldsInfo>().UpdateColumns(x => new { x.Status, x.Description, x.ModifyBy, x.ModifyOn })
.SetColumns(x => new FieldsInfo() { Status = Status, Description = Description, ModifyBy = Operation.Operator, ModifyOn = CurrentDate })
.Where(x => x.AutoID == AutoID)
.ExecuteCommand();
isSuccess = Count > 0;
// 记录操作记录
if (isSuccess)
{
log = new FieldLog
{
FieldHisGuid = data.GUID,
OperationComputer = Operation.ClientName,
OperationDate = CurrentDate,
OperationIP = Operation.IPAddress,
OperationType = operationType.ToDescription(),
Operator = Operation.Operator
};
}
db.CommitTran();
apiResponseData.Code = 1;
apiResponseData.Message = "操作成功!";
db.ChangeDatabase("log");
db.Insertable(log).ExecuteCommand();
}
catch (SqlSugarException ex)
{
db.RollbackTran();
log.Error(ex);
apiResponseData.Code = -1;
apiResponseData.Message = ex.Message;
}
catch (Exception ex)
{
db.RollbackTran();
log.Error(ex);
apiResponseData.Code = -1;
apiResponseData.Message = ex.Message;
}
return apiResponseData;
}
}
}