서로 배치 정보가 다른 두 회사 배치정보를 변환하는 로직 0 0 1,235

by MS [SQL Query] [2022.09.26 08:27:10]


실제 두 회사간 BOM을 지원하는 배치 정보간의 integration로직 입니다.

구현상 어려움이 있을지도 모르겠습니다 그리고 설명이 충분한지 모르겠습니다.

 

1) 입력값과 결과값

seq input output
1 ((AAC10&AAF10)|AAF30)&HAY10 +-S3C1A+((ECE+L8AAA+(SE071/SE073+FZD_01))/SE073+FZD_00)
2 (((AAC10&AAF10)|AAF30)&HAY10)|HAY20 +-S3C1A+((ECE+L8AAA+(SE071/SE073+FZD_01))/SE073+FZD_00)/S3C1A
3 (TEK30|TEK40)&BAA10 + LL+(S8BKA+-L807A/+-(S8BKA/L8AAA))
4 (VAU70|VAU60)&BAA20&VBJ10&VBY10 + RL+S6AEA+S6PAA+(S6WEA/+-(S6WEA/S6UQA))
5 BAA10&(VAU60|VAU70)&VBJ10&VBY10 + LL+ S6AEA+S6PAA+(S6WEA/+-(S6WEA/S6UQA))
6 (QAA50|QAA51)&(BAHM5&AAA87) +_TCJ1+(L802A/+-(L802A/L8AAA/S230A))
7 (KCG10&KAT00)&(BAG33&AAA87|BAG35&AAA87|BAG37&AAA87|BAGMXC&AAA87|BAGMR&AAA87) +S9T9A+-S235A+_WC3B+(S3B4A/S3B5A/S382A/S3A3A/S381A)

2) mapping table

AA feature BB feature
AAC10 ECE+L8AAA
AAF10 (SE071/SE073+FZD_01)
AAF30 SE073+FZD_00
HAY10 -S3C1A
HAY20 S3C1A
BAA10 LL
TEK30 S8BKA+-L807A
TEK40 -(S8BKA/L8AAA)
BAA20 RL
VAU60 -(S6WEA/S6UQA)
VAU70 S6WEA
VBJ10 S6AEA
VBY10 S6PAA
QAA50 -(L802A/L8AAA/S230A)
QAA51 L802A
AAA87 J05
BAHM5 TCJ1
AAA87 J05
BAG33 WC3B+S3B4A
BAG35 WC3B+S3B5A
BAG37 WC3B+S382A
BAGMXC WC3B+S3A3A
BAGMR WC3B+S381A
KCG10 S9T9A
KAT00 -S235A

3) 간단한 변환 Rule

** 두 회사의 배치 정보가 서로 다릅니다. AA회사의 배치 정보를 단순화 하고 메핑 테이블을 이용해 BB회사의 배치 정보로 바꿉니다. BB회사의 배치 정보도 중복제거와 재정렬을 합니다.

1.AA회사의 로직계산 부호의 우선순위에 따라 옵션조건을  재정렬하고  / 를 경계로 분리시킨다.  

2.Feature code 와 로직 부호의 전환 및 upgrade

매핑 테일블을 이용해 배치 정보를 바꿉니다.

AA회사와 BB회사의 계산부호의 메핑 관계: =>  +  ;   | => /   ;    ! => - ;

3.중복된 내용은 제외 한다. 중복된 값을 한번만 표현하고 가능하면 앞에 위치한다. / 를 연결부호로 옵션조건을 재정렬한다.

-A도 한 개의 feature이다.

4. 옵션조건을 변화시킨다.

A/-A인 경우,  A/-A를 제외한다;   A&-A인 경우, Error로 처리한다.

A/(A&B) => A ;     -(A/B) => -A+-B;     -(A+B) => (-A/-B)

5.  3. 4. 항목을 반복하고  더 이상 분해시킬 수 없을 때까지 실행한다.  

6. 옵션조건을 변화시킨다.

최종 옵션조건 앞에 는+ 를 추가한다. (비고: + 로 시작한 경우 제외)

/- 인 경우, /+- 로  수정해야 한다.

(-  존재하면 안 된다. 괄호내에 옵션조건들의 위치를 조정하거나 를 밖으로 이동해도 된다.   (-A/-B) => -(A+B)、(-A+-B) => -(A/B)、(-A+B) => (B+-A)

 

첫번째 할목 사럐)

1) | 를 기준으로 두개로 분해한다.

(AAC10&AAF10)&HAY10

AAF30&HAY10

2) 매핑 테이블에서 각 코드들은 전환한다. 또한 &, !, |의 표현식도 +, -, /으로 바꾼다.

ECE+L8AAA+ (SE071/SE073+FZD_01)+-S3C1A

SE073+FZD_00+-S3C1A

3) 전환후 정보중에서 중복된 내용은 한번만 표현한다. 가능하면 중복된 내용은 앞쪽에 위치한다. /를 이용해 재 정렬한다.

-S3C1A+((ECE+L8AAA+(SE071/SE073+FZD_01))/SE073+FZD_00

4) 맨앞에 가 올수 없으므로 +를 추가한다.

+-S3C1A+((ECE+L8AAA+(SE071/SE073+FZD_01))/SE073+FZD_00

 

3번째 항목 사례)

1) 위와 동일

TEK30&BAA10

TEK40&BAA10

2) 위와 동일

S8BKA+-L807A+LL

-(S8BKA/L8AAA)+LL

3) LL값이 중복되니 한번만 사용

LL+(S8BKA+-L807A/-(S8BKA/L8AAA))

4) -(S8BKA/L8AAA)의 식을 다시 푼다.

LL+(S8BKA+-L807A/-S8BKA+-L8AAA

5) -(S8BKA/L8AAA)으로 다시 묶고 /-는 허용하지 않으므로 /+- 로 변환

+ LL+(S8BKA+-L807A/+-(S8BKA/L8AAA)

 

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입