0
点赞
收藏
分享

微信扫一扫

winform实现标签分化,打印取值功能完整版

juneyale 2022-03-11 阅读 52

功能如图

在这里插入图片描述

介绍功能

1.默认不勾选转换后标签再新增

扫描二维码 --输入料号–输入其他数据后—输入新增Reel ID数据后回车触发打印功能
此动作会将输入的参数取值后生成特定格式
比如 :PGZ004.042.0002352;D111025;L20210823072232560005;V21357;Q120;R213572022030311000925;U1902CM00308Y02
并按模板进行打印

2.勾选转换后标签再新增

1.输入二维码为特定格式的号码

比如PGZ004.042.0002352;D111025;L20210823072232560005;V21357;Q120;R213572022030311000925;U1902CM00308Y02
会将此号码进行拆分成多个数据。并写入文本框中如下图
在这里插入图片描述

2.在文本框输入新增ReelID数量比如 2 后回车

会根据当前的二维码再产生两笔ReelID不同的号码出来并打印。如图
在这里插入图片描述

3.此界面的清屏可以将界面数据全部清空

解决方案及其引用如图

在这里插入图片描述

Main代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using imes.client;
using MntnAddUserDefinedLabel.Model;
using MntnAddUserDefinedLabel.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using MntnAddUserDefinedLabel.BLL;


namespace MntnAddUserDefinedLabel
{
    public partial class Main : Form
    {
        MntnAddUserDefinedLabelControl conn = new MntnAddUserDefinedLabelControl();
     
        ExecuteResult exeRes = new ExecuteResult();
        string trQRCode = "";
        string msg = string.Empty;
        LabelInfo Info = new LabelInfo();
        Model.LabelInfo.LabelInfoList info = new LabelInfo.LabelInfoList();
        private string errorMsg;
        private bool status;

        LabelPrintHelper.PrintHelper lph = new LabelPrintHelper.PrintHelper();
       
        List<string> listPrint = new List<string>();


        public string ErrorMsg { get => errorMsg; set => errorMsg = value; }
        public bool Status { get => status; set => status = value; }

        public Main()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 点击料号回车带出料号描述后跳入到下一个栏位
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtP_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            string strPart = txtP.Text.Trim();
            if (strPart == "")
            {
                ErrorMSG("料号不能为空,请输入!");
                return;
            }
            //if (txtQRCode.Text == "")
            //{
            //    ErrorMSG(" 二维码号码不能为空,请检查!");
            //    txtQRCode.SelectAll();
            //    txtQRCode.Focus();
            //    return;
            //}

            DataTable dt = conn.GetPart(strPart);
            if (dt.Rows.Count > 0)
            {
                //已包装的SN List
                for (int i = 0; i <= dt.Rows.Count - 1; i++)
                {
                    lblPart.Text = dt.Rows[i]["SPEC2"].ToString();
                }
            }
            txtD.Focus();
        }

        private void txtCh_KeyPress(object sender, KeyPressEventArgs e)
        {
            bool IsPrint = false;
            if (e.KeyChar != (char)Keys.Return)
                return;
            if (txtQRCode.Text == "" && chkAdd.Checked==true)
            {
                ErrorMSG(" 二维码号码不能为空,请检查!");              
                return;
            }
            if (txtQRCode.Text != "" && chkAdd.Checked == true)
            {
                trQRCode = txtQRCode.Text.Trim();
            

                //进行二维码转换为文本框内
                /// 执行 存储过程
                /// 返回Json字符串 { "Result": "OK", "Msg": "", "Return_Data": "" } OR { "Result": "NG", "Msg": "Error Msg", "Return_Data": "" }
                /// Return_Data : 依存储过程而定,可以是独立基础型字符串,也可以是Json格式字符串
                JObject JObj = new JObject();
                JObj.Add("FunctionID", "REELID-NEWREELID");
                JObj.Add("CODE", txtQRCode.Text);//二维码
        
                //string CodeMsg = Utility.ExecuteProcedure(JObj.ToString());//正式
                //string CodeMsg = Utility.ExecuteProcedure(JObj.ToString(), "http://10.17.39.8:8089");//测试
                //System.Diagnostics.Debug.WriteLine(CodeMsg);


                BindingList<LabelInfo.LabelInfoList> LabelInfos = new BindingList<LabelInfo.LabelInfoList>();

                //通过存储过程进行数据分析
                // LabelInfo = conn.SP_CHECK_REELIDSPLIT(JsonConvert.SerializeObject(JObj));
                LabelInfos = conn.GetSP_CHECK_REELIDSPLIT(JsonConvert.SerializeObject(JObj), IsPrint);
                if (LabelInfos.Count>0)
                {
                    for (int i = 0; i < LabelInfos.Count; i++)
                    {
                        //P:Part Number
                        txtP.Text = LabelInfos[i].BoxPartNo;
                        // (V)Supplier
                        txtV.Text = LabelInfos[i].BoxSupplier;
                        //L:Lot No
                        txtL.Text = LabelInfos[i].BoxLotNo;
                        //(U)Safe No
                        txtU.Text = LabelInfos[i].BoxSafeNo;
                        //(R)Reel ID:
                        //string ReelID = Jobjd["REElID"].ToString();
                        //(Q)Quantity
                        txtQ.Text = LabelInfos[i].BoxQuantity;
                        //(D)Date Code:
                        txtD.Text = LabelInfos[i].BoxDateCode;
                    }                 
                }
                else
                {
                   
                    string QRCodeMsg = Info.QRCodeMsg;
                    //扫描不符提示颜色改为红色将文本框信息删除
                    ErrorMSG(QRCodeMsg + " QRCode,拆分失败!");
                    txtQRCode.SelectAll();
                    txtQRCode.Focus();
                    return;
                }
                txtRqty.Focus();
            }
            else
            //显示转换的数量 
            //lblQty.Text = dgvCode.Rows.Count.ToString();
            txtP.Focus();
        }
      
