You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1426 lines
54 KiB
C#

using Mesnac.Compressor.Data;
using Mesnac.Compressor.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace Mesnac.Compressor.Station
{
public class Common:BasePLC
{
/// <summary>
/// 需要条码绑定时用这个函数
/// </summary>
/// <param name="RFID"></param>
/// <param name="barcode">系统内部生成的条码</param>
/// <param name="semibarcode">物料上面扫的条码</param>
/// <param name="stationID"></param>
/// <param name="OKNG"></param>
/// <returns></returns>
public bool UpdateTray(string RFID, string barcode, string semibarcode,string stationID,int OKNG)
{
try
{
DbHandler dbHelper = new DbHandler();
StringBuilder sb = new StringBuilder();
sb.Append("UPDATE dbo.T_RP_WorkTrayRealTimeInfo SET ");
sb.Append("barCode='").Append(barcode).Append("',");
sb.Append("SemiBarcode='").Append(semibarcode).Append("',");
sb.Append("CurrentStation='").Append(stationID).Append("',");
sb.Append("State='").Append(OKNG.ToString()).Append("',");
sb.Append("updateTime='").Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("' ");
sb.Append("WHERE RFIDNum='").Append(RFID).Append("'");
dbHelper.ExecSql(sb.ToString());
return true;
}
catch
{
return false;
}
}
/// <summary>
///
/// </summary>
/// <param name="RFID"></param>
/// <param name="barcode"></param>
/// <param name="stationID"></param>
/// <param name="OKNG"></param>
/// <returns></returns>
public bool UpdateTray(string RFID, string barcode, string stationID, int OKNG)
{
try
{
DbHandler dbHelper = new DbHandler();
StringBuilder sb = new StringBuilder();
sb.Append("UPDATE dbo.T_RP_WorkTrayRealTimeInfo SET ");
sb.Append("barCode='").Append(barcode).Append("',");
sb.Append("CurrentStation='").Append(stationID).Append("',");
sb.Append("State='").Append(OKNG.ToString()).Append("',");
sb.Append("updateTime='").Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("' ");
sb.Append("WHERE RFIDNum='").Append(RFID).Append("'");
dbHelper.ExecSql(sb.ToString());
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 重投更新条码信息,重投需要根据拆解时的指定工位来
/// </summary>
/// <param name="RFID"></param>
/// <param name="barcode"></param>
/// <param name="stationID"></param>
/// <param name="OKNG"></param>
/// <returns></returns>
public bool UpdateTrayChongtou(string RFID, string barcode)
{
StringBuilder sb = new StringBuilder();
DbHandler db = new DbHandler();
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
sb.Append("EXEC SP_Pro_ChongTou '");
sb.Append(RFID).Append("','");
sb.Append(barcode).Append("'");
db.dbHelper.CommandText = sb.ToString();
return Convert.ToInt32(db.dbHelper.ToScalar()) == 0;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString()));
return false;
}
}
public bool InsertHistoryTray(string RFID, string barcode, string stationid)
{
try
{
StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO dbo.T_RP_WorkTrayHistoryInfo(barCode,RFIDNum,CurrentStation) VALUES('");
sb.Append(barcode).Append("', '").Append(RFID).Append("', '").Append(stationid).Append("')");
DbHandler db = new DbHandler();
db.ExecSql(sb.ToString());
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 通过壳体条码查找内部M主条码
/// </summary>
/// <param name="semibarcode"></param>
/// <returns></returns>
public string GetMainBarcode(string semibarcode)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append("select top(1)barcode from T_SY_TraceState ");
sb.Append(" where SemiBarcode_A='").Append(semibarcode).Append("' order by BeginTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("获取系统条码语句错误:" + sb.ToString() + "/r/n" + e.ToString());
return "";
}
}
public string GetCurrentStationByRFID(string RFID)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append("SELECT CurrentStation FROM dbo.T_RP_WorkTrayRealTimeInfo ");
sb.Append(" where RFIDNum='").Append(RFID).Append("'");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("GetCurrentStationByRFID获取当前工位语句错误:" + sb.ToString() + "/r/n" + e.ToString());
return "";
}
}
/// <summary>
///
/// </summary>
/// <param name="RFID"></param>
/// <returns></returns>
public string GetTraySemiBarcode(string RFID)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append("select semibarcode from T_RP_WorkTrayRealTimeInfo ");
sb.Append(" where RFIDNum='").Append(RFID).Append("'");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("获取条码语句错误:" + sb.ToString() + "/r/n" + e.ToString());
return "";
}
}
/// <summary>
/// 判断数据是否数已经上传
/// </summary>
/// <param name="station"></param>
/// <returns></returns>
public bool CheckNewData(StationInfo station, string barcode)
{
return true;
if (string.IsNullOrEmpty(barcode))
{
barcode = GetTraySemiBarcode(station.Data.RFIDNo);
}
if (string.IsNullOrEmpty(barcode))
{
ICSharpCode.Core.LoggingService.Warn("CheckNewData-" + station.StationCode + " 通过RFID号" + station.Data.RFIDNo + "未找到对应条码");
return false;
}
station.Data.semibacode = barcode;
if (!JuadgeMaskID(barcode, station.Data.MaskID.ToString(), station.TableName))
{
//ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + "的RFID" + station.Data.RFIDNo + "数据已上传。条码号:" + barcode + " 任务号:" + station.Data.MaskID.ToString());
return false;
}
return true;
}
public void SaveData(StationInfo station)
{
SqlHelper sh = new SqlHelper();
DbHandler db = new DbHandler();
//获取系统A条码
string barcode = GetTraySemiBarcode(station.Data.RFIDNo);
//获取系统M码
string Mainbarcode = GetMainBarcode(barcode);
string martercode = station.Data.MaterialBarcode;
if (string.IsNullOrEmpty(barcode))
{
ICSharpCode.Core.LoggingService.Warn(station.StationCode + " 通过RFID号" + station.Data.RFIDNo + "未找到对应条码" + barcode);
return;
}
station.Data.semibacode = barcode;
station.Data.MainBarcode = Mainbarcode;
ICSharpCode.Core.LoggingService.Warn("开始更新当前工位信息:" + station.StationCode + " RFID号" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode);
UpdateTraceStation(station.stationID, Mainbarcode);
//支线条码
if (station.Data.MaterialBarcodeUpdate)
{
station.Data.semibacode = barcode;
station.Data.MainBarcode = Mainbarcode;
station.Data.MaterialBarcode = martercode;
if (station.Data.MaterialBarcode != "")
{
ICSharpCode.Core.LoggingService.Warn("开始更新物料信息:" + station.StationCode + " RFID号" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode);
UpdateMaterialCode(station);
}
ICSharpCode.Core.LoggingService.Warn("开始上传支线信息:" + station.StationCode + " RFID号" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode);
updateSubInfo(station);
}
//更新当前工位
///这里要看看换线是否会重复插入数据
if (station.Data.BarcodeUpdate)
{
if (station.IfMainline)
{
UpdateTraceBarcodeStation(station);
}
//updatebarcode(station);
}
//插入新数据
string InsertSql = sh.DataInsertSql2(station);
db.ExecSql(InsertSql);
//如果是重投品,跟新重投次数
//if (station.Data.Restart && !string.IsNullOrEmpty(station.Data.ProductBarcode))
//{
// UpdaterestartCount(station.Data.ProductBarcode);
// ICSharpCode.Core.LoggingService.Debug("更新重投次数成功");
//}
//不合格插入不合格工位
if (station.Data.ProductOkNg == 2)
{
UpdateTraceNgStation(station);
//UnbandTray(station);
}
//更新托盘信息
UpdateTray(station.Data.RFIDNo, Mainbarcode, station.Data.semibacode, station.stationID, station.Data.ProductOkNg);
ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + " 保存数据成功。托盘号:" + station.Data.RFIDNo);
}
/// <summary>
///
/// </summary>
public void SaveStationData(StationInfo station, StationType stationType)
{
switch (stationType)
{
case StationType.FirstStation:
SaveData(station);
break;
case StationType.NormarlStation:
SaveData(station);
break;
case StationType.ChangeLineStation:
SaveData(station);
break;
case StationType.LineEnd:
SaveData(station);
break;
default:
SaveData(station);
break;
}
}
///上传支线信息
private void updateSubInfo(StationInfo station)
{
foreach (var sub in station.Data.subLineList)
{
if (!string.IsNullOrEmpty(sub.barcode))
{
//判断是否存在信息,存在则更新
ICSharpCode.Core.LoggingService.Warn("上传支线信息:" + station.StationCode + " RFID号" + station.Data.RFIDNo + "产品码:" + station.Data.semibacode + "主线码:" + station.Data.MainBarcode + "支线条码:"+ sub.barcode);
SubInfoUpdate(sub.barcode, sub.lineID, station.Data.semibacode);
}
}
}
/// <summary>
/// 上传支线信息
/// </summary>
/// <param name="barcode"></param>
/// <param name="lineid"></param>
/// <param name="semibacode"></param>
/// <returns></returns>
public bool SubInfoUpdate(string barcode, string lineid, string semibacode)
{
StringBuilder sb = new StringBuilder();
DbHandler db = new DbHandler();
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
sb.Append("EXEC SP_Pro_SubLineInfo '");
sb.Append(barcode).Append("','");
sb.Append(lineid).Append("','");
sb.Append(semibacode).Append("'");
db.dbHelper.CommandText = sb.ToString();
return Convert.ToInt32(db.dbHelper.ToScalar()) == 0;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString()));
return false;
}
}
/// <summary>
/// 更新trace表产品条码和T_RP_SemiProInfo表产品条码
/// </summary>
/// <param name="station"></param>
private void updatebarcode(StationInfo station)
{
if (string.IsNullOrEmpty(station.Data.ProductBarcode))
{
return;
}
UpdateSemiInfo(station);
if (station.IfMainline)
{
//这个现在好像没用
UpdateTraceBarcodeStation(station);
//这边是个坑啊 yinzf 2023-3-4 delete
if (station.stationID != "18" || station.stationID != "24")
{
ICSharpCode.Core.LoggingService.Warn("更新trace表产品条码和T_RP_SemiProInfo表产品条码,工位:"+ station.stationID)
; SubInfoUpdate(station.Data.ProductBarcode, station.lineID, station.Data.semibacode);
}
}
}
private void UpdateSemiInfo(StationInfo station)
{
StringBuilder sb = new StringBuilder();
try
{
//去掉换行符
if (!string.IsNullOrEmpty(station.Data.semibacode))
{
string barcode = station.Data.semibacode.Replace("\r", "").Replace("\n", "").Replace("\t", "");
sb.Append(" UPDATE dbo.T_RP_SemiProInfo SET ProductBarcode='").Append(station.Data.ProductBarcode);
sb.Append("' WHERE SemiBarcode='").Append(barcode).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
db.dbHelper.ExecuteNonQuery();
}
else
{
ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误,station.Data.semibacode为null!");
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误:" + sb.ToString() + "/r/n" + e.ToString());
}
}
/// <summary>
/// 更新物料信息
/// </summary>
/// <param name="station"></param>
private void UpdateMaterialCode(StationInfo station)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" insert into dbo.T_RP_MaterialBarcode(barcode,productCode,stationID) values('");
sb.Append(station.Data.MainBarcode).Append("','");
sb.Append(station.Data.MaterialBarcode).Append("','");
sb.Append(station.stationID).Append("')");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = sb.ToString();
ICSharpCode.Core.LoggingService.Info("更新物料信息:" + sb.ToString() + station.Data.MainBarcode +","+ station.Data.MaterialBarcode + "," + station.stationID);
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("物料条码更新出错:" + sb.ToString() + "/r/n" + e.ToString());
}
}
/// <summary>
/// 插入物料关系表
/// </summary>
/// <param name="station"></param>
public void InsertBarcodeRelationShip(string SemiBarcode,string ProductBarcode,string SemiBarcode_Line,int LineID)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" insert into dbo.T_RP_BarcodeRelationShip(SemiBarcode,ProductBarcode,SemiBarcode_Line,LineID,StateFlag) values('");
sb.Append(SemiBarcode).Append("','");
sb.Append(ProductBarcode).Append("','");
sb.Append(SemiBarcode_Line).Append("','");
sb.Append(LineID).Append("','");
sb.Append(1).Append("')");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = sb.ToString();
ICSharpCode.Core.LoggingService.Info("插入物料信息:" + sb.ToString() + SemiBarcode + "," + ProductBarcode + "," + LineID);
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("物料信息插入出错:" + sb.ToString() + "/r/n" + e.ToString());
}
}
public void UpdateTraceNgStation(StationInfo station)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" UPDATE dbo.T_SY_TraceState SET NGStationID='").Append(station.stationID);
sb.Append("' WHERE barcode='").Append(station.Data.MainBarcode).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace表NG工位更新错误:" + sb.ToString() + "/r/n" + e.ToString());
}
}
/// <summary>
/// 更新当前工位
/// </summary>
/// <param name="station"></param>
public void UpdateTraceStation(string stationID,string MainBarcode)
{
DbHandler db = new DbHandler();
if (db.dbHelper == null)
{
return;
}
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
string sql = "Exec SP_Pro_UpdateTraceStationBybarcode @CurrentStationID,@MainBarcode";
db.dbHelper.AddParameter("@CurrentStationID", stationID);
db.dbHelper.AddParameter("@MainBarcode", MainBarcode);
db.dbHelper.CommandText = sql;
ICSharpCode.Core.LoggingService.Info("更新当前工位信息:" + sql + stationID + MainBarcode);
db.dbHelper.ExecuteNonQuery();
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString()));
}
}
/// <summary>
/// 更新当前工位
/// </summary>
/// <param name="station"></param>
public void UpdateTraceBarcodeStation(StationInfo station)
{
StringBuilder sb = new StringBuilder();
DbHandler db = new DbHandler();
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
sb.Append(" UPDATE dbo.T_SY_TraceState SET ProductBarcode='").Append(station.Data.ProductBarcode);
sb.Append("' WHERE barcode='").Append(station.Data.MainBarcode).Append("' ");
db.dbHelper.CommandText = sb.ToString();
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace工位更新错误:" + sb.ToString() + "/r/n" + e.ToString());
}
}
/// <summary>
/// 判断当前条码和任务号是否上传过
/// </summary>
/// <param name="barcode"></param>
/// <param name="MaskID"></param>
/// <param name="TableName"></param>
/// <returns>上传过返回false</returns>
public bool JuadgeMaskID(string barcode, string MaskID, string TableName)
{
StringBuilder sb = new StringBuilder();
DbHandler db = new DbHandler();
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
sb.Append("EXEC SP_Pro_Changeflag '");
sb.Append(barcode).Append("','");
sb.Append(MaskID).Append("','");
sb.Append(TableName).Append("'");
db.dbHelper.CommandText = sb.ToString();
return Convert.ToInt32(db.dbHelper.ToScalar()) == 0;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString()));
return false;
}
}
/// <summary>
/// 更新当前工位
/// </summary>
/// <param name="station"></param>
public void UpdaterestartCount(string Barcode)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" exec SP_Pro_UpdateRestartCount '").Append(Barcode).Append("'");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("更新重投次数错误:" + sb.ToString() + "/r/n" + e.ToString());
}
}
/// <summary>
/// 生成新的产品信息
/// </summary>
/// <param name="station"></param>
public string CreatNewProduct(StationInfo station)
{
string MainBarcode = "";
try
{
DbHandler db = new DbHandler();
//StationInsertInfo sinsert = new StationInsertInfo();
//生成系统条码,
MainBarcode = db.GetLastMainBarcode("M");
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error(e.ToString());
}
return MainBarcode;
}
/// <summary>
/// 生成新的产品信息
/// </summary>
/// <param name="station"></param>
public string CreatNewSemibarcode(string Head, string lineID)
{
string semibarcode = "";
try
{
DbHandler db = new DbHandler();
//生成系统条码,
semibarcode = db.GetLastSemiBarcode(Head, lineID);
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error(e.ToString());
}
return semibarcode;
}
/// <summary>
/// 解除绑定
/// </summary>
/// <param name="station"></param>
public void UnbandTray(StationInfo station)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append("Update T_RP_WorkTrayRealTimeInfo set barcode='',Semibarcode='',state='0' ");
sb.Append(" where RFIDNum='").Append(station.Data.RFIDNo).Append("'");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("获取条码语句错误:" + sb.ToString() + "/r/n" + e.ToString());
}
}
public string getChongTouState(string productbarcode , string abarcode)
{
StringBuilder sb = new StringBuilder();
try
{
if (abarcode == "" && productbarcode!= "")
{
sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE productbarcode='").Append(productbarcode).Append("' order by BeginTime desc");
}
else if (productbarcode == "" && abarcode != "")
{
sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE SemiBarcode_A='").Append(abarcode).Append("' order by BeginTime desc");
}
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString());
return "";
}
}
public string getSemiBacode(string productbarcode)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) semibarcode_A FROM dbo.T_SY_TraceState WHERE productbarcode='").Append(productbarcode).Append("' order by BeginTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString());
return "";
}
}
#region 判断是否工作代码yinzf 2023-3-1
public bool PreStationState(StationInfo station)
{
return false;
}
public string GetFirstStationIDByStationID(string StationID)
{
string Flag = "";
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" select PreStationID from T_BD_SubStation where StationID ='").Append(StationID).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception ex)
{
return Flag;
}
}
/// <summary>
/// 换线工位互锁验证
/// </summary>
/// <param name="stationID"></param>
/// <param name="RFID"></param>
/// <returns></returns>
public bool ChangeLineStationHaveWork(StationInfo station)
{
StringBuilder sb = new StringBuilder();
DbHandler db = new DbHandler();
try
{
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
sb.Append("EXEC SP_Pro_ChangeLineCurruntState '");
sb.Append(station.Data.ProductBarcode).Append("','");
sb.Append(station.stationID).Append("'");
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
int result = Convert.ToInt32(obj);
if (result > 1)
{
return false;
}
else
{
return true;
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(string.Format(ex.ToString()));
return false;
}
}
public bool IsReStartWork(StationInfo stat)
{
bool bFlag = false;
try
{
//先根据托盘号查询A码
string Abarcode = GetTraySemiBarcode(stat.Data.RFIDNo);
if (!string.IsNullOrEmpty(Abarcode))
{
string ISDis = getChongTouState("", Abarcode);
if (!string.IsNullOrEmpty(ISDis))
{
//重投
if (ISDis == "1")
{
ICSharpCode.Core.LoggingService.Debug(stat.StationCode + "开始查询[" + stat.Data.RFIDNo + "]托盘的产品为重投");
bFlag = true;
}
else
{
bFlag = false;
}
}
}
return bFlag;
}
catch (Exception ex)
{
return bFlag;
}
}
/// <summary>
/// 判断托盘是否为空
/// state=0则表示空state=2表示不合格state=1表示合格
/// </summary>
/// <param name="stat"></param>
/// <returns></returns>
public bool TrayIsNull(StationInfo stat,out WorkTray tray)
{
tray = new WorkTray();
try
{
DbHandler db = new DbHandler();
//判断产品当前状态
ICSharpCode.Core.LoggingService.Debug(stat.StationCode + "开始查询["+ stat.Data.RFIDNo + "]托盘信息");
tray = db.GetProductQuality(stat.Data.RFIDNo);
if (!tray.SemiBarcode.Equals(string.Empty))
{
return false;
}
else
{
ICSharpCode.Core.LoggingService.Warn("查询[" + stat.Data.RFIDNo + "]托盘所属产品主码未绑定");
return true;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString());
return false;
}
}
/// <summary>
/// 通过RFID获取当前托盘信息
/// </summary>
/// <param name="stat"></param>
/// <returns></returns>
public WorkTray GetTrayInfoByRFID(StationInfo stat)
{
WorkTray tray = new WorkTray();
try
{
DbHandler db = new DbHandler();
//判断产品当前状态
tray = db.GetProductQuality(stat.Data.RFIDNo);
return tray;
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString());
return tray;
}
}
/// <summary>
/// 通过物料条码获取当前托盘信息
/// </summary>
/// <param name="stat"></param>
/// <returns></returns>
public WorkTray GetTrayInfoByBarcode(StationInfo stat)
{
WorkTray tray = new WorkTray();
try
{
DbHandler db = new DbHandler();
//判断产品当前状态
tray = db.GetTrayInfoByBarcode(stat.Data.MainBarcode);
return tray;
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Warn("TrayIsNull函数错误" + e.ToString());
return tray;
}
}
/// <summary>
/// 判断产品当前质量
/// </summary>
/// <param name="rfid"></param>
/// <returns></returns>
public bool ProductQuality(WorkTray workTray)
{
return workTray.OKNG == 1;
}
/// <summary>
/// 上一工位是否已经做了看currentstion
/// </summary>
/// <param name="rfid"></param>
/// <returns></returns>
public bool PreStationInfo(StationInfo stat,string Epc)
{
DbHandler db = new DbHandler();
bool pre = db.GetPreWorkInfo(Epc, stat.stationID);
if (!pre)
{
ICSharpCode.Core.LoggingService.Warn("工位:" + stat.StationName + ",信息:托盘 " + Epc + ":没有上一工位工作信息");
}
return pre;
}
/// <summary>
/// 获取当前工位质量
/// </summary>
/// <param name="sta"></param>
/// <returns></returns>
public bool CurrentStationInfo(StationInfo stat,string epc)
{
DbHandler db = new DbHandler();
bool workready = db.CurrentStationHaveWork(stat.stationID, epc);
if (workready)
{
ICSharpCode.Core.LoggingService.Warn("工位:" + stat.StationName + ",信息:托盘 " + epc + "当前工位已完工" );
}
return workready;
}
public string LastWorkProductionInfo(string barcode,string TableName)
{
string iflag = "";
try
{
StringBuilder sb = new StringBuilder();
sb.Append(" SELECT TOP(1) State FROM " + TableName + " WHERE ScanBarcode='").Append(barcode).Append("' order by InsertTime desc ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
return obj.ToString();
}
else
{
return "";
}
}
catch (Exception ex)
{
return iflag;
}
}
public bool IsReStartProduction(string barcode)
{
bool iflag = false;
//根据主线码查询是否重投
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) ISDis FROM dbo.T_SY_TraceState WHERE SemiBarcode_A='").Append(barcode).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
if (obj.ToString() != "0")
{
iflag = true;
}
return iflag;
}
else
{
return iflag;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("Trace工位查询错误:" + sb.ToString() + "/r/n" + e.ToString());
return iflag;
}
}
public bool Chongtou(StationInfo station)
{
ICSharpCode.Core.LoggingService.Debug("重投数据");
//判断是否为重投
string ISDis = getChongTouState(station.Data.ProductBarcode, "");
if (ISDis == "2")
{
//获取A码
ICSharpCode.Core.LoggingService.Debug("获取产品码:"+ station.Data.ProductBarcode);
station.Data.semibacode = getSemiBacode(station.Data.ProductBarcode);
UpdateTrayChongtou(station.Data.RFIDNo, station.Data.semibacode);
//判断当前工位是否可以过滤
if (this.CurrentStationInfo(station, station.Data.RFIDNo))
{
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG);
return true;
}
else
{
return false;
}
}
//没查询到绑定信息
else if (ISDis == "")
{
//插入trace表
string ABarCode = CreatNewSemibarcode("A", "1");
//创建新的产品
string mainBarcode = CreatNewProduct(station);
DbHandler db = new DbHandler();
//查询当前的机种型号,不是机种要具体到型号
string machineID = db.GetNowProductionInfo();
db.InsertTrace(mainBarcode, ABarCode, station.Data.ProductBarcode, machineID);
return false;
}
else
{
return false;
}
}
public bool IsSelectAllStationData(string stationID)
{
bool iflag = false;
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" select IsNGStation from T_BD_SubStation WHERE StationID='").Append(stationID).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
if (obj.ToString() != "0")
{
iflag = true;
}
return iflag;
}
else
{
return iflag;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("MES功能开关状态查询错误:" + sb.ToString() + "/r/n" + e.ToString());
return iflag;
}
}
public bool IsOpen(string stationID)
{
bool iflag = false;
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" select IsShow from T_BD_SubStation WHERE StationID='").Append(stationID).Append("' ");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
if (obj.ToString() != "0")
{
iflag = true;
}
return iflag;
}
else
{
return iflag;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("MES功能开关状态查询错误:" + sb.ToString() + "/r/n" + e.ToString());
return iflag;
}
}
/// <summary>
/// 静盘工位检验质量
/// </summary>
/// <param name="barcode"></param>
/// <returns></returns>
public bool GetJPProductionQuality(string barcode)
{
bool iflag = false;
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) State FROM dbo.T_RP_StationPara_S320 WHERE ScanBarcode= '").Append(barcode).Append("' ").Append(" order by InsertTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
if (obj.ToString() == "1")
{
iflag = true;
}
return iflag;
}
else
{
return iflag;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("静盘工位信息查询错误:"+ barcode + sb.ToString() + "/r/n" + e.ToString());
return iflag;
}
}
/// <summary>
/// 通过静盘码查询动静盘绑定关系
/// </summary>
/// <param name="barcode"></param>
/// <returns></returns>
public DJPBarCodeRelationShip GetProductQuality(string JPBarCode)
{
DJPBarCodeRelationShip dJPBarCodeRelationShip = new DJPBarCodeRelationShip();
bool iflag = false;
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) * FROM dbo.T_DJP_BarCodeRelationShip WHERE JPBarCode= '").Append(JPBarCode).Append("' ").Append(" order by RecordTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
DataTable dt = db.dbHelper.ToDataTable();
if (dt != null && dt.Rows.Count > 0)
{
dJPBarCodeRelationShip.DPBarCode = dt.Rows[0]["DPBarCode"].ToString();
dJPBarCodeRelationShip.JPBarCode = dt.Rows[0]["JPBarCode"].ToString();
}
else
{
return dJPBarCodeRelationShip;
}
return dJPBarCodeRelationShip;
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("静盘工位信息查询错误:" + JPBarCode + sb.ToString() + "/r/n" + e.ToString());
return null;
}
}
public string GetSemiBarcodeByProductBarCode(string KT_BarCode)
{
string SemiBarcode = "";
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) SemiBarcode_A FROM dbo.T_SY_TraceState WHERE ProductBarcode= '").Append(KT_BarCode).Append("' ").Append(" order by BeginTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
SemiBarcode = obj.ToString();
return SemiBarcode;
}
else
{
return SemiBarcode;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("A码信息查询错误:" + KT_BarCode + sb.ToString() + "/r/n" + e.ToString());
return SemiBarcode;
}
}
public string GetMBarcodeByProductBarCode(string KT_BarCode)
{
string SemiBarcode = "";
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" SELECT TOP(1) Barcode FROM dbo.T_SY_TraceState WHERE ProductBarcode= '").Append(KT_BarCode).Append("' ").Append(" order by BeginTime desc");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
db.dbHelper.CommandText = sb.ToString();
var obj = db.dbHelper.ToScalar();
if (obj != null)
{
SemiBarcode = obj.ToString();
return SemiBarcode;
}
else
{
return SemiBarcode;
}
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("M码信息查询错误:" + KT_BarCode + sb.ToString() + "/r/n" + e.ToString());
return SemiBarcode;
}
}
public bool GetStationNGBySemiBarCode(string SemiBarCode)
{
bool iflag = false;
try
{
DbHandler db = new DbHandler();
if (db.dbHelper == null)
{
return iflag;
}
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
string sql = "Exec pro_AllProductionQualityInfo @BarCode";
db.dbHelper.AddParameter("@BarCode", SemiBarCode);
db.dbHelper.CommandText = sql;
DataSet ds = (DataSet)db.dbHelper.ToDataSet();
DataTable dt = ds.Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
//这里如果要判断最后一工位与倒数第二个工位互锁取ID=16
string s = dt.Rows[i]["State"].ToString();
if (dt.Rows[i]["State"].ToString() == "2")
{
iflag = true;
return iflag;
}
else if (dt.Rows[i]["State"].ToString() == null || dt.Rows[i]["State"].ToString() == "")
{
iflag = true;
return iflag;
}
}
}
return iflag;
}
catch (Exception ex)
{
return iflag;
}
}
/// <summary>
/// 获取产品信息
/// </summary>
/// <param name="ProductBarCode"></param>
/// <returns></returns>
public TSyTracestate GetTraceStateInfoByProductBarCode(string ProductBarCode)
{
//ICSharpCode.Core.LoggingService.Fatal("获取托盘信息");
DbHandler db = new DbHandler();
TSyTracestate TSyTracestate = new TSyTracestate();
try
{
if (db.dbHelper == null)
{
return null;
}
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = "";
StringBuilder sb = new StringBuilder();
sb.Append("SELECT TOP 1 Barcode,t1.ProductID,t2.ProductName,BeginTime,EndTime,ShiftID,GroupID,ShiftNo,SemiBarcode_A,SemiBarcode_B,SemiBarcode_C,ProductBarcode,SemiBarcode2,shellbarcode,NameplateInfo,MarkRecord,Attr1,Attr2,ISDis,DisChecker,DisTime,State,CurrentStationID,NGStationID,RestartStation,FinishFlag,D9Remark FROM [JYD_shengjie].[dbo].[T_SY_TraceState] T1 left join dbo.T_BD_ProductInfo T2 on t1.ProductID = t2.ProductID where ProductBarcode='").Append(ProductBarCode).Append("' order by BeginTime desc");
db.dbHelper.CommandText = sb.ToString();
DataTable dt = db.dbHelper.ToDataTable();
if (dt != null && dt.Rows.Count > 0)
{
TSyTracestate.ProductID = dt.Rows[0]["ProductID"].ToString();
TSyTracestate.ProductName = dt.Rows[0]["ProductName"].ToString();
TSyTracestate.ProductBarcode = dt.Rows[0]["ProductBarcode"].ToString();
TSyTracestate.ShiftID = dt.Rows[0]["ShiftID"].ToString();
TSyTracestate.GroupID = dt.Rows[0]["GroupID"].ToString();
TSyTracestate.Barcode = dt.Rows[0]["Barcode"].ToString();
TSyTracestate.BeginTime = dt.Rows[0]["BeginTime"].ToString();
TSyTracestate.EndTime = dt.Rows[0]["EndTime"].ToString();
return TSyTracestate;
}
return TSyTracestate;
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("获取产品信息失败" + e.Message);
return TSyTracestate;
}
}
public void InsertScanBarCodePrintRecord(TSyTracestate syTracestate)
{
StringBuilder sb = new StringBuilder();
try
{
sb.Append(" insert into dbo.base_scanbarcode_record(MCode,ProductCode) values('");
sb.Append(syTracestate.Barcode).Append("','");
sb.Append(syTracestate.ProductBarcode).Append("')");
DbHandler db = new DbHandler();
db.dbHelper.ClearParameter();
db.dbHelper.CommandType = CommandType.Text;
db.dbHelper.CommandText = sb.ToString();
ICSharpCode.Core.LoggingService.Info("铭牌打印记录:" + sb.ToString() + "流水号:"+ syTracestate.Barcode + ",产品码" + syTracestate.ProductBarcode);
db.dbHelper.ExecuteNonQuery();
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Error("铭牌打印记录出错:" + sb.ToString() + "/r/n" + e.ToString());
}
}
#endregion
}
/// <summary>
/// 托盘到位请求结果
/// </summary>
public enum DaoWeiResult
{
OK = 1,//可以工作
NG = 2,//直接放行
PreNoWork = 3,//上一工位未工作
MachineNoMatch=4,//机种不匹配
TakeNG=5,//NG物料拿取
NoBarCode = 6, //没读到条码
MaterialNoMatch = 7//物料不匹配
}
}