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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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//物料不匹配
}
}