- UIControl 프로젝트 구조 변경 (CapCleaningControl → Sub/UIControl) - arAjinextek 라이브러리 통합 및 구조 개선 - 새로운 arAjinextek_Union 프로젝트 추가 - 솔루션 파일에 README.md 추가 - QR 모드에서 WMS RCV 태그 인식 기능 강화 - 데이터베이스 스키마 업데이트 및 관련 클래스 수정 - 프린터 및 바코드 장치 연동 로직 개선 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
614 lines
29 KiB
C#
614 lines
29 KiB
C#
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<int, List<string>> BarcodeRegExProcess(
|
|
List<Class.RegexPattern> patterns,
|
|
List<Class.RegexPattern> 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<Class.RegexPattern> 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<Class.RegexPattern>();
|
|
|
|
|
|
List<Class.RegexPattern> patsEx;
|
|
if (patternsEx == null) patsEx = new List<Class.RegexPattern>();
|
|
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<int, List<string>>(0, new List<string>());
|
|
}
|
|
|
|
//모델정보의 허용 심볼인지 확인한다 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<int, List<string>>(0, new List<string>());
|
|
}
|
|
else if (vm.BCD_1D == false && (barcodeSymbol == "6" || barcodeSymbol == "11"))
|
|
{
|
|
PUB.log.AddAT($"모델(1D)에서 비활성:{bcd}");
|
|
IgnoreBarcode = true;
|
|
return new Tuple<int, List<string>>(0, new List<string>());
|
|
}
|
|
else if (vm.BCD_QR == false && (barcodeSymbol == "1"))
|
|
{
|
|
PUB.log.AddAT($"모델(QR)에서 비활성:{bcd}");
|
|
IgnoreBarcode = true;
|
|
return new Tuple<int, List<string>>(0, new List<string>());
|
|
}
|
|
}
|
|
|
|
//이 바코드가 무시바코드에 있는지 먼저 검사한다 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<int, List<string>>(0, new List<string>());
|
|
}
|
|
|
|
|
|
|
|
var ValueApplyCount = 0;
|
|
ValueApplyCount = 0;
|
|
List<string> list = new List<string>();
|
|
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<int, List<string>>(ValueApplyCount, list);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// barcod eprocess
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
|
|
//바코드가 변경된 경우이다, 자동채우기 기능이 있다면 사용한다
|
|
bool NewBarcodeUpdated = false;
|
|
|
|
//SID정보테이블에서 정보 추출
|
|
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeDirty == true)
|
|
{
|
|
Boolean Apply = true;
|
|
|
|
//select columns
|
|
List<string> fields = new List<string>();
|
|
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<string> wheres = new List<string>();
|
|
//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 K4EE_Component_Reel_SID_Information WITH(NOLOCK)" +
|
|
" where mc='" + mcname + "' and " + string.Join(" and ", wheres) +
|
|
" order by wdate desc";
|
|
|
|
var SQLC = "select count(*)" +
|
|
" from K4EE_Component_Reel_SID_Information WITH(NOLOCK)" +
|
|
" where mc='" + mcname + "' and " + string.Join(" and ", wheres);
|
|
|
|
if (PUB.Result.ItemDataC.VisionData.LastQueryStringSID.Equals(SQL) == false)
|
|
{
|
|
|
|
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;
|
|
|
|
if (PUB.UpdateSIDInfoData(ref vdata, colName, vStr)) NewBarcodeUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
}
|
|
CMD.Dispose();
|
|
if (CN.State == System.Data.ConnectionState.Open) CN.Close();
|
|
CN.Dispose();
|
|
PUB.Result.ItemDataC.VisionData.LastQueryStringSID = SQL;
|
|
}
|
|
}
|
|
}
|
|
|
|
//[WMS] SID정보테이블에서 정보 추출(프린트정보는 없음)
|
|
if (VAR.BOOL[eVarBool.Opt_ApplySIDInfo] && vdata.BarcodeDirty == true)
|
|
{
|
|
Boolean Apply = true;
|
|
|
|
//select columns
|
|
List<string> fields = new List<string>();
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_CustCode] && vdata.CUSTCODE.isEmpty()) fields.Add("CUST_CODE");
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_PartNo] && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust == false)) fields.Add("PART_NO");
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Apply_VenderName] && (vdata.VNAME_Trust == false || vdata.VNAME.isEmpty())) fields.Add("VENDOR_NM");
|
|
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_NO"); //220921
|
|
|
|
//where coluns
|
|
List<string> wheres = new List<string>();
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_CustCode])
|
|
{
|
|
if (vdata.CUSTCODE.isEmpty() == false) wheres.Add($"CUST_CODE='{vdata.CUSTCODE}'");
|
|
else Apply = false;
|
|
}
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_PartNo])
|
|
{
|
|
if (vdata.PARTNO_Trust && vdata.PARTNO.isEmpty() == false) wheres.Add($"PART_NO='{vdata.PARTNO}'");
|
|
else Apply = false;
|
|
}
|
|
if (VAR.BOOL[eVarBool.Opt_SID_Where_SID])
|
|
{
|
|
if (VAR.BOOL[eVarBool.Opt_SIDConvert]) //if sid convert logic
|
|
{
|
|
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($"VENDER_LOT = '{vdata.VLOT}'");
|
|
else Apply = false;
|
|
}
|
|
|
|
//if query data . no error
|
|
if (Apply && fields.Count > 0 && wheres.Count > 0)
|
|
{
|
|
var mcname = VAR.BOOL[eVarBool.Use_Conveyor] ? PUB.MCCode : SETTING.Data.McName;
|
|
|
|
var TableName = "VW_GET_MAX_QTY_VENDOR_LOT";
|
|
var whereState = " where " + string.Join(" and ", wheres);
|
|
var selectFields = string.Join(",", fields);
|
|
|
|
var SQL = $"select top 1 {selectFields} from {TableName} WITH(NOLOCK) {whereState}";
|
|
var SQLC = $"select count(*) from {TableName} WITH(NOLOCK) {whereState}";
|
|
|
|
if (PUB.Result.ItemDataC.VisionData.LastQueryStringWMS.Equals(SQL) == false) //같은 쿼리는 처리하지 않는다
|
|
{
|
|
PUB.log.Add($"DATABAES : WMS 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;
|
|
|
|
if (PUB.UpdateSIDInfoData(ref vdata, colName, vStr)) NewBarcodeUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
}
|
|
CMD.Dispose();
|
|
if (CN.State == System.Data.ConnectionState.Open) CN.Close();
|
|
CN.Dispose();
|
|
PUB.Result.ItemDataC.VisionData.LastQueryStringWMS = SQL;
|
|
}
|
|
}
|
|
}
|
|
|
|
//시드변환정보에서 정보 추출
|
|
if (VAR.BOOL[eVarBool.Opt_ApplySIDConv] && vdata.BarcodeDirty == true)
|
|
{
|
|
Boolean Apply = true;
|
|
|
|
//select columns
|
|
List<string> fields = new List<string>();
|
|
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<string> wheres = new List<string>();
|
|
//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 K4EE_Component_Reel_SID_Convert WITH(NOLOCK)" +
|
|
" where " + string.Join(" and ", wheres) +
|
|
" order by wdate desc";
|
|
|
|
var SQLC = "select count(*)" +
|
|
" from K4EE_Component_Reel_SID_Convert WITH(NOLOCK)" +
|
|
" where " + string.Join(" and ", wheres);
|
|
|
|
if (PUB.Result.ItemDataC.VisionData.LastQueryStringCNV.Equals(SQL) == false)
|
|
{
|
|
|
|
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;
|
|
|
|
if (PUB.UpdateSIDInfoData(ref vdata, colName, vStr)) NewBarcodeUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
}
|
|
CMD.Dispose();
|
|
if (CN.State == System.Data.ConnectionState.Open) CN.Close();
|
|
CN.Dispose();
|
|
PUB.Result.ItemDataC.VisionData.LastQueryStringCNV = SQL;
|
|
}
|
|
}
|
|
}
|
|
|
|
//기존 작업에서 데이터를 찾아서 쓴다
|
|
if (VAR.BOOL[eVarBool.Opt_ApplyJobInfo] && vdata.BarcodeDirty == true)
|
|
{
|
|
Boolean Apply = true;
|
|
|
|
//select columns
|
|
List<string> fields = new List<string>();
|
|
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<string> wheres = new List<string>();
|
|
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 K4EE_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;
|
|
|
|
if (PUB.UpdateSIDInfoData(ref vdata, colName, vStr))
|
|
NewBarcodeUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
DAR.Close();
|
|
|
|
CMD.Dispose();
|
|
if (CN.State == System.Data.ConnectionState.Open) CN.Close();
|
|
CN.Dispose();
|
|
}
|
|
}
|
|
|
|
//바코드 처리 여부 변경
|
|
if (vdata.BarcodeDirty == true && NewBarcodeUpdated == false)
|
|
{
|
|
vdata.BarcodeDirty = false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|