        private void btnPrint_Click(object sender, EventArgs e)
        {
            bool IsPrint =true;
            string labelFile = @"D:\Label\FIFO\FIFOConvert.Lab";

            string strP = txtP.Text.Trim();
            string strD = txtD.Text.Trim();
            string strL = txtL.Text.Trim();
            string strV = txtV.Text.Trim();
            string strU = txtU.Text.Trim();
            string strQ = txtQ.Text.Trim();
            string strRqty = txtRqty.Text.Trim();

            if (strP == "" || strD == "" || strL == "" || strV == "" || strV == "" || strU == "" || strQ == "" || strRqty == "")
            {
                ErrorMSG(" 所需资料不完整,请检查!");
                return;
            }
            /// 执行 存储过程
            /// 返回Json字符串 { "Result": "OK", "Msg": "", "Return_Data": "" } OR { "Result": "NG", "Msg": "Error Msg", "Return_Data": "" }
            /// Return_Data : 依存储过程而定,可以是独立基础型字符串,也可以是Json格式字符串
            JObject JObj = new JObject();
    
            JObj.Add("FunctionID", "REELID-NEWLABELS");
            JObj.Add("CODE", txtQRCode.Text);//二维码
            JObj.Add("PARTNO", strP);
            JObj.Add("DATECODE", strD);
            JObj.Add("LOTNO", strL);   
            JObj.Add("SUPPLIER", strV);  //供应商
            JObj.Add("SAFENO", strU);
            JObj.Add("QUANTITY", strQ);
            JObj.Add("RQTY", strRqty);
            try 
            {
                BindingList<LabelInfo.LabelInfoList> LabelInfos = new BindingList<LabelInfo.LabelInfoList>();
                LabelInfos = conn.GetSP_CHECK_REELIDSPLIT(JsonConvert.SerializeObject(JObj), IsPrint);

                if (LabelInfos.Count > 0)
                {
                    for (int i = 0; i < LabelInfos.Count; i++)
                    {
                        #region 打印条码

                        listPrint.Clear();
                        //添加QRcode的值        
                        listPrint.Add(LabelInfos[i].CompleteCode);

                        //bool printFlag = Print_Label(listPrint, "RAW_SN", labelFile, 1);//测试
                        Print_Label(listPrint, "RAW_SN", labelFile, 1);//调用

                        #endregion
                        //将数据添加到datagridview
                       dgvCode.Rows.Add(LabelInfos[i].BoxPartNo, LabelInfos[i].BoxSupplier, LabelInfos[i].BoxLotNo, LabelInfos[i].BoxSafeNo, LabelInfos[i].ReelID, LabelInfos[i].BoxQuantity, LabelInfos[i].BoxDateCode, trQRCode, LabelInfos[i].CompleteCode);
                    }
                    //显示转换的数量 
                    lblQty.Text = dgvCode.Rows.Count.ToString();
                    //扫入添加后清除数据
                    ClearInputBoxData();
                }
                else
                {
                    ErrorMSG("没有符合打印的,打印失败,请检查数据!!!");
                    exeRes.Status = false;
                }

            }
            catch (Exception ex)
            {
                exeRes.Message = "Error:" + ex.Message;
                exeRes.Status = false;
            }
            
        }
        private void ClearInputBoxData()
        {
            txtQRCode.Text = "";
            txtP.Text = "";
            txtL.Text = "";
            txtD.Text = "";
            txtRqty.Text = "";
            txtU.Text = "";
            txtV.Text = "";
            txtQ.Text = "";
            lblMessage.Text = "Message";
            lblMessage.BackColor = Color.Green;
            lblPart.Text = "(输入料号回车)";
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            txtQRCode.Text = "";
            txtP.Text = "";
            txtL.Text = "";
            txtD.Text = "";
            txtRqty.Text = "";
            txtU.Text = "";
            txtV.Text = "";
            txtQ.Text = "";
            lblPart.Text = "(输入料号回车)";
            lblMessage.Text = "Message";
            lblMessage.BackColor= Color.Green;
            lblQty.Text = "0";
            dgvCode.Rows.Clear();//
        }
        private void dgvUts_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {

            //自动编号,与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgvCode.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
             (e.RowIndex + 1).ToString(),
              dgvCode.RowHeadersDefaultCellStyle.Font,
             rectangle,
            dgvCode.RowHeadersDefaultCellStyle.ForeColor,
           TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        public bool Print_Label(List<string> listPrint, string LabelType, string labelFile, int PrintQty = 1)
        {
            if (!File.Exists(labelFile))
            {
                ErrorMSG("Sample File not Exist: " + labelFile);
                return false;
            }

            if (labelFile.ToLower().EndsWith(".lab"))
            {
                lph.OpenApp(LabelPrintHelper.BarCodeType.CodeSoft);
                if (!lph.Status)
                {
                    ErrorMSG(lph.ErrorMsg);
                    return false;
                }
            }
            else if (labelFile.ToLower().EndsWith(".txt"))
            {
                lph.OpenApp(LabelPrintHelper.BarCodeType.ZPLFile);
            }
            else
            {
                ErrorMSG("Sample File not Exist");
                return false;
            }

            string msg = string.Empty;
            string sqlDefault = string.Empty;

            sqlDefault = @"SELECT  'RAW_SN' DATA_TYPE,1 DATA_ORDER,
                             'SELECT A.APN  ,A.SERIAL_NUMBER,A.MAT_BATCH,A.MAT_VENDOR,A.DATE_CODE,A.QTY,A.QR_CODE  FROM IMES.P_GLUE_STATUS A WHERE A.QR_CODE=@01' DATA_SQL,'@01' INPUT_PARAM,'QR_CODE' INPUT_FIELD FROM DUAL";

            Dictionary<string, string> commParamvalues = new Dictionary<string, string>();
            commParamvalues = lph.GetLabelVarsPrintData(listPrint[0], "RAW_SN", sqlDefault);
            //commParamvalues = GetLabelVarsPrintData(listPrint[0], "RAW_SN", sqlDefault);


            if (!lph.Status)
            {
                ErrorMSG(lph.ErrorMsg);
                return false;
            }
            //遍历
            //foreach (var param in commParamvalues.Keys)
            //{
            //    MessageBox.Show(param + ":  " + commParamvalues[param]);
            //}

            //指定默认打印机名
            string printer = "";
            if (string.IsNullOrEmpty(printer))
            {
                System.Drawing.Printing.PrintDocument print = new System.Drawing.Printing.PrintDocument();
                printer = print.PrinterSettings.PrinterName;//默认打印机名
            }


            if (!lph.CSPrint(labelFile, new List<Dictionary<string, string>> { commParamvalues }, out msg, PrintQty, printer))
            {
                ErrorMSG(msg);
                return false;
            }

            SuccessMSG(txtQRCode.Text + " 标签新增成功!");

            return true;
        }

        private void Main_Load(object sender, EventArgs e)
        {
        }

        public void ErrorMSG(string MSG)
        {
            lblMessage.Text = MSG;
            lblMessage.BackColor = Color.Red;
        }

        public void SuccessMSG(string MSG)
        {
            lblMessage.Text = MSG;
            lblMessage.BackColor = Color.Green;
        }

        public string GetCode128B(string barcode)
        {
            string result = "";
            int checksum = 104;
            //int j = 1;
            for (int ii = 0; ii < barcode.Length; ii++)
            {
                if (barcode[ii] >= 32)
                {
                    checksum += (barcode[ii] - 32) * (ii + 1);
                }
                else
                {
                    checksum += (barcode[ii] + 64) * (ii + 1);
                }
            }
            checksum = checksum % 103;
            if (checksum < 95)
            {
                checksum += 32;
            }
            else
            {
                checksum += 100;
            }
            result = Convert.ToChar(204) + barcode.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206);
            return result;
        }

