using System; using System.Collections.Generic; 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}' 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) { 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 + "' "; } } else if (type == 1) { strSql = @"SELECT CONVERT(varchar,[CSBYHASCANNINGTIME], 120) 时间 ,[CSBYHPROCESSNAME] 工序名 ,[CSBYHSCHEDULE] 班次 ,[A_B] 芯包 ,[CSBYHCODEA] 卷芯码 ,[CSBYHOUTSTATIONJUDGMENTRESULT] 出站判定结果 ,[Remark] 备注 ,[RethrowNum] 复投次数 ,[CSBYHWEIGHTRESULTA1] 芯包重量判定结果 ,[CSBYHTHICKNESSTESTJUDGERESULTA] 芯包测厚位移判定结果 ,[ThicknessPressureResult] 芯包测厚压力判定结果 ,[PreweldResult] 焊前CCD检测结果 ,[CSBYHPOLARITYRESULTA] 芯包极性检测结果 ,[CSBYHCUTADHESIONJUDGERESULTA] 电芯裁切粘连判定结果 ,[CSBYHCUTBURRJUDGERESULTA] 电芯裁切毛刺判定结果 ,[CSBYHSOLDERJUDGERESULTA] 芯包铜焊印位置判定结果 ,[AluminiumWeldPositionResult1] 芯包铝焊印位置判定结果 ,[PreweldResult] 焊前CCD检测结果 ,[CSBYHFRONTEARCRACKLEJUDGERESULTA] 芯包正面极耳撕裂判定结果 ,[CSBYHBACKEARCRACKLEJUDGERESULTA] 芯包背面极耳撕裂判定结果 ,[CSBYHFRONTEARFLODINGRESULTA] 芯包正面极耳翻折检测结果 ,[CSBYHBACKEARFLODINGRESULTA] 芯包背面极耳翻折检测结果 ,[CSBYHCUTADHESIONRESULTA] 电芯裁切粘连结果 ,[CSBYHCUTBURRRESULTA] 电芯裁切毛刺结果 ,[CSBYHFRONTEARCRACKLERESULTA] 芯包正面极耳撕裂裂纹检测结果 ,[CSBYHBACKEARCRACKLERESULTA] 芯包背面极耳撕裂裂纹检测结果 ,[CSBYHWEIGHTNOA1] 芯包称重工位号 ,[CSBYHTHICKNESSTESTSTATIONNOA] 芯包测厚工位号 ,[CSBYHTOOLNOA] 芯包治具号 ,[CSBYHCUWELDINGSTATIONNOA1] 芯包铜焊1工位号 ,[CSBYHCUWELDINGSTATIONNOA2] 芯包铜焊2工位号 ,[CSBYHCUWELDINGSTATIONNOA3] 芯包铜焊3工位号 ,[CSBYHCUWELDHEADCOUNTA1] 芯包铜焊1焊头次数 ,[CSBYHCUWELDHEADCOUNTA2] 芯包铜焊2焊头次数 ,[CSBYHCUWELDHEADCOUNTA3] 芯包铜焊3焊头次数 ,[CSBYHCUWELDBASECOUNTA1] 芯包铜焊1焊座次数 ,[CSBYHCUWELDBASECOUNTA2] 芯包铜焊2焊座次数 ,[CSBYHCUWELDBASECOUNTA3] 芯包铜焊3焊座次数 ,[CSBYHALWELDINGSTATIONNOA1] 芯包铝焊1工位号 ,[CSBYHALWELDINGSTATIONNOA2] 芯包铝焊2工位号 ,[CSBYHALWELDINGSTATIONNOA3] 芯包铝焊3工位号 ,[CSBYHALWELDHEADCOUNTA1] 芯包铝焊1焊头次数 ,[CSBYHALWELDHEADCOUNTA2] 芯包铝焊2焊头次数 ,[CSBYHALWELDHEADCOUNTA3] 芯包铝焊3焊头次数 ,[CSBYHALWELDBASECOUNTA1] 芯包铝焊1焊座次数 ,[CSBYHALWELDBASECOUNTA2] 芯包铝焊2焊座次数 ,[CSBYHALWELDBASECOUNTA3] 芯包铝焊3焊座次数 ,[CopperWeldHeadLife] 铜焊头预警寿命 ,[CopperWeldSeatLife] 铜焊座预警寿命 ,[AluminiumWeldHeadLife] 铝焊头预警寿命 ,[AluminiumWeldSeatLife] 铝焊座预警寿命 ,[CuttingKnifeLife] 裁切刀使用寿命 ,[CSBYHCUTABCUTTERCOUNTA] 电芯铜极耳切刀使用次数 ,[CSBYHALTABCUTTERCOUNTA] 电芯铝极耳切刀使用次数 ,[CSBYHCUTABCUTTERNOA] 电芯铜极耳切刀编号 ,[CSBYHALTABCUTTERNOA] 电芯铝极耳切刀编号 ,[CSBYHINSTATIONTIME] 进站时间 ,[CSBYHOUTSTATIONTIME] 出站时间 ,[CSBYHWEIGHTA1] 芯包重量 ,[CSBYHTHICKNESSTESTPRESSUREA] 芯包测厚压力实际值 ,[CSBYHTHICKNESSTESTPRESSURESIZEA] 芯包测厚尺寸1 ,[ThicknessMeasureDisplacement] 芯包测厚尺寸2 ,[CSBYHCUTABLENGTHA] 电芯铜极极耳长度 ,[CSBYHCUTABWIDTHA] 电芯铜极极耳宽度 ,[CSBYHALTABLENGTHA] 电芯铝极极耳长度 ,[CSBYHALTABWIDTHA] 电芯铝极极耳宽度 ,[CSBYHTOPTOSOLDERDISTANCEA] 芯包铜顶部到焊印间距1 ,[CSBYHTOPTOSOLDERDISTANCEA2] 芯包铜顶部到焊印间距2 ,[AluminumToWeld1] 芯包铝顶部到焊印间距1 ,[AluminumToWeld2] 芯包铝顶部到焊印间距2 ,[CSBYHSOLDERTOEARDISTANCEA] 芯包焊印边缘到极耳边缘间距 ,[CSBYHCUPRESSUREA1] 芯包铜焊1接压力实际值 ,[CSBYHCUPOWERA1] 芯包铜焊1功率实际值 ,[CSBYHCUENERGYA1] 芯包铜焊1能量实际值 ,[CSBYHCUAMPLITUDEA1] 芯包铜焊1振幅实际值 ,[CSBYHCUTIMEA1] 芯包铜焊1时间实际值 ,[CSBYHCUPRESSUREA2] 芯包铜焊2压力实际值2 ,[CSBYHCUPOWERA2] 芯包铜焊2功率A实际值 ,[CSBYHCUENERGYA2] 芯包铜焊2接能量实际值 ,[CSBYHCUAMPLITUDEA2] 芯包铜焊2振幅实际值 ,[CSBYHCUTIMEA2] 芯包铜焊2时间实际值 ,[CSBYHCUPRESSUREA3] 芯包铜焊3压力实际值 ,[CSBYHCUPOWERA3] 芯包铜焊3功率A实际值 ,[CSBYHCUENERGYA3] 芯包铜焊3能量实际值 ,[CSBYHCUAMPLITUDEA3] 芯包铜焊3振幅实际值 ,[CSBYHCUTIMEA3] 芯包铜焊3时间实际值 ,[CSBYHALPRESSUREA1] 芯包铝焊1压力实际值 ,[CSBYHALPOWERA1] 芯包铝焊1功率实际值 ,[CSBYHALENERGYA1] 芯包铝焊1能量实际值 ,[CSBYHALAMPLITUDEA1] 芯包铝焊1振幅实际值 ,[CSBYHALTIMEA1] 芯包铝焊1时间实际值 ,[CSBYHALPRESSUREA2] 芯包铝焊2压力实际值 ,[CSBYHALPOWERA2] 芯包铝焊2功率实际值 ,[CSBYHALENERGYA2] 芯包铝焊2能量实际值 ,[CSBYHALAMPLITUDEA2] 芯包铝焊2振幅实际值 ,[CSBYHALTIMEA2] 芯包铝焊2时间实际值 ,[CSBYHALPRESSUREA3] 芯包铝焊3压力实际值 ,[CSBYHALPOWERA3] 芯包铝焊3功率实际值 ,[CSBYHALENERGYA3] 芯包铝焊3能量实际值 ,[CSBYHALAMPLITUDEA3] 芯包铝焊3振幅实际值 ,[CSBYHALTIMEA3] 芯包铝焊3时间实际值 ,[CSBYHWEIGHTA1MAXSETTING] 芯包重量设定值最大值 ,[CSBYHWEIGHTA1MINSETTING] 芯包重量设定值最小值 ,[CSBYHTHICKNESSTESTPRESSUREMAXSETTINGA] 芯包侧厚压力设定最大值 ,[CSBYHTHICKNESSTESTPRESSUREMINSETTINGA] 芯包侧厚压力设定最小值 ,[CSBYHTHICKNESSTESTPRESSUREMAXSIZEA] 芯包侧厚最大尺寸 ,[CSBYHTHICKNESSTESTPRESSUREMINSIZEA] 芯包侧厚最小尺寸 ,[CSBYHCUWELDINGPRESSUREMAXSETTING1] 铜焊1压力设定最大值 ,[CSBYHCUWELDINGPRESSUREMINSETTING] 铜焊1压力设定最小值 ,[CSBYHCUWELDINGPOWERMAXSETTING1] 铜焊1功率设定值最大值 ,[CSBYHCUWELDINGPOWERMINSETTING1] 铜焊1功率设定值最小值 ,[CSBYHCUWELDINGENERGYMAXSETTING1] 铜焊1能量设定值最大值 ,[CSBYHCUWELDINGENERGYMINSETTING1] 铜焊1能量设定值最小值 ,[CSBYHCUWELDINGAMPLITUDEMAXSETTING1] 铜焊1振幅设定值最大值 ,[CSBYHCUWELDINGAMPLITUDEMINSETTING1] 铜焊1振幅设定值最小值 ,[CSBYHALWELDINGPRESSUREMAXSETTING1] 铝焊1压力设定值最大值 ,[CSBYHALWELDINGPRESSUREMINSETTING] 铝焊1压力设定值最小值 ,[CSBYHALWELDINGPOWERMAXSETTING1] 铝焊1功率设定值最大值 ,[CSBYHALWELDINGPOWERMINSETTING1] 铝焊1功率设定值最小值 ,[CSBYHALWELDINGENERGYMAXSETTING1] 铝焊1能量设定值最大值 ,[CSBYHALWELDINGENERGYMINSETTING1] 铝焊1能量设定值最小值 ,[CSBYHALWELDINGAMPLITUDEMAXSETTING1] 铝焊1振幅设定值最大值 ,[CSBYHALWELDINGAMPLITUDEMINSETTING1] 铝焊1振幅设定值最小值 ,[Result] 结果 ,case when [Flag]=1 then '已上传' else '未上传' end 上传状态 FROM [dbo].[BGearEntity] where CSBYHASCANNINGTIME >= '" + strDate1 + "' and CSBYHASCANNINGTIME <= '" + strDate2 + "' "; if (strBarCode != "") { strSql += " and CSBYHCODEA like '%" + strBarCode + "' "; } } } 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(10))+'%' 稼动率均值, 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(10))+'%' 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 "; 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(10))+'%' 稼动率均值, 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(10))+'%' 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 "; 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(JiaDL*100,1)as nvarchar(10))+'%' 稼动率均值, 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),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(10))+'%' 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 "; 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) 时间, ProdIn 总数, ProdOut OK总数,Ppm PPM均值, cast(ROUND(JiaDL*100,1)as nvarchar(10))+'%' 稼动率均值, 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 '{sDateTime1}' AND '{sDateTime2}' 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(10))+'%' 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 "; 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; } } }