You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1701 lines
62 KiB
1701 lines
62 KiB
3 months ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Configuration;
|
||
|
using System.Data;
|
||
|
using System.Diagnostics.Eventing.Reader;
|
||
|
using System.Drawing;
|
||
|
using System.Linq;
|
||
|
using System.Reflection;
|
||
|
using System.Text;
|
||
|
using System.Threading;
|
||
|
using System.Windows.Forms;
|
||
|
using System.Windows.Forms.VisualStyles;
|
||
|
using grproLib;
|
||
|
using InjectionPC;
|
||
|
using MESClassLibrary.BLL.BasicInfo;
|
||
|
using MESClassLibrary.BLL.Log;
|
||
|
using MESClassLibrary.BLL.ZPPlan;
|
||
|
using MESClassLibrary.DAL;
|
||
|
using MESClassLibrary.DAL.ZPPlan;
|
||
|
using MESClassLibrary.EFModel;
|
||
|
using MESClassLibrary.Model;
|
||
|
using OPCAutomation;
|
||
|
|
||
|
namespace FacOneZPStation
|
||
|
{
|
||
|
public partial class FrmMain : Form
|
||
|
{
|
||
|
public FrmMain()
|
||
|
{
|
||
|
InitializeComponent();
|
||
|
}
|
||
|
|
||
|
#region 变量
|
||
|
|
||
|
private string strHostIP;
|
||
|
private string strHostName;
|
||
|
private OPCServer opcServer;
|
||
|
private OPCGroups opcGroups;
|
||
|
private OPCGroup opcGroup1;
|
||
|
private OPCItems opcItems1;
|
||
|
private OPCItem[] opcItemm1;
|
||
|
|
||
|
private OPCGroup opcGroup2;
|
||
|
private OPCItems opcItems2;
|
||
|
private OPCItem[] opcItemm2;
|
||
|
private string[] ItemIDs;
|
||
|
object ItemValues;
|
||
|
object Qualities;
|
||
|
object TimeStamps;
|
||
|
public bool Connected = false;
|
||
|
|
||
|
public int[] IsFinish = new int[7];
|
||
|
public bool IsNew = false; //是否是新计划或切换计划 true-是新和切换
|
||
|
public static string planID = "";
|
||
|
public string ID = "";
|
||
|
public static string PartNo = "";
|
||
|
public int stateOK =0;
|
||
|
|
||
|
private string stationID = "";
|
||
|
private int step = 0, maxSetp = 0, currentStep = 0;
|
||
|
private bool IsLast = false;
|
||
|
int IsHigh = 0;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
private void FrmMain_Load(object sender, EventArgs e)
|
||
|
{
|
||
|
var serverUrl = "http://10.60.101.59:8013/";
|
||
|
var updateXmlFileName = "ZPUpdate.xml";
|
||
|
var updater = new AutoUpdater();
|
||
|
if (updater.CheckUpdateLoad(serverUrl, updateXmlFileName))
|
||
|
{
|
||
|
Environment.Exit(0);
|
||
|
}
|
||
|
|
||
|
Control.CheckForIllegalCrossThreadCalls = false;
|
||
|
|
||
|
timer1.Interval = Convert.ToInt32(ConfigurationManager.AppSettings["InterVal"]);
|
||
|
labErrMessage.Text = "";
|
||
|
//this.WindowState = FormWindowState.Maximized;
|
||
|
Thread t = new Thread(new ThreadStart(TimeGo));
|
||
|
t.Start();
|
||
|
labStationNo.Text = ConfigurationManager.AppSettings["StationNo"];
|
||
|
|
||
|
StationBLL sbll=new StationBLL();
|
||
|
DataTable sdt = sbll.SearchInfoByNo(labStationNo.Text);
|
||
|
if (sdt != null && sdt.Rows.Count > 0)
|
||
|
{
|
||
|
stationID = sdt.Rows[0]["StationID"].ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
stationID = "";
|
||
|
}
|
||
|
|
||
|
initPlan();
|
||
|
LoadStep();
|
||
|
ControlButton(labPartNo.Text, currentStep + maxSetp - 1);
|
||
|
textBox1.Text = "";
|
||
|
textBox2.Text = "";
|
||
|
textBox1.Enabled = false;
|
||
|
textBox2.Focus();
|
||
|
|
||
|
ZPTagBLL bll = new ZPTagBLL();
|
||
|
|
||
|
try
|
||
|
{
|
||
|
if (CreateServer())
|
||
|
{
|
||
|
if (ConnectServer(strHostIP, "Kepware.KEPServerEX.V6"))
|
||
|
{
|
||
|
Connected = true;
|
||
|
|
||
|
#region 创建组
|
||
|
|
||
|
opcGroups = opcServer.OPCGroups;
|
||
|
opcGroup1 = opcGroups.Add("Read");
|
||
|
opcGroup2 = opcGroups.Add("Write");
|
||
|
SetGroupProperty(opcGroup1, 500);
|
||
|
SetGroupProperty(opcGroup2, 500);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 创建项Read
|
||
|
|
||
|
opcItems1 = opcGroup1.OPCItems;
|
||
|
opcItems1.DefaultIsActive = true;
|
||
|
|
||
|
DataTable dt = bll.SearchRead(labStationNo.Text);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
opcItemm1 = new OPCItem[dt.Rows.Count];
|
||
|
for (int i = 0; i < dt.Rows.Count; i++)
|
||
|
{
|
||
|
opcItemm1[i] = opcItems1.AddItem(dt.Rows[i]["TagName"].ToString(), i);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 创建项Write
|
||
|
|
||
|
opcItems2 = opcGroup1.OPCItems;
|
||
|
opcItems2.DefaultIsActive = true;
|
||
|
|
||
|
DataTable dt1 = bll.SearchWrite(labStationNo.Text);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
opcItemm2 = new OPCItem[dt1.Rows.Count];
|
||
|
for (int i = 0; i < dt1.Rows.Count; i++)
|
||
|
{
|
||
|
opcItemm2[i] = opcItems2.AddItem(dt1.Rows[i]["TagName"].ToString(), i);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
opcGroup1.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void TimeGo()
|
||
|
{
|
||
|
System.Timers.Timer timer = new System.Timers.Timer();
|
||
|
timer.Interval = 1000;
|
||
|
timer.Enabled = true;
|
||
|
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick);
|
||
|
}
|
||
|
|
||
|
private void timer_Tick(object sender, EventArgs e)
|
||
|
{
|
||
|
labTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
Thread.Sleep(500);
|
||
|
}
|
||
|
|
||
|
public void initPlan()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPPlanBLL bll=new ZPPlanBLL();
|
||
|
|
||
|
labStationNo.Text = ConfigurationManager.AppSettings["StationNo"];
|
||
|
|
||
|
DataTable dt = bll.GetProductingPlan(labStationNo.Text);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["ID"].ToString();
|
||
|
labOrderNo.Text = dt.Rows[0]["OrderNo"].ToString();
|
||
|
labPartNo.Text = dt.Rows[0]["PartNo"].ToString();
|
||
|
PartNo = labPartNo.Text;
|
||
|
labPName.Text = dt.Rows[0]["ProductName"].ToString();
|
||
|
labNum.Text = dt.Rows[0]["ProductCount"] + "/" + dt.Rows[0]["OrderCount"];
|
||
|
labBadCount.Text = dt.Rows[0]["BadCount"].ToString();
|
||
|
this.Tag = dt.Rows[0]["CreateTime"].ToString();
|
||
|
IsHigh = dt.Rows[0]["IsHigh"].ToString() == "1" ? 1 : 0;
|
||
|
if (dt.Rows[0]["ProductCount"].ToString() == "0")
|
||
|
{
|
||
|
IsNew = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
IsNew = false;
|
||
|
}
|
||
|
|
||
|
labErrMessage.Text = "";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
labOrderNo.Text = "";
|
||
|
labPartNo.Text = ""; ;
|
||
|
labPName.Text = ""; ;
|
||
|
labNum.Text = "0/0" ;
|
||
|
labBadCount.Text = "0";
|
||
|
IsNew = true;
|
||
|
this.Tag = "";
|
||
|
labErrMessage.Text = "没有生产计划,请联系计划员!";
|
||
|
}
|
||
|
|
||
|
Program.partNo1 = labPartNo.Text;
|
||
|
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 创建服务
|
||
|
/// </summary>
|
||
|
/// <returns></returns>
|
||
|
private bool CreateServer()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
opcServer = new OPCServer();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 连接到服务器
|
||
|
/// </summary>
|
||
|
/// <param name="strHostIP"></param>
|
||
|
/// <param name="strHostName"></param>
|
||
|
/// <returns></returns>
|
||
|
private bool ConnectServer(string strHostIP, string strHostName)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
opcServer.Connect(strHostName, strHostIP);
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void SetGroupProperty(OPCGroup opcGroup, int updateRate)
|
||
|
{
|
||
|
opcGroup.IsActive = true;
|
||
|
opcGroup.DeadBand = 0;
|
||
|
opcGroup.UpdateRate = updateRate;
|
||
|
opcGroup.IsSubscribed = true;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// bool型
|
||
|
/// </summary>
|
||
|
/// <param name="i"></param>
|
||
|
/// <returns></returns>
|
||
|
public string ReadSingleValueFromOPC1(int i)
|
||
|
{
|
||
|
object ItemValues;
|
||
|
object Qualities;
|
||
|
object TimeStamps;
|
||
|
|
||
|
opcItemm1[i].Read(1, out ItemValues, out Qualities, out TimeStamps);
|
||
|
|
||
|
if ((ItemValues != null) && (Qualities.ToString() != "Good"))
|
||
|
{
|
||
|
return ItemValues.ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public int ReadSingleValueFromOPC2(int i)
|
||
|
{
|
||
|
object ItemValues;
|
||
|
object Qualities;
|
||
|
object TimeStamps;
|
||
|
|
||
|
opcItemm1[i].Read(1, out ItemValues, out Qualities, out TimeStamps);
|
||
|
|
||
|
if ((ItemValues != null) && (Qualities.ToString() != "Good"))
|
||
|
{
|
||
|
return Convert.ToInt32(ItemValues.ToString());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void opcGroup1_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues,ref Array Qualities, ref Array TimeStamps)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPTagValueModel md=new ZPTagValueModel();
|
||
|
ZPTagValueBLL bll=new ZPTagValueBLL();
|
||
|
|
||
|
for (int i = 1; i <= NumItems; i++)
|
||
|
{
|
||
|
int handle = Convert.ToInt32(ClientHandles.GetValue(i).ToString().Trim());
|
||
|
string value = ItemValues.GetValue(i).ToString();
|
||
|
string address = opcItemm1[(Convert.ToInt32(ClientHandles.GetValue(i)))].ItemID;
|
||
|
|
||
|
#region 增加value日志
|
||
|
|
||
|
md.ID = Guid.NewGuid().ToString();
|
||
|
md.TagName = address;
|
||
|
md.TagValue = value;
|
||
|
|
||
|
bll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void opcGroup2_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues,ref Array Qualities, ref Array TimeStamps)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPTagValueModel md=new ZPTagValueModel();
|
||
|
ZPTagValueBLL bll=new ZPTagValueBLL();
|
||
|
|
||
|
for (int i = 1; i <= NumItems; i++)
|
||
|
{
|
||
|
int handle = Convert.ToInt32(ClientHandles.GetValue(i).ToString().Trim());
|
||
|
string value = ItemValues.GetValue(i).ToString();
|
||
|
string address = opcItemm2[(Convert.ToInt32(ClientHandles.GetValue(i)))].ItemID;
|
||
|
|
||
|
|
||
|
#region 增加value日志
|
||
|
|
||
|
md.ID = Guid.NewGuid().ToString();
|
||
|
md.TagName = address;
|
||
|
md.TagValue = value;
|
||
|
|
||
|
bll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 上一计划
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button3_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
IsNew = true;
|
||
|
ZPPlanBLL bll=new ZPPlanBLL();
|
||
|
|
||
|
DataTable dt= bll.GetPlan(labStationNo.Text, 1, this.Tag.ToString());
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["ID"].ToString();
|
||
|
labOrderNo.Text = dt.Rows[0]["OrderNo"].ToString();
|
||
|
labPartNo.Text = dt.Rows[0]["PartNo"].ToString();
|
||
|
Program.partNo1 = labPartNo.Text;
|
||
|
labPName.Text = dt.Rows[0]["ProductName"].ToString();
|
||
|
labNum.Text = dt.Rows[0]["ProductCount"].ToString() + "/" + dt.Rows[0]["OrderCount"].ToString();
|
||
|
labBadCount.Text = dt.Rows[0]["BadCount"].ToString();
|
||
|
this.Tag = dt.Rows[0]["CreateTime"].ToString();
|
||
|
ControlButton(labPartNo.Text, currentStep+maxSetp-1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("无上一计划!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
LoadStep();
|
||
|
ControlButton(labPartNo.Text, currentStep + maxSetp - 1);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 下一计划
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button4_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
IsNew = true;
|
||
|
ZPPlanBLL bll = new ZPPlanBLL();
|
||
|
|
||
|
DataTable dt = bll.GetPlan(labStationNo.Text, 2, this.Tag.ToString());
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["ID"].ToString();
|
||
|
labOrderNo.Text = dt.Rows[0]["OrderNo"].ToString();
|
||
|
labPartNo.Text = dt.Rows[0]["PartNo"].ToString();
|
||
|
Program.partNo1 = labPartNo.Text;
|
||
|
labPName.Text = dt.Rows[0]["ProductName"].ToString();
|
||
|
labNum.Text = dt.Rows[0]["ProductCount"].ToString() + "/" + dt.Rows[0]["OrderCount"].ToString();
|
||
|
labBadCount.Text = dt.Rows[0]["BadCount"].ToString();
|
||
|
this.Tag = dt.Rows[0]["CreateTime"].ToString();
|
||
|
ControlButton(labPartNo.Text, currentStep + maxSetp-1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//labErrMessage.Text = "无下一计划!";
|
||
|
MessageBox.Show("无下一计划!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
//textBox1.SelectAll();
|
||
|
LoadStep();
|
||
|
ControlButton(labPartNo.Text, currentStep + maxSetp - 1);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 扫描本体
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void textBox1_KeyDown(object sender, KeyEventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (e.KeyCode == Keys.Enter)
|
||
|
{
|
||
|
ZPBomBLL bombll=new ZPBomBLL();
|
||
|
ProductBLL pbll=new ProductBLL();
|
||
|
BarCodeBLL barbll=new BarCodeBLL();
|
||
|
ZPRecordBLL bll=new ZPRecordBLL();
|
||
|
ScanRecordBLL sbll=new ScanRecordBLL();
|
||
|
tb_ZPRecord md = new tb_ZPRecord();
|
||
|
tb_ZPStepRecord zmd = new tb_ZPStepRecord();
|
||
|
ZPStepRecordBLL zpbll=new ZPStepRecordBLL();
|
||
|
|
||
|
string barCode="",stockNo="";
|
||
|
|
||
|
#region 校验数据
|
||
|
|
||
|
if (textBox1.Text.Trim() == "")
|
||
|
{
|
||
|
//labErrMessage.Text = "条码不能为空!";
|
||
|
MessageBox.Show("条码不能为空!", "提示", MessageBoxButtons.OK);
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Focus();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 判断设备是否准备OK
|
||
|
|
||
|
//IsFinish[0] = ReadSingleValueFromOPC1(0).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[1] = ReadSingleValueFromOPC1(1).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[2] = ReadSingleValueFromOPC1(2).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[3] = ReadSingleValueFromOPC1(3).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[4] = ReadSingleValueFromOPC1(4).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[5] = ReadSingleValueFromOPC1(5).ToLower() == "true" ? 1 : 0;
|
||
|
//IsFinish[6] = ReadSingleValueFromOPC1(6).ToLower() == "true" ? 1 : 0;
|
||
|
stateOK = ReadSingleValueFromOPC1(28).ToLower() == "true" ? 1 : 0;
|
||
|
|
||
|
//if (IsFinish[0] == 0 && IsFinish[1] == 0 && IsFinish[2] == 0 && IsFinish[3] == 0 &&
|
||
|
// IsFinish[4] == 0 && IsFinish[5] == 0 && IsFinish[6] == 0)
|
||
|
if (stateOK==0)
|
||
|
{
|
||
|
//labErrMessage.Text = "条码不能为空!";
|
||
|
MessageBox.Show("设备未准备OK,不能扫描条码!", "提示", MessageBoxButtons.OK);
|
||
|
textBox1.Focus();
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Text = "";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 判断是一维码还是二维码
|
||
|
|
||
|
if (textBox1.Text.Trim().Contains('.')) //二维码
|
||
|
{
|
||
|
string[] aa = textBox1.Text.Split('.');
|
||
|
Program.partNo = aa[0];
|
||
|
|
||
|
#region 根据二维码查找一维码
|
||
|
|
||
|
DataTable dt4 = barbll.searchBarCode(textBox1.Text.Trim(), 2);
|
||
|
if (dt4 != null && dt4.Rows.Count > 0)
|
||
|
{
|
||
|
barCode = dt4.Rows[0]["OneBarCode"].ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("条码有误,请重新扫描!", "提示", MessageBoxButtons.OK);
|
||
|
textBox1.Focus();
|
||
|
textBox1.SelectAll();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
string barcode = textBox1.Text.Trim();
|
||
|
|
||
|
DataTable dt4 = barbll.searchBarCode(textBox1.Text.Trim(), 1);
|
||
|
if (dt4 != null && dt4.Rows.Count > 0)
|
||
|
{
|
||
|
barCode = textBox1.Text.Trim();
|
||
|
Program.partNo = dt4.Rows[0]["PartNo"].ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("条码有误,请重新扫描!", "提示", MessageBoxButtons.OK);
|
||
|
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Focus();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 判断是否和计划一致
|
||
|
|
||
|
DataTable dt = bombll.IsMath(ConfigurationManager.AppSettings["StationNo"], labPartNo.Text.Trim(), Program.partNo,step+1);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
#region 判断是否更换计划
|
||
|
|
||
|
if (IsNew)
|
||
|
{
|
||
|
FrmMould frm=new FrmMould();
|
||
|
frm.ShowDialog();
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
if (!Program.IsOK )
|
||
|
{
|
||
|
#region 发送报警信号
|
||
|
|
||
|
opcItemm2[1].Write("1");
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
MessageBox.Show("胎膜号和计划不一致,请更换胎膜!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
#region 产品高低配
|
||
|
|
||
|
//IsHigh = dt.Rows[0]["IsHigh"].ToString() == "0" ? 0 : 1;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 判断是否重复扫描
|
||
|
|
||
|
//DataTable dt5 = bll.SearchInfobyone(barCode);
|
||
|
if (sbll.IsScan(barCode,stationID)>0)
|
||
|
{
|
||
|
#region 重复扫描
|
||
|
|
||
|
DialogResult result = MessageBox.Show("条码为" + barCode + "的蒙皮已经冲孔,是否重新冲孔?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
|
||
|
if (result == DialogResult.OK)
|
||
|
{
|
||
|
FrmPass pass=new FrmPass();
|
||
|
|
||
|
pass.OkBtnClick += (arg1) =>
|
||
|
{
|
||
|
if (!string.IsNullOrEmpty(arg1) && arg1.ToLower() ==
|
||
|
ConfigurationManager.AppSettings["password"].ToLower())
|
||
|
{
|
||
|
pass.Close();
|
||
|
|
||
|
#region 判断胎膜号是否一致
|
||
|
|
||
|
if (ReadSingleValueFromOPC2(29) != Convert.ToInt32(dt.Rows[0]["MouldNo"].ToString()))
|
||
|
{
|
||
|
#region 发送报警信号
|
||
|
|
||
|
opcItemm2[1].Write("1");
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
MessageBox.Show("胎膜号和计划不一致!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 发送信号给PLC 不区分高低配的产品不发送
|
||
|
|
||
|
opcItemm2[0].Write("1"); //扫描成功
|
||
|
|
||
|
if (IsHigh == 0)
|
||
|
{
|
||
|
opcItemm2[3].Write("1"); //低配启动信号
|
||
|
}
|
||
|
else if (IsHigh == 1)
|
||
|
{
|
||
|
opcItemm2[2].Write("1"); //高配启动信号
|
||
|
}
|
||
|
opcItemm2[4].Write(dt.Rows[0]["MouldNo"].ToString()); //胎膜号
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 删除当前工位该条码的信息,暂时屏蔽
|
||
|
|
||
|
//zpbll.DelInfoByStation(labStationNo.Text, textBox1.Text);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 重新存步骤信息
|
||
|
|
||
|
zmd.BarCode = textBox1.Text.Trim();
|
||
|
zmd.StationID = stationID;
|
||
|
zmd.MouldNo = ReadSingleValueFromOPC2(29).ToString();
|
||
|
zmd.Step = currentStep + step;
|
||
|
zmd.IsOK = 1;
|
||
|
zmd.CreateTime=DateTime.Now;
|
||
|
zmd.PlanID = planID;
|
||
|
|
||
|
zpbll.AddInfo(zmd);
|
||
|
|
||
|
//md.ID = Guid.NewGuid().ToString();
|
||
|
//md.OneBarCode = barCode;
|
||
|
//md.planID = planID;
|
||
|
|
||
|
//bll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
#region 更新工位扫描物料对应的条码
|
||
|
|
||
|
zpbll.UpdateBarCode(stationID, textBox1.Text.Trim(), planID);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
if (step + 1 == maxSetp)
|
||
|
{
|
||
|
#region 存装配记录
|
||
|
|
||
|
md.OneBarCode = textBox1.Text.Trim();
|
||
|
md.PlanID = planID;
|
||
|
|
||
|
bll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("密码错误,请重新输入!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
};
|
||
|
pass.ShowDialog();
|
||
|
LoadStep();
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
#region 第一次扫描
|
||
|
|
||
|
#region 判断胎膜号是否一致
|
||
|
|
||
|
if (ReadSingleValueFromOPC2(29) != Convert.ToInt32(dt.Rows[0]["MouldNo"].ToString()))
|
||
|
{
|
||
|
#region 发送报警信号
|
||
|
|
||
|
opcItemm2[1].Write("1");
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
MessageBox.Show("胎膜号和计划不一致!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 发送信号给PLC 不邠高度配的产品不发启动信号
|
||
|
|
||
|
opcItemm2[0].Write("1"); //扫描成功
|
||
|
|
||
|
if (IsHigh == 0)
|
||
|
{
|
||
|
opcItemm2[3].Write("1"); //低配启动信号
|
||
|
}
|
||
|
else if (IsHigh == 1)
|
||
|
{
|
||
|
opcItemm2[2].Write("1"); //高配启动信号
|
||
|
}
|
||
|
|
||
|
opcItemm2[4].Write(dt.Rows[0]["MouldNo"].ToString()); //胎膜号
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 存步骤信息
|
||
|
|
||
|
zmd.BarCode = textBox1.Text.Trim();
|
||
|
zmd.StationID = stationID;
|
||
|
zmd.MouldNo = ReadSingleValueFromOPC2(29).ToString();
|
||
|
zmd.Step = currentStep + 1;
|
||
|
zmd.IsOK = 1;
|
||
|
zmd.CreateTime = DateTime.Now;
|
||
|
zmd.PlanID = planID;
|
||
|
|
||
|
zpbll.AddInfo(zmd);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 更新物料绑定本体
|
||
|
|
||
|
zpbll.UpdateBarCode(stationID, textBox1.Text.Trim(), planID);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
if (step + 1 == maxSetp)
|
||
|
{
|
||
|
#region 存装配记录
|
||
|
|
||
|
md.OneBarCode = textBox1.Text.Trim();
|
||
|
md.PlanID = planID;
|
||
|
|
||
|
bll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
|
||
|
LoadStep();
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("扫描条码和计划不一致,请重新扫描!", "提示", MessageBoxButtons.OK);
|
||
|
textBox1.Focus();
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Text = "";
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 打印标签
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button1_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPRecordBLL bll=new ZPRecordBLL();
|
||
|
ProductBLL pbll=new ProductBLL();
|
||
|
ZPPlanBLL planbll = new ZPPlanBLL();
|
||
|
ZPBoxBLL boxbll = new ZPBoxBLL();
|
||
|
ZPRecordModel md=new ZPRecordModel();
|
||
|
ZPPlanModel zmd=new ZPPlanModel();
|
||
|
ZPBoxModel boxmd=new ZPBoxModel();
|
||
|
|
||
|
string stockNo = "", partNo = "", partName = "", barCode = "", onebarCode = "", batch = "", oldbarCode = "", oldonebarCode = "", filename = "", reportName = "";
|
||
|
DateTime time;
|
||
|
int packCount = 0;
|
||
|
string old_box = "", new_box = "";
|
||
|
|
||
|
#region 查询存货代码
|
||
|
|
||
|
DataTable dt = pbll.SearchInfoByPartNo(labPartNo.Text.Trim());
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
stockNo = dt.Rows[0]["StockNo"].ToString();
|
||
|
packCount = Convert.ToInt32(dt.Rows[0]["PackCount"]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
stockNo = "";
|
||
|
packCount = 0;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
time = GetDateTime();
|
||
|
|
||
|
if (time.Hour >= 8 && time.Hour < 20)
|
||
|
{
|
||
|
batch = time.ToString("yyMMdd");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (time.Hour >= 0 && time.Hour < 8)
|
||
|
{
|
||
|
batch = time.AddDays(-1).ToString("yyMMdd");
|
||
|
}
|
||
|
else if (time.Hour >= 20 && time.Hour <= 23)
|
||
|
{
|
||
|
batch = time.ToString("yyMMdd");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#region 查询当前产品是否有未打印的标签
|
||
|
|
||
|
DataTable dt1 = bll.SearchPrint(planID);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
md.ID = dt1.Rows[0]["ID"].ToString();
|
||
|
time = GetDateTime();
|
||
|
partNo = labPartNo.Text.Trim();
|
||
|
partName = labPName.Text.Trim();
|
||
|
|
||
|
DataTable dt2 = bll.SearchBarCode(stockNo, batch);
|
||
|
if (dt2 != null && dt2.Rows.Count > 0)
|
||
|
{
|
||
|
oldonebarCode = dt2.Rows[0]["OneBarCode1"].ToString();
|
||
|
oldbarCode = dt2.Rows[0]["BarCode"].ToString();
|
||
|
|
||
|
onebarCode = oldonebarCode.Substring(0, oldonebarCode.Length - 4) + (Convert.ToInt32(oldonebarCode.Substring(oldonebarCode.Length - 4, 4)) + 1).ToString().PadLeft(4, '0');
|
||
|
barCode = oldbarCode.Substring(0, oldbarCode.Length - 4) +(Convert.ToInt32(oldbarCode.Substring(oldbarCode.Length - 4, 4)) + 1).ToString().PadLeft(4, '0');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
onebarCode = stockNo + batch + "0001";
|
||
|
barCode = labPartNo.Text.Trim() + "." + batch + ".0001";
|
||
|
}
|
||
|
|
||
|
#region 打印标签
|
||
|
|
||
|
filename = System.AppDomain.CurrentDomain.BaseDirectory + "zp.grf";
|
||
|
DataTable headTable = new DataTable();
|
||
|
headTable.Columns.Add("time");
|
||
|
headTable.Columns.Add("partNo");
|
||
|
headTable.Columns.Add("PartName");
|
||
|
headTable.Columns.Add("OneBarCode");
|
||
|
DataRow row = headTable.NewRow();
|
||
|
row["time"] = time.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
row["partNo"] = partNo;
|
||
|
row["PartName"] = partName;
|
||
|
row["OneBarCode"] = onebarCode;
|
||
|
|
||
|
reportName = ConfigurationManager.AppSettings["printName"].ToString();
|
||
|
headTable.Rows.Add(row);
|
||
|
|
||
|
ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoDefault, 1, reportName);
|
||
|
|
||
|
rp.Report.Print(false);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 更新数据
|
||
|
|
||
|
md.IsOK = 1;
|
||
|
md.PrintType = 0;
|
||
|
md.PrintTime = time;
|
||
|
md.OneBarCode1 = onebarCode;
|
||
|
md.BarCode = barCode;
|
||
|
|
||
|
bll.UpdatePrint(md);
|
||
|
|
||
|
zmd.ID = planID;
|
||
|
planbll.updateQty(zmd);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 查询是否够40根,够则打印箱单 20210412增加
|
||
|
|
||
|
DataTable sumdt = bll.GetCountByPartNo(labPartNo.Text.Trim()+'.'+batch);
|
||
|
if (sumdt != null && sumdt.Rows.Count > 0)
|
||
|
{
|
||
|
if (Convert.ToInt32(sumdt.Rows[0]["qty"].ToString()) >= packCount)
|
||
|
{
|
||
|
#region 生成箱单
|
||
|
|
||
|
DataTable boxdt = boxbll.SearchBoxByPartNo(labPartNo.Text.Trim());
|
||
|
if (boxdt != null && boxdt.Rows.Count > 0)
|
||
|
{
|
||
|
old_box = boxdt.Rows[0]["BoxNo"].ToString();
|
||
|
new_box = old_box.Substring(0, old_box.Length - 6) + (Convert.ToInt32(old_box.Substring(old_box.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
new_box = labPartNo.Text.Trim() + '.' + batch + ".000001";
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 打印箱单
|
||
|
|
||
|
filename = System.AppDomain.CurrentDomain.BaseDirectory + "box.grf";
|
||
|
DataTable headTable1 = new DataTable();
|
||
|
headTable1.Columns.Add("BoxNo");
|
||
|
headTable1.Columns.Add("PartName");
|
||
|
headTable1.Columns.Add("PartNo");
|
||
|
headTable1.Columns.Add("Batch");
|
||
|
headTable1.Columns.Add("PackCount");
|
||
|
DataRow row1 = headTable1.NewRow();
|
||
|
row1["BoxNo"] = new_box;
|
||
|
row1["PartName"] = partName;
|
||
|
row1["PartNo"] = partNo;
|
||
|
row1["Batch"] = batch;
|
||
|
row1["PackCount"] = packCount;
|
||
|
|
||
|
reportName = ConfigurationManager.AppSettings["printName1"].ToString();
|
||
|
headTable1.Rows.Add(row1);
|
||
|
|
||
|
ReportHelper rp1 = new ReportHelper(filename, headTable1, null, (int)GRPaperOrientation.grpoDefault, 1, reportName);
|
||
|
|
||
|
rp1.Report.Print(false);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 插入箱单
|
||
|
|
||
|
boxmd.ID = Guid.NewGuid().ToString();
|
||
|
boxmd.BoxNo = new_box;
|
||
|
boxmd.PartNo = partNo;
|
||
|
boxmd.Flag = 0;
|
||
|
|
||
|
boxbll.AddInfo(boxmd);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 半成品绑定箱单
|
||
|
|
||
|
bll.UpdateBox(partNo, new_box);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
//initPlan();
|
||
|
initProduct();
|
||
|
LoadStep();
|
||
|
ControlButton(labPartNo.Text, currentStep + step - 1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("当前计划没有可以打印的标签!", "提示", MessageBoxButtons.OK);
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Text = "";
|
||
|
textBox1.Focus();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
textBox1.SelectAll();
|
||
|
textBox1.Text = "";
|
||
|
textBox1.Focus();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private DateTime GetDateTime()
|
||
|
{
|
||
|
string sql = "";
|
||
|
DateTime time;
|
||
|
DataTable dt;
|
||
|
try
|
||
|
{
|
||
|
sql = @"select convert(char(23),getdate(),121) as time";
|
||
|
|
||
|
dt = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null).Tables[0];
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
//time = Convert.ToDateTime(dt.Rows[0]["time"].ToString());
|
||
|
time = DateTime.ParseExact(dt.Rows[0]["time"].ToString(), "yyyy-MM-dd HH:mm:ss.fff",
|
||
|
System.Globalization.CultureInfo.CurrentCulture);
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
time = DateTime.Now;
|
||
|
}
|
||
|
return time;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
return DateTime.Now;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 不合格
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button5_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
timer1.Enabled = true;
|
||
|
textBox1.SelectAll();
|
||
|
FrmChooseDamnPosition frm=new FrmChooseDamnPosition();
|
||
|
|
||
|
frm.Show();
|
||
|
//ZPRecordBLL bll = new ZPRecordBLL();
|
||
|
//ZPPlanBLL planbll = new ZPPlanBLL();
|
||
|
//ZPRecordModel md = new ZPRecordModel();
|
||
|
//ZPPlanModel zmd = new ZPPlanModel();
|
||
|
|
||
|
|
||
|
//#region 是否有未打印的产品
|
||
|
|
||
|
//DataTable dt1 = bll.SearchPrint(planID);
|
||
|
//if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
//{
|
||
|
// md.IsOK = 0;
|
||
|
// md.ID = dt1.Rows[0]["ID"].ToString();
|
||
|
// bll.UpdateBad(md);
|
||
|
|
||
|
// zmd.ID = planID;
|
||
|
// planbll.updateBad(zmd);
|
||
|
|
||
|
// initPlan();
|
||
|
//}
|
||
|
//else
|
||
|
//{
|
||
|
// MessageBox.Show("当前计划没有零件!", "提示", MessageBoxButtons.OK);
|
||
|
// return;
|
||
|
//}
|
||
|
|
||
|
//#endregion
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void button2_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
string barCode = "", filename = "", partNo = "", partName = "", reportName="",planID="",oneBarCode="",oneBarCode1="";
|
||
|
ZPRecordBLL bll=new ZPRecordBLL();
|
||
|
ZPPlanBLL planbll=new ZPPlanBLL();
|
||
|
DateTime time;
|
||
|
int IsOK = 0;
|
||
|
ZPRecordModel md=new ZPRecordModel();
|
||
|
|
||
|
time = GetDateTime();
|
||
|
|
||
|
DialogResult result = MessageBox.Show("确定要补打条码?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
|
||
|
if (result == DialogResult.OK)
|
||
|
{
|
||
|
FrmBuDa frm=new FrmBuDa();
|
||
|
frm.OkBtnClick += (arg1) =>
|
||
|
{
|
||
|
#region 打印标签
|
||
|
|
||
|
|
||
|
//filename = System.AppDomain.CurrentDomain.BaseDirectory + "zp.grf";
|
||
|
//DataTable headTable = new DataTable();
|
||
|
//headTable.Columns.Add("time");
|
||
|
//headTable.Columns.Add("partNo");
|
||
|
//headTable.Columns.Add("PartName");
|
||
|
//headTable.Columns.Add("OneBarCode");
|
||
|
//DataRow row = headTable.NewRow();
|
||
|
//row["time"] = time.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
//row["partNo"] = partNo;
|
||
|
//row["PartName"] = partName;
|
||
|
//row["OneBarCode"] = onebarCode;
|
||
|
|
||
|
filename = System.AppDomain.CurrentDomain.BaseDirectory + "zp.grf";
|
||
|
DataTable headTable = new DataTable();
|
||
|
headTable.Columns.Add("time");
|
||
|
headTable.Columns.Add("partNo");
|
||
|
headTable.Columns.Add("PartName");
|
||
|
headTable.Columns.Add("OneBarCode");
|
||
|
DataRow row = headTable.NewRow();
|
||
|
row["time"] = time.ToString("yyyy-MM-dd HH:mm:ss");
|
||
|
|
||
|
|
||
|
|
||
|
DataTable dt = bll.SearchInfo(arg1);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["PlanID"].ToString();
|
||
|
IsOK = Convert.ToInt32(dt.Rows[0]["IsOK"].ToString());
|
||
|
barCode = dt.Rows[0]["BarCode"].ToString();
|
||
|
oneBarCode = dt.Rows[0]["OneBarCode"].ToString();
|
||
|
oneBarCode1 = dt.Rows[0]["OneBarCode1"].ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
planID = "";
|
||
|
}
|
||
|
|
||
|
DataTable dt1 = planbll.SearchPlanInfo(planID);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
row["partNo"] = dt1.Rows[0]["PartNo"].ToString();
|
||
|
row["PartName"] = dt1.Rows[0]["ProductName"].ToString();
|
||
|
}
|
||
|
row["OneBarCode"] = oneBarCode1;
|
||
|
|
||
|
reportName = ConfigurationManager.AppSettings["printName"].ToString();
|
||
|
headTable.Rows.Add(row);
|
||
|
|
||
|
ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoDefault, 1, reportName);
|
||
|
|
||
|
rp.Report.Print(false);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
md.ID = Guid.NewGuid().ToString();
|
||
|
md.IsOK = 1;
|
||
|
md.PrintType = 1;
|
||
|
md.PrintTime = time;
|
||
|
md.OneBarCode1 = oneBarCode1;
|
||
|
md.BarCode = barCode;
|
||
|
md.OneBarCode = arg1;
|
||
|
md.planID = planID;
|
||
|
|
||
|
bll.AddBudaInfo(md);
|
||
|
|
||
|
};
|
||
|
frm.ShowDialog();
|
||
|
textBox1.Text = "";
|
||
|
textBox1.SelectAll();
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void labTime_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Environment.Exit(0);
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
Environment.Exit(0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void timer1_Tick(object sender, EventArgs e)
|
||
|
{
|
||
|
initProduct();
|
||
|
}
|
||
|
|
||
|
private void initProduct()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPPlanBLL bll = new ZPPlanBLL();
|
||
|
|
||
|
labStationNo.Text = ConfigurationManager.AppSettings["StationNo"].ToString();
|
||
|
|
||
|
DataTable dt = bll.GetProductingPlan1(labStationNo.Text, labOrderNo.Text);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["ID"].ToString();
|
||
|
labNum.Text = dt.Rows[0]["ProductCount"].ToString() + "/" + dt.Rows[0]["OrderCount"].ToString();
|
||
|
labBadCount.Text = dt.Rows[0]["BadCount"].ToString();
|
||
|
this.Tag = dt.Rows[0]["CreateTime"].ToString();
|
||
|
if (dt.Rows[0]["ProductCount"].ToString() == "0")
|
||
|
{
|
||
|
IsNew = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
IsNew = false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
initPlan();
|
||
|
//labOrderNo.Text = "";
|
||
|
//labPartNo.Text = "";
|
||
|
|
||
|
//labPName.Text = "";
|
||
|
|
||
|
//labNum.Text = "0/0";
|
||
|
//labBadCount.Text = "0";
|
||
|
//IsNew = true;
|
||
|
//this.Tag = "";
|
||
|
//MessageBox.Show("没有生产计划,请联系计划员!", "提示", MessageBoxButtons.OK);
|
||
|
}
|
||
|
|
||
|
Program.partNo1 = labPartNo.Text;
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 手动打印箱单
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button6_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
DateTime time;
|
||
|
string batch = "", partNo = "", partName = "", old_box = "", new_box = "", filename = "", reportName = ""; ;
|
||
|
|
||
|
ZPRecordBLL bll = new ZPRecordBLL();
|
||
|
ProductBLL pbll = new ProductBLL();
|
||
|
ZPPlanBLL planbll = new ZPPlanBLL();
|
||
|
ZPBoxBLL boxbll = new ZPBoxBLL();
|
||
|
ZPRecordModel md = new ZPRecordModel();
|
||
|
ZPPlanModel zmd = new ZPPlanModel();
|
||
|
ZPBoxModel boxmd = new ZPBoxModel();
|
||
|
|
||
|
time = GetDateTime();
|
||
|
|
||
|
if (time.Hour >= 8 && time.Hour < 20)
|
||
|
{
|
||
|
batch = time.ToString("yyMMdd");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (time.Hour >= 0 && time.Hour < 8)
|
||
|
{
|
||
|
batch = time.AddDays(-1).ToString("yyMMdd");
|
||
|
}
|
||
|
else if (time.Hour >= 20 && time.Hour <= 23)
|
||
|
{
|
||
|
batch = time.ToString("yyMMdd");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
partNo = labPartNo.Text.Trim();
|
||
|
partName = labPName.Text.Trim();
|
||
|
|
||
|
#region 20210412增加
|
||
|
|
||
|
DataTable sumdt = bll.GetCountByPartNo(labPartNo.Text.Trim() + '.' + batch);
|
||
|
if (sumdt != null && sumdt.Rows.Count > 0)
|
||
|
{
|
||
|
#region 生成箱单
|
||
|
|
||
|
DataTable boxdt = boxbll.SearchBoxByPartNo(labPartNo.Text.Trim());
|
||
|
if (boxdt != null && boxdt.Rows.Count > 0)
|
||
|
{
|
||
|
old_box = boxdt.Rows[0]["BoxNo"].ToString();
|
||
|
new_box = old_box.Substring(0, old_box.Length - 6) + (Convert.ToInt32(old_box.Substring(old_box.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
new_box = labPartNo.Text.Trim() + '.' + batch + ".000001";
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 打印箱单
|
||
|
|
||
|
filename = System.AppDomain.CurrentDomain.BaseDirectory + "box.grf";
|
||
|
DataTable headTable1 = new DataTable();
|
||
|
headTable1.Columns.Add("BoxNo");
|
||
|
headTable1.Columns.Add("PartName");
|
||
|
headTable1.Columns.Add("PartNo");
|
||
|
headTable1.Columns.Add("Batch");
|
||
|
headTable1.Columns.Add("PackCount");
|
||
|
DataRow row1 = headTable1.NewRow();
|
||
|
row1["BoxNo"] = new_box;
|
||
|
row1["PartName"] = partName;
|
||
|
row1["PartNo"] = partNo;
|
||
|
row1["Batch"] = batch;
|
||
|
row1["PackCount"] = sumdt.Rows[0]["qty"];
|
||
|
|
||
|
reportName = ConfigurationManager.AppSettings["printName1"];
|
||
|
headTable1.Rows.Add(row1);
|
||
|
|
||
|
ReportHelper rp1 = new ReportHelper(filename, headTable1, null, (int)GRPaperOrientation.grpoDefault, 1, reportName);
|
||
|
|
||
|
rp1.Report.Print(false);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 插入箱单
|
||
|
|
||
|
boxmd.ID = Guid.NewGuid().ToString();
|
||
|
boxmd.BoxNo = new_box;
|
||
|
boxmd.PartNo = partNo;
|
||
|
boxmd.Flag = 1;
|
||
|
|
||
|
boxbll.AddInfo(boxmd);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 半成品绑定箱单
|
||
|
|
||
|
bll.UpdateBox(partNo, new_box);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("都已装箱,无需打印箱单!", "提示", MessageBoxButtons.OK);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 补打箱单
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void button7_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
string filename = "", boxNo = "", reportName = "", PackCount="",partNo="";
|
||
|
ZPRecordBLL bll=new ZPRecordBLL();
|
||
|
ZPPlanBLL planbll = new ZPPlanBLL();
|
||
|
ZPBoxBLL boxbll=new ZPBoxBLL();
|
||
|
ZPBoxModel md=new ZPBoxModel();
|
||
|
|
||
|
DialogResult result = MessageBox.Show("确定要补打条码?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
|
||
|
if (result == DialogResult.OK)
|
||
|
{
|
||
|
FrmBuDa frm = new FrmBuDa();
|
||
|
frm.OkBtnClick += (arg1) =>
|
||
|
{
|
||
|
#region 根据条码查找对应的箱单
|
||
|
|
||
|
DataTable dt = bll.SearchInfo(arg1);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
planID = dt.Rows[0]["PlanID"].ToString();
|
||
|
boxNo = dt.Rows[0]["BoxNo"].ToString();
|
||
|
}
|
||
|
|
||
|
if (string.IsNullOrEmpty(boxNo))
|
||
|
{
|
||
|
MessageBox.Show("此零件未装箱或不存在,无需打印箱单!", "提示", MessageBoxButtons.OK);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
string[] aa = boxNo.Split('.');
|
||
|
|
||
|
DataTable dt2 = boxbll.SearchCountByBoxNo(boxNo);
|
||
|
if (dt2 != null && dt2.Rows.Count > 0)
|
||
|
{
|
||
|
PackCount = dt2.Rows[0]["Qty"].ToString();
|
||
|
}
|
||
|
|
||
|
filename = System.AppDomain.CurrentDomain.BaseDirectory + "box.grf";
|
||
|
DataTable headTable1 = new DataTable();
|
||
|
headTable1.Columns.Add("BoxNo");
|
||
|
headTable1.Columns.Add("PartName");
|
||
|
headTable1.Columns.Add("PartNo");
|
||
|
headTable1.Columns.Add("Batch");
|
||
|
headTable1.Columns.Add("PackCount");
|
||
|
DataRow row1 = headTable1.NewRow();
|
||
|
|
||
|
|
||
|
DataTable dt1 = planbll.SearchPlanInfo(planID);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
row1["partNo"] = dt1.Rows[0]["PartNo"].ToString();
|
||
|
row1["PartName"] = dt1.Rows[0]["ProductName"].ToString();
|
||
|
partNo = dt1.Rows[0]["PartNo"].ToString();
|
||
|
}
|
||
|
row1["PackCount"] = PackCount;
|
||
|
row1["Batch"] = aa[1];
|
||
|
row1["BoxNo"] = boxNo;
|
||
|
|
||
|
reportName = ConfigurationManager.AppSettings["printName1"];
|
||
|
headTable1.Rows.Add(row1);
|
||
|
|
||
|
ReportHelper rp1 = new ReportHelper(filename, headTable1, null, (int)GRPaperOrientation.grpoDefault, 1, reportName);
|
||
|
|
||
|
rp1.Report.Print(false);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 插入箱单
|
||
|
|
||
|
md.ID = Guid.NewGuid().ToString();
|
||
|
md.BoxNo = boxNo;
|
||
|
md.PartNo = partNo;
|
||
|
md.Flag = 1;
|
||
|
|
||
|
boxbll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
};
|
||
|
frm.ShowDialog();
|
||
|
textBox1.Text = "";
|
||
|
textBox1.SelectAll();
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 根据产品判断当前工位是不是最后一步,是则显示打印标签等按钮
|
||
|
/// </summary>
|
||
|
/// <param name="partNo"></param>
|
||
|
private void ControlButton(string partNo,int step)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPBomBLL bll=new ZPBomBLL();
|
||
|
|
||
|
bool flag = bll.IsLast(partNo, step);
|
||
|
if (!flag)
|
||
|
{
|
||
|
button1.Visible = false;
|
||
|
button2.Visible = false;
|
||
|
button5.Visible = false;
|
||
|
button6.Visible = false;
|
||
|
button7.Visible = false;
|
||
|
IsLast = false;
|
||
|
timer1.Enabled = false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
button1.Visible = true;
|
||
|
button2.Visible = true;
|
||
|
button5.Visible = true;
|
||
|
button6.Visible = true;
|
||
|
button7.Visible = true;
|
||
|
IsLast = true;
|
||
|
timer1.Enabled = false;
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void LoadStep()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ZPStepRecordBLL bll=new ZPStepRecordBLL();
|
||
|
ZPBomBLL bbll=new ZPBomBLL();
|
||
|
|
||
|
#region 获取当前步骤
|
||
|
|
||
|
DataTable dt = bll.SearchStepByStation(labStationNo.Text, planID,textBox1.Text.Trim());
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
step = dt.Rows.Count;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
step = 0;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 获取当前工位的总步骤数
|
||
|
|
||
|
DataTable dt1 = bbll.SearchStep(labPartNo.Text, labStationNo.Text);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
maxSetp = dt1.Rows.Count;
|
||
|
currentStep = Convert.ToInt32(dt1.Rows[0]["Step"]);
|
||
|
if (step >= maxSetp)
|
||
|
{
|
||
|
step = 0;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
maxSetp = 0;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
if (maxSetp - 1 == step)
|
||
|
{
|
||
|
textBox2.Text = "";
|
||
|
textBox2.Enabled = false;
|
||
|
textBox1.Enabled = true;
|
||
|
textBox1.Focus();
|
||
|
labErrMessage.Text = "请扫描本体";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
textBox1.Enabled = false;
|
||
|
textBox2.Enabled = true;
|
||
|
textBox2.SelectAll();
|
||
|
textBox2.Text = "";
|
||
|
textBox2.Focus();
|
||
|
|
||
|
#region 获取下一步的信息
|
||
|
|
||
|
DataTable dt2 = bbll.SearchInfoByStep(labStationNo.Text, labPartNo.Text, step + currentStep);
|
||
|
if (dt2 != null && dt2.Rows.Count > 0)
|
||
|
{
|
||
|
labErrMessage.Text = "扫描物料" + dt2.Rows[0]["MaterialNo"];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
labErrMessage.Text = "";
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 扫描物料
|
||
|
/// </summary>
|
||
|
/// <param name="sender"></param>
|
||
|
/// <param name="e"></param>
|
||
|
private void textBox2_KeyDown(object sender, KeyEventArgs e)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (e.KeyCode == Keys.Enter)
|
||
|
{
|
||
|
ZPBomBLL bll=new ZPBomBLL();
|
||
|
ZPStepRecordBLL srbll = new ZPStepRecordBLL();
|
||
|
ScanRecordBLL sbll=new ScanRecordBLL();
|
||
|
tb_ZPStepRecord md = new tb_ZPStepRecord();
|
||
|
tb_ScanRecord smd=new tb_ScanRecord();
|
||
|
|
||
|
int IsBox = 0; //1是箱单0是单个条码
|
||
|
string code = "";
|
||
|
|
||
|
|
||
|
#region 判断当前步骤校验是箱单还是单个条码
|
||
|
|
||
|
DataTable dt = bll.SearchInfoByStep(labStationNo.Text, labPartNo.Text, currentStep+step);
|
||
|
if (dt != null && dt.Rows.Count > 0)
|
||
|
{
|
||
|
IsBox = dt.Rows[0]["IsScanCode"].ToString() == "0" ? 1 : 0;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 校验是否扫描过\物料是否和计划匹配
|
||
|
|
||
|
DataTable dt1=new DataTable();
|
||
|
|
||
|
if (IsBox == 1)
|
||
|
{
|
||
|
//TODO 无需校验
|
||
|
string[] a = textBox2.Text.Trim().Split('.');
|
||
|
code = a[0];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//TODO 校验条码是否用过
|
||
|
|
||
|
if (sbll.IsScan(textBox2.Text.Trim(),"") > 0)
|
||
|
{
|
||
|
MessageBox.Show("物料条码使用过,请更换物料!", "提示", MessageBoxButtons.OK);
|
||
|
textBox2.SelectAll();
|
||
|
textBox2.Text = "";
|
||
|
textBox2.Focus();
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
code = textBox2.Text.Trim();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dt1 = bll.IsMath(labStationNo.Text, labPartNo.Text, code, currentStep + step);
|
||
|
if (dt1 != null && dt1.Rows.Count > 0)
|
||
|
{
|
||
|
//TODO 是单个条码的记录扫描记录
|
||
|
|
||
|
#region 存扫描记录
|
||
|
|
||
|
smd.BarCode = textBox2.Text.Trim();
|
||
|
smd.CreateTime = DateTime.Now;
|
||
|
|
||
|
sbll.AddInfo(smd);
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region 存步骤日志
|
||
|
|
||
|
md.StationID = stationID;
|
||
|
md.KeyBarCode = textBox2.Text.Trim();
|
||
|
md.CreateTime = DateTime.Now;
|
||
|
md.IsOK = 1;
|
||
|
md.Step = currentStep + step;
|
||
|
md.PlanID = planID;
|
||
|
|
||
|
srbll.AddInfo(md);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("物料与计划不匹配!", "提示", MessageBoxButtons.OK);
|
||
|
textBox2.SelectAll();
|
||
|
textBox2.Text = "";
|
||
|
textBox2.Focus();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
LoadStep();
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|