        public Dictionary<string, string> GetLabelVarsPrintData(string inputData, string labelType, string sdefaultSQL)
        {
            try
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                string sqlstr = "SELECT  DATA_TYPE,DATA_ORDER,DATA_SQL,INPUT_PARAM,INPUT_FIELD FROM IMES.M_PRINT_DATA   WHERE DATA_TYPE = :DATATYPE ORDER BY DATA_ORDER";
                object[] sqlparams = new object[] { labelType };

                DataTable dataTable = utility.Query(sqlstr, sqlparams);

                if (dataTable.Rows.Count == 0)
                {
                    sqlstr = sdefaultSQL;
                    dataTable = utility.Query(sqlstr);
                }

                if (dataTable.Rows.Count > 0)
                {
                    foreach (DataRow rowitem in dataTable.Rows)
                    {
                        string inputparam = rowitem["INPUT_PARAM"].ToString();
                        string sqlvalue = rowitem["DATA_SQL"].ToString().Replace(inputparam, " '" + inputData + "' ");

                        System.Diagnostics.Debug.WriteLine(sqlvalue);

                        DataTable dtvalue = utility.Query(sqlvalue);

                        if (dtvalue.Rows.Count > 0)
                        {
                            foreach (DataColumn dc in dtvalue.Columns)
                            {
                                if (dic.Keys.Count(q => q.ToUpper() == dc.ColumnName.ToUpper()) > 0)
                                {
                                    dic[dc.ColumnName] = dtvalue.Rows[0][dc.ColumnName].ToString();
                                }
                                else
                                {
                                    dic.Add(dc.ColumnName, dtvalue.Rows[0][dc.ColumnName].ToString());
                                }
                            }
                        }
                        else
                        {
                            foreach (DataColumn dc in dtvalue.Columns)
                            {
                                if (dic.Keys.Count(q => q.ToUpper() == dc.ColumnName.ToUpper()) > 0)
                                {
                                    continue;
                                }
                                else
                                {
                                    dic.Add(dc.ColumnName, "");
                                }
                            }
                        }
                    }

                    sqlstr = "SELECT VAR_NAME,FIELD_NAME,VAR_TYPE FROM IMES.M_STATIONTYPE_LABEL_PARAMS WHERE LABEL_TYPE=:LABEL_TYPE ";
                    dataTable = utility.Query(sqlstr, sqlparams);
                    if (dataTable.Rows.Count > 0)
                    {
                        Dictionary<string, string> dicLabelValue = new Dictionary<string, string>();
                        foreach (DataRow rowitem in dataTable.Rows)
                        {
                            if (dic.Count(q => q.Key == rowitem["FIELD_NAME"].ToString()) > 0)
                            {
                                string labelvalue = dic.First(q => q.Key == rowitem["FIELD_NAME"].ToString()).Value;
                                if (rowitem["VAR_TYPE"].ToString().ToUpper() == "CODE128")
                                {
                                    labelvalue = GetCode128B(labelvalue);
                                }
                                dicLabelValue.Add(rowitem["VAR_NAME"].ToString(), labelvalue);
                            }
                            else
                            {
                                dicLabelValue.Add(rowitem["VAR_NAME"].ToString(), "");
                            }

                        }

                        this.Status = true;
                        this.ErrorMsg = "OK";
                        return dicLabelValue;
                    }
                    this.Status = true;
                    this.ErrorMsg = "OK";
                    return dic;
                }

                this.Status = false;
                this.ErrorMsg = "Not found DataType:" + labelType + " M_STATIONTYPE_LABEL_PARAMS";
                return null;

            }
            catch (Exception ex) { this.Status = false; this.ErrorMsg = ex.Message + ex.InnerException; return null; }
        }

        private void txtL_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            txtV.Focus();
        }

        private void txtD_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            txtL.Focus();
        }

        private void txtV_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            txtU.Focus();
        }

        private void txtU_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            txtQ.Focus();
        }

        private void txtQ_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            txtRqty.Focus();
        }

        private void txtRqty_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != 13)
            {
                return;
            }
            btnPrint_Click(sender, e);
        }
    }
}

