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; } } }