using DeviceRepair.DataAccess.Data; using DeviceRepair.Models; using DeviceRepair.Models.Enum; using DeviceRepair.Models.History; using DeviceRepair.Models.Plan; using DeviceRepair.Models.Preserve; 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.CheckForm { public class CheckFormDa : BaseDa { private static readonly Logger log = LogManager.GetCurrentClassLogger(); public CheckFormDa(IDictionary apiParams) : base(apiParams) { } /// /// 获取点检表数据 /// /// public DataSet Get_PM_CheckForm_Datas() { DataSet dsDatas = new DataSet("Datas"); try { string formName = GetParamString("FormName", "点检表名称"); var exp = Expressionable.Create() .AndIF(!formName.IsNull(), x => SqlFunc.Contains(x.FormName, SqlFunc.Trim(formName))).ToExpression();//拼接表达式 List datas = devMain.Queryable().Where(exp).ToList(); DataTable table = datas.OrderByDescending(x => x.ChangeDate).ThenByDescending(x => x.ChangeDate).ToList().ToDataTable(); dsDatas.Tables.Add(table); return dsDatas; } catch (SqlException sqlEx) { throw sqlEx; } catch (Exception ex) { log.Error(ex); throw ex; } } /// /// 获取单条数据 /// /// public APIResponseData Get_CheckForm_Single(int planAutoId, out DataSet dsDatas) { dsDatas = new DataSet("Datas"); try { DriveMaintencePlanInfo plan = devMain.Queryable() .Where(x => x.AutoID == planAutoId).First(); DataTable table = new List { plan }.ToDataTable(); dsDatas.Tables.Add(table); if (plan == null) { throw new ArgumentException($"获取数据失败,数据库不存在【主键编号】为【{planAutoId}】的数据!"); } if (plan.Belong.Trim() == EnumDeviceBelong.AM.ToString()) { /* 判断当月AM是否存在点检记录 */ var record = devMain.Queryable().First(x => x.PlanPrimaryID == plan.AutoID); MaintenanceFormVersionInfo formData; if (record != null) { formData = devMain.Queryable().First(x => x.AutoID == record.FormPrimaryID); } else { formData = devMain.Queryable((t1, t2) => new object[] { JoinType.Inner, t1.MaintenanceAMFormVersion == t2.AutoID }) .Where((t1, t2) => t1.AutoID == plan.EquipmentID).Select((t1, t2) => t2).First(); } if (formData == null) { throw new ArgumentException("当前设备的点检表不存在!"); } DataTable table2 = new List { formData }.ToDataTable(); dsDatas.Tables.Add(table2); return new APIResponseData { Code = 1, Message = "操作成功!" }; } else if (plan.Belong.Trim() == EnumDeviceBelong.PM.ToString()) { if (devMain.Queryable((x1, x2) => new object[] { JoinType.Inner, x1.PlanPrimaryID == planAutoId && x1.EquipmentPrimaryID == x2.AutoID && x1.FormPrimaryID == x2.MaintenanceFormVersion }).Any()) { MaintenanceFormVersionInfo formData = devMain.Queryable((t1, t2) => new object[] { JoinType.Inner, t1.FormPrimaryID == t2.AutoID }) .Where((t1, t2) => t1.EquipmentPrimaryID == plan.EquipmentID).Select((t1, t2) => t2).First(); if (formData == null) { throw new ArgumentException("当前设备的点检表不存在!"); } DataTable table2 = new List { formData }.ToDataTable(); dsDatas.Tables.Add(table2); } else { MaintenanceFormVersionInfo formData = devMain.Queryable((t1, t2) => new object[] { JoinType.Inner, t1.MaintenanceFormVersion == t2.AutoID }) .Where((t1, t2) => t1.AutoID == plan.EquipmentID).Select((t1, t2) => t2).First(); if (formData == null) { throw new ArgumentException("当前设备的点检表不存在!"); } DataTable table2 = new List { formData }.ToDataTable(); dsDatas.Tables.Add(table2); } return new APIResponseData { Code = 1, Message = "操作成功!" }; } else { throw new ArgumentException($"获取数据失败,计划中的保养类型(AM/PM)数据不正确!"); } } catch (SqlException sqlEx) { throw sqlEx; } catch (Exception ex) { log.Error(ex); throw ex; } } /// /// 获取点检表表单信息 /// /// /// public MaintenanceFormVersionInfo GetSingle(int PrimaryKey) { try { return devMain.Queryable().First(x => x.AutoID == PrimaryKey); } catch (SqlException sqlEx) { throw sqlEx; } catch (Exception ex) { log.Error(ex); throw ex; } } /// /// 修改点检表状态 /// /// public APIResponseData Change_PM_CheckForm_Status() { try { int formId = GetParamInt("FormID", "点检表编号"); MaintenanceFormVersionInfo item = devMain.Queryable().First(x => x.AutoID == formId); if (item == null) { throw new ArgumentException($"传入的点检表编号不正确,找不到编号为:{formId}的点检表!"); } bool beStatus = GetParamString("BeStatus", "状态").Equals("A", StringComparison.CurrentCultureIgnoreCase); item.FormStatus = beStatus; devMain.BeginTran(); if (devMain.Updateable(item).ExecuteCommand() > 0) { devMain.CommitTran(); return new APIResponseData { Code = 1, Message = "操作成功!" }; } else { devMain.RollbackTran(); return new APIResponseData { Code = -1, Message = "操作失败!" }; } } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } } /// /// 分配点检表到指定设备 /// /// /// public APIResponseData AssigFormToDevice(List lst) { var apiResponseData = new APIResponseData { Code = -1, Message = $"新增失败或当前数据无更改,请重试!" }; if (lst == null) throw new Exception("待修改的对象为空!"); try { var currentDate = DateTime.Now; devMain.BeginTran(); var execSuccess = true; //解除绑定 if (lst.Any(x => x.OperationType == EnumOperationType.UnBind)) { var editData = lst.Where(x => x.OperationType == EnumOperationType.UnBind).Select(x => x.EquipmentAutoID).ToArray(); if (lst[0].Belong == Models.Enum.EnumDeviceBelong.AM) { execSuccess = devMain.Updateable() .UpdateColumns(x => new { x.MaintenanceAMFormVersion, x.ChangeDate, x.ChangeUser }) .ReSetValue(x => x.MaintenanceAMFormVersion == 0) .ReSetValue(x => x.ChangeUser == OperationInfo.TsSFCUserId) .ReSetValue(x => x.ChangeDate == currentDate) .Where(x => editData.Contains(x.AutoID)).ExecuteCommand() > 0; } else { execSuccess = devMain.Updateable() .UpdateColumns(x => new { x.MaintenanceFormVersion, x.ChangeDate, x.ChangeUser }) .ReSetValue(x => x.MaintenanceFormVersion == 0) .ReSetValue(x => x.ChangeUser == OperationInfo.TsSFCUserId) .ReSetValue(x => x.ChangeDate == currentDate) .Where(x => editData.Contains(x.AutoID)).ExecuteCommand() > 0; } } //新增绑定 if (execSuccess && lst.Any(x => x.OperationType == EnumOperationType.Bind)) { if (lst[0].Belong == Models.Enum.EnumDeviceBelong.AM) { var editData = lst.Where(x => x.OperationType == EnumOperationType.Bind).Select(x => x.EquipmentAutoID).ToArray(); execSuccess = devMain.Updateable() .UpdateColumns(x => new { x.MaintenanceAMFormVersion, x.ChangeDate, x.ChangeUser }) .ReSetValue(x => x.MaintenanceAMFormVersion == lst[0].FormAutoID) .ReSetValue(x => x.ChangeUser == OperationInfo.TsSFCUserId) .ReSetValue(x => x.ChangeDate == currentDate) .Where(x => editData.Contains(x.AutoID)).ExecuteCommand() > 0; } else { var editData = lst.Where(x => x.OperationType == EnumOperationType.Bind).Select(x => x.EquipmentAutoID).ToArray(); execSuccess = devMain.Updateable() .UpdateColumns(x => new { x.MaintenanceFormVersion, x.ChangeDate, x.ChangeUser }) .ReSetValue(x => x.MaintenanceFormVersion == lst[0].FormAutoID) .ReSetValue(x => x.ChangeUser == OperationInfo.TsSFCUserId) .ReSetValue(x => x.ChangeDate == currentDate) .Where(x => editData.Contains(x.AutoID)).ExecuteCommand() > 0; } } if (execSuccess) { apiResponseData.Code = 1; apiResponseData.Message = ""; devMain.CommitTran(); } List logs = new List(); foreach (SubmitAssignFormsToDevices item in lst) { logs.Add(new DeviceHistory { FormAutoID = item.FormAutoID, FormCode = item.VersionCode, FormName = item.FormName, FormRev = item.VersionRev, FormBelong = lst[0].Belong.ToString(), EquipmentAutoID = item.EquipmentAutoID, EquipmentID = item.EquipmentID, EquipmentName = item.EquipmentName, Specification = (item.Specification ?? ""), OperationComputer = OperationInfo.ComputerName, OperationDate = currentDate, OperationIP = OperationInfo.IPAddress, OperationType = item.OperationType == EnumOperationType.Bind ? "绑定" : "解除绑定", OperationUser = OperationInfo.TsSFCUserId, OperationUserName = OperationInfo.TsSFCUserName }); } devLog.Insertable(logs).ExecuteCommand(); } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } return apiResponseData; } /// /// 判断数据是否存在 /// /// /// public APIResponseData Get_CheckForm_Exists(out int Count) { Count = 0; try { if (!ApiParameters.ContainsKey("VersionCode")) { throw new ArgumentException("传入的点检表编码不能为空!"); } if (!ApiParameters.ContainsKey("VersionRev")) { throw new ArgumentException("传入的点检表版本不能为空!"); } MaintenanceFormVersionInfo Data = devMain.Queryable().First(x => x.VersionCode.Equals(SqlFunc.Trim(ApiParameters["VersionCode"]), StringComparison.CurrentCultureIgnoreCase) && x.VersionRev.Equals(SqlFunc.Trim(ApiParameters["VersionRev"]), StringComparison.CurrentCultureIgnoreCase)); Count = (Data == null ? 0 : 1); return new APIResponseData { Code = 1, Message = "操作成功!" }; } catch (SqlException sqlEx) { throw sqlEx; } catch (Exception ex) { log.Error(ex); throw ex; } } /// /// 新增点检表 /// /// /// public APIResponseData Insert_CheckForm_Data(MaintenanceFormVersionInfo Item) { APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"新增失败或当前数据无更改,请重试!" }; if (Item == null) throw new Exception("传入的参数对象为空!"); try { if (!ApiParameters.ContainsKey("OPERATORAUTOID")) { throw new ArgumentException("非法的操作,当前操作人参数不正确!"); } int OperationID = Convert.ToInt32(ApiParameters["OPERATORAUTOID"] + ""); DateTime CurrentDate = DateTime.Now; Item.CreatDate = CurrentDate; Item.CreatUser = OperationID; MaintenanceFormVersionInfo CurrentData = devMain.Insertable(Item).ExecuteReturnEntity(); if (CurrentData.AutoID > 0) { apiResponseData.Code = 1; apiResponseData.Message = ""; FormLogInfo log = new FormLogInfo { FormID = CurrentData.AutoID, FormName = Item.FormName, FormVersionRev = Item.VersionRev, OperationComputer = ApiParameters["CLIENTNAME"], OperationDate = CurrentDate, OperationIP = ApiParameters["CLIENTIP"], OperationType = "新增", OperationUser = OperationID, OperationUserName = ApiParameters["OPERATORNAME"] }; devLog.Insertable(log).ExecuteCommand(); } } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } return apiResponseData; } /// /// 修改备注 /// /// /// public APIResponseData Change_CheckForm_Remark(MaintenanceFormVersionInfo Item) { APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"新增失败或当前数据无更改,请重试!" }; if (Item == null) throw new Exception("传入的参数对象为空!"); try { if (!ApiParameters.ContainsKey("OPERATORAUTOID")) { throw new ArgumentException("非法的操作,当前操作人参数不正确!"); } int OperationID = Convert.ToInt32(ApiParameters["OPERATORAUTOID"] + ""); DateTime CurrentDate = DateTime.Now; devMain.BeginTran(); MaintenanceFormVersionInfo oItem = devMain.Queryable().First(x => x.AutoID == Item.AutoID); if (oItem == null) throw new Exception($"找不到主键编号为【{Item.AutoID}】的点检表信息!"); bool IsSuccess = devMain.Updateable() .UpdateColumns(x => new { x.Remarks, x.ChangeDate, x.ChangeUser }) .ReSetValue(x => x.Remarks == Item.Remarks) .ReSetValue(x => x.ChangeDate == CurrentDate) .ReSetValue(x => x.ChangeUser == OperationID) .Where(x => x.AutoID == Item.AutoID).ExecuteCommandHasChange(); devMain.CommitTran(); if (IsSuccess) { apiResponseData.Code = 1; apiResponseData.Message = ""; MaintenanceFormVersionHistoryInfo log = new MaintenanceFormVersionHistoryInfo { ClientMac = ApiParameters["CLIENTMAC"], ClientName = ApiParameters["CLIENTNAME"], CreatDate = CurrentDate, CreatUser = OperationID, FormName = oItem.FormName, FormPath = oItem.FormPath, FormStatus = oItem.FormStatus, Guid = new Guid(), IPAddress = ApiParameters["CLIENTIP"], MaintenanceFormVersionAutoID = oItem.AutoID, Remarks = oItem.Remarks, VersionCode = oItem.VersionCode, VersionRev = oItem.VersionRev }; devLog.Insertable(log).ExecuteCommand(); } } catch (SqlException sqlEx) { devMain.RollbackTran(); throw sqlEx; } catch (Exception ex) { devMain.RollbackTran(); log.Error(ex); throw ex; } return apiResponseData; } } }