Model下的LabelInfo.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MntnAddUserDefinedLabel.Model
{
    public class LabelInfo
    {
        private string qrcodemsg;//QRCodeMsg
        public string QRCodeMsg { get => qrcodemsg; set => qrcodemsg = value; }

        public class LabelInfoList
        {
            private string boxlotno;//BoxLotNo  
            private string boxsafeno;//BoxSafeNo
            private string boxquantity;//BoxQuantity
            private string boxdatecode;//BoxDateCode
            private string boxsupplier;//BoxSupplier
            private string boxpartno;//BoxPartNo  
            private string completecode;//QRCodeMsg  新增的标签
            private string reelid;//ReelID  新增的标签

            public string BoxLotNo { get => boxlotno; set => boxlotno = value; }
            public string BoxSafeNo { get => boxsafeno; set => boxsafeno = value; }
            public string BoxQuantity { get => boxquantity; set => boxquantity = value; }
            public string BoxDateCode { get => boxdatecode; set => boxdatecode = value; }
            public string BoxSupplier { get => boxsupplier; set => boxsupplier = value; }
            public string BoxPartNo { get => boxpartno; set => boxpartno = value; }

            public string ReelID { get => reelid; set => reelid = value; }

            public string CompleteCode { get => completecode; set => completecode = value; }
        }
        public List<LabelInfoList> labelInfoList { get; set; }
    }
}

BLL下的MntnAddUserDefinedLabel.cs代码

using System.ComponentModel;
using System.Data;
using MntnAddUserDefinedLabel.DAL;
using MntnAddUserDefinedLabel.Model;

namespace MntnAddUserDefinedLabel.BLL
{

    class MntnAddUserDefinedLabelControl
    {
        BindingList<LabelInfo> LabelInfos = new BindingList<LabelInfo>();
        MntnAddUserDefinedLabelDAL dal = new MntnAddUserDefinedLabelDAL();
        public DataTable GetPart(string strPart)
        {
            return dal.GetPart(strPart);
        }

        public BindingList<LabelInfo.LabelInfoList> GetSP_CHECK_REELIDSPLIT(object obj,bool IsPrint)
        {
            //检查SN基本资料
            return dal.GetSP_CHECK_REELIDSPLIT(obj, IsPrint);
        }
    }
}

DAL下的MntnAddUserDefinedLabel.cs代码

using imes.client;
using MntnAddUserDefinedLabel.Model;
using MntnAddUserDefinedLabel.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.ComponentModel;
using System.Data;

namespace MntnAddUserDefinedLabel.DAL
{
    class MntnAddUserDefinedLabelDAL
    {
        ExecuteResult exeRes = new ExecuteResult();

        //BindingList<LabelInfo> LabelInfos = new BindingList<LabelInfo>();

        LabelInfo Info = new LabelInfo();
        public DataTable GetPart(string strPart)
        {
            string sql = string.Format(@"SELECT SPEC2 FROM IMES.M_PART WHERE    IPN='{0}' AND ENABLED = 'Y'", strPart);
            return utility.Query(sql);
        }

        public BindingList<LabelInfo.LabelInfoList> GetSP_CHECK_REELIDSPLIT(object obje,bool IsPrint)
        {
            BindingList<Model.LabelInfo.LabelInfoList> LabelInfos = new BindingList<Model.LabelInfo.LabelInfoList>();
  
            string QRCodeMsg = "";
            try
            {
                exeRes = new ExecuteResult();
                var para = new object[][]
                {
                    new object[4] { ParameterDirection.Input, ImesOracleType.Varchar2, "T_InputJson", obje },
                    new object[4] { ParameterDirection.Output, ImesOracleType.Varchar2, "TRES", "" }
                };
                object[][] obj = utility.ExecuteProc("IMES.SP_CHECK_REELIDSPLIT", para);
                string sRes = obj[1][3].ToString();

                JObject Jobj = JObject.Parse(sRes);

                if (Jobj["Result"].ToString() == "NG")
                {
                    Info.QRCodeMsg = Jobj["Msg"].ToString();
                    exeRes.Status = false;
                }
                else
                {
                    JArray jsonArr = (JArray)JsonConvert.DeserializeObject(Jobj["Return_Data"].ToString());

                    for (int i = 0; i < jsonArr.Count; i++)
                    {
                        Model.LabelInfo.LabelInfoList info = new Model.LabelInfo.LabelInfoList();

                        System.Diagnostics.Debug.WriteLine(jsonArr[i].ToString());
                        JObject Jobjd = JObject.Parse(jsonArr[i].ToString());
                        //P:Part Number
                        info.BoxPartNo = Jobjd["BOXPARTNO"].ToString();
                        // (V)Supplier
                        info.BoxSupplier = Jobjd["BOXSUPPLIER"].ToString();
                        //L:Lot No
                        info.BoxLotNo = Jobjd["BOXLOTNO"].ToString();
                        //(U)Safe No
                        info.BoxSafeNo = Jobjd["BOXSAFENO"].ToString();

                        //(Q)Quantity
                        info.BoxQuantity = Jobjd["BOXQUANTITY"].ToString();
                        //(D)Date Code:
                        info.BoxDateCode = Jobjd["BOXDATECODE"].ToString();
                        if (IsPrint)                     
                        {
                            //(R)Reel ID:
                            info.ReelID = Jobjd["REElID"].ToString();

                            //新的转换后的二维码
                            info.CompleteCode = Jobjd["COMPLETE"].ToString();
                        }

                        LabelInfos.Add(info);
                    }

                    exeRes.Status = true;
                 
                }
            }
              
            catch (Exception ex)
            {
                exeRes.Message = "Error:" + ex.Message;
                exeRes.Status = false;
            }
            return LabelInfos;
        }
    }
}

