using LabelManager2; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using UAS_MES.DataOperate; using UAS_MES.Entity; using UAS_MES.PublicForm; using UAS_MES.PublicMethod; namespace UAS_MES.Make { public partial class Make_RePrintLabel : Form { DataHelper dh; LogStringBuilder sql = new LogStringBuilder(); AutoSizeFormClass asc = new AutoSizeFormClass(); ApplicationClass lbl; Document doc; Thread InitPrint;//实例化打印进程 DataTable dt; ftpOperater ftp; DataTable listA; string getlabel = ""; DataTable mapB; String TSN = "";//记录第一次输入的SN DataTable infoc; string re_ms_id = ""; string ms_id = ""; DataTable formValue;//界面赋值 string type = ""; string errorMessage = ""; public Make_RePrintLabel() { InitializeComponent(); } private void Make_RePrintLabel_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); OperateResult.AppendText(">>请输入SN\n", Color.Black); InitPrint = new Thread(InPrint); SetLoadingWindow stw = new SetLoadingWindow(InitPrint, "初始化打印程序"); BaseUtil.SetFormCenter(stw); stw.ShowDialog(); inputText.Focus(); dh = SystemInf.dh; } private void InPrint() { try { lbl = new ApplicationClass(); BaseUtil.WriteLbl(); } catch (Exception ex) { OperateResult.AppendText("未正确安装CodeSoft软件\n", Color.Red); } } private void Make_RePrintLabel_SizeChanged(object sender, EventArgs e) { //窗体大小变化的时候 asc.controlAutoSize(this); } private void Make_RePrintLabel_FormClosing(object sender, FormClosingEventArgs e) { //窗口关闭的时候 BaseUtil.ClosePrint(lbl); } private void radioButton_CheckedChange(object sender, EventArgs e) { RadioButton btn = sender as RadioButton; if ((btn.Name == "giftBox" || btn.Name == "fuselagel") && btn.Checked) { //如果是切换成彩盒或者机身标提示用户 输入SN OperateResult.AppendText(">>请输入SN\n", Color.Black); clearAll(); } else if ((btn.Name == "CartonBox" || btn.Name == "BigBox" || btn.Name == "Pallte") && btn.Checked) { OperateResult.AppendText(">>请输入箱号\n", Color.Black); clearAll(); } } private void inputText_KeyDown(object sender, KeyEventArgs e) { //按下enter键 if (e.KeyCode == Keys.Enter) { if (inputText.Text == "") { OperateResult.AppendText("<<输入不能为空\n", Color.Red); return; } OperateResult.AppendText(">>" + inputText.Text + "\n", Color.Black); //打印类型为彩盒或者机身标 if (giftBox.Checked || fuselagel.Checked) { //select max(ms_id)ms_id from makeserial where ms_sncode=? ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id) ms_id", "ms_sncode='" + inputText.Text + "'").ToString(); //如果ms_id 无值或者为空,提示用户SN不存在,请输入SN if (ms_id == "") { OperateResult.AppendText("<>请输入SN\n", Color.Black); return; } //判断是否装箱通过 if (checkPacked()) { return; } //界面赋值 formValue = (DataTable)dh.ExecuteSql("select ms_makecode,pr_code,pr_detail from makeserial left join product on MS_PRODCODE=pr_code where ms_id='" + ms_id + "'", "select"); BaseUtil.SetFormValue(this.Controls, formValue); //无值,可补打 inputValue.Text = inputText.Text; inputText.Text = ""; } //打印类型为卡通箱 else if (CartonBox.Checked || BigBox.Checked || Pallte.Checked) { //查询箱号是否存在 dt = (DataTable)dh.ExecuteSql("select pa_id,pa_prodcode pr_code,pa_makecode ms_makecode,pr_detail from package left join product on pr_code=pa_prodcode where pa_outboxcode='" + inputText.Text + "' and (pa_type=1 OR PA_TYPE = 2 or PA_TYPE=3)", "select"); if (dt.Rows.Count == 0) { //无值,返回提示用户“箱号不存在”, “>>请输入卡通箱号” OperateResult.AppendText("<<箱号:" + inputText.Text + "不存在\n", Color.Red, inputText); OperateResult.AppendText(">>请输入箱号\n", Color.Black); return; } //界面赋值 BaseUtil.SetFormValue(this.Controls, dt); //有值,可以打 //展示产品编号和标签模板到界面 inputValue.Text = inputText.Text; inputText.Text = ""; } } } private void PrintLabel_TextChanged(object sender, EventArgs e) { if (pr_code.Text == "") { return; } if (fuselagel.Checked) type = "机身标"; else if (giftBox.Checked) type = "彩盒标"; else if (CartonBox.Checked) type = "卡通箱标"; else if (BigBox.Checked) type = "大箱标"; else type = "栈板标"; getlabel = "select la_id,substr(la_url,instr(la_url,'\\',-1)+1)la_name,la_url,la_isdefault from label where la_prodcode='" + pr_code.Text + "' and la_templatetype='" + type + "' and la_statuscode='AUDITED' order by la_isdefault"; listA = (DataTable)dh.ExecuteSql(getlabel, "select"); if (listA.Rows.Count == 0) { OperateResult.AppendText("<<产品:" + pr_code.Text + "未维护" + type + "模板\n", Color.Red); } PrintLabel.DataSource = listA; PrintLabel.DisplayMember = "la_url"; PrintLabel.ValueMember = "la_id"; } private void print_Click(object sender, EventArgs e) { //输入值字段值不为空,打印不为空,有选中打印模板,才可以进行打印,打印前再次判断 if (inputValue.Text == "") { OperateResult.AppendText("<<无箱号或者序列号\n", Color.Red); return; } if (PrintLabel.Text == "") { OperateResult.AppendText("<<无打印模板\n", Color.Red); return; } //打印类型 彩盒或者标签,再次判断是否已装箱,未转号 if (giftBox.Checked || fuselagel.Checked) { mapB = (DataTable)dh.ExecuteSql("select ms_outboxcode, nvl(ms_downstatus,0) ms_downstatus from makeserial where ms_id='" + ms_id + "' and ms_sncode='" + inputValue.Text + "'", "select"); if (mapB.Rows.Count == 0) { //无值提示用户序列号错误,不存在或者已经发生转号 OperateResult.AppendText("<<序列号错误,不存在或已经发生转号\n", Color.Red); return; } //如果ms_outboxcode 不为空,则提示用户,已经装箱不允许单独打印 if (mapB.Rows[0]["ms_outboxcode"].ToString() != "") { OperateResult.AppendText("<0,则更新ms_downstatus=-1 where ms_id=?id,同时插入记录至表 MAKEDOWN if (mapB.Rows[0]["ms_downstatus"].ToString() == "0") { dh.ExecuteSql("update makeserial set ms_downstatus='-1' where ms_id='" + ms_id + "'", "update"); //插入数据 putInfo2MakeDown(); } } //打印类型为卡通箱标签 else if (CartonBox.Checked || BigBox.Checked || Pallte.Checked) { //select pa_downstatus from package where pa_outboxcode=? 输入值code mapB = (DataTable)dh.ExecuteSql("select pa_downstatus from package where pa_outboxcode='" + inputValue.Text + "'", "select"); //无值提示用户箱号错误,不存在。 if (mapB.Rows.Count == 0) { OperateResult.AppendText("<<箱号:" + inputValue.Text + "错误,不存在\n", Color.Red); return; } //doc = lbl.Documents.Open(PrintLabel.Text); if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage)) { //判断通过,打印 OperateResult.AppendText("<<打印成功\n", Color.Green); printBtn.Enabled = false; } else { OperateResult.AppendText(errorMessage + "\n", Color.Red); } //打印成功,记录日志commandlog , cl_operate彩盒或者机身标补打印,cl_result补打印成功 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_makecode.Text, User.UserLineCode, User.UserSourceCode, "卡通箱标签补打印,箱号:" + inputValue.Text, "补打印成功", inputValue.Text, ""); //如果pa_downstatus<>0,则更新pa_downstatus=-1 where pa_outboxcode=?code,同时插入记录至表 MAKEDOWN if (mapB.Rows[0]["pa_downstatus"].ToString() == "0") { dh.ExecuteSql("update package set pa_downstatus='-1' where pa_outboxcode='" + inputValue.Text + "'", "update"); //插入MakeDown表 putInfo2MakeDown(); } } } /// /// 判断彩盒和机身标序列是否已经装箱 /// /// private bool checkPacked() { //如果存在,则判断是否装箱 dt = (DataTable)dh.ExecuteSql("select ms_id,ms_prodcode,ms_makecode,pr_detail, ms_outboxcode from makeserial left join product on pr_code=ms_prodcode where ms_id='" + ms_id + "'", "select"); //判断ms_outboxcode 是否为空,如果有值,则返回提示用户“已经装箱 if (dt.Rows.Count == 0) { OperateResult.AppendText("< /// 插入表MAKEDOWN /// private void putInfo2MakeDown() { //插入数据至表MAKEDOWN string md_code = ""; LogicHandler.GetSerialNumByCaller("MakeDown", out md_code); sql.Clear(); sql.Append("INSERT INTO MAKEDOWN (MD_ID,MD_LINECODE,MD_SCCODE,MD_STEPCODE,"); sql.Append(((CartonBox.Checked || BigBox.Checked || Pallte.Checked) ? "MD_OUTBOXCODE" : "MD_SNCODE") + ",MD_PRODCODE,MD_MACODE, MD_DOWNREASON, MD_CODE,"); sql.Append("MD_DOWNDATE,MD_DOWNMAN,MD_STATUS) values (MAKEDOWN_seq.nextval,'" + User.UserLineCode + "','" + User.UserSourceCode + "',"); sql.Append("'" + User.CurrentStepCode + "','" + inputValue.Text + "','" + pr_code.Text + "','" + ms_makecode.Text + "','补打标签','" + md_code + "',sysdate,'" + User.UserCode + "','-1')"); dh.ExecuteSql(sql.GetString(), "insert"); } private void rePrintCheck_KeyDown(object sender, KeyEventArgs e) { //输入ENTER if (e.KeyCode == Keys.Enter) { if (rePrintCheck.Text == "") { OperateResult.AppendText("<<输入不能为空\n", Color.Red); return; } OperateResult.AppendText(">>" + rePrintCheck.Text + "\n", Color.Black); if (giftBox.Checked || fuselagel.Checked) { //TSN为空,说明是第一次 if (TSN == "") { re_ms_id = dh.getFieldDataByCondition("makeserial", "max(ms_id) ms_id", "ms_sncode='" + rePrintCheck.Text + "'").ToString(); //如果ms_id 无值或者为空,提示用户SN不存在,请输入SN if (re_ms_id == "") { OperateResult.AppendText("<>请输入SN\n", Color.Black); return; } //存在则记录下这一次输入的SN TSN = rePrintCheck.Text; //查询其他的数据 infoc = (DataTable)dh.ExecuteSql("select ms_downstatus,ms_prodcode,ms_makecode from makeserial where ms_id='" + re_ms_id + "'", "select"); //提示用户输入核对SN OperateResult.AppendText(">>请输入核对SN\n", Color.Green, rePrintCheck); } //说明输入的是核对的SN else { //两次输入的序列号一致 if (rePrintCheck.Text == TSN) { OperateResult.AppendText("<<核对成功\n", Color.Green); //如果序列号是下地状态 ms_downstatus<>0 ,更新ms_downstatus=0; if (infoc.Rows[0]["ms_downstatus"].ToString() != "0") { ////判断下地原因是否是补打标签,是才能取消下地 if (dh.CheckExist("makedown", "Md_SNCODE='" + TSN + "' AND Md_MACODE='" + infoc.Rows[0]["ms_makecode"].ToString() + "' AND Md_STATUS=-1 AND MD_DOWNREASON='补打标签'")) { //同时更新 update makedown set ms_status=0,MS_UPREASON=’标签补打核对’,MS_UPMAN=’人员编号’,MS_UPDATE=SYSDATE WHERE MS_SNCODE=? AND MS_MACODE=? AND MS_STATUS=-1 sql.Clear(); sql.Append("update makedown set md_status=0,Md_UPREASON='标签补打核对',Md_UPMAN='" + User.UserCode + "',Md_UPDATE=SYSDATE WHERE Md_SNCODE='" + TSN + "' AND Md_MACODE='" + infoc.Rows[0]["ms_makecode"].ToString() + "' AND Md_STATUS=-1 AND MD_DOWNREASON='补打标签'"); dh.ExecuteSQLTran("update makeserial set ms_downstatus='0' where ms_id='" + re_ms_id + "'", sql.GetString()); } } printBtn.Enabled = true; //记录操作日志commandlog , 补打核对,核对成功 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, infoc.Rows[0]["ms_makecode"].ToString(), User.UserLineCode, User.UserSourceCode, "标签补打核对", "核对成功", TSN, ""); } else { OperateResult.AppendText("<<核对失败\n", Color.Red); } //清空TSN的值 TSN = ""; rePrintCheck.Text = ""; } } //勾选的是卡通箱 else if (CartonBox.Checked || BigBox.Checked || Pallte.Checked) { //第一次输入 if (TSN == "") { infoc = (DataTable)dh.ExecuteSql("select pa_prodcode,pa_makecode,pa_downstatus from package where pa_outboxcode='" + rePrintCheck.Text + "' and (pa_type=1 or pa_type =2 or pa_type=3)", "select"); //如果查询无值,提示用户卡通箱号不存在,请输入卡通箱号 if (infoc.Rows.Count == 0) { OperateResult.AppendText("<<箱号:" + rePrintCheck.Text + "不存在\n", Color.Red, rePrintCheck); OperateResult.AppendText(">>请输入箱号\n", Color.Black); return; } //存在则保存,用于和第二次的比对 TSN = rePrintCheck.Text; //提示用户输入卡通箱号 OperateResult.AppendText(">>请输入核对箱号\n", Color.Green, rePrintCheck); } else { //比对两次输入的是否一致 if (TSN == rePrintCheck.Text) { //提示用户核对成功 OperateResult.AppendText("<<核对成功\n", Color.Green); //如果卡通箱号是下地状态 pa_downstatus<>0 ,更新pa_downstatus=0; if (infoc.Rows[0]["pa_downstatus"].ToString() != "0") { //判断下地原因是否是补打标签,是才能取消下地 if (dh.CheckExist("makedown", "Md_OUTBOXCODE='" + TSN + "' AND nvl(Md_PRODCODE,' ')='" + (infoc.Rows[0]["pa_prodcode"].ToString() == "" ? " " : infoc.Rows[0]["pa_prodcode"].ToString()) + "' AND Md_STATUS=-1 AND MD_DOWNREASON='补打标签'")) { sql.Clear(); sql.Append("update makedown set md_status=0,Md_UPREASON='标签补打核对',Md_UPMAN='" + User.UserCode + "',Md_UPDATE=SYSDATE WHERE Md_OUTBOXCODE='" + TSN + "' AND Md_PRODCODE='" + infoc.Rows[0]["pa_prodcode"].ToString() + "' AND Md_STATUS=-1 AND MD_DOWNREASON='补打标签'"); dh.ExecuteSQLTran("update package set pa_downstatus='0' where pa_outboxcode='" + TSN + "'", sql.GetString()); } } printBtn.Enabled = true; //记录操作日志commandlog , 补打核对,核对成功 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, infoc.Rows[0]["pa_makecode"].ToString(), User.UserLineCode, User.UserSourceCode, "标签补打核对,箱号:" + TSN, "核对成功", TSN, ""); } else { OperateResult.AppendText("<<核对失败\n", Color.Red); } //清空TSN的值 TSN = ""; rePrintCheck.Text = ""; } } } } /// /// 清除信息 /// private void clearAll() { //清除输入值、工单代码、产品编号,名称、打印模板、核对第一次输入的SN inputValue.Text = ""; ms_makecode.Text = ""; pr_code.Text = ""; pr_detail.Text = ""; TSN = ""; if (listA != null) { listA.Clear(); } } } }