using Newtonsoft.Json;
using Serilog;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Xml;
using WPFWCSDemo.Data;
using WPFWCSDemo.Models.Tables;
using WPFWCSDemo.StateCode;
using WPFWCSDemo.ViewModels;
namespace WPFWCSDemo.Utilities
{
public class SqlHelper
{
///
/// sql连接字符串,引用自【app.config】
///
public static string? ConStr { get; set; }
///
/// 检查数据库是否连接正常
///
/// true-连接正常 false-连接失败
public static bool IsDBConnected()
{
using var context = new AppDbContext();
return context.Database.CanConnect();
}
///
/// 获取数据集
///
/// sql执行语句
/// 可选的sql参数
/// 查询目标的数据集
public static DataSet GetDataSet(string cmdText, params SqlParameter[] sqlParameters)
{
//创建sql连接
using SqlConnection conn = new SqlConnection(ConStr);
try
{
conn.Open();
}
catch (Exception)
{
return null;
}
using SqlCommand cmd = new SqlCommand(cmdText, conn);
cmd.Parameters.AddRange(sqlParameters);
using SqlDataAdapter sda = new SqlDataAdapter(cmd);
using DataSet ds = new DataSet();
sda.Fill(ds);
//TableRefresh(cmdText);
return ds;
}
///
/// 获取对应SQL查询的数据表
///
/// sql执行语句
/// 查询目标的数据表名
public static DataTable? ExecuteTable(string cmdText, params SqlParameter[] sqlParameters)
{
return GetDataSet(cmdText, sqlParameters).Tables[0];
}
///
/// 获取某个表字段的集合
///
/// sql执行语句
/// 查询目标表字段/列名的值的集合
public static List GetColumns(string cmdText)
{
//创建用于存储列名的集合
List columns = new List();
//创建sql连接
using (SqlConnection conn = new SqlConnection(ConStr))
{
try
{
conn.Open();
}
catch (Exception)
{
return null;
}
SqlCommand cmd = new SqlCommand(cmdText, conn);
SqlDataAdapter sda = new SqlDataAdapter(cmdText, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
//将获取到的字段名添加到集合中
foreach (DataColumn colName in ds.Tables[0].Columns)
{
columns.Add(colName.ToString());
}
return columns;
}
}
///
/// 操作获取受影响的行数
///
/// sql语句
/// sql字段参数
///
public static int ExecuteNonQuery(string cmdText, params SqlParameter[] sqlParameters)
{
//创建sql连接
using (SqlConnection conn = new SqlConnection(ConStr))
{
conn.Open();
using SqlCommand cmd = new SqlCommand(cmdText, conn);
//sql参数化设置
cmd.Parameters.AddRange(sqlParameters);
//MessageBox.Show(cmdText);
//返回执行sql受影响的行数
int rows = cmd.ExecuteNonQuery();
if (rows > -1)
{
//throw new Exception("获取数据失败!(错误代码:000001)");
}
//TableRefresh(cmdText);
return rows;
}
}
///
/// 获取查询数据的行数
///
/// SQL字符串
/// 目标行数
public static int GetRowCount(string cmdText, params SqlParameter[] sqlParameters)
{
using (DataTable dt = ExecuteTable(cmdText, sqlParameters))
{
if (dt == null)
{
return 0;
}
return dt.Rows.Count;
}
}
///
/// 获取为当前任务【自动生成】的WCS本地任务号
///
///
public static int GetTaskIdByAutoGeneration()
{
using DataTable dt = ExecuteTable("SELECT TASKNO FROM TASKNUMBER");
int taskId = (int)dt.Rows[0][0];
//此处定义9开头的任务号为手动添加的任务,因此自动生成的任务号小于9000
if (taskId > 899999)
{
ExecuteNonQuery("UPDATE TASKNUMBER SET TASKNO=@TaskNo WHERE TASKNO=@TaskId",
new SqlParameter("@taskNo", 100001),
new SqlParameter("@taskId", taskId));
return 100001;
}
else
{
ExecuteNonQuery("UPDATE TASKNUMBER SET TASKNO=@TaskNo WHERE TASKNO=@TaskId",
new SqlParameter("@taskNo", taskId + 1),
new SqlParameter("@taskId", taskId));
}
return taskId;
}
///
/// 获取为当前任务【手动添加】的WCS本地任务号
///
///
public static int GetTaskIdByManualGeneration()
{
using DataTable dt = ExecuteTable("SELECT MAN_TASKNO FROM TASKNUMBER");
int taskId = (int)dt.Rows[0][0];
//此处定义9开头的任务号为手动添加的任务
if (taskId > 999999)
{
ExecuteNonQuery("UPDATE TASKNUMBER SET MAN_TASKNO=@Man_TaskNo WHERE MAN_TASKNO=@TaskId",
new SqlParameter("@Man_TaskNo", 900000),
new SqlParameter("@taskId", taskId));
return 900000;
}
else
{
ExecuteNonQuery("UPDATE TASKNUMBER SET MAN_TASKNO=@Man_TaskNo WHERE MAN_TASKNO=@TaskId",
new SqlParameter("@Man_TaskNo", taskId + 1),
new SqlParameter("@taskId", taskId));
}
return taskId;
}
///
/// 获取为当前事件【手动添加】的编号
///
///
public static int GetEventIdByAutoGeneration()
{
using DataTable? dt = ExecuteTable("SELECT EVENT_TASKNO FROM TASKNUMBER");
int taskId = (int)dt.Rows[0][0];
//此处定义9开头的任务号为手动添加的任务
if (taskId > 9999)
{
ExecuteNonQuery("UPDATE TASKNUMBER SET EVENT_TASKNO=@Event_TaskNo WHERE EVENT_TASKNO=@TaskId",
new SqlParameter("@Event_TaskNo", 1001),
new SqlParameter("@taskId", taskId));
return 1001;
}
else
{
ExecuteNonQuery("UPDATE TASKNUMBER SET EVENT_TASKNO=@Event_TaskNo WHERE EVENT_TASKNO=@TaskId",
new SqlParameter("@Event_TaskNo", taskId + 1),
new SqlParameter("@taskId", taskId));
}
return taskId;
}
///
/// 记录当前操作事件
///
/// 信息
/// 标识
/// 类型(登录、操作等)
/// 来源(名称、数据集等)
/// 级别
/// 状态(是否完成等)
public static void NewEventLog(string message,string userId, string type, string source, string level, string status)
{
using var context = new AppDbContext();
Event_Log event_Log = new Event_Log()
{
Id = Guid.NewGuid(),
Message = message,
TimeStamp = DateTime.Now.ToString(TimeFormat.stringFormat),
UserId = userId,
Type = type,
Source = source,
Level = level,
Status = status,
};
context.Event_Log.Add(event_Log);
context.SaveChanges();
Log.Warning($"【事件记录】{JsonConvert.SerializeObject(event_Log)}");
}
///
/// 记录当前操作事件
///
/// 信息
/// 标识
/// 类型(登录、操作等)
/// 来源(名称、数据集等)
/// 级别
/// 状态(是否完成等)
public static void NewEventLog(string message, string userId)
{
using var context = new AppDbContext();
Event_Log event_Log = new Event_Log()
{
Id = Guid.NewGuid(),
Message = message,
TimeStamp = DateTime.Now.ToString(TimeFormat.stringFormat),
UserId = userId,
};
context.Event_Log.Add(event_Log);
context.SaveChanges();
Log.Warning($"【事件记录】{event_Log.UserId}-{event_Log.Message}");
}
}
}