using DeviceRepair.DataAccess.Data; using DeviceRepair.Models; using DeviceRepair.Utils; using NLog; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; namespace DeviceRepair.DataAccess.SysCommon { public class CustomFieldDa : BaseDa { private static readonly Logger log = LogManager.GetCurrentClassLogger(); public CustomFieldDa(IDictionary apiParams) : base(apiParams) { } /// /// 根据字段编码获取数据 /// /// public DataSet GetDatas() { DataSet dsDatas = new DataSet("Datas"); string[] FieldCodes = new string[] { }; try { if (ApiParameters.ContainsKey("FieldCode")) { FieldCodes = ApiParameters["FieldCode"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); } var exp = Expressionable.Create() .AndIF(FieldCodes.Length > 0, x => SqlFunc.ContainsArray(FieldCodes, x.FieldCode)).ToExpression();//拼接表达式 List Datas = devMain.Queryable().Where(exp).ToList(); DataTable table = Datas.ToDataTable(); dsDatas.Tables.Add(table); return dsDatas; } catch (SqlException sqlEx) { throw sqlEx; } catch (Exception ex) { log.Error(ex); throw ex; } } /// /// 检验数据是否存在 /// /// /// public APIResponseData Get_Field_Exists(out bool BeExists) { try { BeExists = true; if (!ApiParameters.ContainsKey("Code")) throw new ArgumentException("传入的字段名称不能为空!"); if (!ApiParameters.ContainsKey("Text")) throw new ArgumentException("传入的字段值不能为空!"); string Code = ApiParameters["Code"]?.Trim() ?? ""; string Text = ApiParameters["Text"]?.Trim() ?? ""; if (Code.IsNull() || Text.IsNull()) throw new ArgumentException("传入的字段名称或字段值不能为空!"); BeExists = devMain.Queryable().Any(x => x.FieldCode.Equals(Code, StringComparison.CurrentCultureIgnoreCase) && x.FieldText.Equals(Text, StringComparison.CurrentCultureIgnoreCase)); return new APIResponseData { Code = 1 }; } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } } /// /// 修改状态 /// /// public APIResponseData Change_Field_Status() { try { DateTime CurrentDate = DateTime.Now; if (!ApiParameters.ContainsKey("OPERATORAUTOID")) throw new ArgumentException("传入的操作员对象参数不正确,操作员不能为空!"); int Operation = 0; if (!int.TryParse(ApiParameters["OPERATORAUTOID"], out Operation)) throw new ArgumentException("传入的操作员对象参数不正确!"); if (!ApiParameters.ContainsKey("AutoID")) throw new ArgumentException("传入的主键编号参数不能为空!"); if (!ApiParameters.ContainsKey("Description")) throw new ArgumentException("传入的字段说明参数不能为空!"); if (!ApiParameters.ContainsKey("Status")) throw new ArgumentException("传入的状态字段不能为空!"); int AutoId = 0; if (!int.TryParse(ApiParameters["AutoID"], out AutoId)) throw new ArgumentException("传入的主键编号参数不正确!"); bool Status = false; if (!bool.TryParse(ApiParameters["Status"], out Status)) throw new ArgumentException("传入的字段状态参数不正确!"); string Description = ApiParameters["Description"] ?? ""; devMain.BeginTran(); FieldsInfo data = devMain.Queryable().Single(x => x.AutoID == AutoId); if (data == null) throw new Exception($"{(Status ? "解锁" : "锁定")}出错,主键编号为【{AutoId}】的数据不存在!"); int Count = devMain.Updateable().UpdateColumns(x => new { x.Status, x.Description, x.ModifyBy, x.ModifyOn }) .SetColumns(x => new FieldsInfo() { Status = Status, Description = Description, ModifyBy = Operation, ModifyOn = CurrentDate }) .Where(x => x.AutoID == AutoId) .ExecuteCommand(); bool isSuccess = Count > 0; if (!isSuccess) throw new Exception("修改字段状态失败!"); devMain.CommitTran(); return new APIResponseData { Code = 1 }; } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } } /// /// 新增或者编辑 /// /// /// public APIResponseData InsertOrEdit_Field_Data(DataTable Data) { try { DateTime CurrentDate = DateTime.Now; if (!ApiParameters.ContainsKey("OPERATORAUTOID")) throw new ArgumentException("传入的操作员对象参数不正确,操作员不能为空!"); int Operation = 0; if (!int.TryParse(ApiParameters["OPERATORAUTOID"], out Operation)) throw new ArgumentException("传入的操作员对象参数不正确!"); devMain.BeginTran(); /* 自定义字段对象 */ FieldsInfo Item = DTOHelper.DataTableToList(Data)?.FirstOrDefault(); if (Item.AutoID == 0) { /* 新增 */ Item.GUID = Guid.NewGuid(); Item.CreatBy = Operation; Item.CreatOn = CurrentDate; Item.Status = true; if (devMain.Queryable().Any(x => x.FieldCode.Equals(Item.FieldCode, StringComparison.CurrentCultureIgnoreCase) && x.FieldText.Equals(Item.FieldText, StringComparison.CurrentCultureIgnoreCase))) throw new Exception($"已存在名称为【{Item.FieldText}】的数据,无法重复添加!"); if (devMain.Insertable(Item).ExecuteCommand() != 1) throw new Exception($"执行自定义字段新增失败!"); } else { /* 修改 */ var old = devMain.Queryable().Single(x => x.AutoID == Item.AutoID); if (old == null) throw new Exception($"传入的修改对象出错,主键编号为【{Item.AutoID}】的数据不存在!"); ////记录历史信息 //FieldsHistory his = new FieldsHistory //{ // FieldID = Item.AutoID, // GUID = Item.GUID, // FieldCode = Item.FieldCode, // FieldText = Item.FieldText, // FieldValue = Item.FieldValue, // FieldType = Item.FieldType, // Status = Item.Status, // Description = Item.Description, // CreatBy = Item.CreatBy, // CreatOn = Item.CreatOn, // ModifyBy = Item.ModifyBy, // ModifyOn = Item.ModifyOn, // Operator = Operation, // OperationDate = CurrentDate //}; if (devMain.Updateable().UpdateColumns(x => new { x.FieldText, x.FieldValue, x.FieldType, x.ModifyBy, x.ModifyOn }) .SetColumns(x => new FieldsInfo() { FieldText = Item.FieldText, FieldValue = Item.FieldValue, FieldType = Item.FieldType, ModifyBy = Operation, ModifyOn = CurrentDate }) .Where(x => x.AutoID == Item.AutoID) .ExecuteCommand() != 1) throw new Exception($"执行自定义字段修改失败!"); } devMain.CommitTran(); return new APIResponseData { Code = 1 }; } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } } } }