using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using AR; namespace Project { public partial class FMain { Tuple> BarcodeRegExProcess( List patterns, List patternsEx, Class.VisionData vdata, string barcodeSymbol, string bcd, out bool IgnoreBarcode, out bool findregex) { //var patterns = PUB.Result.BCDPattern; IgnoreBarcode = false; findregex = false; //get : same symbol data List pats; if (patterns != null) { if (barcodeSymbol.isEmpty() == false) pats = patterns.Where(t => t.IsEnable == true && (string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol)).OrderBy(t => t.Seq).ToList(); else pats = patterns.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList(); } else pats = new List(); List patsEx; if (patternsEx == null) patsEx = new List(); else { if (barcodeSymbol.isEmpty() == false) patsEx = patternsEx.Where(t => string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol).OrderBy(t => t.Seq).ToList(); else patsEx = patternsEx.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList(); } if (pats.Any() == false) { PUB.log.AddAT($"등록된 패턴이 없습니다(SYM={barcodeSymbol})"); return new Tuple>(0, new List()); } //모델정보의 허용 심볼인지 확인한다 221017 var vm = PUB.Result.vModel; if (vm != null) { if (vm.BCD_DM == false && barcodeSymbol == "2") { PUB.log.AddAT($"모델(DM)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } else if (vm.BCD_1D == false && (barcodeSymbol == "6" || barcodeSymbol == "11")) { PUB.log.AddAT($"모델(1D)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } else if (vm.BCD_QR == false && (barcodeSymbol == "1")) { PUB.log.AddAT($"모델(QR)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } } //이 바코드가 무시바코드에 있는지 먼저 검사한다 220718 foreach (var pt in patsEx) { //skip disable item if (pt.IsEnable == false) continue; //check regex var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10)); if (regx.IsMatch(bcd)) { PUB.log.Add($"무시바코드:{bcd},PAT:{pt.Pattern},SYM:{pt.Symbol}"); IgnoreBarcode = true; break; } } if (IgnoreBarcode) { return new Tuple>(0, new List()); } var ValueApplyCount = 0; ValueApplyCount = 0; List list = new List(); findregex = false; foreach (var pt in pats) { //skip disable item if (pt.IsEnable == false) continue; var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10)); if (regx.IsMatch(bcd)) { findregex = true; //find data var matchs = regx.Matches(bcd); foreach (System.Text.RegularExpressions.Match mat in matchs) { if (vdata == null) ValueApplyCount += 1; else { foreach (var matchdata in pt.Groups) { if (matchdata.GroupNo <= mat.Groups.Count) { var data = mat.Groups[matchdata.GroupNo]; if (PUB.SetBCDValue(vdata, matchdata.TargetPos, data.Value, pt.IsTrust)) ValueApplyCount += 1; } } } } if (vdata != null && pt.IsAmkStd)// && bcdObj.barcodeSymbol == "1") { vdata.QRInputRaw = bcd; } if (vdata != null) PUB.log.AddI($"[{pt.Description}]=>{bcd}"); list.Add(pt.Customer + "|" + pt.Description); } else { //PUB.log.AddAT($"(X)Match ({pt.Pattern}) Data={bcd}"); } } return new Tuple>(ValueApplyCount, list); } /// /// barcod eprocess /// void BarcodeProcess() { //coffee //get regexpress patterns var patterns = PUB.Result.BCDPattern; var itemC = PUB.Result.ItemDataC; var vdata = itemC.VisionData; //No Run - Confirm Data if (vdata.Confirm) return; var vm = PUB.Result.vModel; lock (vdata.barcodelist) { foreach (var item in vdata.barcodelist) { //var src = item.Value.barcodeSource; var bcd = item.Value.Data; var bcdObj = item.Value; //already checked if (bcdObj.RegExConfirm) continue; var ValueApplyCount = BarcodeRegExProcess(PUB.Result.BCDPattern, PUB.Result.BCDIgnorePattern, vdata, bcdObj.barcodeSymbol, bcd, out bool IgnoreBcd, out bool findregex); bcdObj.Ignore = IgnoreBcd; //기타바코드 무시기능 적용 221018 if (vm != null && vm.IgnoreOtherBarcode == true && findregex == false) bcdObj.Ignore = true; bcdObj.RefExApply = (ValueApplyCount?.Item1 ?? 0) > 0; bcdObj.RegExConfirm = true; } } //assign customer code - fixed data if (vdata.CUSTCODE.isEmpty() && VAR.STR[eVarString.JOB_CUSTOMER_CODE].isEmpty() == false) { vdata.CUSTCODE = VAR.STR[eVarString.JOB_CUSTOMER_CODE]; PUB.log.Add($"Cutomer Code 고정값 사용 : {vdata.CUSTCODE}"); } //SiD CONVERT if (VAR.BOOL[eVarBool.Opt_SIDConvert]) { if (PUB.flag.get(eVarBool.FG_WAIT_LOADERINFO) == false && VAR.BOOL[eVarBool.JOB_Empty_SIDConvertInfo] == false) { //원본시드(sid0)가 비어있는데 sid과 확정되었다면 변환작업을 진행한다 if (vdata.SID0.isEmpty() && vdata.SID.isEmpty() == false && vdata.SID_Trust) { //이 sid가 존재여부확인 후 없는 sid라면 더이상 처리하지 않는다 230510 if (PUB.Result.DTSidConvertEmptyList.Contains(vdata.SID)) { //존재하지 않는 SID로 이미 확인되었다 } else if (PUB.Result.DTSidConvertMultiList.Contains(vdata.SID)) { //다중sid로 인해 처리하지 않는다 } else { var newsid = PUB.SIDCovert(vdata.SID, "SPS_BarcodeProcess", out bool converr); if (converr) { if (PUB.sm.Step == eSMStep.RUN) PUB.log.AddE(newsid); } else { vdata.SID0 = vdata.SID; vdata.SID = newsid; } } } } } //정규식혹은 바코드 룰에 의해 데이터가 바뀌었더라도 모델 기준으로 진행한다 if (PUB.Result.vModel.Def_Vname.isEmpty() == false) { if (itemC.VisionData.VNAME.Equals(PUB.Result.vModel.Def_Vname) == false) { itemC.VisionData.VNAME = PUB.Result.vModel.Def_Vname.Trim(); itemC.VisionData.VNAME_Trust = true; PUB.log.Add($"Defaul V.Name Set to {PUB.Result.vModel.Def_Vname}"); } } if (PUB.Result.vModel.Def_MFG.isEmpty() == false) { if (itemC.VisionData.MFGDATE.Equals(PUB.Result.vModel.Def_MFG) == false) { itemC.VisionData.MFGDATE = PUB.Result.vModel.Def_MFG.Trim(); itemC.VisionData.MFGDATE_Trust = true; PUB.log.Add($"Defaul MFGDATE Set to {PUB.Result.vModel.Def_MFG}"); } } ////New ReelID /// this process run ( 3_keyence_read.cs ) //if (VAR.BOOL[eVarBool.Opt_NewReelID) && PUB.sm.isRunning) //{ // if (vdata.temp_custcode.Length == 4 && vdata.RID0.isEmpty() && vdata.RIDNew == false) // { // //backup old reel id // vdata.RID0 = vdata.RID; // vdata.RIDNew = true; // var newid = Amkor.RestfulService.Allocation_Unique_ReelID_AmkorSTD(vdata.temp_custcode, "4", "A", out string err); // if (newid.isEmpty() == false) // { // //remain original reel id // vdata.SetRID( newid,"SPS"); // PUB.log.AddI($"New REELID:{newid}"); // } // } //} //릴ID 신규발행 if (PUB.sm.Step == eSMStep.RUN && vdata.CUSTCODE.isEmpty() == false && vdata.SID.isEmpty() == false) { if (VAR.BOOL[eVarBool.Opt_NewReelID]) { if (itemC.VisionData.RIDNew == false && itemC.VisionData.CUSTCODE.isEmpty() == false) { var newid = Amkor.RestfulService.Allocation_Unique_ReelID_AmkorSTD(itemC.VisionData.CUSTCODE, "4", "A", out string errmsg); if (newid.isEmpty() == false) { //backup origin reel id itemC.VisionData.RID0 = itemC.VisionData.RID; //set new reel id itemC.VisionData.SetRID(newid, "SPS:CHKDATACOMPLETE");// = newid; itemC.VisionData.RIDNew = true; //applied new reel id //서버의수량업데이트기능이 켜져있다면 해당 값을 제거해준다. (다시 조회되도록 함) if (VAR.BOOL[eVarBool.Opt_ServerQty]) { //이미 수량업데이트된 경우이므로 복원시켜준다 if (itemC.VisionData.QTY0.isEmpty() == false) { PUB.log.AddAT($"릴아이디 변경으로 인해 수량을 복원합니다({itemC.VisionData.QTY}->{itemC.VisionData.QTY0})"); itemC.VisionData.QTY = itemC.VisionData.QTY0; itemC.VisionData.QTY0 = string.Empty; } } } else { var logtime = VAR.TIME.RUN((int)eVarTime.LOG_NEWIDERROR); if (logtime.TotalSeconds >= 3000) { PUB.log.AddAT($"Reel_ID 생성실패 : {errmsg}"); VAR.TIME.Update(eVarTime.LOG_NEWIDERROR); } } } } } //바코드가 변경된 경우이다, 자동채우기 기능이 있다면 사용한다 bool NewBarcodeUpdated = false; if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeTouched == true) { Boolean Apply = true; //select columns List fields = new List(); if (VAR.BOOL[eVarBool.Opt_SID_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CustCode"); if (VAR.BOOL[eVarBool.Opt_SID_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PartNo"); if (VAR.BOOL[eVarBool.Opt_SID_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("PrintPosition"); if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VenderName"); if (VAR.BOOL[eVarBool.Opt_SID_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID"); if (VAR.BOOL[eVarBool.Opt_SID_Apply_batch] && (vdata.SID_Trust == false || vdata.BATCH.isEmpty())) fields.Add("batch"); //220921 if (VAR.BOOL[eVarBool.Opt_SID_Apply_qty] && (vdata.SID_Trust == false || vdata.QTYMAX.isEmpty())) fields.Add("qtymax"); //220921 fields.Add("attach"); //231026 //where coluns List wheres = new List(); //wheres.Add($"MC='{COMM.SETTING.Data.McName}"); if (VAR.BOOL[eVarBool.Opt_SID_Where_CustCode]) { if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_SID_Where_PartNo]) { if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PartNo='{vdata.PARTNO}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_SID_Where_SID]) { //if sid convert logic if (VAR.BOOL[eVarBool.Opt_SIDConvert]) { if (vdata.SID_Trust && vdata.SID0.isEmpty() == false && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'"); else Apply = false; } else { if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'"); else Apply = false; } } if (VAR.BOOL[eVarBool.Opt_SID_Where_VLOT]) //221013 { if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false) wheres.Add($"(VenderLot like '{vdata.VLOT}' or VenderLot like '%,{vdata.VLOT}' or VenderLot like '{vdata.VLOT},%' or VenderLot like '%,{vdata.VLOT},%')"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_SID_Where_MC]) //231006 { wheres.Add($"attach='{AR.SETTING.Data.McName}'"); } //if query data . no error if (Apply && fields.Count > 0 && wheres.Count > 0) { var mcname = SETTING.Data.McName; if (VAR.BOOL[eVarBool.Use_Conveyor]) mcname = PUB.MCCode; var SQL = "select top 1 " + string.Join(",", fields) + " from Component_Reel_SID_Information WITH(NOLOCK)" + " where mc='" + mcname + "' and " + string.Join(" and ", wheres) + " order by wdate desc"; var SQLC = "select count(*)" + " from Component_Reel_SID_Information WITH(NOLOCK)" + " where mc='" + mcname + "' and " + string.Join(" and ", wheres); if (PUB.Result.ItemDataC.VisionData.LastQueryString.Equals(SQL)) { //같은 쿼리이므로 처리하지 않는다 } else { PUB.log.Add($"DATABAES : SID INFORMATIION QUERY"); PUB.log.Add(SQL); var CS = Properties.Settings.Default.CS; var CN = new System.Data.SqlClient.SqlConnection(CS); var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN); if (CN.State == System.Data.ConnectionState.Closed) CN.Open(); //데이터가 중복으로 존재하는지 확인한다. 231006 CMD.CommandText = SQLC; var cnt = int.Parse(CMD.ExecuteScalar().ToString()); if (cnt == 1) { CMD.CommandText = SQL; var DAR = CMD.ExecuteReader(); while (DAR.Read()) { //loop select columns for (int i = 0; i < fields.Count; i++) { var colName = fields[i]; var v = DAR[colName]; if (v != null) { var vStr = v.ToString().RemoveNoneASCII().Trim(); if (vStr.isEmpty()) continue; //O_Trust == false)) fields.Add("PartNo"); //ields.Add("PrintPosition"); //ta.VNAME.isEmpty())) fields.Add("VenderName"); //Empty())) fields.Add("SID"); //value is not empty if (colName == "CustCode") { PUB.log.Add($"AUP [{colName}] {vdata.CUSTCODE}=>{vStr}"); vdata.CUSTCODE = vStr; NewBarcodeUpdated = true; } else if (colName == "PartNo") { PUB.log.Add($"AUP [{colName}] {vdata.PARTNO}=>{vStr}"); vdata.PARTNO = vStr; vdata.PARTNO_Trust = true; NewBarcodeUpdated = true; } else if (colName == "PrintPosition") { PUB.log.Add($"AUP [{colName}] {vdata.PrintPositionData}=>{vStr}"); vdata.PrintPositionData = vStr; vdata.PrintPositionCheck = true; NewBarcodeUpdated = true; } else if (colName == "VenderName") { PUB.log.Add($"AUP [{colName}] {vdata.VNAME}=>{vStr}"); vdata.VNAME = vStr; vdata.VNAME_Trust = true; NewBarcodeUpdated = true; } else if (colName == "VenderLot") { PUB.log.Add($"AUP [{colName}] {vdata.VLOT}=>{vStr}"); vdata.VLOT = vStr; vdata.VLOT_Trust = true; NewBarcodeUpdated = true; } else if (colName == "SID") { PUB.log.Add($"AUP [{colName}] {vdata.SID}=>{vStr}"); vdata.SID = vStr; vdata.SID_Trust = vdata.SID.Length == 9; if (vStr.Length != 9) { PUB.log.AddE($"DB SID LEN ERROR:{vStr},LEN={vStr.Length}"); } NewBarcodeUpdated = true; } else if (colName == "batch") { PUB.log.Add($"AUP [{colName}] {vdata.BATCH}=>{vStr}"); vdata.BATCH = vStr; NewBarcodeUpdated = true; } else if (colName == "qtymax") { PUB.log.Add($"AUP [{colName}] {vdata.BATCH}=>{vStr}"); vdata.QTYMAX = vStr; NewBarcodeUpdated = true; } else if (colName.ToLower() == "attach") { PUB.log.Add($"attach [{colName}] {vdata.Target}=>{vStr}"); vdata.Target = vStr; NewBarcodeUpdated = true; } } } } DAR.Close(); } CMD.Dispose(); if (CN.State == System.Data.ConnectionState.Open) CN.Close(); CN.Dispose(); PUB.Result.ItemDataC.VisionData.LastQueryString = SQL; } } } if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && vdata.BarcodeTouched == true) { Boolean Apply = true; //select columns List fields = new List(); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CustCode"); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PartNo"); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("PrintPosition"); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VenderName"); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID"); if (VAR.BOOL[eVarBool.Opt_Conv_Apply_Batch] && (vdata.SID_Trust == false || vdata.BATCH.isEmpty())) fields.Add("batch"); //220921 if (VAR.BOOL[eVarBool.Opt_Conv_Apply_QtyMax] && (vdata.SID_Trust == false || vdata.QTYMAX.isEmpty())) fields.Add("qtymax"); //220921 //where coluns List wheres = new List(); //wheres.Add($"MC='{COMM.SETTING.Data.McName}"); if (VAR.BOOL[eVarBool.Opt_Conv_Where_CustCode]) { if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CustCode='{vdata.CUSTCODE}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_Conv_Where_PartNo]) { if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PartNo='{vdata.PARTNO}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_Conv_Where_SID]) { //if sid convert logic if (VAR.BOOL[eVarBool.Opt_SIDConvert]) { if (vdata.SID_Trust && vdata.SID0.isEmpty() == false && vdata.SID.isEmpty() == false) wheres.Add($"SIDTo='{vdata.SID}'"); else Apply = false; } else { if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SIDTo='{vdata.SID}'"); else Apply = false; } } if (VAR.BOOL[eVarBool.Opt_Conv_Where_VLOT]) //221013 { if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false) wheres.Add($"(VenderLot like '{vdata.VLOT}' or VenderLot like '%,{vdata.VLOT}' or VenderLot like '{vdata.VLOT},%' or VenderLot like '%,{vdata.VLOT},%')"); else Apply = false; } //if (VAR.BOOL[eVarBool.Opt_Conv_Where_MC]) //231006 //{ // wheres.Add($"attach='{AR.SETTING.Data.McName}'"); //} //if query data . no error if (Apply && fields.Count > 0 && wheres.Count > 0) { var mcname = SETTING.Data.McName; if (VAR.BOOL[eVarBool.Use_Conveyor]) mcname = PUB.MCCode; var SQL = "select top 1 " + string.Join(",", fields) + " from Component_Reel_SID_Convert WITH(NOLOCK)" + " where " + string.Join(" and ", wheres) + " order by wdate desc"; var SQLC = "select count(*)" + " from Component_Reel_SID_Convert WITH(NOLOCK)" + " where " + string.Join(" and ", wheres); if (PUB.Result.ItemDataC.VisionData.LastQueryString.Equals(SQL)) { //같은 쿼리이므로 처리하지 않는다 } else { PUB.log.Add($"DATABAES : SID(CONV) INFORMATIION QUERY"); PUB.log.Add(SQL); var CS = Properties.Settings.Default.CS; var CN = new System.Data.SqlClient.SqlConnection(CS); var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN); if (CN.State == System.Data.ConnectionState.Closed) CN.Open(); //데이터가 중복으로 존재하는지 확인한다. 231006 CMD.CommandText = SQLC; var cnt = int.Parse(CMD.ExecuteScalar().ToString()); if (cnt == 1) { CMD.CommandText = SQL; var DAR = CMD.ExecuteReader(); while (DAR.Read()) { //loop select columns for (int i = 0; i < fields.Count; i++) { var colName = fields[i]; var v = DAR[colName]; if (v != null) { var vStr = v.ToString().RemoveNoneASCII().Trim(); if (vStr.isEmpty()) continue; //O_Trust == false)) fields.Add("PartNo"); //ields.Add("PrintPosition"); //ta.VNAME.isEmpty())) fields.Add("VenderName"); //Empty())) fields.Add("SID"); //value is not empty if (colName == "CustCode") { PUB.log.Add($"AUP [{colName}] {vdata.CUSTCODE}=>{vStr}"); vdata.CUSTCODE = vStr; NewBarcodeUpdated = true; } else if (colName == "PartNo") { PUB.log.Add($"AUP [{colName}] {vdata.PARTNO}=>{vStr}"); vdata.PARTNO = vStr; vdata.PARTNO_Trust = true; NewBarcodeUpdated = true; } else if (colName == "PrintPosition") { PUB.log.Add($"AUP [{colName}] {vdata.PrintPositionData}=>{vStr}"); vdata.PrintPositionData = vStr; vdata.PrintPositionCheck = true; NewBarcodeUpdated = true; } else if (colName == "VenderName") { PUB.log.Add($"AUP [{colName}] {vdata.VNAME}=>{vStr}"); vdata.VNAME = vStr; vdata.VNAME_Trust = true; NewBarcodeUpdated = true; } else if (colName == "VenderLot") { PUB.log.Add($"AUP [{colName}] {vdata.VLOT}=>{vStr}"); vdata.VLOT = vStr; vdata.VLOT_Trust = true; NewBarcodeUpdated = true; } else if (colName == "SID") { PUB.log.Add($"AUP [{colName}] {vdata.SID}=>{vStr}"); vdata.SID = vStr; vdata.SID_Trust = vdata.SID.Length == 9; if (vStr.Length != 9) { PUB.log.AddE($"DB SID LEN ERROR:{vStr},LEN={vStr.Length}"); } NewBarcodeUpdated = true; } else if (colName == "batch") { PUB.log.Add($"AUP [{colName}] {vdata.BATCH}=>{vStr}"); vdata.BATCH = vStr; NewBarcodeUpdated = true; } else if (colName == "qtymax") { PUB.log.Add($"AUP [{colName}] {vdata.BATCH}=>{vStr}"); vdata.QTYMAX = vStr; NewBarcodeUpdated = true; } else if (colName.ToLower() == "attach") { PUB.log.Add($"attach [{colName}] {vdata.Target}=>{vStr}"); vdata.Target = vStr; NewBarcodeUpdated = true; } } } } DAR.Close(); } CMD.Dispose(); if (CN.State == System.Data.ConnectionState.Open) CN.Close(); CN.Dispose(); PUB.Result.ItemDataC.VisionData.LastQueryString = SQL; } } } //기존 작업에서 데이터를 찾아서 쓴다 if (VAR.BOOL[eVarBool.Opt_ApplyJobInfo] && vdata.BarcodeTouched == true) { Boolean Apply = true; //select columns List fields = new List(); if (VAR.BOOL[eVarBool.Opt_Job_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CUSTCODE"); if (VAR.BOOL[eVarBool.Opt_Job_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PARTNO"); if (VAR.BOOL[eVarBool.Opt_Job_Apply_PrintPos] && vdata.PrintPositionData.isEmpty()) fields.Add("POS"); if (VAR.BOOL[eVarBool.Opt_Job_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VNAME"); if (VAR.BOOL[eVarBool.Opt_Job_Apply_SID] && (vdata.SID_Trust == false || vdata.SID.isEmpty())) fields.Add("SID"); //where coluns List wheres = new List(); if (VAR.BOOL[eVarBool.Opt_Job_Where_CustCode]) { if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUSTCODE='{vdata.CUSTCODE}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_Job_Where_PartNo]) { if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PARTNO='{vdata.PARTNO}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_Job_Where_SID]) { if (vdata.SID_Trust && vdata.SID.isEmpty() == false) wheres.Add($"SID='{vdata.SID}'"); else Apply = false; } if (VAR.BOOL[eVarBool.Opt_Job_Where_VLOT]) { if (vdata.VLOT_Trust && vdata.VLOT.isEmpty() == false) wheres.Add($"VenderLot='{vdata.VLOT}'"); else Apply = false; } //if query data . no error if (Apply && fields.Count > 0 && wheres.Count > 0) { PUB.log.Add($"DATABAES : RESULT QUERY"); var SQL = "select top 1 " + string.Join(",", fields) + " from Component_Reel_Result WITH(NOLOCK) " + $" where mc = '{AR.SETTING.Data.McName}'" + $" and prnattach = 1 and stime >= '{DateTime.Now.AddHours(-3).ToString("yyyy-MM-dd HH:mm:ss")}'" + $" and " + string.Join(" and ", wheres) + $" order by wdate desc"; // var SQLC = "select count(*) " + //" from Component_Reel_Result WITH(NOLOCK) " + //$" where mc = '{AR.SETTING.Data.McName}'" + //$" and prnattach = 1 and stime >= '{DateTime.Now.AddHours(-3).ToString("yyyy-MM-dd HH:mm:ss")}'" + //$" and " + string.Join(" and ", wheres) + //$" order by wdate desc"; var CS = Properties.Settings.Default.CS; var CN = new System.Data.SqlClient.SqlConnection(CS); var CMD = new System.Data.SqlClient.SqlCommand(SQL, CN); if (CN.State == System.Data.ConnectionState.Closed) CN.Open(); var DAR = CMD.ExecuteReader(); while (DAR.Read()) { //loop select columns for (int i = 0; i < fields.Count; i++) { var colName = fields[i]; var v = DAR[colName]; if (v != null) { var vStr = v.ToString().RemoveNoneASCII().Trim(); if (vStr.isEmpty()) continue; //O_Trust == false)) fields.Add("PartNo"); //ields.Add("PrintPosition"); //ta.VNAME.isEmpty())) fields.Add("VenderName"); //Empty())) fields.Add("SID"); //value is not empty if (colName == "CUSTCODE") { PUB.log.Add($"JUP [{colName}] {vdata.CUSTCODE}=>{vStr}"); vdata.CUSTCODE = vStr; NewBarcodeUpdated = true; } else if (colName == "PARTNO") { PUB.log.Add($"JUP [{colName}] {vdata.PARTNO}=>{vStr}"); vdata.PARTNO = vStr; vdata.PARTNO_Trust = true; NewBarcodeUpdated = true; } else if (colName == "POS") { PUB.log.Add($"JUP [{colName}] {vdata.PrintPositionData}=>{vStr}"); vdata.PrintPositionData = vStr; vdata.PrintPositionCheck = true; NewBarcodeUpdated = true; } else if (colName == "VNAME") { PUB.log.Add($"JUP [{colName}] {vdata.VNAME}=>{vStr}"); vdata.VNAME = vStr; vdata.VNAME_Trust = true; NewBarcodeUpdated = true; } else if (colName == "VenderLot") { PUB.log.Add($"JUP [{colName}] {vdata.VLOT}=>{vStr}"); vdata.VLOT = vStr; vdata.VLOT_Trust = true; NewBarcodeUpdated = true; } else if (colName == "SID") { PUB.log.Add($"JUP [{colName}] {vdata.SID}=>{vStr}"); vdata.SID = vStr; vdata.SID_Trust = true; NewBarcodeUpdated = true; } } } } DAR.Close(); CMD.Dispose(); if (CN.State == System.Data.ConnectionState.Open) CN.Close(); CN.Dispose(); } } if (PUB.sm.Step == eSMStep.RUN) { var CVMode = VAR.BOOL[eVarBool.Use_Conveyor]; if (itemC.VisionData.VNAME.isEmpty() == false && itemC.VisionData.VLOT.isEmpty() == false && itemC.VisionData.SID.Length == 9 && itemC.VisionData.MFGDATE.isEmpty() == false && (itemC.VisionData.PARTNO.isEmpty() == false) && itemC.VisionData.BATCH.isEmpty() == false && itemC.VisionData.RID.isEmpty() == false) { //모든값이 입력되어 있다면 조건 체크후 진행할 수 있도록 한다 CheckDataComplte(itemC, "SPS-BARCODEPROCESS", false); //2206211400 } //CheckDataComplte(PUB.Result.ItemDataC, "SPS-BARCODEPROCESS"); } //바코드 처리 여부 변경 if (vdata.BarcodeTouched == true && NewBarcodeUpdated == false) { vdata.BarcodeTouched = false; var a = PUB.Result.ItemDataC.VisionData.BarcodeTouched; } } } }