using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Web.Services;
using System.Windows.Forms;
using foda;
using FacOneZPStation.WebReference;
using grproLib;
using InjectionPC;
using MESClassLibrary.BLL.BasicInfo;
using MESClassLibrary.BLL.Log;
using MESClassLibrary.BLL.Painting;
using MESClassLibrary.BLL.ZPPlan;
using MESClassLibrary.DAL;
using MESClassLibrary.EFModel;
using MESClassLibrary.Model;
using OPCAutomation;
namespace FacOneZPStation
{
public partial class FrmZP : Form
{
public FrmZP()
{
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 bool IsOK = false;
public static string planID = "";
public string ID = "";
public static string PartNo = "";
public int stateOK = 0;
private string stationID = "";
private int step = 0, maxStep = 0,currentStep=0;
private bool IsLast = false, IsPhoto = false;
int IsHigh = 0;
#endregion
private void FrmZP_Load(object sender, EventArgs e)
{
try
{
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 = "";
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();
ControlButton(labPartNo.Text, currentStep + maxStep - 1);
textBox1.Text = "";
textBox2.Text = "";
textBox1.Enabled = true;
textBox2.Enabled = false;
textBox1.Focus();
#region 判断当前工位是否有拍照
ZPBomBLL bbll = new ZPBomBLL();
DataTable dt2 = bbll.SearchStep(labPartNo.Text, labStationNo.Text);
if (dt2 != null && dt2.Rows.Count > 0)
{
for (int i = 0; i < dt2.Rows.Count; i++)
{
if (Convert.ToInt32(dt2.Rows[i]["IsPhoto"]) == 1)
{
IsPhoto = true;
break;
}
else
{
IsPhoto = false;
}
}
}
else
{
maxStep = 0;
IsPhoto = false;
}
#endregion
if (IsPhoto)
{
#region 加载opc
ZPTagBLL bll = new ZPTagBLL();
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 = opcGroup2.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);
}
}
#endregion
}
LoadStep();
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
#region 刷新时间
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);
}
#endregion
public void initPlan()
{
try
{
ZPPlanBLL bll = new ZPPlanBLL();
ZPBomBLL bbll = new ZPBomBLL();
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;
labErrMessage.Text = "";
}
else
{
labOrderNo.Text = "";
labPartNo.Text = ""; ;
labPName.Text = ""; ;
labNum.Text = "0/0";
labBadCount.Text = "0";
this.Tag = "";
labErrMessage.Text = "没有生产计划,请联系计划员!";
}
Program.partNo1 = labPartNo.Text;
#region 获取当前工位的总步骤数
DataTable dt3 = bbll.SearchStep(labPartNo.Text, labStationNo.Text);
if (dt3 != null && dt3.Rows.Count > 0)
{
maxStep = dt3.Rows.Count;
currentStep = Convert.ToInt32(dt3.Rows[0]["Step"]);
textBox1.Enabled = true;
}
else
{
maxStep = 0;
IsOK = false;
//MessageBox.Show("该产品在本工位没有步骤!", "提示", MessageBoxButtons.OK);
textBox1.Enabled = false;
return;
}
#endregion
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
}
}
///
/// 根据产品判断当前工位是不是最后一步,是则显示打印标签等按钮
///
///
private void ControlButton(string partNo, int step)
{
try
{
ZPBomBLL bll = new ZPBomBLL();
bool flag = bll.IsLast(partNo, step);
if (!flag || string.IsNullOrEmpty(partNo))
{
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
if (maxStep == 0)
{
return;
}
if (step >= maxStep)
{
step = 0;
textBox1.Text = "";
textBox2.Text = "";
textBox1.Enabled = true;
textBox2.Enabled = false;
textBox1.Focus();
}
#region 获取下一步的信息
DataTable dt2 = bbll.SearchInfoByStep(labStationNo.Text, labPartNo.Text, currentStep+ step );
if (dt2 != null && dt2.Rows.Count > 0)
{
if (Convert.ToInt32(dt2.Rows[0]["IsPhoto"]) == 1)
{
#region 给相机发信号
opcItemm2[1].Write(Convert.ToInt32(dt2.Rows[0]["ProgramNo"])); //程序号
opcItemm2[0].Write(1); //相机启动信号
#endregion
labErrMessage.Text = "拍照";
}
else
{
labErrMessage.Text = "扫描" + dt2.Rows[0]["MaterialNo"];
if (step == 0)
{
textBox1.Enabled = true;
textBox2.Enabled = false;
textBox1.Text = "";
textBox2.Text = "";
textBox1.Focus();
}
else
{
textBox1.Enabled = false;
textBox2.Enabled = true;
textBox2.Text = "";
textBox2.Focus();
}
}
}
else
{
labErrMessage.Text = "";
}
#endregion
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
}
}
private bool CreateServer()
{
try
{
opcServer = new OPCServer();
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
return false;
}
return true;
}
///
/// 连接到服务器
///
///
///
///
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;
}
void opcGroup1_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues,
ref Array Qualities, ref Array TimeStamps)
{
try
{
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;
int isOK = 0;
if (handle == 0)
{
if (value.ToLower() == "true")
{
ZPStepRecordBLL bll = new ZPStepRecordBLL();
ZPRecordBLL rbll = new ZPRecordBLL();
ZPBomBLL bombll = new ZPBomBLL();
tb_ZPStepRecord md = new tb_ZPStepRecord();
tb_ZPRecord rmd = new tb_ZPRecord();
ScanRecordBLL sbll = new ScanRecordBLL();
tb_ScanRecord smd = new tb_ScanRecord();
#region 读取结果值
isOK = ReadSingleValueFromOPC2(1);
#endregion
#region 给相机发送读结果完成
opcItemm2[2].Write(1);
#endregion
if (isOK == 1)
{
if (step < maxStep)
{
#region 存步骤信息
md.BarCode = textBox1.Text.Trim();
md.StationID = stationID;
md.Step = currentStep + step;
md.IsOK = 1;
md.CreateTime = DateTime.Now;
md.PlanID = planID;
bll.AddInfo(md);
#endregion
#region 存本体扫描记录
smd.BarCode = textBox1.Text.Trim();
smd.CreateTime = DateTime.Now;
smd.StationID = stationID;
sbll.AddInfo(smd);
#endregion
}
if (step == maxStep && IsLast)
{
#region 存装配记录
rmd.OneBarCode = textBox1.Text.Trim();
rmd.PlanID = planID;
rbll.AddInfo(rmd);
#endregion
textBox1.Text = "";
textBox2.Text = "";
textBox1.Focus();
}
LoadStep();
}
}
}
}
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
labErrMessage.Text = "扫描本体";
MessageBox.Show("本体条码为空!", "提示", MessageBoxButtons.OK);
return;
}
ZPStepRecordBLL bll = new ZPStepRecordBLL();
ZPRecordBLL rbll=new ZPRecordBLL();
ZPBomBLL bombll=new ZPBomBLL();
BarCodeBLL barbll = new BarCodeBLL();
ScanRecordBLL sbll = new ScanRecordBLL();
StockInBLL inbll=new StockInBLL();
PaintColorBLL pcbll=new PaintColorBLL();
ProductBLL pbll = new ProductBLL();
InspectResultBLL irbll=new InspectResultBLL();
tb_ZPStepRecord md=new tb_ZPStepRecord();
tb_ZPRecord rmd=new tb_ZPRecord();
tb_ScanRecord smd=new tb_ScanRecord();
string barCode = "",paintCode="";
int IsBox = 0; //0是箱单1是单个条码
#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.SelectAll();
textBox1.Focus();
return;
}
#endregion
}
else
{
barCode = textBox1.Text.Trim();
}
#endregion
#region 判断之前工位步骤是否都完成,无需校验
//if (!string.IsNullOrEmpty(barCode))
//{
// int bStep = bll.CompleteStep(textBox1.Text.Trim());
// if (bStep < currentStep - 1)
// {
// labErrMessage.Text = "在此之前有未完成的步骤";
// IsOK = false;
// MessageBox.Show("在此之前有未完成的步骤!", "提示", MessageBoxButtons.OK);
// textBox1.SelectAll();
// textBox1.Focus();
// return;
// }
//}
#endregion
DataTable fdt = bll.SearchStepByStation(labStationNo.Text, planID, textBox1.Text.Trim());
if (fdt != null && fdt.Rows.Count > 0)
{
step = fdt.Rows.Count;
}
else
{
step = 0;
}
if (step >= maxStep)
{
MessageBox.Show("条码" + barCode + "在本工位已生产完成!", "提示", MessageBoxButtons.OK);
textBox1.Text = "";
textBox1.Focus();
return;
}
#region 根据入库或质检表查找对应的颜色,如果没有,查质检信息的最后一条信息,拼接颜色
DataTable pdt = inbll.SearchColorByBarCode(barCode);
if (pdt != null && pdt.Rows.Count > 0)
{
paintCode = pdt.Rows[0]["paintCode"].ToString();
}
else
{
DataTable irdt = irbll.SearchColorByBarCode(barCode);
if (irdt != null && irdt.Rows.Count > 0)
{
paintCode = pcbll.paintColor(barCode.Substring(0, 10), irdt.Rows[0]["remark1"].ToString());
}
else
{
#region 判断是否为塑件,如果是塑件,paintcode为塑件零件号
if (barCode.Length > 0)
{
DataTable sdt = pbll.SearchInfoByStock(barCode.Substring(0, 10));
if (sdt != null && sdt.Rows.Count > 0)
{
paintCode = sdt.Rows[0]["PartNo"].ToString();
}
}
#endregion
if (CheckPart(bombll, paintCode, sbll, bll, md, smd, rmd, rbll)) return;
//MessageBox.Show("条码" + barCode + "没有颜色信息!", "提示", MessageBoxButtons.OK);
//textBox1.Text = "";
//textBox1.Focus();
//return;
}
}
#endregion
}
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
private bool CheckPart(ZPBomBLL bombll, string paintCode, ScanRecordBLL sbll, ZPStepRecordBLL bll, tb_ZPStepRecord md,
tb_ScanRecord smd, tb_ZPRecord rmd, ZPRecordBLL rbll)
{
int IsBox;
#region 校验是否和计划匹配
DataTable dt = bombll.IsMath(ConfigurationManager.AppSettings["StationNo"], labPartNo.Text.Trim(), paintCode,
currentStep);
if (dt != null && dt.Rows.Count > 0)
{
#region 是否需要检验单个条码
IsBox = Convert.ToInt32(dt.Rows[0]["IsScanCode"]);
if (IsBox == 0)
{
//TODO 无需校验
}
else
{
//TODO 校验条码是否用过
if (sbll.IsScan(textBox1.Text.Trim(), stationID) > 0)
{
MessageBox.Show("此条码条码使用过,请更换物料!", "提示", MessageBoxButtons.OK);
textBox1.SelectAll();
textBox1.Text = "";
textBox1.Focus();
return true;
}
}
#endregion
#region 判断当前物料是否在本工位是否扫描过
if (bll.isScan(textBox1.Text.Trim(), stationID, currentStep) == 0)
{
#region 存步骤信息
md.BarCode = textBox1.Text.Trim();
md.StationID = stationID;
md.Step = currentStep + step;
md.IsOK = 1;
md.CreateTime = DateTime.Now;
md.PlanID = planID;
bll.AddInfo(md);
#endregion
}
#endregion
if (step == maxStep && IsLast)
{
#region 存扫描记录
smd.BarCode = textBox1.Text.Trim();
smd.CreateTime = DateTime.Now;
smd.StationID = stationID;
sbll.AddInfo(smd);
#endregion
#region 存装配记录
rmd.OneBarCode = textBox1.Text.Trim();
rmd.PlanID = planID;
rbll.AddInfo(rmd);
#endregion
}
LoadStep();
}
else
{
labErrMessage.Text = "本体和计划不匹配";
MessageBox.Show("本体和计划不匹配!", "提示", MessageBoxButtons.OK);
return true;
}
#endregion
return false;
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
if (string.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("条码为空!", "提示", MessageBoxButtons.OK);
return;
}
ZPStepRecordBLL bll = new ZPStepRecordBLL();
ZPRecordBLL rbll = new ZPRecordBLL();
ZPBomBLL bombll = new ZPBomBLL();
ScanRecordBLL sbll = new ScanRecordBLL();
tb_ZPStepRecord md = new tb_ZPStepRecord();
tb_ZPRecord rmd = new tb_ZPRecord();
tb_ScanRecord smd = new tb_ScanRecord();
int IsBox = 0; //1是箱单0是单个条码
string code = "";
#region 判断当前步骤校验是箱单还是单个条码
DataTable dt = bombll.SearchInfoByStep(labStationNo.Text, labPartNo.Text, currentStep + step);
if (dt != null && dt.Rows.Count > 0)
{
IsBox = dt.Rows[0]["IsScanCode"].ToString() == "0" ? 1 : 0;
}
#endregion
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();
}
}
DataTable dt1 = bombll.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;
smd.StationID = stationID;
sbll.AddInfo(smd);
#endregion
#region 存步骤日志
md.BarCode = textBox1.Text.Trim();
md.StationID = stationID;
md.KeyBarCode = textBox2.Text.Trim();
md.CreateTime = DateTime.Now;
md.IsOK = 1;
md.Step = currentStep + step;
md.PlanID = planID;
bll.AddInfo(md);
#endregion
//currentStep += 1;
if (step == maxStep && IsLast)
{
#region 存装配记录
rmd.OneBarCode = textBox1.Text.Trim();
rmd.PlanID = planID;
rbll.AddInfo(rmd);
#endregion
}
LoadStep();
}
else
{
MessageBox.Show("物料与计划不匹配!", "提示", MessageBoxButtons.OK);
textBox2.SelectAll();
textBox2.Text = "";
textBox2.Focus();
return;
}
}
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
public int ReadSingleValueFromOPC2(int i)
{
object ItemValues;
object Qualities;
object TimeStamps;
opcItemm2[i].Read(1, out ItemValues, out Qualities, out TimeStamps);
if ((ItemValues != null) && (Qualities.ToString() != "Good"))
{
return Convert.ToInt32(ItemValues.ToString());
}
else
{
return 0;
}
}
///
/// 上一计划
///
///
///
private void button3_Click(object sender, EventArgs e)
{
try
{
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();
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+maxStep-1);
}
else
{
MessageBox.Show("无上一计划!", "提示", MessageBoxButtons.OK);
return;
}
LoadStep();
ControlButton(labPartNo.Text, currentStep + maxStep - 1);
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
}
}
///
/// 下一计划
///
///
///
private void button4_Click(object sender, EventArgs e)
{
try
{
ZPPlanBLL bll = new ZPPlanBLL();
ZPBomBLL bbll = new ZPBomBLL();
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();
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+maxStep-1);
}
else
{
MessageBox.Show("无下一计划!", "提示", MessageBoxButtons.OK);
return;
}
#region 获取当前工位的总步骤数
DataTable dt3 = bbll.SearchStep(labPartNo.Text, labStationNo.Text);
if (dt3 != null && dt3.Rows.Count > 0)
{
maxStep = dt3.Rows.Count;
currentStep = Convert.ToInt32(dt3.Rows[0]["Step"]);
textBox1.Enabled = true;
}
else
{
maxStep = 0;
IsOK = false;
//MessageBox.Show("该产品在本工位没有步骤!", "提示", MessageBoxButtons.OK);
textBox1.Enabled = false;
return;
}
#endregion
LoadStep();
ControlButton(labPartNo.Text, currentStep + maxStep - 1);
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
}
}
///
/// 打印标签
///
///
///
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();
StationBLL sbll=new StationBLL();
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 查询是否够满箱,够则打印箱单 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();
#region 调用wms入库接口
LogHelper.WriteSysLogBase("条码号:" + onebarCode + "工位:" + labStationNo.Text + ",调用WMS装配合格入库接口", MethodBase.GetCurrentMethod().Name);
WMSWebService ws=new WMSWebService();
string lineID = "";
#region 根据工位编号查询产线ID
DataTable sdt = sbll.SearchInfoByNo(labStationNo.Text);
if (sdt != null && sdt.Rows.Count > 0)
{
lineID = sdt.Rows[0]["LineName"].ToString();
}
#endregion
ws.Url = ConfigurationManager.AppSettings["WMSWebServiceURL"];
bool aa= ws.WMSInterfaceStockIn(onebarCode, partNo, DateTime.Now.ToString("yyyyMMdd"), 1, lineID);
if (!aa)
{
DialogResult r= MessageBox.Show("调用WMS接口失败,是否重新调用!", "提示", MessageBoxButtons.YesNo);
if (r == DialogResult.Yes)
{
for (int i = 0; i < 3; i++)
{
if (ws.WMSInterfaceStockIn(onebarCode, partNo, DateTime.Now.ToString("yyyyMMdd"), 1, lineID))
{
break;
}
}
}
}
#endregion
}
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 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();
}
else
{
initPlan();
}
Program.partNo1 = labPartNo.Text;
}
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 = 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 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 = 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;
}
}
///
/// 不合格
///
///
///
private void button5_Click(object sender, EventArgs e)
{
try
{
timer1.Enabled = true;
textBox1.SelectAll();
FrmChooseDamnPosition frm = new FrmChooseDamnPosition();
frm.Show();
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
initProduct();
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
}
}
///
/// 手动打印箱单
///
///
///
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());
}
}
///
/// 补打箱单
///
///
///
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());
}
}
private void labTime_Click(object sender, EventArgs e)
{
try
{
Environment.Exit(0);
}
catch (Exception ex)
{
LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod());
}
}
}
}