存储过程SP_CHECK_REELIDSPLIT

CREATE OR REPLACE PROCEDURE IMES.SP_CHECK_REELIDSPLIT(T_InputJson IN VARCHAR2,TRES OUT VARCHAR2)
IS
/*
功能:
    转换有规则标签
    分解转换后的二维码
   手动 新增不规则的标签
    T_CODE:  Code  
    Add by 2021/10/26 SHINECAO
*/
V_CODE STR_SPLIT:=STR_SPLIT();
V_BOXLOTNO VARCHAR2(50);
V_BOXSAFENO  VARCHAR2(50);
V_BOXQUANTITY   VARCHAR2(50);
V_BOXDATECODE  VARCHAR2(50);
V_BOXSUPPLIER  VARCHAR2(50);
V_BOXPARTNO   VARCHAR2(50);
V_REElID VARCHAR2(100);
V_REElID_TMP VARCHAR2(100);
V_OUT VARCHAR2(6000);

V_ERR VARCHAR2(4000);
V_CODE_1 VARCHAR2(200);
V_CODE_2 VARCHAR2(200);
V_COMPLETE  VARCHAR2(4000);
V_COUNT  NUMBER;
V_QTY_CODE  STR_SPLIT:=STR_SPLIT();
V_F VARCHAR2(1);
V_OUT_TMP VARCHAR2(4000);
V_QTY NUMBER;
V_QTY_MOD NUMBER;

T_CODE VARCHAR2(200);
T_FUNCTIONID VARCHAR2(200);
T_QTY VARCHAR2(200);
InputOBJ PLJSON;

j NUMBER;

