using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UAS_MES.DataOperate;
using UAS_MES.Entity;
using UAS_MES.PublicMethod;
namespace UAS_MES.Make
{
public partial class Make_SeqProgramTransform : Form
{
AutoSizeFormClass asc = new AutoSizeFormClass();
LogStringBuilder sql = new LogStringBuilder();
DataHelper dh;
//原序列号
string TSN = "";
//转换后序列号
string SN = "";
//错误信息
string errorMessage;
//存放productsnrelation表中的数据
DataTable ListA;
//存放工单信息
DataTable dt;
//存放序列号防呆规则
DataTable rules;
//step 记录检验规则的进度
int step = 0;
//存放关联信息类型
string type;
//存放包含IMEI的规则的值,方便拼接
StringBuilder imei = new StringBuilder();
LogStringBuilder logsql = new LogStringBuilder();
//存储最后插入数据库的赋值语句部分
StringBuilder s1 = new StringBuilder();
//存放工单中数量
int ma_qty;
//存放所有关联信息的类型和录入的值
Hashtable hs;
string startNo = "";//起始序列
string endNo = "";//终止序列
string system = "";//进制
string oMakecode = "";
string oMsid = "";
bool onlyPass = false;
DataTable macRange;//记录macBT范围
StringBuilder insertSninfoFields;//存插入sninfo的字段
StringBuilder insertSninfoValues;//存插入sninfo的值
StringBuilder toSi;//存更新sninfo的值
string macOrBt = "";//存储去掉":"或者"-"的mac和bt
public Make_SeqProgramTransform()
{
InitializeComponent();
}
private void Make_SeqProgramTransform_Load(object sender, EventArgs e)
{
asc.controllInitializeSize(this);
code.Focus();
//提示用户“>>请输入TSN号”
OperateResult.AppendText(">>请输入TSN号\n", Color.Black);
dh = new DataHelper();
}
private void 序列烧录转换_SizeChanged(object sender, EventArgs e)
{
asc.controlAutoSize(this);
}
private void code_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (code.Text != "")
{
if (LogicHandler.CheckStepAttribute(Tag.ToString(), User.UserSourceCode, out errorMessage))
{
//为0,输入TSN
if (step == 0)
{
OperateResult.AppendText(">>TSN号" + code.Text + "\n", Color.Black);
if (!ChangeResult.Checked)//不勾选
{
//核对工序
if (!LogicHandler.CheckStepSNAndMacode("", User.UserSourceCode, code.Text, User.UserCode, out oMakecode, out oMsid, out errorMessage))
{
OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
return;
}
}
else//勾选
{
oMsid = dh.getFieldDataByCondition("makeserial", "max(ms_id)", "ms_sncode in (select '" + code.Text + "' from dual union select sn from makesnrelation where beforesn='" + code.Text + "' and sn<>' ' union select beforesn from makesnrelation where sn='" + code.Text + "' and beforesn<>' ')").ToString();
if (oMsid=="")
{
OperateResult.AppendText(">>TSN号错误\n", Color.Red, code);
return;
}
//根据ms_id查询
sql.Clear();
sql.Append("select 1 from makeserial where ms_id='"+oMsid+"' and ms_beforesn='"+code.Text+"' and ms_nextmacode is null and ms_outboxcode is null");
dt = (DataTable)dh.ExecuteSql(sql.GetString(),"select");
//如果行数大于0则允许转号
if (dt.Rows.Count > 0)
{
sql.Clear();
sql.Append("select 1 from makeserial where ms_id='" + oMsid + "' and ms_stepcode='" + User.CurrentStepCode + "'");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
step = 1;
TSN = code.Text;
//显示序列号
show_sncode.Text = TSN;
ChangeResult.Enabled = false;
}
else
{
OperateResult.AppendText(">>当前工序不允许重新转号\n", Color.Red, code);
return;
}
}
else
{
OperateResult.AppendText(">>TSN号" + code.Text + "当前状态不允许重新转号\n", Color.Red, code);
return;
}
}
//如果用户没有选择工单号
if (ms_macode.Text == "" || ms_macode.Text != oMakecode||ChangeResult.Checked)
{
//按照out出的工单号查出工单相关信息,并赋值到相关控件
sql.Clear();
sql.Append("select ma_code as ms_macode,ma_softversion,mcd_okqty,ma_qty,ma_qty-mcd_inqty as remain_qty,pr_detail,pr_code as ma_prodcode ");
sql.Append("from makeserial left join make on ms_makecode=ma_code left join product on ");
sql.Append("ms_prodcode=pr_code left join makecraftdetail on ms_makecode=mcd_macode where ms_id=:msid and mcd_stepcode='" + User.CurrentStepCode + "'");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select", oMsid);
if (dt.Rows.Count > 0)
{
//记录数量
ma_qty = int.Parse(dt.Rows[0]["ma_qty"].ToString());
BaseUtil.SetFormValue(this.Controls, dt);
}
else
{
OperateResult.AppendText(">>TSN号" + code.Text + "不存在\n", Color.Red, code);
return;
}
}
//获取需要关联采集的信息,以及校验规则
ListA = (DataTable)dh.ExecuteSql("select * from productsnrelation where psr_prodcode='" + ma_prodcode.Text + "' order by psr_detno", "select");
//没有获取到就提示错误请维护产品对应的关联采集信息
if (ListA.Rows.Count == 0)
{
OperateResult.AppendText(">>请维护产品对应的关联采集信息\n", Color.Red, code);
OperateResult.AppendText("<<请输入TSN\n", Color.Black);
if (ChangeResult.Checked)
{
clearInfo();
}
return;
}
if (ChangeResult.Checked)
{
OperateResult.AppendText("<<请输入SN\n", Color.Green, code);
}
//判断重新转换是否勾选了
if (ChangeResult.Checked)
{
////勾选了
//if (dh.CheckExist("MakeSerial", "ms_beforesn='" + code.Text + "' and ms_id='" + oMsid + "'"))
//{
// step = 1;
// TSN = code.Text;
// //显示序列号
// show_sncode.Text = TSN;
// OperateResult.AppendText("<<请输入SN\n", Color.Green, code);
// ChangeResult.Enabled = false;
//}
//else
//{
// OperateResult.AppendText(">>不存在该已转序列号:" + code.Text + "\n", Color.Red, code);
// OperateResult.AppendText("<<请重新输入TSN\n", Color.Black);
//}
}
else
{
//没有勾选,只能修改一次
//核对TSN是否正确
//string beforesn = dh.getFieldDataByCondition("makeserial", "ms_beforesn", "ms_sncode='" + code.Text + "'").ToString().Trim();
if (dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "' and ms_beforesn is null"))
{
step = 1;
//记录转换前的序列号
TSN = code.Text;
//显示之前的序列号
show_sncode.Text = TSN;
OperateResult.AppendText("<<请输入SN\n", Color.Green, code);
ChangeResult.Enabled = false;
}
else
//不为空,进行过转换。不勾选修改结果,就不能再修改
{
//修改转换结果时,输入两次SN直接过站
if (dh.CheckExist("MakeSerial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "' and ms_beforesn is not null"))
{
step = 1;
TSN = code.Text;
//显示序列号
show_sncode.Text = TSN;
OperateResult.AppendText("<<请输入SN\n", Color.Green, code);
ChangeResult.Enabled = false;
onlyPass = true;
}
else
{
OperateResult.AppendText(">>序列号:" + code.Text + "已转换过\n", Color.Red, code);
OperateResult.AppendText("<<请重新输入TSN\n", Color.Black);
}
}
}
}
else if (step == 1)
{
OperateResult.AppendText(">>" + code.Text + "\n", Color.Black);
//判断工单是否导入了序列号清单
if (dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_type='after'"))
{
if (!dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_sncode='" + code.Text + "' and msl_type='after'"))
{
//有序列号清单,输入的序列号却不在范围内
OperateResult.AppendText(">>SN号" + code.Text + "错误,不在工单设定的转换后序列号清单中\n", Color.Red, code);
return;
}
}
//判断用户是否锁定输入SN长度,
if (!checkLengthOrPre(SNLength_checkBox, SNLength, "长度", "SN"))
{
return;
}
//判断用户是否锁定输入SN前缀,
if (!checkLengthOrPre(SNPre_checkBox, SNPre, "前缀", "SN"))
{
return;
}
//判断转换后序列号的范围是否合法
if (!checkStartAndEnd())
{
OperateResult.AppendText(">>SN号" + code.Text + "校验错误,不在工单防呆规则指定范围内!\n", Color.Red, code);
return;
}
//如果只是需要过站的序列号
if (onlyPass)
{
if (TSN == code.Text)
{
//写入日志
LogicHandler.SetStepResult(ms_macode.Text, User.UserSourceCode, code.Text, "序列转换", "序列转换成功", User.UserCode, out errorMessage);
if (errorMessage.Contains("AFTERSUCCESS"))
OperateResult.AppendText(">>" + errorMessage + "\n");
//记录日志
LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_macode.Text, User.UserLineCode, User.UserSourceCode, "序列转换", "转换成功", code.Text, "");
OperateResult.AppendText(">>转换成功\n", Color.Green, code);
onlyPass = false;
ChangeResult.Enabled = true;
step = 0;
}
else
{
OperateResult.AppendText(">>输入一致才可过站\n", Color.Red, code);
}
return;
}
//开始录入SN
if ((ChangeResult.Checked && dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "'") || (!ChangeResult.Checked && (TSN == code.Text)))
{
//SN校验成功,合法,记录下SN
SN = code.Text;
code.Text = "";
//开始进行校验规则
if (ListA.Rows.Count > 0)
{
OperateResult.AppendText("<<请输入" + ListA.Rows[0]["psr_type"] + "\n", Color.Green);
//实例化hashTable的值
hs = new Hashtable();
}
//step+1
step = 2;
insertSninfoFields = new StringBuilder();
insertSninfoValues = new StringBuilder();
toSi = new StringBuilder();
}
else
{
OperateResult.AppendText(">>序列号" + code.Text + "已存在或无该转换后序列号\n", Color.Red);
OperateResult.AppendText(">>请输入SN\n", Color.Black, code);
}
}
else if (step < ListA.Rows.Count + 2)
{
OperateResult.AppendText(">>" + code.Text + "\n", Color.Black);
//开始进行校验规则
if (checkRules(step))
{
step += 1;
}
}
}
else
{
OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
}
}
else
{
OperateResult.AppendText(">>输入不能为空\n", Color.Red);
}
code.Text = "";
}
}
///
/// 检验长度或者前缀是否合法
///
///
///
///
private bool checkLengthOrPre(CheckBox checkbox, TextBox textbox, string type, string TSNorSN)
{
if (checkbox.Checked == true)
{
//如果勾选没有填值
if (textbox.Text == "")
{
OperateResult.AppendText(">>勾选长度或者前缀需要填写内容\n", Color.Red);
return false;
}
if (type == "长度")
{
//则判断输入转换前的序列号长度是否合法,不合法则提示
if (code.Text.Trim().Length != int.Parse(textbox.Text))
{
//序列号校验错误,长度错误
OperateResult.AppendText(">>" + TSNorSN + ":" + code.Text + "校验错误,长度错误\n", Color.Red, code);
OperateResult.AppendText("<<请重新输入" + TSNorSN + "\n", Color.Black);
return false;
}
}
else if (type == "前缀")
{
string[] pres = textbox.Text.Split('|');
bool f = false;
for (int i = 0; i < pres.Length; i++)
{
if (pres[i] == "" ? true : code.Text.StartsWith(pres[i]))
{
//满足其中一条即可
f = true;
break;
}
}
//则判断输入转换前的序列号前缀是否合法,不合法则提示
if (!f)
{
//序列号校验错误,前缀错误
OperateResult.AppendText(">>" + TSNorSN + ":" + code.Text + "校验错误,前缀错误\n", Color.Red, code);
OperateResult.AppendText("<<请重新输入" + TSNorSN + "\n", Color.Black);
return false;
}
}
return true;
}
return true;
}
///
/// 关联采集的校验
///
///
private bool checkRules(int step)
{
type = ListA.Rows[step - 2]["psr_type"].ToString() == "WIFI" ? "MAC" : ListA.Rows[step - 2]["psr_type"].ToString();
//将type中的mac和bt中的"-"和":"号去掉
if (type == "MAC" || type == "BT")
{
macOrBt = code.Text.Replace(":", "").Replace("-", "");
}
//如果前缀和长度都满足的话
if ((ListA.Rows[step - 2]["psr_length"].ToString() == "" ? true : code.Text.Length != int.Parse(ListA.Rows[step - 2]["psr_length"].ToString())))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"] + "长度校验不通过,请重新输入\n", Color.Red);
OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code);
return false;
}
//以|符号分割前缀
string[] preFixs = ListA.Rows[step - 2]["psr_prefix"].ToString().Split('|');
//只要满足其中一个前缀条件即可
bool isfit = false;
for (int i = 0; i < preFixs.Length; i++)
{
if (preFixs[i] == "" ? true : code.Text.StartsWith(preFixs[i]))
{
//满足其中一条即可
isfit = true;
break;
}
}
if (!isfit)
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"] + "前缀校验不通过,请重新输入\n", Color.Red);
OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code);
return false;
}
switch (type)
{
case "IMEI1":
case "IMEI2":
case "IMEI3":
if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and (ms_imei1='" + code.Text + "' or ms_imei2 = '" + code.Text + "' or ms_imei3 = '" + code.Text + "')")
|| ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and (ms_imei1='" + code.Text + "' or ms_imei2 = '" + code.Text + "' or ms_imei3 = '" + code.Text + "') and ms_id <> '" + oMsid + "'"))
{
OperateResult.AppendText(">>" + type + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
return false;
}
else
{ //校验sninfo中是否已经存在这个
if (dh.CheckExist("sninfo", "si_imei1='" + code.Text + "' or si_imei2 = '" + code.Text + "' or si_imei3 = '" + code.Text + "'"))
{
OperateResult.AppendText(">>" + type + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
return false;
}
//判断IMEI1,IMEI2,IMEI3中是否已经有这个号了
if (imei.ToString().Contains(code.Text))
{
OperateResult.AppendText(">>" + type + ":" + code.Text + "已录,请重新输入\n", Color.Red);
OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code);
return false;
}
}
//通过校验,将包含IMEI的值拼接
imei.Append("'" + code.Text + "',");
s1.Append("MS_" + type + " = '" + code.Text + "',");
insertSninfoFields.Append("si_" + type + ",");
insertSninfoValues.Append("'" + code.Text + "',");
toSi.Append("si_" + type + " = '" + code.Text + "',");
break;
case "BT":
case "MAC":
//验证是否符合合同防呆
sql.Clear();
sql.Append("select sr_startcode,sr_endcode from SaleMacBTRange where sr_sacode = '" + dh.getFieldDataByCondition("makeserial", "ms_salecode","ms_id='"+oMsid+"'") + "' and sr_type = '" + type + "'");
macRange = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (macRange.Rows.Count > 0)
{
if (!(macRange.Rows[0]["sr_startcode"].ToString().Replace(":", "").Replace("-", "").CompareTo(macOrBt) <= 0 && macRange.Rows[0]["sr_endcode"].ToString().Replace(":", "").Replace("-", "").CompareTo(macOrBt) >= 0))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不在合同防呆范围内\n", Color.Red);
OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
return false;
}
}
//验证是否已被使用
if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + macOrBt + "'")
|| ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + macOrBt + "' and ms_id <> '" + oMsid + "'"))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
return false;
}
else
{
//校验在sninfo表中是否存在
if (dh.CheckExist("sninfo", "si_" + type + "='" + macOrBt + "'"))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
return false;
}
}
//通过校验,将包含IMEI的值拼接
s1.Append("MS_" + type + " = '" + macOrBt + "',");
insertSninfoFields.Append("si_" + type + ",");
insertSninfoValues.Append("'" + macOrBt + "',");
toSi.Append("si_" + type + " = '" + macOrBt + "',");
break;
case "NETCODE":
if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + code.Text + "'")
|| ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + code.Text + "' and ms_id <> '" + oMsid + "'"))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
return false;
}
else
{
//校验在sninfo表中是否存在
if (dh.CheckExist("sninfo", "si_" + type + "='" + code.Text + "'"))
{
OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red);
OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code);
return false;
}
}
//通过校验,将包含IMEI的值拼接
s1.Append("MS_" + type + " = '" + code.Text + "',");
insertSninfoFields.Append("si_" + type + ",");
insertSninfoValues.Append("'" + code.Text + "',");
toSi.Append("si_" + type + " = '" + code.Text + "',");
break;
}
//满足规则,则采集
if (type == "MAC" || type == "BT")
{
hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), macOrBt);
}
else
{
hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), code.Text);
}
//说明已经是最后一个校验规则
if (step == ListA.Rows.Count + 1)
{
//校验已经完成,此时要再次校验之前的SN和关联采集信息
//再次校验SN
if ((ChangeResult.Checked && dh.CheckExist("makeserial", "ms_sncode='" + SN + "' and ms_id='" + oMsid + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + SN + "'") || (!ChangeResult.Checked && (TSN == SN)))
{
bool flag = true;
//遍历判断已采集的信息是否已存在
foreach (DictionaryEntry de in hs)
{
if (!ChangeResult.Checked && dh.CheckExist("makeserial", "ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "'")
|| (ChangeResult.Checked && dh.CheckExist("makeserial", "ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "' and ms_id <> '" + oMsid + "'")))
{
flag = false;
OperateResult.AppendText(">>" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red);
//清空信息
clearInfo();
break;
}
else
{
//校验sninfo中是否存在
if (dh.CheckExist("sninfo", "si_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "'"))
{
flag = false;
OperateResult.AppendText(">>" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red);
//清空信息
clearInfo();
break;
}
}
}
//根据flag判断关联采集信息二次校验结果
if (flag == true)
{
//说明SN和关联采集信息二次校验通过,则进行转换和采集信息绑定
string firstsn = "";
string updateSql = "";
//勾选了修改转换结果
if (ChangeResult.Checked)
{
//查询ms_firstsn
firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_beforesn='" + TSN + "' and ms_id='" + oMsid + "'").ToString();
//记录本次修改,存入makesnrelation表中
updateSql = "update makeserial set ms_sncode='" + SN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_beforesn='" + TSN + "' and ms_id='" + oMsid + "'";
//删除最近一条转换记录
dh.ExecuteSql("delete from makesnrelation where BEFORESN='" + TSN + "' and makecode='" + ms_macode.Text + "'", "delete");
}
//未勾选修改转换结果
else
{
//查询ms_firstsn
firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_sncode='" + TSN + "' and ms_id='" + oMsid + "'").ToString();
//记录本次修改,存入makesnrelation表中
updateSql = "update makeserial set ms_sncode='" + SN + "', ms_beforesn='" + TSN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_sncode='" + TSN + "' and ms_id='" + oMsid + "'";
}
string insertSql = "insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + TSN + "','" + SN + "','" + firstsn + "','" + ms_macode.Text + "', sysdate ,'" + User.UserCode + "')";
dh.ExecuteSQLTran(updateSql, insertSql);
OperateResult.AppendText(">>序列号转换成功\n>>关联采集成功\n", Color.Green);
//写入日志
LogManager.DoLog("修改序列号:" + TSN + "为" + SN + "成功!" + "操作人:" + User.UserCode);
//记录日志
LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_macode.Text, User.UserLineCode, User.UserSourceCode, "序列烧录转换", "转换成功", TSN, "");
//写入sninfo表
insert2Sninfo(SN);
//输出提示用户“>>序列号转换成功”,“>>关联采集成功”
//完成该道工序 setFinish
if (LogicHandler.SetStepResult(ms_macode.Text, User.UserSourceCode, SN, "序列烧录转换", "序列烧录转换成功", User.UserCode, out errorMessage))
{
}
else
{
OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code);
}
//获取剩余数,刷新页面
sql.Clear();
sql.Append("select mcd_inqty from makecraftdetail where mcd_macode='" + ms_macode.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
remain_qty.Text = ma_qty - int.Parse(dt.Rows[0]["mcd_inqty"].ToString()) + "";
}
//更新页面计数+1
count.Text = int.Parse(count.Text) + 1 + "";
//完成之后,清除信息
clearInfo();
OperateResult.AppendText(">>请输入TSN号\n", Color.Black);
}
}
else
{
OperateResult.AppendText(">>序列号" + SN + "已存在\n", Color.Red);
OperateResult.AppendText(">>请重新输入TSN\n", Color.Black, code);
//清空信息
clearInfo();
}
code.Text = "";
return false;
}
else
{
OperateResult.AppendText("<<请输入" + ListA.Rows[step - 1]["psr_type"] + "\n", Color.Green, code);
return true;
}
}
///
/// 工单号变化时,带出校验规则
///
///
///
private void ms_macode_TextChanged(object sender, EventArgs e)
{
//清空
TSNPre.Text = "";
TSNLength.Text = "";
SNPre.Text = "";
SNLength.Text = "";
//取消勾选
TSNPre_checkBox.Checked = false;
TSNLength_checkBox.Checked = false;
SNPre_checkBox.Checked = false;
SNLength_checkBox.Checked = false;
//设置可编辑
TSNLength.Enabled = true;
TSNPre.Enabled = true;
SNLength.Enabled = true;
SNPre.Enabled = true;
TSNPre_checkBox.Enabled = true;
TSNLength_checkBox.Enabled = true;
SNPre_checkBox.Enabled = true;
SNLength_checkBox.Enabled = true;
//判断工单是否导入了序列号清单
if (dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_type='after'"))
{
return;
}
//查询表工单序列号防呆规则表
rules = (DataTable)dh.ExecuteSql("select msr_startno,msr_endno,msr_system,msr_type, msr_prefix ,msr_length from makesnrule where msr_makecode='" + ms_macode.Text + "'", "select");
if (rules.Rows.Count > 0)
{
foreach (DataRow dr in rules.Rows)
{
//如果有值,则这个字段自动勾选,并且不可编辑
if (dr["msr_type"].ToString().ToLower() == "before")
{
//msr_type=before 的值赋值到转换前
//临时变量记录
string length = dr["msr_length"].ToString();
string prefix = dr["msr_prefix"].ToString();
//不为空
if (prefix != "" && prefix != null)
{
//则赋值
TSNPre.Text = prefix;
//设置不可编辑
TSNPre.Enabled = false;
//勾选
TSNPre_checkBox.Checked = true;
TSNPre_checkBox.Enabled = false;
}
if (length != "" && length != null)
{
//赋值
TSNLength.Text = length;
//设置不可编辑
TSNLength.Enabled = false;
//勾选
TSNLength_checkBox.Checked = true;
TSNLength_checkBox.Enabled = false;
}
}
else if (dr["msr_type"].ToString().ToLower() == "after")
{
//msr_type=after 的值赋值到转换后
//临时变量记录
string length = dr["msr_length"].ToString();
string prefix = dr["msr_prefix"].ToString();
//记录进制
system = dr["msr_system"].ToString();
//不为空
if (prefix != "" && prefix != null)
{
//则赋值
SNPre.Text = prefix;
//设置不可编辑
SNPre.Enabled = false;
//勾选
SNPre_checkBox.Checked = true;
SNPre_checkBox.Enabled = false;
}
if (dr["msr_startno"].ToString() != "" && dr["msr_endno"].ToString() != "")
{
//记录起止序列号
startNo = dr["msr_startno"].ToString().Substring(prefix.Length);
endNo = dr["msr_endno"].ToString().Substring(prefix.Length);
}
if (length != "" && length != null)
{
//赋值
SNLength.Text = length;
//设置不可编辑
SNLength.Enabled = false;
//勾选
SNLength_checkBox.Checked = true;
SNLength_checkBox.Enabled = false;
}
}
}
}
else
{
/* 如果转换前没有值,则取 select productsnrule where psr_prodcode=? 产品编号,
* 有值则赋值到 转换前,并且自动勾选不可编辑。*/
rules = (DataTable)dh.ExecuteSql("select psr_prefix,psr_length from productsnrule where psr_prodcode ='" + dt.Rows[0]["ma_prodcode"].ToString() + "' and psr_type='after'", "select");
if (rules.Rows.Count > 0)
{
//将产品序列号防呆规则查出的数据填充
if (rules.Rows[0]["psr_prefix"].ToString() != "")
{
SNPre.Text = rules.Rows[0]["psr_prefix"].ToString();
SNPre.Enabled = false;
SNPre_checkBox.Checked = true;
SNPre_checkBox.Enabled = false;
}
if (rules.Rows[0]["psr_length"].ToString() != "")
{
SNLength.Text = rules.Rows[0]["psr_length"].ToString();
SNLength.Enabled = false;
SNLength_checkBox.Checked = true;
SNLength_checkBox.Enabled = false;
}
}
}
}
///
/// 检测转换后的序列号是否满足起止序列号范围
///
///
private bool checkStartAndEnd()
{
if (system == "")
{
return true;
}
if (system == "decimal")
{
//十进制
if (int.Parse(code.Text.Substring(SNPre.Text.Length)) >= int.Parse(startNo) && int.Parse(code.Text.Substring(SNPre.Text.Length)) <= int.Parse(endNo))
{
//满足
return true;
}
}
else
{
//十六进制
if (int.Parse(code.Text.Substring(SNPre.Text.Length), System.Globalization.NumberStyles.HexNumber) >= int.Parse(startNo, System.Globalization.NumberStyles.HexNumber) && int.Parse(code.Text.Substring(SNPre.Text.Length), System.Globalization.NumberStyles.HexNumber) <= int.Parse(endNo, System.Globalization.NumberStyles.HexNumber))
{
//满足
return true;
}
}
return false;
}
private bool checkExist(string fields)
{
//不存在
if (!dh.CheckExist("makeserial", fields))
{
//则记录
return false;
}
else
{
return true;
}
}
private void clearInfo()
{
//步骤重置为0
step = 0;
//关联采集信息清空
if (hs != null)
{
hs.Clear();
}
imei.Clear();
logsql.Clear();
s1.Clear();
show_sncode.Text = "";
ChangeResult.Enabled = true;
onlyPass = false;
}
private void cancel_Click(object sender, EventArgs e)
{
//清除已经采集的所有信息
clearInfo();
//提示用户输入TSN
OperateResult.AppendText("<<请输入TSN\n", Color.Green);
}
private bool GetMakeInfo(string iSnCode, out string oMakeCode, out string oErrorMessage)
{
//取MakeProcess表中的执行记录ID最大的一个工单的号码
oMakeCode = "";
oErrorMessage = "";
string ms_id = dh.getFieldDataByCondition("MakeSerial", "max(ms_id) ms_id", "ms_sncode='" + iSnCode + "' or ms_firstsn in (select firstsn from makesnrelation where beforesn='" + iSnCode + "')").ToString();
oMakeCode = dh.getFieldDataByCondition("MakeSerial", "ms_makecode", "ms_id='" + ms_id + "'").ToString();
if (oMakeCode != "")
return true;
else
{
oErrorMessage = "序列号:" + iSnCode + " 未归属工单";
return false;
}
}
private void ChangeResult_CheckedChanged(object sender, EventArgs e)
{
if (ChangeResult.Checked)
{
//勾选的时候提示输入TSN
OperateResult.AppendText("<<请输入TSN号\n", Color.Black);
}
}
private void insert2Sninfo(string sn)
{
//查询是否有记录
string siid = dh.getFieldDataByCondition("sninfo", "max(si_id) si_id", "si_sn='" + sn + "' or si_sn in(select sn from makesnrelation where sn='" + sn + "' or beforesn = '" + sn + "' )").ToString();
//是否为空
if (siid == "")
{
//插入新的数据
sql.Clear();
sql.Append("insert into sninfo(si_id,si_sn," + insertSninfoFields.ToString().Substring(0, insertSninfoFields.ToString().Length - 1) + ") values ");
sql.Append("(sninfo_seq.nextval,'" + sn + "'," + insertSninfoValues.ToString().Substring(0, insertSninfoValues.ToString().Length - 1) + ")");
dh.ExecuteSql(sql.GetString(), "insert");
}
else
{
//更新sninfo
sql.Clear();
sql.Append("update sninfo set ");
sql.Append(toSi.ToString().Substring(0, toSi.ToString().Length - 1));
sql.Append(" where si_id='" + siid + "'");
dh.ExecuteSql(sql.GetString(), "update");
}
}
}
}