using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JinYuan.VirtualDataLibrary
{
public class DBSQL
{
///
/// 获取PLC换型参数绑定值
///
///
///
public string GetPlcParamSql(string modelName)
{
string strSql = $@"SELECT
'{modelName}' AS `ModelName`,
`pb`.`PLCAddress`,
`pc`.`PLCValue`,
`pc`.`UpdateTime`,
`pb`.`PLCRemark`,
`pb`.`OrderNum`
FROM
`Plcconfigbase` `pb`
LEFT JOIN
(SELECT * FROM `Plcconfig` WHERE `ModelName` = '{modelName}') `pc`
ON
`pb`.`PLCAddress` = `pc`.`PLCAddress`
ORDER BY
`pb`.`OrderNum`";
return strSql;
}
///
/// 获取产品型号参数
///
///
///
public string GetParamSql(string strModelType)
{
string strSql = $@"SELECT
`pb`.`ParaName`,
'{strModelType}' AS `ModelName`,
`pl`.`ParaValueMin`,
`pl`.`ParaValueMax`,
`pl`.`Uint`,
`pb`.`Remark`,
`pl`.`UpdateTime`
FROM
`Parambase` `pb`
LEFT JOIN
(SELECT * FROM `ParamList` WHERE `ModelName` = '{strModelType}') `pl`
ON
`pb`.`ParaName` = `pl`.`ParaName`
ORDER BY
`pb`.`fNo` ASC";
return strSql;
}
///
/// 获取产品型号列表
///
///
///
public string GetProdTypeSql(string strProdType = "")
{
string strSql = @"SELECT * FROM ProductModel ";
if (strProdType != "")
{
strSql += string.Format(" where ModelName='{0}'", strProdType);
}
strSql += " order by ModelName";
return strSql;
}
///
/// 获取产品型号
///
///
///
public string GetProductParaByProdModel(string strModelType)
{
string strSql = $@"SELECT
`pb`.`ParaName`,
'{strModelType}' AS `ModelName`,
`pl`.`ParaValueMin`,
`pl`.`ParaValueMax`,
`pl`.`Uint`,
`pb`.`Remark`,
`pl`.`UpdateTime`
FROM
`Parambase` `pb`
LEFT JOIN
(SELECT * FROM `Paramlist` WHERE `ModelName` = '{strModelType}') `pl`
ON
`pb`.`ParaName` = `pl`.`ParaName`
ORDER BY
`pb`.`fNo` ASC";
return strSql;
}
public string GetPLCConfigBases()
{
string strSql = string.Format(@"SELECT * FROM `Plcconfigbase` ORDER BY `OrderNum`");
return strSql;
}
public string GetSysAdminSql()
{
string strSql = string.Format(@"SELECT
`LoginId`,
`LoginName`,
`LoginPwd`,
`LoginUid`,
`LoginLevel`,
`SystemLog`,
`CpkData`,
`HistoryData`,
`ParamSet`,
`SystemSet`,
`UserManage`
FROM
`SysAdmin`");
return strSql;
}
///
/// 查询历史数据
///
///
///
///
///
public string SelectHostData(int type, string strRfid, string strBarCode, string strDate1, string strDate2)
{
if (string.IsNullOrWhiteSpace(strDate1)) strDate1 = "1970-01-01 00:00:00";
if (string.IsNullOrWhiteSpace(strDate2)) strDate2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string searchKey = strRfid?.Replace("'", "''") ?? "";
//if (string.IsNullOrEmpty(safeBarCode))
// return strSql;
var queryTemplate = new Dictionary
{
{ 0, ("`ContainerCode`, DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:%i:%s') AS `TestTime`, `PalletCode`, `Result`, `Remark`", "`AGearEntity`", "`TestTime`", "`ContainerCode`") },
{ 1, ("`ContainerCode`, DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:%i:%s') AS `TestTime`, `Result`, `Remark`", "`DGearEntity`", "`TestTime`", "`ContainerCode`") },
//{ 6, ("`PalletCode`, DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:%i:%s') AS `TestTime`, `Result`, `Remark`", "`EGearEntity`", "`TestTime`", "`PalletCode`") },
{ 2, ("`ContainerCode`, `PalletCode`, DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:%i:%s') AS `TestTime`, `Weight`,`Result`, `Remark`", "`BGearEntity`", "`TestTime`", "`ContainerCode`") },
{ 3, ("`container_id` AS `ContainerCode`, `tag_code`, `tag_value`, DATE_FORMAT(`create_time`, '%Y-%m-%d %H:%i:%s') AS `TestTime`", "`ContainerKVDetail`", "`create_time`", "`container_id`") },
{ 4, ("`pallet_id` AS `PalletCode`, DATE_FORMAT(`create_time`, '%Y-%m-%d %H:%i:%s') AS `TestTime`, `tag_code`, `tag_value`", "`PalletKVDetail`", "`create_time`", "`pallet_id`") },
{ 5, ("`pallet_id` AS `PalletCode`, `container_id` AS `ContainerCode`, DATE_FORMAT(`create_time`, '%Y-%m-%d %H:%i:%s') AS `TestTime`", "`PalletEntity`", "`create_time`", "") }
};
var (selectSql, tableName, timeField, searchField) = queryTemplate[type];
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.AppendFormat("SELECT {0} FROM {1} WHERE {2} >= '{3}' AND {4} <= '{5}'",
selectSql,tableName,timeField,strDate1.Replace("'", "''"),timeField,strDate2.Replace("'", "''"));
if (!string.IsNullOrWhiteSpace(searchKey))
{
if (type == 5)
{
// type=5特殊处理:同时匹配PalletCode和ContainerCode
sqlBuilder.AppendFormat(" AND (`PalletCode` LIKE '%{0}%' OR `ContainerCode` LIKE '%{0}%')", searchKey);
}
else if (type == 6)
{
// type=6特殊处理:同时匹配pallet_id和container_id
sqlBuilder.AppendFormat(" AND (`pallet_id` LIKE '%{0}%' OR `container_id` LIKE '%{0}%')", searchKey);
}
else
{
// 普通类型:匹配指定搜索字段
sqlBuilder.AppendFormat(" AND {0} LIKE '%{1}%'", searchField, searchKey);
}
}
// 返回纯SQL字符串(无自定义参数格式)
return sqlBuilder.ToString();
}
///
/// 查询报警历史数据
///
///
///
///
///
public string SelectHostAlarmData(string start, string end, int alarmType)
{
string strSql = "";
switch (alarmType)
{
case 1:
strSql = @"SELECT
DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
`PLCAdress`,
`AlarmContent`,
`AlarmCount`,
`Class`
FROM
`AlarmCountEntry`
WHERE
`AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + $"' AND `Class` = '{CommonMethods.strClass}'";
break;
case 2:
strSql = @"SELECT
DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
`PLCAdress`,
`AlarmContent`,
`AlarmCount`,
`Class`
FROM
`AlarmCountEntry`
WHERE
`AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + $"' AND `Class` = '{CommonMethods.strClass}'";
break;
default:
case 0:
strSql = @"SELECT
DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
`PLCAdress`,
`AlarmContent`,
`AlarmCount`,
`Class`
FROM
`AlarmCountEntry`
WHERE
`AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + "'";
break;
}
#region 旧
//if (alarmType == "全天")
//{
// strSql = @"SELECT
// DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
// `PLCAdress`,
// `AlarmContent`,
// `AlarmCount`,
// `Class`
// FROM
// `AlarmCountEntry`
// WHERE
// `AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + "'";
//}
//else if (alarmType == "白班")
//{
// strSql = @"SELECT
// DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
// `PLCAdress`,
// `AlarmContent`,
// `AlarmCount`,
// `Class`
// FROM
// `AlarmCountEntry`
// WHERE
// `AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + "' AND `Class` = '白班'";
//}
//else
//{
// strSql = @"SELECT
// DATE_FORMAT(`AlarmTime`, '%Y-%m-%d %H:%i:%s') AS `AlarmTime`,
// `PLCAdress`,
// `AlarmContent`,
// `AlarmCount`,
// `Class`
// FROM
// `AlarmCountEntry`
// WHERE
// `AlarmTime` >= '" + start + "' AND `AlarmTime` <= '" + end + "' AND `Class` = '夜班'";
//}
#endregion
return strSql;
}
///
/// 按日统计
///
///
///
///
public string GetStaticByDay(string startDateTime, string endDateTime)
{
string strSql = $@"SELECT
DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:00:00') AS `Day`,
`ProdIn`,
`ProdOut`,
`Ppm`,
CONCAT(CAST(ROUND(`JiaDL` * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN `ProdIn` > 0 THEN ROUND(COALESCE(`ProdOut`, 0) / COALESCE(`ProdIn`, 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'
GROUP BY
`TestTime`, `ProdOut`, `ProdIn`, `Ppm`, `JiaDL`
UNION ALL
SELECT
'Total' AS `Day`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(AVG(`JiaDL`) * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'";
return strSql;
}
///
/// 按周查询
///
///
///
///
public string GetStaticByWeek(string startDateTime, string endDateTime)
{
string strSql = $@"SELECT
DATE_FORMAT(`TestTime`, '%Y-%m') AS `Week`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(`JiaDL` * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'
GROUP BY
DATE_FORMAT(`TestTime`, '%Y-%m'), `JiaDL`
UNION ALL
SELECT
'Total' AS `Week`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(AVG(`JiaDL`) * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'";
return strSql;
}
///
/// 按月查询
///
///
///
///
public string GetStaticByMonth(string startDateTime, string endDateTime)
{
string strSql = $@"SELECT
DATE_FORMAT(`TestTime`, '%Y-%m') AS `Month`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(`JiaDL` * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'
GROUP BY
DATE_FORMAT(`TestTime`, '%Y-%m'), `JiaDL`
UNION ALL
SELECT
'Total' AS `Month`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(AVG(`JiaDL`) * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{startDateTime}' AND '{endDateTime}'";
return strSql;
}
///
/// 按班次统计
///
///
///
///
///
public string GetStaticByShift(DateTime dateTime, int shift, string changeShiftTime)
{
string sDateTime1 = string.Empty;
string sDateTime2 = string.Empty;
if (shift == 0)// 白班
{
DateTime sTempDateTime = Convert.ToDateTime($"{dateTime.ToString("yyyy-MM-dd")} {changeShiftTime}");
sDateTime1 = sTempDateTime.AddHours(-12).ToString("yyyy-MM-dd HH:mm:ss");
sDateTime2 = sTempDateTime.ToString("yyyy-MM-dd HH:mm:ss");
}
else
{
sDateTime1 = $"{dateTime.ToString("yyyy-MM-dd")} {changeShiftTime}";
sDateTime2 = Convert.ToDateTime(sDateTime1).AddHours(12).ToString("yyyy-MM-dd HH:mm:ss");
}
string strsql = $@"SELECT
DATE_FORMAT(`TestTime`, '%Y-%m-%d %H:00:00') AS `TestTime`,
`ProdIn`,
`ProdOut`,
`Ppm`,
CONCAT(CAST(ROUND(`JiaDL` * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN `ProdIn` > 0 THEN ROUND(COALESCE(`ProdOut`, 0) / COALESCE(`ProdIn`, 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{sDateTime1}' AND '{sDateTime2}'
GROUP BY
`TestTime`, `ProdOut`, `ProdIn`, `Ppm`, `JiaDL`
UNION ALL
SELECT
'Total' AS `Time`,
SUM(`ProdIn`) AS ProdIn,
SUM(`ProdOut`) AS ProdOut,
AVG(`Ppm`) AS Ppm,
CONCAT(CAST(ROUND(AVG(`JiaDL`) * 100, 1) AS CHAR(10)), '%') AS `JiaDL`,
CONCAT(CAST(
CASE
WHEN SUM(`ProdIn`) > 0 THEN ROUND(COALESCE(SUM(`ProdOut`), 0) / COALESCE(SUM(`ProdIn`), 0) * 100, 2)
ELSE 0
END AS CHAR(10)), '%') AS `Prod`
FROM
`Hourprod`
WHERE
`TestTime` BETWEEN '{sDateTime1}' AND '{sDateTime2}'";
return strsql;
}
///
/// 获取最新的数据
///
///
public string GetStatic(string strDateTime)
{
string strsql = $@" SELECT [FDate]
,[FHour]
,[ProdIn]
,[ProdOut]
,[TestTime]
FROM [dbo].[Hourprod] where FDate='{strDateTime}' order by TestTime desc";
return strsql;
}
///
/// 根据条码查询是否存在
///
///
///
public string GetBarcode(string barCode)
{
string strSql = $@"SELECT EXISTS(
SELECT 1
FROM `CGearEntity`
WHERE BarCode = '{barCode}') AS barcode_exists";
return strSql;
}
/////
///// 根据条码获取挡位最新的一条数据
/////
/////
/////
//public string GetJetCodeTop1Sql(string barCode)
//{
// string strSql = $@"SELECT
// `InsulationTestShift`
// FROM
// `BGearEntity`
// WHERE `BarCode` = '{barCode}' ORDER BY `TestTime` DESC
// LIMIT 1";
// return strSql;
//}
/////
///// 根据条码获取重量直径最新的一条数据
/////
/////
/////
//public string GetOutStationTop1Sql(string barCode)
//{
// string strSql = $@"SELECT
// `BarCode`,
// `Weight`,
// `Diameter`
// FROM
// `BGearEntity`
// WHERE `BarCode` = '{barCode}' ORDER BY `TestTime` DESC
// LIMIT 1";
// return strSql;
//}
///
/// 获取表头注释
///
///
public string GetSqlFields(string tableName)
{
string strSql = $@"SELECT
COLUMN_NAME,
DATA_TYPE,
COLUMN_COMMENT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = 'largesquareone' AND TABLE_NAME = '{tableName}'
ORDER BY
ORDINAL_POSITION;";
return strSql;
}
}
public class M_DBCtrl
{
/// --本机数据库表名
///
///
//public string machineInSQLTable = "agearentity";
public string machineOutSQLTable = "bgearentity";
private string[] headerTextOut;
///
/// 出站数据库表头
///
public string[] HeaderTextOut
{
get { return headerTextOut; }
set { headerTextOut = value; }
}
/// 查询SQL数据库中的数据,并以string数组列表形式返回
///
///
///
/// 所查询到的数据,null表示不存在
public List SQLAllDataSearchToStrArrList(string strSql)
{
List strResArrList = new List();
List strResList = new List();
try
{
DataTable dt = CommonMethods.db.QueryDataTable(strSql);
if (dt != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
string resRow = dt.Rows[i][j].ToString();
strResList.Add(resRow);
}
string[] strResArr = strResList.ToArray();
strResList.Clear();
strResArrList.Add(strResArr);
}
}
}
catch (Exception e)
{
return strResArrList = new List();
}
return strResArrList;
}
/// 根据下标在返回的数据库表信息 集合中获取相应数据
/// index 0:字段 2:中文注释 1:变量类型int\char等
///
/// liststring[]类型的集合
/// string[] 的下标
///
public String[] HeaderTextAssignment(List SqlList, int index)
{
string[] headStringlist = new string[SqlList.Count];
// int i = 0;
try
{
for (int i = 0; i < SqlList.Count; i++)
{
headStringlist[i] = SqlList[i][index];
}
}
catch (Exception)
{
}
return headStringlist;
}
}
}