Initial commit

This commit is contained in:
ChiKyun Kim
2025-07-17 16:11:46 +09:00
parent 4865711adc
commit 4a1b1924ba
743 changed files with 230954 additions and 0 deletions

View File

@@ -0,0 +1,218 @@
using Keyence.AutoID.SDK;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace Project
{
public partial class fMain
{
Regex regex = null;
/// <summary>
/// 적용가능한 룰이 없으면 처리하지 않는다.
/// </summary>
/// <returns></returns>
private Boolean Process_CustomerRule(string vdata)
{
bool retval = false;
if (string.IsNullOrWhiteSpace(vdata)) return retval;
var dt = Pub.Result.CustomerRule;
if (dt.Count < 1) return retval;
//이 데이터가 정규식에 match 가되는지 확인하.ㄴㄷ
var ucnt = 0;
foreach (DataSet1.Component_Reel_CustRuleRow dr in dt.Rows)
{
if (dr.MatchEx.isEmpty()) continue; //매칭키는 반드시 있어야 한다.
if (dr.varName.isEmpty()) continue; //찾더라도 대상이 없으니 안한다
var vData = Pub.Result.ItemData[1].VisionData;
if (vData.Confirm) break; //완료처리된건 하지않는다
regex = new Regex(dr.MatchEx); //한글 3글자
if (regex.IsMatch(vdata))
{
var matchlist = regex.Matches(vdata);
var match0 = matchlist[dr.MatchIndex];
var grpval = match0.Groups[dr.GroupIndex].Value;
var result = grpval.Trim();
if (dr.ReplaceEx.isEmpty() == false && dr.ReplaceStr.isEmpty() == false)
{
regex = new Regex(dr.ReplaceEx);
if (regex.IsMatch(result)) result = regex.Replace(result, dr.ReplaceStr);
}
ucnt += 1;
switch (dr.varName)
{
case "QTY0":
vData.QTY0 = result;
vData.QTYRQ = vdata.StartsWith("RQ");
break;
case "SID":
vData.SID = result;
break;
case "LOT":
vData.VLOT = result;
break;
case "PART":
vData.PARTNO = result;
break;
case "MFGDATE":
vData.MFGDATE = result;
break;
case "QTY":
vData.QTY = result;
break;
default:
ucnt -= 1;
Pub.log.AddAT($"RegEx 대상 VarName을 찾을 수 없습니다. 값:{dr.varName}");
break;
}
}
}
retval = ucnt > 0; //적용데이터가 1건이라도 있으면 확인
return retval; //적용ㄱ
}
private Boolean Process_BasicRule(string vData)
{
//amkor 포맷도 아닌 데이터가 오는 경우에는 추측해서 데이터를 입력해준다.
int qty;
string datestr = string.Empty;
bool retval = true;
//수동입력의 경우에만 RQ값을 사용한다.
if (Pub.Result.Option_QtyUpdateM) Process_ReturnReel(vData);
if (vData.StartsWith("PSK")) //murate 의 reel id 형식
{
Pub.Result.ItemData[1].VisionData.SetRID(vData, "PARSEBARCODE_PSK");//.Substring(3);
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
}
if (vData.StartsWith("1V") && vData.Length == 8) //무라타의 서플라이어코드
{
//Pub.Result.ItemData[1].VisionData.SCODE = vData.Substring(2);
}
if (vData.StartsWith("1T")) //무라타의 LOT
{
//Pub.Result.ItemData[1].VisionData.VLOT = vData.Substring(2);
//Pub.Result.ItemData[1].VisionData.HASHEADER = true;
}
if (vData.StartsWith("1P")) //무라타의 파트넘버
{
//Pub.Result.ItemData[1].VisionData.PARTNO = vData.Substring(2);
//Pub.Result.ItemData[1].VisionData.HASHEADER = true;
}
if (vData.StartsWith("Q"))
{
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
{
int qty0;
if (int.TryParse(vData.Substring(1), out qty0))
{
Pub.Result.ItemData[1].VisionData.QTY = vData.Substring(1);
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
}
}
else
{
Pub.log.Add("RQ값이 적용되어 프리픽스 Q값=" + vData + "을 적용하지 않습니다");
}
}
if (vData.StartsWith("17D") && vData.Length == 11) //생산일
{
Pub.Result.ItemData[1].VisionData.MFGDATE = vData.Substring(3);// + "-"+ vData.Substring(3,2) + "-" + vData.Substring(5,2);
Pub.Result.ItemData[1].VisionData.HASHEADER = true;
}
if (vData.Split(',').Length == 6 && vData.StartsWith("P")) //특수포맷 추가 코드
{
var CommaBuf = vData.Split(',');
foreach (var item in CommaBuf)
{
if (item.StartsWith("P"))
Pub.Result.ItemData[1].VisionData.PARTNO = item.Substring(1);
else if (item.StartsWith("Q"))
{
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
{
Pub.Result.ItemData[1].VisionData.QTY = item.Substring(1);
}
else
{
Pub.log.Add("RQ값이 적용되어있어 특수 문자 수량값=" + vData + "을 적용하지 않음");
}
}
else if (item.StartsWith("L"))
Pub.Result.ItemData[1].VisionData.VLOT = item.Substring(1);
else if (item.StartsWith("D") && item.IndexOf('/') != -1)
{
var datestrbuf = item.Substring(1).Split('/');
if (datestrbuf.Length == 3)
{
Pub.Result.ItemData[1].VisionData.MFGDATE =
datestrbuf[0].PadLeft(4, '0') +
datestrbuf[1].PadLeft(2, '0') +
datestrbuf[2].PadLeft(2, '0');
}
}
}
}
else if (IsDateValue(vData, out datestr))
{
Pub.Result.ItemData[1].VisionData.MFGDATE = datestr;
}
else if (IsSIDValue(vData))
{
if (vData.StartsWith("101"))
{
if (Pub.Result.ItemData[1].VisionData.SID0.isEmpty() == true)
{
Pub.log.Add("SID값 변경함 #3 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
Pub.Result.ItemData[1].VisionData.SID = vData;
}
}
else if (vData.StartsWith("103"))
{
//103을 ㅗ시작하면 기존데이터가 101인경우에는 처리하지 않는다
if (Pub.Result.ItemData[1].VisionData.SID.StartsWith("101") == false)
{
Pub.log.Add("SID값 변경함 #4 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
Pub.Result.ItemData[1].VisionData.SID = vData;
}
}
else
{
if (Pub.Result.ItemData[1].VisionData.SID0.isEmpty() == true)
{
Pub.log.Add("SID값 변경함 #5 " + Pub.Result.ItemData[1].VisionData.SID + "=>" + vData);
Pub.Result.ItemData[1].VisionData.SID = vData;
}
}
}
else if (int.TryParse(vData, out qty) && qty < 200000 && qty >= 3000)
{
//수량으로 변환이 된다.
if (Pub.Result.ItemData[1].VisionData.QTYRQ == false)
{
Pub.Result.ItemData[1].VisionData.QTY = qty.ToString();
}
else
{
Pub.log.Add("RQ값이 적용되어있어, 수량으로 추측한 문자=" + vData + "를 적용하지 않습니다");
}
}
else retval = false;
return retval;
}
}
}