docs:Phase 3.2 완료 - 5130 중간검사 JSON→EAV 이관 설계 (진행률 55%)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,4 +19,5 @@
|
||||
| 2026-01-31 | Phase 2.2 완료 | 문서 데이터 입력 UI. ①섹션별 동적 검사 테이블 렌더링(complex/select/check/measurement/text 컬럼 타입 지원) ②서브 라벨 행(complex 컬럼의 n1/n2/n3) ③정적 컬럼 자동 매핑(NO/검사항목/검사기준/검사방식/검사주기→item속성) ④종합판정+비고 Footer ⑤JS 폼 데이터 수집(기본필드+섹션데이터+체크박스) ⑥백엔드 saveDocumentData() 공통 메서드(section_id/column_id/row_index EAV 저장) | 섹션 3.2 | - |
|
||||
| 2026-01-31 | Phase 2.3 완료 | 결재 워크플로우. ①API: submit(DRAFT→PENDING), approve(단계별 승인, 전체 완료 시 APPROVED), reject(반려 사유 필수, REJECTED) ②edit.blade: 결재 제출 버튼 + JS ③show.blade: 승인/반려 버튼, 반려 모달, 결재 현황 속성 수정(step/role/acted_at), 상태 배지 CSS ④재제출 시 결재라인 상태 초기화 ⑤라우트: submit/approve/reject 3개 추가 | 섹션 3.2 | - |
|
||||
| 2026-01-31 | Phase 2.4 완료 | 문서 목록/검색/필터. ①날짜 범위 필터(date_from/date_to) API + UI 추가 ②DRAFT 문서 삭제 버튼 + deleteDocument() JS (showDeleteConfirm + fetch DELETE) ③기존 구현 확인: 상태/템플릿/검색/페이징 정상 동작 | 섹션 3.2 | - |
|
||||
| 2026-01-31 | Phase 3.1 완료 | 중간검사 양식 구조 설계. ①5130 레거시 4종(절곡/스크린/슬랫/조인트바) viewMidInspect*.php 전체 분석 ②검사항목·기준·판정방식·공차·이미지 문서화 ③컬럼 구조(check/complex/select) 매핑 설계 ④4종 비교표 + 양식 시스템 매핑 전략(Option A/B/C) ⑤공통 구조(결재3단계, 기본필드7개, Footer) 정의 | 섹션 5.2 | - |
|
||||
| 2026-01-31 | Phase 3.1 완료 | 중간검사 양식 구조 설계. ①5130 레거시 4종(절곡/스크린/슬랫/조인트바) viewMidInspect*.php 전체 분석 ②검사항목·기준·판정방식·공차·이미지 문서화 ③컬럼 구조(check/complex/select) 매핑 설계 ④4종 비교표 + 양식 시스템 매핑 전략(Option A/B/C) ⑤공통 구조(결재3단계, 기본필드7개, Footer) 정의 | 섹션 5.2 | - |
|
||||
| 2026-01-31 | Phase 3.2 완료 | 5130 중간검사 데이터 이관 설계. ①JSON 공통 배열 구조 분석([0]결재/[1]입력값/[2]num/[3]table/[4]log/[5]checkbox) ②JSON→EAV 매핑 테이블(결재→document_approvals, 기본필드/측정값/체크박스→document_data) ③데이터 변환 규칙(날짜mm/dd→datetime, boolean→string, 이름→user_id) ④6단계 이관 프로세스 설계 ⑤절곡품 inputValue named object vs 나머지 flat array 차이 문서화 ⑥주의사항 5건 | 섹션 5.3 | - |
|
||||
@@ -106,9 +106,9 @@ Route::resource('documents', DocumentController::class); // /d
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
|
||||
| **마지막 완료 작업** | Phase 3.1 - 중간검사 양식 구조 설계 (4종 검사항목/기준/판정방식 문서화) |
|
||||
| **다음 작업** | Phase 3.2 - 5130 중간검사 데이터 이관 설계 |
|
||||
| **진행률** | 10/20 (50%) - Phase 1 ✅, Phase 2.1~2.4 ✅, Phase 3.1 ✅ |
|
||||
| **마지막 완료 작업** | Phase 3.2 - 5130 중간검사 데이터 이관 설계 (JSON→EAV 매핑 테이블 + 이관 프로세스) |
|
||||
| **다음 작업** | Phase 3.3 - 중간검사 양식 시드 데이터 |
|
||||
| **진행률** | 11/20 (55%) - Phase 1 ✅, Phase 2.1~2.4 ✅, Phase 3.1~3.2 ✅ |
|
||||
| **마지막 업데이트** | 2026-01-31 |
|
||||
|
||||
---
|
||||
@@ -286,7 +286,7 @@ documents # 문서 인스턴스
|
||||
| # | 작업 항목 | 상태 | 완료 기준 | 비고 |
|
||||
|---|----------|:----:|----------|------|
|
||||
| 3.1 | 중간검사 양식 구조 설계 | ✅ | 절곡/스크린/슬랫/조인트바 4종의 검사항목/기준/판정방식 문서화 완료 | 섹션 5.2에 상세 설계. 절곡품 최고 복잡도(★5), 조인트바 최저(★1) |
|
||||
| 3.2 | 5130 중간검사 데이터 이관 설계 | ⏳ | recordbendingMid 등 JSON→양식 매핑 테이블 완성 | |
|
||||
| 3.2 | 5130 중간검사 데이터 이관 설계 | ✅ | recordbendingMid 등 JSON→양식 매핑 테이블 완성 | 섹션 5.3에 상세 설계. 6단계 이관 프로세스, 변환 규칙, 주의사항 문서화 |
|
||||
| 3.3 | 중간검사 양식 시드 데이터 | ⏳ | 4종 양식 seeder 생성, `mng.sam.kr/document-templates`에서 확인 가능 | |
|
||||
| 3.4 | 검사 기준 이미지 관리 | ⏳ | `5130/img/inspection/` 이미지 → `mng/storage/app/public/inspection/`로 이관. 양식에서 참조 가능 | 20+ 이미지 |
|
||||
|
||||
@@ -697,7 +697,138 @@ Document 생성/관리 ------------> POST /documents/{id}/submit 결재
|
||||
|
||||
4. **check 컬럼 타입**: 현재 시스템에 `check` 컬럼 타입이 이미 존재. 양호/불량 체크박스로 사용 가능.
|
||||
|
||||
### 5.3 검사 기준 이미지 이관
|
||||
### 5.3 중간검사 데이터 이관 설계 (Phase 3.2)
|
||||
|
||||
> **5130 JSON 구조 → 새 양식 시스템(EAV) 매핑**
|
||||
|
||||
#### 5.3.1 5130 JSON 공통 배열 구조
|
||||
|
||||
4종 모두 동일한 배열 인덱스 패턴:
|
||||
|
||||
```
|
||||
recordXxxMid = [
|
||||
[0]: { approval: { writer: {name,date}, reviewer: {name,date}, approver: {name,date} } }
|
||||
[1]: { inputValue: { ... } } ← 절곡: named object / 스크린·슬랫·조인트바: flat array
|
||||
[2]: { num: "주문번호" }
|
||||
[3]: { tablename: "output" }
|
||||
[4]: { update_log: "..." } ← 슬랫·조인트바는 없음
|
||||
[5]: { checkboxData: [ {good:[], bad:[], judgement:""}, ... ] } ← 슬랫·조인트바는 [4]
|
||||
]
|
||||
```
|
||||
|
||||
#### 5.3.2 JSON → EAV 매핑 테이블
|
||||
|
||||
**결재 데이터 (JSON[0] → document_approvals)**
|
||||
|
||||
| JSON 경로 | EAV 대상 | 비고 |
|
||||
|-----------|---------|------|
|
||||
| `[0].approval.writer.name` | `document_approvals` (step=1, user→name) | 작성자 |
|
||||
| `[0].approval.writer.date` | `document_approvals` (step=1, acted_at) | mm/dd → datetime |
|
||||
| `[0].approval.reviewer.name` | `document_approvals` (step=2, user→name) | 검토자 |
|
||||
| `[0].approval.reviewer.date` | `document_approvals` (step=2, acted_at) | mm/dd → datetime |
|
||||
| `[0].approval.approver.name` | `document_approvals` (step=3, user→name) | 승인자 |
|
||||
| `[0].approval.approver.date` | `document_approvals` (step=3, acted_at) | mm/dd → datetime |
|
||||
|
||||
**기본필드 (JSON[1].inputValue → document_data, section_id=null)**
|
||||
|
||||
| JSON 경로 | field_key | 비고 |
|
||||
|-----------|----------|------|
|
||||
| `[1].inputValue.inspectdate` | `basic_inspectdate` | 검사일자 |
|
||||
| `[1].inputValue.reviewer_sub` | `basic_reviewer` | 검사자 |
|
||||
| `[1].inputValue.*_false_comment` | `footer_remark` | 부적합 내용 |
|
||||
| `[1].inputValue.resultJudgement` | `footer_judgement` | 종합판정 |
|
||||
|
||||
**절곡품 측정 데이터 (JSON[1].inputValue → document_data)**
|
||||
|
||||
| JSON 경로 | field_key 패턴 | 비고 |
|
||||
|-----------|---------------|------|
|
||||
| `[1].inputValue.lengthMeasurement[i]` | `s{섹션}_r{i}_length` | 길이 측정값 |
|
||||
| `[1].inputValue.widthMeasurement[i]` | `s{섹션}_r{i}_width` | 너비 측정값 |
|
||||
| `[1].inputValue.gapMeasurement[i]` | `s{섹션}_r{i}_gap_{point}` | 간격 측정값 (포인트별) |
|
||||
|
||||
**스크린/슬랫/조인트바 측정 데이터 (JSON[1].inputValue → document_data)**
|
||||
|
||||
| JSON 경로 | field_key 패턴 | 비고 |
|
||||
|-----------|---------------|------|
|
||||
| `[1].inputValue[n]` (col{row}_input_{dim}) | `s{섹션}_r{row}_c{col}_sub{dim}` | 순차 인덱스 → 행·컬럼 매핑 |
|
||||
|
||||
**체크박스 데이터 (JSON[5/4].checkboxData → document_data)**
|
||||
|
||||
| JSON 경로 | field_key 패턴 | 비고 |
|
||||
|-----------|---------------|------|
|
||||
| `checkboxData[row].good[col]` | `s{섹션}_r{row}_c{checkCol}_good` | 양호 체크 |
|
||||
| `checkboxData[row].bad[col]` | `s{섹션}_r{row}_c{checkCol}_bad` | 불량 체크 |
|
||||
| `checkboxData[row].judgement` | `s{섹션}_r{row}_judgement` | 행별 판정 (적/부) |
|
||||
|
||||
#### 5.3.3 이관 시 데이터 변환 규칙
|
||||
|
||||
| 변환 항목 | 5130 형식 | 새 시스템 형식 | 변환 로직 |
|
||||
|----------|----------|-------------|----------|
|
||||
| 날짜 (결재) | `"1/31"` (mm/dd) | `datetime` | 연도 추정 필요 (output.indate 기준) |
|
||||
| 날짜 (검사) | `"2026-01-31"` | `date` | 그대로 사용 |
|
||||
| 체크박스 | `true/false` | `"1"/"0"` | boolean → string |
|
||||
| 판정 | `"적"/"부"` | `"적"/"부"` | 그대로 사용 |
|
||||
| 종합판정 | `"합격"/"불합격"` | `"합격"/"불합격"` | 그대로 사용 |
|
||||
| 측정값 | `number/string` | `string` | EAV field_value는 string |
|
||||
| 결재자 이름 | `string` | `user_id (FK)` | 이름→사용자 테이블 매칭 필요 |
|
||||
|
||||
#### 5.3.4 이관 프로세스 설계
|
||||
|
||||
```
|
||||
Step 1: output 테이블에서 recordXxxMid IS NOT NULL 레코드 추출
|
||||
↓
|
||||
Step 2: 각 레코드에 대해 해당 양식 템플릿 매핑
|
||||
- recordbendingMid → 절곡품 중간검사 양식 (template_id)
|
||||
- recordscreenMid → 스크린 중간검사 양식
|
||||
- recordslatMid → 슬랫 중간검사 양식
|
||||
- recordjointbar → 조인트바 중간검사 양식
|
||||
↓
|
||||
Step 3: documents 테이블에 문서 생성
|
||||
- template_id, tenant_id, document_no (MID-YYMMDD-NN)
|
||||
- title: "{양식명} - {현장명}"
|
||||
- status: APPROVED (이미 완료된 검사)
|
||||
- created_at: output.indate 기준
|
||||
↓
|
||||
Step 4: document_approvals 생성
|
||||
- JSON[0].approval → 3개 결재 레코드
|
||||
- 이름→user_id 매칭 (매칭 실패 시 created_by = system)
|
||||
- status: APPROVED, acted_at: 변환된 날짜
|
||||
↓
|
||||
Step 5: document_data (EAV) 생성
|
||||
- 기본필드: inspectdate, reviewer → field_key 매핑
|
||||
- 체크박스: checkboxData → good/bad/judgement 매핑
|
||||
- 측정값: inputValue → 행·컬럼 인덱스 매핑
|
||||
- Footer: false_comment → footer_remark, resultJudgement → footer_judgement
|
||||
↓
|
||||
Step 6: 검증
|
||||
- 원본 JSON과 변환 결과 대조
|
||||
- 종합판정·행별 판정 일치 확인
|
||||
```
|
||||
|
||||
#### 5.3.5 이관 대상 규모 추정
|
||||
|
||||
| 검사 종류 | DB 필드 | 조건 | 비고 |
|
||||
|----------|---------|------|------|
|
||||
| 절곡품 | recordbendingMid | IS NOT NULL AND != '' AND != '{}' | output 테이블 |
|
||||
| 스크린 | recordscreenMid | 동일 | output 테이블 |
|
||||
| 슬랫 | recordslatMid | 동일 | output 테이블 |
|
||||
| 조인트바 | recordjointbar | 동일 | output 테이블 |
|
||||
|
||||
> ⚠️ 실제 레코드 수는 5130 DB 조회 필요 (Phase 3.2 완료 기준 설계만 완성, 실행은 Phase 4 이후)
|
||||
|
||||
#### 5.3.6 이관 시 주의사항
|
||||
|
||||
1. **절곡품 inputValue 구조 차이**: 절곡품만 named object (`lengthMeasurement[]`, `widthMeasurement[]`, `gapMeasurement[]`), 나머지 3종은 flat array. 이관 스크립트에서 분기 처리 필요.
|
||||
|
||||
2. **update_log 유무**: 스크린만 별도 `update_log` 컬럼 업데이트. 슬랫·조인트바는 JSON 내부에만 포함 (실제로는 비어있을 수 있음).
|
||||
|
||||
3. **결재자 이름 매칭**: 5130의 결재자는 문자열 이름만 저장. 새 시스템의 user_id(FK)로 변환 시 users 테이블에서 name 매칭 필요. 동명이인 주의.
|
||||
|
||||
4. **행 수 불일치 가능성**: 5130에서 발주 제품 수에 따라 행이 동적 생성됨. 이관 시 원본 행 수 보존 필요.
|
||||
|
||||
5. **이미지 참조**: 5130 JSON에는 이미지 참조명(`guiderail_wall_mid` 등)이 포함됨. 이관 시 새 시스템의 이미지 경로로 변환 필요.
|
||||
|
||||
### 5.4 검사 기준 이미지 이관
|
||||
|
||||
`5130/img/inspection/` 디렉토리의 이미지를 mng storage로 이관:
|
||||
- `jointbar_inspection.jpg`
|
||||
|
||||
Reference in New Issue
Block a user