using JinYuan.Models; using System; using System.Text; namespace JinYuan.VirtualDataLibrary { public class DBSQL { /// /// 获取PLC换型参数绑定值 /// /// /// public string GetPlcParamSql(string modelName) { string strSql = $@"SELECT '{modelName}' 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}' ModelName,pl.ParaValueMin,pl.ParaValueMax,pl.Uint,pb.Remark,pl.UpdateTime FROM Parambase pb left join (select * from ParamList where ModelName = '{strModelType}' ) as 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}' ModelName,pl.ParaValueMin,pl.ParaValueMax,pl.Uint,pb.Remark,pl.UpdateTime FROM Parambase pb left join (select * from Paramlist where ModelName = '{strModelType}' ) as 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 [dbo].[SysAdmin]"); return strSql; } /// /// 查询历史数据 /// /// /// /// /// public string SelectHostData(int type, string strBarCode, string strDate1, string strDate2, int upStatus = 2) { string strSql = ""; try { if (type == 0) { strSql = @"SELECT CONVERT(varchar,[TestTime], 120) 时间 ,[BarCode] 电芯码 ,[Result] 结果 ,[Remark] 备注 ,case when [Flag]=1 then '已上传' else '未上传' end 上传状态 FROM [dbo].[AGearEntity] where TestTime >= '" + strDate1 + "' and TestTime <= '" + strDate2 + "' "; if (strBarCode != "") { strSql += " and BarCode like '%" + strBarCode + "' "; } if (upStatus != 2) { strSql += $" and Flag = {upStatus}"; } } else if (type == 1) { string preSql = @"SELECT CONVERT(varchar,[CSBYHASCANNINGTIME], 120) 时间 ,[CSBYHPROCESSNAME] 工序名 ,[CSBYHSCHEDULE] 班次 ,[BarCode] 电芯码 ,[CSBYHOUTSTATIONJUDGMENTRESULT] 出站判定结果 ,[Remark] 备注 ,[RethrowNum] 复投次数"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < ConstValue.CCDNameArr.Length; i++) { sb.Append($",[CCDResult{i + 1}] '{ConstValue.CCDNameArr[i]}'"); } string formatSql = sb.ToString(); string nextSql = @",[Result] 结果 ,case when [Flag]=1 then '已上传' else '未上传' end 上传状态 FROM [dbo].[BGearEntity] where CSBYHASCANNINGTIME >= '" + strDate1 + "' and CSBYHASCANNINGTIME <= '" + strDate2 + "' "; strSql = string.Concat(preSql, formatSql, nextSql); if (strBarCode != "") { strSql += " and BarCode like '%" + strBarCode + "' "; } if (upStatus != 2) { strSql += $" and Flag = {upStatus}"; } } else if (type == 2) { strSql = @"SELECT CONVERT(varchar,[CSBYHASCANNINGTIME], 120) AS 时间 ,[CSBYHPROCESSNAME] AS 工序名 ,[CSBYHSCHEDULE] AS 班次 ,[BarCode] AS 电芯码 ,[CSBYHOUTSTATIONJUDGMENTRESULT] AS 出站判定结果 ,[Remark] AS 备注 ,[RethrowNum] AS 复投次数 ,[CSBYHINSTATIONTIME] AS 进站时间 ,[in_battery_grade] AS 进站电芯条码等级 ,[Thickness1] AS 自由态厚度设定值 ,[ThicknessResult1] AS 自由态厚度实际值 ,[CCDResult19] AS 自由态厚度判定结果 ,[flatness_setpoint] AS 平面度设定值 ,[flatness_actual] AS 测厚平面度 ,[CCDResult20] AS 测厚平面度结果 ,[appearance_standard] AS 外观标准设定值 ,[CCDResult15] AS 正负极极柱1 ,[CCD15NgCode] AS 正负极极柱2 ,[CCDResult17] AS 防爆阀检测结果 ,[CCD17NgCode] AS 防爆阀检测NG代码 ,[CCDResult18] AS 二维码检测结果 ,[CCD18NgCode] AS 二维码检测NG代码 ,[CCDResult16] AS 负极柱检测结果 ,[CCD16NgCode] AS 负极柱检测NG代码 ,[CCDResult5] AS 顶面检测结果 ,[CCD5NgCode] AS 顶面检测NG代码 ,[CCDResult3] AS 正极侧面检测结果 ,[CCD3NgCode] AS 正极侧面检测NG代码 ,[CCDResult4] AS 负极侧面检测结果 ,[CCD4NgCode] AS 负极侧面检测NG代码 ,[CCDResult1] AS 大面A检测结果 ,[CCD1NgCode] AS 大面A检测NG代码 ,[CCDResult2] AS 大面B检测结果 ,[CCD2NgCode] AS 大面B检测NG代码 ,[CCDResult6] AS 底面检测结果 ,[CCD6NgCode] AS 底面检测NG代码 ,[CSBYHOUTSTATIONTIME] AS 出站时间 ,[out_battery_grade] AS 出站电芯条码等级 ,[barcode_match_result] AS 进出站条码匹配结果 ,[CCDResult22] AS 外观总结果 ,[ng_code_summary] AS NG代码汇总 ,[CCDResult24] AS 电芯二侧面 ,[CCDResult23] AS 四个侧棱边 ,[CCDResult7] AS 底部菱边1 ,[CCDResult25] AS 二个底部长棱 ,[CCDResult9] AS 底部棱边2 ,[CCDResult19] AS 正负塑胶圈 ,[CCDResult26] AS 顶底部检测 ,[Result] AS 结果 ,CASE WHEN [Flag1]=1 THEN '已上传' ELSE '未上传' END AS 上传状态 FROM [dbo].[BGearEntity] WHERE CSBYHASCANNINGTIME >= '" + strDate1 + "' AND CSBYHASCANNINGTIME <= '" + strDate2 + "'"; if (strBarCode != "") { strSql += " and BarCode like '%" + strBarCode + "' "; } if (upStatus != 2) { strSql += $" and Flag1 = {upStatus}"; } } } catch (Exception ex) { CommonMethods.AddLog(true, ex.Message); } return strSql; } /// /// 查询报警历史数据 /// /// /// /// /// public string SelectHostAlarmData(string start, string end, string alarmType) { string strSql = ""; if (alarmType == "全天") { strSql = @"SELECT CONVERT(varchar,[AlarmTime], 120) 时间 ,[PLCAdress] 报警地址 ,[AlarmContent] 报警信息 ,[AlarmCount] 报警次数 ,[Class] 班次 FROM [dbo].[AlarmCountEntry] where AlarmTime >= '" + start + "' and AlarmTime <= '" + end + "' "; } else if (alarmType == "白班") { strSql = @"SELECT CONVERT(varchar,[AlarmTime], 120) 时间 ,[PLCAdress] 报警地址 ,[AlarmContent] 报警信息 ,[AlarmCount] 报警次数 ,[Class] 班次 FROM [dbo].[AlarmCountEntry] where AlarmTime >= '" + start + "' and AlarmTime <= '" + end + "' and Class='白班'"; } else { strSql = @"SELECT CONVERT(varchar,[AlarmTime], 120) 时间 ,[PLCAdress] 报警地址 ,[AlarmContent] 报警信息 ,[AlarmCount] 报警次数 ,[Class] 班次 FROM [dbo].[AlarmCountEntry] where AlarmTime >= '" + start + "' and AlarmTime <= '" + end + "' and Class='夜班'"; } return strSql; } /// /// 按日统计 /// /// /// /// public string GetStaticByDay(string startDateTime, string endDateTime) { /*string strSql = $@" SELECT CONVERT(varchar(13),TestTime,120) 时间, ProdIn 总数, ProdOut OK总数, Ppm PPM均值, cast(ROUND(JiaDL*100,1)as nvarchar(20))+'%' 稼动率均值, cast(case when ProdIn>0 then (ROUND(cast(isnull(ProdOut,0) as float)/cast(isnull(ProdIn,0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY TestTime,ProdOut,ProdIn,Ppm,JiaDL UNION ALL SELECT '合计' as '时间', ProdIn '总数', ProdOut 'OK总数',Ppm 'PPM均值' ,JiaDL '稼动率均值',优率 as '优率' FROM (SELECT FDate,sum(ProdIn) ProdIn, SUM(ProdOut) ProdOut,AVG(PPM) Ppm, cast(ROUND(AVG(JiaDL)*100,1) as nvarchar(20))+'%' JiaDL, cast(case when (sum(ProdIn))>0 then (ROUND(cast(isnull(sum(ProdOut),0) as float)/cast(isnull(sum(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY FDate) as t ";*/ string strSql = $@"SELECT CONVERT(varchar(10), TestTime, 120) AS 时间, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL) * 100, 1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdOut) > 0 THEN ROUND(CAST(SUM(CcdOK) AS float) / CAST(SUM(ProdOut) AS float) * 100, 2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY CONVERT(varchar(10), TestTime, 120) UNION ALL SELECT '合计' AS 时间, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL) * 100, 1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdIn) > 0 THEN ROUND(CAST(SUM(ProdOut) AS float) / CAST(SUM(ProdIn) AS float) * 100, 2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}'"; return strSql; } /// /// 按周查询 /// /// /// /// public string GetStaticByWeek(string startDateTime, string endDateTime) { /*string strSql = $@" SELECT convert(char(10), TestTime, 120) 月份, sum(ProdIn) 总数, sum(ProdOut) OK总数,AVG(Ppm) PPM均值, cast(ROUND(JiaDL*100,1)as nvarchar(20))+'%' 稼动率均值, cast(case when sum(ProdIn)>0 then (ROUND(cast(isnull(SUM(ProdOut),0) as float)/cast(isnull(sum(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY convert(char(10), TestTime, 120),JiaDL UNION ALL SELECT '合计' as '月份', ProdIn '总数', ProdOut 'OK总数',Ppm 'PPM均值' ,JiaDL '稼动率均值',优率 as '优率' FROM (SELECT sum(ProdIn) ProdIn, SUM(ProdOut) ProdOut,AVG(Ppm) Ppm, cast(ROUND(AVG(JiaDL)*100,1) as nvarchar(20))+'%' JiaDL, cast(case when (sum(ProdIn))>0 then (ROUND(cast(isnull(sum(ProdOut),0) as float)/cast(isnull(sum(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10))+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}') as t ";*/ string strSql = $@" SELECT '第'+DATENAME(WEEK,TestTime)+'周' AS 周, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL)*100,1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdOut) > 0 THEN ROUND(CAST(ISNULL(SUM(CcdOK),0) AS float)/CAST(ISNULL(SUM(ProdOut),0) AS float)*100,2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY DATENAME(WEEK,TestTime) UNION ALL SELECT '合计' AS 周, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL)*100,1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdIn) > 0 THEN ROUND(CAST(ISNULL(SUM(ProdOut),0) AS float)/CAST(ISNULL(SUM(ProdIn),0) AS float)*100,2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' "; return strSql; } /// /// 按月查询 /// /// /// /// public string GetStaticByMonth(string startDateTime, string endDateTime) { string strSql = $@" SELECT convert(char(7), TestTime, 120) 月份, sum(ProdIn) 总数, sum(ProdOut) OK总数, AVG(Ppm) PPM均值, CAST(ROUND(AVG(JiaDL), 1) AS NVARCHAR(20)) + '%' AS 稼动率均值, cast(case when sum(ProdIn)>0 then (ROUND(cast(isnull(SUM(ProdOut),0) as float)/cast(isnull(sum(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' GROUP BY convert(char(7), TestTime, 120) UNION ALL SELECT '合计' AS 月份, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL), 1) AS NVARCHAR(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdOut) > 0 THEN ROUND(CAST(SUM(CcdOK) AS FLOAT) / CAST(SUM(ProdOut) AS FLOAT) * 100, 2) ELSE 0 END AS NVARCHAR(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{startDateTime}' AND '{endDateTime}' "; return strSql; } /// /// 按班次统计 /// /// /// /// /// public string GetStaticByShift(DateTime dateTime, string shift, string changeShiftTime) { string sDateTime1 = string.Empty; string sDateTime2 = string.Empty; if (shift == "白班") { 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 CONVERT(varchar(13),TestTime,120) 时间, SUM(ProdIn) 总数, SUM(ProdOut) OK总数,AVG(Ppm) PPM均值, cast(ROUND(AVG(JiaDL)*100,1) as nvarchar(20))+'%' 稼动率均值, cast(case when SUM(ProdIn)>0 then (ROUND(cast(isnull(SUM(ProdOut),0) as float)/cast(isnull(SUM(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{sDateTime1}' AND '{sDateTime2}' GROUP BY CONVERT(varchar(13),TestTime,120) UNION ALL SELECT '合计' as '时间', SUM(ProdIn) '总数', SUM(ProdOut) 'OK总数', AVG(Ppm) 'PPM均值', cast(ROUND(AVG(JiaDL)*100,1) as nvarchar(20))+'%' 稼动率均值,优率 as '优率' FROM (SELECT FDate,sum(ProdIn) ProdIn, SUM(ProdOut) ProdOut,AVG(Ppm) Ppm, cast(ROUND(AVG(JiaDL)*100,1) as nvarchar(20))+'%' JiaDL, cast(case when (sum(ProdIn))>0 then (ROUND(cast(isnull(sum(ProdOut),0) as float)/cast(isnull(sum(ProdIn),0) as float)*100,2)) else 0 end as nvarchar(10) )+'%' 优率 FROM Hourprod WHERE TestTime BETWEEN '{sDateTime1}' AND '{sDateTime2}' GROUP BY FDate) as t ";*/ string strsql = $@"SELECT CONVERT(varchar(13), TestTime, 120) AS 时间, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL) * 100, 1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdIn) > 0 THEN ROUND(CAST(ISNULL(SUM(ProdOut), 0) AS float) / CAST(ISNULL(SUM(ProdIn), 0) AS float) * 100, 2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 FROM Hourprod WHERE TestTime BETWEEN '{sDateTime1}' AND '{sDateTime2}' GROUP BY CONVERT(varchar(13), TestTime, 120) UNION ALL SELECT '合计' AS 时间, SUM(ProdIn) AS 总数, SUM(ProdOut) AS OK总数, AVG(Ppm) AS PPM均值, CAST(ROUND(AVG(JiaDL) * 100, 1) AS nvarchar(20)) + '%' AS 稼动率均值, CAST(CASE WHEN SUM(ProdIn) > 0 THEN ROUND(CAST(SUM(ProdOut) AS float) / CAST(SUM(ProdIn) AS float) * 100, 2) ELSE 0 END AS nvarchar(10)) + '%' AS 优率 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 GetInTime(string strBarCode) { string strSql = $@"SELECT [TestTime] ,[BarCode] ,[Result] ,[Remark] FROM [dbo].[AGearEntity] WHERE BarCode = '{strBarCode}' ORDER BY TestTime ASC"; return strSql; } /// /// 获取挑战件条码列表 /// /// /// public string GetChallengeCode(string strProdType = "") { string strSql = @"SELECT * FROM Challenge "; if (strProdType != "") { strSql += string.Format(" where ChallengeBarCode='{0}'", strProdType); } strSql += " order by ChallengeBarCode"; return strSql; } } }