BEGIN
    Tres := '';  
    InputOBJ :=PLJSON(T_InputJson);
    T_CODE   :=TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'CODE'));
    T_FUNCTIONID :=TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'FunctionID'));
    IF T_FUNCTIONID ='REELID-CONVERT' THEN
          SELECT count(QR_CODE_RAW) INTO V_COUNT FROM IMES.P_GLUE_STATUS
           where QR_CODE_RAW = T_CODE and ENABLED = 'Y'; ---检查是否已转换此二维码 
              
        IF V_COUNT >= 1 then  
          Tres:='{"Result": "NG","Msg": "二维码已转换,不能再次转换","Return_Data":""}';
           GOTO ENDP;  
        END IF;
       
       IF INSTR(T_CODE,'@@')>0 THEN        
         V_CODE_1 := SUBSTR(T_CODE,1,INSTR(T_CODE,'@@')-1);
         V_CODE_2 := SUBSTR(T_CODE,INSTR(T_CODE,'@@')+2);
     
         V_CODE := IMES.STRSPLITTOLIST(V_CODE_1,'@');
        
          FOR j IN V_CODE.FIRST .. V_CODE.LAST LOOP                   
            CASE j
              WHEN 1 THEN 


                V_BOXLOTNO         := V_CODE(j);                
               WHEN 2 THEN              
                V_BOXPARTNO          := 'GZ'||V_CODE(j);  
                WHEN 3 THEN 
                V_BOXSAFENO          := V_CODE(j);
                V_REElID          := V_CODE(j)||TO_CHAR(SYSDATE,'YYYYMMDDHH24')|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
               ELSE
                 NULL;
             END CASE;
          END LOOP;
               
          V_CODE := IMES.STRSPLITTOLIST(V_CODE_2,'@');       
          FOR j IN V_CODE.FIRST .. V_CODE.LAST LOOP
            CASE j
               WHEN 1 THEN 
                 IF LENGTH(V_CODE(j))<=6 THEN
                 V_BOXDATECODE        := '20'||SUBSTR(V_CODE(j),1,4); 
                 END IF; 
                  IF LENGTH(V_CODE(j))=8 AND INSTR(V_CODE(j),',')=0 THEN    
                  V_BOXDATECODE        := TO_CHAR(TO_DATE(V_CODE(j),'YYYYMMDD'),'YYYYIW'); 
                 END IF; 
               WHEN 2 THEN
                  IF INSTR(V_CODE(1),'.')>0 THEN 
                  V_BOXDATECODE        := TO_CHAR(TO_DATE(V_CODE(j),'YYYYMMDD'),'YYYYIW'); 
                  END IF;                                      
               WHEN 3 THEN 
                  V_BOXQUANTITY          := V_CODE(j);     
                  IF V_BOXSUPPLIER IS NULL THEN
                     V_BOXSUPPLIER    := '1000661';                
                  END IF;               
             END CASE; 
          END LOOP;         
                           
      
         
       --V_COMPLETE生成厂内的二维码格式内容
       V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||V_BOXQUANTITY||';'||'R'||V_REElID||';'||'U'||V_BOXSAFENO; 
  
       V_OUT :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_BOXQUANTITY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID||'","COMPLETE": "'||V_COMPLETE||'"}'; 
       INSERT INTO IMES.P_GLUE_STATUS
        (SERIAL_NUMBER, ---Reelid R
         GLUE_TYPE, ---料号 P
         APN, ---料号 P
         MAT_VENDOR, ---U
         MAT_BATCH, ---L
         DATE_CODE, ---D
         QR_CODE, ---  V_COMPLETE
         QTY, ---Q
         QR_CODE_RAW--T_CODE
         )
        VALUES
        (V_REElID,
         V_BOXPARTNO,
         V_BOXPARTNO,
         V_BOXSAFENO,
         V_BOXLOTNO,
         V_BOXDATECODE,
         V_COMPLETE,
         V_BOXQUANTITY,
         T_CODE ); 
         
         GOTO ENDN;
      END IF;
      
 
      
     IF INSTR(T_CODE,'@')>0 THEN 
         V_CODE := IMES.STRSPLITTOLIST(T_CODE,'@');
        
        FOR j IN V_CODE.FIRST .. V_CODE.LAST LOOP
            CASE j
              WHEN 1 THEN 
                V_BOXLOTNO        := V_CODE(j);                
               WHEN 2 THEN              
                V_BOXPARTNO       := 'GZ'||V_CODE(j);  
                WHEN 3 THEN 
                V_BOXSAFENO       := V_CODE(j);
                V_REElID          := V_CODE(j)||TO_CHAR(SYSDATE,'YYYYMMDDHH24')|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
                WHEN 5 THEN 
                 V_BOXDATECODE        := '20'||SUBSTR(V_CODE(j),1,4); 
                WHEN 7 THEN 
                V_BOXQUANTITY     := V_CODE(j);
               ELSE
                     IF V_BOXSUPPLIER IS NULL THEN
                     V_BOXSUPPLIER    := '1000661';  
                     END IF;
                     
             END CASE;
        END LOOP;
        
         --V_COMPLETE生成厂内的二维码格式内容
       V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||V_BOXQUANTITY||';'||'R'||V_REElID||';'||'U'||V_BOXSAFENO; 
  
       V_OUT :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_BOXQUANTITY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID||'","COMPLETE": "'||V_COMPLETE||'"}'; 
       INSERT INTO IMES.P_GLUE_STATUS
        (SERIAL_NUMBER, ---Reelid R
         GLUE_TYPE, ---料号 P
         APN, ---料号 P
         MAT_VENDOR, ---U
         MAT_BATCH, ---L
         DATE_CODE, ---D
         QR_CODE, --- V_COMPLETE
         QTY, ---Q
         QR_CODE_RAW--T_CODE
         )
        VALUES
        (V_REElID,
         V_BOXPARTNO,
         V_BOXPARTNO,
         V_BOXSAFENO,
         V_BOXLOTNO,
         V_BOXDATECODE,
         V_COMPLETE,
         V_BOXQUANTITY,
         T_CODE ); 
         
        GOTO ENDN;
      END IF;
      
      Tres:='{"Result": "NG","Msg": "二维码格式不规范","Return_Data":""}';
      GOTO ENDP;     
  END IF; 

    
  IF T_FUNCTIONID ='REELID-SPLIT' THEN
     T_QTY :=TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'QTY'));

         -- SELECT count(QR_CODE)  INTO V_COUNT  FROM IMES.P_GLUE_STATUS
          --  WHERE QR_CODE = T_CODE AND ENABLED = 'Y'; ---检查是否存在此二维码 
                  
      --  IF V_COUNT <= 0 then  
          --Tres:='{"Result": "NG","Msg": "二维码不存在,请更换号码","Return_Data":""}';
          -- GOTO ENDP;  
       -- END IF;
  
     V_QTY:=0;
         IF INSTR(T_CODE,';')>0 THEN          
            V_CODE := IMES.STRSPLITTOLIST(T_CODE,';');  
            FOR j IN V_CODE.FIRST .. V_CODE.LAST LOOP  
            V_F :=SUBSTR(V_CODE(j),1,1);                 
                CASE V_F
                  WHEN 'P' THEN 
                    V_BOXPARTNO          := SUBSTR(V_CODE(j),2);                               
                  WHEN 'V' THEN              
                    V_BOXSUPPLIER        := SUBSTR(V_CODE(j),2);
                  WHEN 'L' THEN 
                    V_BOXLOTNO           := SUBSTR(V_CODE(j),2);
                  WHEN 'U' THEN  
                    V_BOXSAFENO          := SUBSTR(V_CODE(j),2);                               
                  WHEN 'R' THEN              
                    V_REElID             := SUBSTR(V_CODE(j),2);
                  WHEN 'Q' THEN 
                    V_BOXQUANTITY         := SUBSTR(V_CODE(j),2);
                  WHEN 'D' THEN 
                    V_BOXDATECODE          := SUBSTR(V_CODE(j),2);
                   ELSE
                     NULL;
                 END CASE;
            END LOOP;      
         END IF;
     
     IF INSTR(T_QTY,'.')>0 THEN  
          V_QTY_CODE := IMES.STRSPLITTOLIST(T_QTY,'.'); 
          V_OUT := NULL;
          FOR j IN V_QTY_CODE.FIRST .. V_QTY_CODE.LAST LOOP 
                V_REElID_TMP := SUBSTR(V_REElID,1,Length(V_REElID)-6)|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
                V_QTY:=V_QTY+TO_NUMBER(V_QTY_CODE(j));  
                --V_COMPLETE生成厂内的二维码格式内容   
                V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||V_QTY_CODE(j)||';'||'R'||V_REElID_TMP||';'||'U'||V_BOXSAFENO; 
  
                V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_QTY_CODE(j)||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID_TMP||'","COMPLETE": "'||V_COMPLETE||'"}';  
                  
                 IF V_OUT IS NULL THEN
                    V_OUT:=V_OUT_TMP;
                 ELSE
                    V_OUT:=V_OUT||','||V_OUT_TMP;
                 END IF;
            
                 V_COUNT :=j;
          
                 INSERT INTO IMES.P_GLUE_STATUS
                  (SERIAL_NUMBER, ---Reelid R
                  GLUE_TYPE, ---料号 P
                  APN, ---料号 P
                   MAT_VENDOR, ---U
                   MAT_BATCH, ---L
                   DATE_CODE, ---D
                   QR_CODE, ---  V_COMPLETE
                   QTY, ---Q
                   QR_CODE_RAW--T_CODE
                   )
                  VALUES
                  (V_REElID_TMP,
                   V_BOXPARTNO,
                   V_BOXPARTNO,
                   V_BOXSAFENO,
                   V_BOXLOTNO,
                   V_BOXDATECODE,
                   V_COMPLETE,
                   V_QTY_CODE(j),
                   T_CODE ); 
         END LOOP; 
       
          V_QTY_MOD:=TO_NUMBER(V_BOXQUANTITY)-V_QTY;
          IF V_QTY_MOD>0 THEN
             V_REElID_TMP := SUBSTR(V_REElID,1,Length(V_REElID)-6)|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
             --V_COMPLETE生成厂内的二维码格式内容
             V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||TO_CHAR(V_QTY_MOD)||';'||'R'||V_REElID_TMP||'U'||V_BOXSAFENO; 
  
             V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_QTY_MOD||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID_TMP||'","COMPLETE": "'||V_COMPLETE||'"}';  
         
              V_OUT:=V_OUT||','||V_OUT_TMP;
             INSERT INTO IMES.P_GLUE_STATUS
               (SERIAL_NUMBER, ---Reelid R
               GLUE_TYPE, ---料号 P
               APN, ---料号 P
               MAT_VENDOR, ---U
               MAT_BATCH, ---L
               DATE_CODE, ---D
               QR_CODE, ---  V_COMPLETE
               QTY, ---Q
               QR_CODE_RAW--T_CODE
               )
              VALUES
              (V_REElID_TMP,
               V_BOXPARTNO,
               V_BOXPARTNO,
               V_BOXSAFENO,
               V_BOXLOTNO,
               V_BOXDATECODE,
               V_COMPLETE,
               V_QTY_MOD,
               T_CODE );
          END IF;          
       ELSE
             V_REElID_TMP := SUBSTR(V_REElID,1,Length(V_REElID)-6)|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0');
             V_QTY:=TO_NUMBER(T_QTY);  
             --V_COMPLETE生成厂内的二维码格式内容   
             V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||T_QTY||';'||'R'||V_REElID_TMP||';'||'U'||V_BOXSAFENO; 
  
             V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||T_QTY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID_TMP||'","COMPLETE": "'||V_COMPLETE||'"}';  
                          
             V_OUT:=V_OUT_TMP;
              
              INSERT INTO IMES.P_GLUE_STATUS
              (SERIAL_NUMBER, ---Reelid R
               GLUE_TYPE, ---料号 P
               APN, ---料号 P
               MAT_VENDOR, ---U
               MAT_BATCH, ---L
               DATE_CODE, ---D
               QR_CODE, ---  V_COMPLETE
               QTY, ---Q
               QR_CODE_RAW--T_CODE
               )
              VALUES
              (V_REElID_TMP,
               V_BOXPARTNO,
               V_BOXPARTNO,
               V_BOXSAFENO,
               V_BOXLOTNO,
               V_BOXDATECODE,
               V_COMPLETE,
               T_QTY,
               T_CODE );  
       
             V_QTY_MOD:=TO_NUMBER(V_BOXQUANTITY)-V_QTY;
             V_REElID_TMP := SUBSTR(V_REElID,1,Length(V_REElID)-6)|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0');
              IF V_QTY_MOD>0 THEN
                --V_COMPLETE生成厂内的二维码格式内容
                V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||TO_CHAR(V_QTY_MOD)||';'||'R'||V_REElID_TMP||';'||'U'||V_BOXSAFENO; 
  
                V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||TO_CHAR(V_QTY_MOD)||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID_TMP||'","COMPLETE": "'||V_COMPLETE||'"}';  
                
                 V_OUT:=V_OUT||','||V_OUT_TMP;
             
                 INSERT INTO IMES.P_GLUE_STATUS
                   (SERIAL_NUMBER, ---Reelid R
                   GLUE_TYPE, ---料号 P
                   APN, ---料号 P
                   MAT_VENDOR, ---U
                   MAT_BATCH, ---L
                   DATE_CODE, ---D
                   QR_CODE, ---  V_COMPLETE
                   QTY, ---Q
                   QR_CODE_RAW--T_CODE
                   )
                  VALUES
                  (V_REElID_TMP,
                   V_BOXPARTNO,
                   V_BOXPARTNO,
                   V_BOXSAFENO,
                   V_BOXLOTNO,
                   V_BOXDATECODE,
                   V_COMPLETE,
                   V_QTY_MOD,
                   T_CODE );
              END IF;             
     END IF;
     V_OUT :='['||V_OUT||']';
     
     
     
  END IF ;
  
   IF T_FUNCTIONID ='REELID-NEWLABELS' THEN 
         V_OUT := NULL;
         T_QTY   :=TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'RQTY'));
         V_BOXPARTNO := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'PARTNO'));
         V_BOXDATECODE  := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'DATECODE'));
         V_BOXLOTNO := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'LOTNO'));
         V_BOXSUPPLIER:= TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'SUPPLIER'));
         V_BOXSAFENO  := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'SAFENO'));
         V_BOXQUANTITY  := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'QUANTITY'));
         V_QTY    := TRIM(PLJSON_EXT.GET_STRING(InputOBJ,'QUANTITY'));
         
            IF T_QTY >1 THEN  
              begin
                j:=1;
                FOR j in 1..T_QTY loop
                 --产生对应的数量的Reelid 
                 V_REElID          := V_BOXSUPPLIER||TO_CHAR(SYSDATE,'YYYYMMDDHH24')|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
                 V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||V_QTY||';'||'R'||V_REElID ||';'||'U'||V_BOXSAFENO; 
  
                V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_QTY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID ||'","COMPLETE": "'||V_COMPLETE||'"}'; 
                  
                  
                     IF V_OUT IS NULL THEN
                    V_OUT:=V_OUT_TMP;
                 ELSE
                    V_OUT:=V_OUT||','||V_OUT_TMP;
                 END IF;
                 
                    INSERT INTO IMES.P_GLUE_STATUS
                  (SERIAL_NUMBER, ---Reelid R
                  GLUE_TYPE, ---料号 P
                  APN, ---料号 P
                   MAT_VENDOR, ---U
                   MAT_BATCH, ---L
                   DATE_CODE, ---D
                   QR_CODE, ---  V_COMPLETE
                   QTY, ---Q
                   QR_CODE_RAW--T_CODE
                   )
                  VALUES
                  (V_REElID,
                   V_BOXPARTNO,
                   V_BOXPARTNO,
                   V_BOXSAFENO,
                   V_BOXLOTNO,
                   V_BOXDATECODE,
                   V_COMPLETE,
                   V_QTY,
                   T_CODE );
                 
                 end loop;
                 end pro_test_for;
        
           END IF;
                   IF T_QTY =1 THEN  
              --产生一个Reelid 
                 V_REElID          := V_BOXSUPPLIER||TO_CHAR(SYSDATE,'YYYYMMDDHH24')|| LPAD(IMES.S_REELID_SEQ.NEXTVAL,6,'0'); 
                 V_COMPLETE := 'P'||V_BOXPARTNO ||';'|| 'D'|| V_BOXDATECODE ||';'||'L'||V_BOXLOTNO||';'||'V'||V_BOXSUPPLIER||';'||'Q'||V_QTY||';'||'R'||V_REElID ||';'||'U'||V_BOXSAFENO; 
                 V_OUT:='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_QTY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                 V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'","REElID": "'||V_REElID ||'","COMPLETE": "'||V_COMPLETE||'"}'; 
                 
                
                 
                  INSERT INTO IMES.P_GLUE_STATUS
                  (SERIAL_NUMBER, ---Reelid R
                  GLUE_TYPE, ---料号 P
                  APN, ---料号 P
                   MAT_VENDOR, ---U
                   MAT_BATCH, ---L
                   DATE_CODE, ---D
                   QR_CODE, ---  V_COMPLETE
                   QTY, ---Q
                   QR_CODE_RAW--T_CODE
                   )
                  VALUES
                  (V_REElID,
                   V_BOXPARTNO,
                   V_BOXPARTNO,
                   V_BOXSAFENO,
                   V_BOXLOTNO,
                   V_BOXDATECODE,
                   V_COMPLETE,
                   V_QTY,
                   T_CODE );
       END IF;
          V_OUT :='['||V_OUT||']';
  END IF;
  
  
   IF T_FUNCTIONID ='REELID-NEWREELID' THEN 
         V_OUT := NULL;

          SELECT count(QR_CODE)  INTO V_COUNT  FROM IMES.P_GLUE_STATUS
            WHERE QR_CODE = T_CODE AND ENABLED = 'Y'; ---检查是否存在此二维码 
                  
        IF V_COUNT <= 0 then  
          Tres:='{"Result": "NG","Msg": "二维码不存在,请更换号码","Return_Data":""}';
           GOTO ENDP;  
        END IF;
         
            IF INSTR(T_CODE,';')>0 THEN          
            V_CODE := IMES.STRSPLITTOLIST(T_CODE,';');  
            FOR j IN V_CODE.FIRST .. V_CODE.LAST LOOP  
            V_F :=SUBSTR(V_CODE(j),1,1);                 
                CASE V_F
                  WHEN 'P' THEN 
                    V_BOXPARTNO          := SUBSTR(V_CODE(j),2);                               
                  WHEN 'V' THEN              
                    V_BOXSUPPLIER        := SUBSTR(V_CODE(j),2);
                  WHEN 'L' THEN 
                    V_BOXLOTNO           := SUBSTR(V_CODE(j),2);
                  WHEN 'U' THEN  
                    V_BOXSAFENO          := SUBSTR(V_CODE(j),2);                               
                  WHEN 'R' THEN              
                    V_REElID             := SUBSTR(V_CODE(j),2);
                  WHEN 'Q' THEN 
                    V_BOXQUANTITY         := SUBSTR(V_CODE(j),2);
                  WHEN 'D' THEN 
                    V_BOXDATECODE          := SUBSTR(V_CODE(j),2);
                   ELSE
                     NULL;
                 END CASE;
            END LOOP;      
         END IF;
             --V_COMPLETE生成厂内的二维码格式内容   
             
             V_OUT_TMP :='{"BOXLOTNO":"'||V_BOXLOTNO||'","BOXSAFENO": "'||V_BOXSAFENO||'","BOXQUANTITY": "'||V_BOXQUANTITY||'","BOXDATECODE": "'||V_BOXDATECODE||'","BOXSUPPLIER": "'||
                  V_BOXSUPPLIER ||'","BOXPARTNO": "'||V_BOXPARTNO||'"}';  
                          
             V_OUT:=V_OUT_TMP;
      
            
          V_OUT :='['||V_OUT||']';
  END IF;
  <<ENDN>>
    Tres:='{"Result": "OK","Msg": "","Return_Data":'||V_OUT||'}';
  
   <<ENDP>>
    NULL;
              
      
 EXCEPTION
    WHEN OTHERS THEN
           V_ERR := '错误行号:' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() ||' 错误代码:' || SQLCODE || ' 错误提示:' || SQLERRM(SQLCODE);
           V_ERR :=REPLACE(V_ERR,'"',' ');
           V_ERR :=REPLACE(V_ERR,CHR(9),' ');   -- 制表
           V_ERR :=REPLACE(V_ERR,CHR(10),' ');  -- 换行
           V_ERR :=REPLACE(V_ERR,CHR(13),' ');  -- 回车       
           Tres:='{"Result": "NG","Msg": "'||V_ERR||'","Return_Data":","}';
 END;
/

注:打印模板使用的是Codesoft6实现,打印通过调用LabelPrintHelper.dll实现

举报

相关推荐

0 条评论