功能如图
介绍功能
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实现