설비관리 (Equipment Management)
작성일: 2026-02-27
상태: MNG R&D 완료 / API+React 미구현
최종 갱신: 2026-03-12
1. 개요
1.1 목적
생산 설비의 등록, 점검, 수리이력을 체계적으로 관리한다. MNG 관리자 패널에서 Blade/HTMX 기반으로 R&D가 완료되었으며, 본 시스템(API + React)으로의 서비스 구축이 필요하다.
1.2 핵심 기능
| 기능 |
설명 |
MNG 구현 |
| 설비 대시보드 |
현황 카드(총/가동/유휴/폐기), 유형별 통계, 최근 수리 |
✅ |
| 설비 대장 (CRUD) |
등록/수정/삭제/복원, SoftDeletes |
✅ |
| 설비 점검 |
6주기(일일~반년), 그리드 셀 토글, 종합판정 |
✅ |
| 점검 템플릿 |
설비별 점검항목 정의, 주기간 복사 |
✅ |
| 수리이력 |
사내/외주, 비용, 시간, 업체 관리 |
✅ |
| 설비 사진 |
GCS 업로드, 압축(1MB), 최대 10장 |
✅ |
| 엑셀 Import |
미리보기 + 일괄등록, 이미지 포함 |
✅ |
| 모바일 점검 |
QR 스캔 → 모바일 점검 화면 |
✅ |
| 설비-공정 매핑 |
N:N 관계, 주 설비 여부 |
✅ |
2. DB 테이블
마이그레이션: api/database/migrations/ (MNG에서 생성 금지)
2.1 테이블 목록
| 테이블 |
설명 |
마이그레이션 |
equipments |
설비 마스터 |
2026_02_25_100000 |
equipment_inspection_templates |
점검항목 템플릿 |
2026_02_25_100100 |
equipment_inspections |
점검 헤더 (설비+주기+기간) |
2026_02_25_100200 |
equipment_inspection_details |
점검 상세 (셀 단위 결과) |
2026_02_25_100300 |
equipment_repairs |
수리이력 |
2026_02_25_100400 |
equipment_process |
설비-공정 매핑 (N:N pivot) |
2026_02_25_100500 |
2.2 ERD 개요
2.3 주요 컬럼
equipments
| 컬럼 |
타입 |
설명 |
tenant_id |
bigint |
테넌트 ID |
equipment_code |
varchar(20) |
설비코드 (UNIQUE per tenant) |
name |
varchar(100) |
설비명 |
equipment_type |
varchar(50) |
유형: 포밍기/미싱기/샤링기/V컷팅기/절곡기/프레스/드릴/기타 |
production_line |
varchar(50) |
라인: 스라트/스크린/절곡/기타 |
status |
varchar(20) |
active/idle/disposed |
manager_id |
FK → users |
정 담당자 |
sub_manager_id |
FK → users |
부 담당자 |
purchase_date |
date |
구입일 |
install_date |
date |
설치일 |
purchase_price |
decimal(15,2) |
구입가격 |
useful_life |
int |
내용연수 |
sort_order |
int |
정렬순서 |
equipment_inspection_templates
| 컬럼 |
타입 |
설명 |
equipment_id |
FK → equipments |
설비 |
inspection_cycle |
varchar |
점검주기 (daily/weekly/monthly/bimonthly/quarterly/semiannual) |
item_no |
int |
항목번호 |
check_point |
varchar(50) |
점검개소 |
check_item |
varchar(100) |
점검항목 |
check_timing |
varchar(20) |
시기: operating/stopped |
check_method |
text |
점검방법 및 기준 |
equipment_inspections
| 컬럼 |
타입 |
설명 |
equipment_id |
FK → equipments |
설비 |
inspection_cycle |
varchar |
점검주기 |
year_month |
varchar(7) |
기간 (daily: 2026-03, 그 외: 2026) |
overall_judgment |
varchar(10) |
종합판정: OK/NG |
inspector_id |
FK → users |
점검자 |
repair_note |
text |
수리내역 |
issue_note |
text |
이상내용 |
equipment_inspection_details
| 컬럼 |
타입 |
설명 |
inspection_id |
FK → inspections |
점검 헤더 |
template_item_id |
FK → templates |
점검항목 |
check_date |
date |
점검일 |
result |
varchar(10) |
good(○)/bad(X)/repaired(△) |
equipment_repairs
| 컬럼 |
타입 |
설명 |
equipment_id |
FK → equipments |
설비 |
repair_date |
date |
수리일 |
repair_type |
varchar(20) |
internal(사내)/external(외주) |
repair_hours |
decimal(5,1) |
수리시간 |
cost |
decimal(15,2) |
수리비용 |
vendor |
varchar(100) |
외주업체 |
repaired_by |
FK → users |
수리자 |
3. MNG 구현 현황
3.1 모델 (mng/app/Models/Equipment/)
| 모델 |
파일 |
특이사항 |
Equipment |
Equipment.php |
BelongsToTenant, SoftDeletes, connection='codebridge' |
EquipmentInspection |
EquipmentInspection.php |
BelongsToTenant |
EquipmentInspectionDetail |
EquipmentInspectionDetail.php |
결과 순환 로직 (getNextResult) |
EquipmentInspectionTemplate |
EquipmentInspectionTemplate.php |
BelongsToTenant |
EquipmentRepair |
EquipmentRepair.php |
BelongsToTenant, SoftDeletes |
EquipmentProcess |
EquipmentProcess.php |
pivot 모델 |
3.2 서비스 (mng/app/Services/)
| 서비스 |
핵심 메서드 |
EquipmentService |
getEquipments(), createEquipment(), updateEquipment(), deleteEquipment(), restoreEquipment(), getDashboardStats(), getTypeStats() |
EquipmentInspectionService |
getInspections(), toggleDetail(), setResult(), updateInspectionNotes(), resetEquipmentInspection(), resetAllInspections(), saveTemplate(), copyTemplatesToCycles() |
EquipmentRepairService |
getRepairs(), createRepair(), updateRepair(), deleteRepair(), getRecentRepairs() |
EquipmentPhotoService |
uploadPhotos(), uploadPhotoFromPath(), deletePhoto(), getPhotoUrls(), compressImage() |
EquipmentImportService |
preview(), import() — 엑셀 헤더 매핑, 이미지 추출, 중복 처리 |
3.3 Enum (mng/app/Enums/InspectionCycle.php)
6개 점검주기를 관리하는 헬퍼 클래스:
| 주기 |
코드 |
라벨 |
period 형식 |
그리드 열 |
| 일일 |
daily |
일일 |
2026-03 (년-월) |
1~31일 |
| 주간 |
weekly |
주간 |
2026 (년) |
1~52주 |
| 월간 |
monthly |
월간 |
2026 (년) |
1~12월 |
| 2개월 |
bimonthly |
2개월 |
2026 (년) |
1~6 (2개월 단위) |
| 분기 |
quarterly |
분기 |
2026 (년) |
1~4분기 |
| 반년 |
semiannual |
반년 |
2026 (년) |
상/하반기 |
주요 메서드: columnLabels(), resolveCheckDate(), resolvePeriod(), isNonWorkingDay(), getHolidayDates()
3.4 컨트롤러
| 컨트롤러 |
경로 |
역할 |
EquipmentController |
app/Http/Controllers/ |
웹 뷰 렌더링 (dashboard, index, create, show, edit, inspections, repairs, import, guide) |
Api\Admin\EquipmentController |
app/Http/Controllers/Api/Admin/ |
CRUD + 사진 + 템플릿 조회 + 엑셀 Import |
Api\Admin\EquipmentInspectionController |
위 동일 |
점검 그리드 조회, 셀 토글, 결과 설정, 노트, 초기화, 템플릿 CRUD, 주기 복사 |
Api\Admin\EquipmentRepairController |
위 동일 |
수리이력 CRUD |
3.5 Request 클래스 (mng/app/Http/Requests/)
| 클래스 |
용도 |
StoreEquipmentRequest |
설비 등록 (코드 unique per tenant) |
UpdateEquipmentRequest |
설비 수정 (코드 unique ignore self) |
StoreEquipmentRepairRequest |
수리이력 등록 |
StoreEquipmentInspectionRequest |
점검 기록 |
3.6 라우트 구조
웹 라우트 (routes/web.php):
API 라우트 (routes/api.php, prefix: /admin/equipment):
3.7 뷰 파일 (mng/resources/views/equipment/)
모바일: mng/resources/views/mobile/inspection/show.blade.php
4. 비즈니스 규칙
4.1 설비 상태
| 상태 |
코드 |
설명 |
| 가동 |
active |
정상 운영 중 |
| 유휴 |
idle |
일시 정지 |
| 폐기 |
disposed |
사용 중단 |
4.2 점검 권한
- 관리자(
isAdmin): 모든 설비 점검 가능
- 일반 사용자:
manager_id 또는 sub_manager_id와 일치하는 설비만 점검 가능
- 권한 없는 사용자가 점검 시도 시 403 응답
4.3 점검 결과 순환
셀 클릭 시 결과가 순환한다:
4.4 휴일/주말 점검 제한
- 일일 점검(
daily)에서 주말(토/일) 및 holidays 테이블 등록 휴일에는 점검 기록 불가
- 다른 주기(weekly/monthly 등)에는 제한 없음
4.5 설비 사진
- 최대 10장
- 업로드 시 자동 압축 (장축 2048px, JPEG 품질 85→40 점진 감소, 1MB 이하)
- PNG 투명도 있으면 PNG 유지, 없으면 JPEG 변환
- GCS(Google Cloud Storage)에 저장, Signed URL로 조회
4.6 엑셀 Import
- 한글/영문 헤더 자동 매핑 (설비코드↔equipment_code 등)
- 상태 한글 변환 (가동→active, 유휴→idle 등)
- 중복 처리: skip(건너뜀) 또는 overwrite(덮어쓰기) 선택
- 엑셀 내 이미지(Drawing) 자동 추출 후 GCS 업로드
5. 참고: MNG에서의 DB 연결
MNG 모델은 $connection = 'codebridge'를 사용한다. 본 시스템(API)에서는 기본 connection을 사용하므로 모델 이관 시 이 속성을 제거해야 한다.
관련 문서
최종 업데이트: 2026-03-12