사용자 매뉴얼·번호알기·gov-portal 대시보드와 메뉴 동선·수불 리포트를 보강한다.
- 사용자 매뉴얼: league/commonmark 기반 bag/manual(로그인 전용), ManualRenderer + Config\Manual manifest, 콘텐츠 8종, E2E - 번호알기(봉투번호확인): bag/number-lookup, BagNumberLookup, E2E - gov-portal 대시보드 시안(기본/strip)·기본코드관리 화면 - 메뉴 관리: 등록·수정 후 메뉴 화면 유지, 수정 버튼 클릭 시 상단 스크롤 - 수불/분석 리포트(LOT 수불·반품/파기·수급계획·추이) 표시 보강 - .gitignore: docs/ → /docs/ 앵커링(최상위 개발문서만 제외, app/Docs는 추적) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
107
writable/database/bag_dispose_tables.sql
Normal file
107
writable/database/bag_dispose_tables.sql
Normal file
@@ -0,0 +1,107 @@
|
||||
-- ============================================
|
||||
-- 봉투 파기(입고분 폐기) + 5월 테스트 시드
|
||||
-- 반품/파기 현황: 입출고=입고 시 bag_dispose 조회
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_dispose` (
|
||||
`bd_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bd_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bd_dispose_date` DATE NOT NULL COMMENT '파기일',
|
||||
`bd_location` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '파기처(창고·처리장 등)',
|
||||
`bd_bag_code` VARCHAR(50) NOT NULL,
|
||||
`bd_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`bd_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '파기수량(매)',
|
||||
`bd_reason` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '사유',
|
||||
`bd_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`bd_idx`),
|
||||
KEY `idx_bd_lg_date` (`bd_lg_idx`, `bd_dispose_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='봉투 파기(입고분)';
|
||||
|
||||
-- 지정판매소 반품 스캔(없으면 생성) — designated-return 과 동일 구조
|
||||
CREATE TABLE IF NOT EXISTS `bag_return_scan_code` (
|
||||
`brsc_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`brsc_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`brsc_so_idx` INT UNSIGNED NOT NULL,
|
||||
`brsc_ds_idx` INT UNSIGNED NOT NULL,
|
||||
`brsc_bag_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`brsc_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`brsc_code` VARCHAR(120) NOT NULL,
|
||||
`brsc_unit` VARCHAR(10) NOT NULL DEFAULT '',
|
||||
`brsc_qty` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`brsc_unit_price` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||
`brsc_amount` DECIMAL(14,2) NOT NULL DEFAULT 0.00,
|
||||
`brsc_return_date` DATE NOT NULL,
|
||||
`brsc_state` VARCHAR(20) NOT NULL DEFAULT 'returned',
|
||||
`brsc_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`brsc_idx`),
|
||||
KEY `idx_brsc_lg_return_date` (`brsc_lg_idx`, `brsc_return_date`),
|
||||
KEY `idx_brsc_ds_idx` (`brsc_ds_idx`),
|
||||
KEY `idx_brsc_state` (`brsc_state`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='지정판매소 반품 스캔 코드';
|
||||
|
||||
SET @LG_IDX = (SELECT lg_idx FROM local_government WHERE lg_code = '110204' LIMIT 1);
|
||||
SET @DS1 = COALESCE(
|
||||
(SELECT ds_idx FROM designated_shop WHERE ds_lg_idx = @LG_IDX AND ds_name = 'CU 대명점' LIMIT 1),
|
||||
(SELECT MIN(ds_idx) FROM designated_shop WHERE ds_lg_idx = @LG_IDX)
|
||||
);
|
||||
SET @DS2 = COALESCE(
|
||||
(SELECT ds_idx FROM designated_shop WHERE ds_lg_idx = @LG_IDX AND ds_name = 'GS25 앞산점' LIMIT 1),
|
||||
(SELECT MIN(ds_idx) + 1 FROM designated_shop WHERE ds_lg_idx = @LG_IDX)
|
||||
);
|
||||
SET @DS4 = COALESCE(
|
||||
(SELECT ds_idx FROM designated_shop WHERE ds_lg_idx = @LG_IDX AND ds_name = '봉덕슈퍼' LIMIT 1),
|
||||
(SELECT MAX(ds_idx) FROM designated_shop WHERE ds_lg_idx = @LG_IDX)
|
||||
);
|
||||
SET @SO1 = (SELECT so_idx FROM shop_order WHERE so_lg_idx = @LG_IDX ORDER BY so_idx ASC LIMIT 1);
|
||||
|
||||
DELETE FROM `bag_dispose`
|
||||
WHERE `bd_lg_idx` = @LG_IDX AND `bd_dispose_date` BETWEEN '2026-05-01' AND '2026-05-31';
|
||||
DELETE FROM `bag_return_scan_code`
|
||||
WHERE `brsc_lg_idx` = @LG_IDX AND `brsc_code` LIKE 'RET-202605%';
|
||||
|
||||
-- 2026년 5월 파기(입고) — 반품/파기 현황 입고 조회용
|
||||
INSERT INTO `bag_dispose` (`bd_lg_idx`, `bd_dispose_date`, `bd_location`, `bd_bag_code`, `bd_bag_name`, `bd_qty`, `bd_reason`, `bd_regdate`) VALUES
|
||||
(@LG_IDX, '2026-05-05', '남구 종량제 물류창고', '10152', '일반용 20L', 120, '유통기한 경과', '2026-05-05 10:00:00'),
|
||||
(@LG_IDX, '2026-05-12', '남구 종량제 물류창고', '60102', '음식물 2L', 80, '오염·훼손', '2026-05-12 11:30:00'),
|
||||
(@LG_IDX, '2026-05-19', '남구 종량제 물류창고', '10172', '일반용 50L', 45, '재고 정리', '2026-05-19 09:15:00');
|
||||
|
||||
-- 2026년 5월 지정판매소 반품(designated-return) — 출고 조회용
|
||||
INSERT INTO `bag_return_scan_code`
|
||||
(`brsc_lg_idx`, `brsc_so_idx`, `brsc_ds_idx`, `brsc_bag_code`, `brsc_bag_name`, `brsc_code`, `brsc_unit`, `brsc_qty`, `brsc_unit_price`, `brsc_amount`, `brsc_return_date`, `brsc_state`, `brsc_regdate`)
|
||||
SELECT @LG_IDX, IFNULL(@SO1, 0), @DS1, '10152', '일반용 20L', 'RET-20260508-DS1-001', '매', 25, 670.00, 16750.00, '2026-05-08', 'returned', '2026-05-08 14:20:00'
|
||||
WHERE @DS1 IS NOT NULL
|
||||
UNION ALL SELECT @LG_IDX, IFNULL(@SO1, 0), @DS1, '10152', '일반용 20L', 'RET-20260508-DS1-002', '매', 10, 670.00, 6700.00, '2026-05-08', 'returned', '2026-05-08 14:21:00'
|
||||
WHERE @DS1 IS NOT NULL
|
||||
UNION ALL SELECT @LG_IDX, IFNULL(@SO1, 0), @DS2, '10132', '일반용 10L', 'RET-20260515-DS2-001', '매', 40, 340.00, 13600.00, '2026-05-15', 'returned', '2026-05-15 16:00:00'
|
||||
WHERE @DS2 IS NOT NULL
|
||||
UNION ALL SELECT @LG_IDX, IFNULL(@SO1, 0), @DS4, '10162', '일반용 30L', 'RET-20260522-DS4-001', '매', 15, 1080.00, 16200.00, '2026-05-22', 'returned', '2026-05-22 11:45:00'
|
||||
WHERE @DS4 IS NOT NULL;
|
||||
|
||||
-- E2E·북구(lg_idx=1) 등 designated_shop 이 있는 지자체
|
||||
SET @LG_T = 1;
|
||||
SET @DS_T1 = (SELECT MIN(ds_idx) FROM designated_shop WHERE ds_lg_idx = @LG_T);
|
||||
SET @DS_T2 = (SELECT MIN(ds_idx) + 1 FROM designated_shop WHERE ds_lg_idx = @LG_T);
|
||||
SET @SO_T = (SELECT so_idx FROM shop_order WHERE so_lg_idx = @LG_T ORDER BY so_idx ASC LIMIT 1);
|
||||
|
||||
DELETE FROM `bag_dispose`
|
||||
WHERE `bd_lg_idx` = @LG_T AND `bd_dispose_date` BETWEEN '2026-05-01' AND '2026-05-31';
|
||||
DELETE FROM `bag_return_scan_code`
|
||||
WHERE `brsc_lg_idx` = @LG_T AND `brsc_code` LIKE 'RET-202605-LG1-%';
|
||||
|
||||
INSERT INTO `bag_dispose` (`bd_lg_idx`, `bd_dispose_date`, `bd_location`, `bd_bag_code`, `bd_bag_name`, `bd_qty`, `bd_reason`, `bd_regdate`) VALUES
|
||||
(@LG_T, '2026-05-07', '북구 종량제 물류창고', '10152', '일반용 20L', 60, '유통기한 경과', '2026-05-07 10:00:00'),
|
||||
(@LG_T, '2026-05-14', '북구 종량제 물류창고', '10132', '일반용 10L', 35, '오염·훼손', '2026-05-14 11:00:00');
|
||||
|
||||
INSERT INTO `bag_return_scan_code`
|
||||
(`brsc_lg_idx`, `brsc_so_idx`, `brsc_ds_idx`, `brsc_bag_code`, `brsc_bag_name`, `brsc_code`, `brsc_unit`, `brsc_qty`, `brsc_unit_price`, `brsc_amount`, `brsc_return_date`, `brsc_state`, `brsc_regdate`)
|
||||
SELECT @LG_T, IFNULL(@SO_T, 0), @DS_T1, '10152', '일반용 20L', 'RET-202605-LG1-001', '매', 20, 670.00, 13400.00, '2026-05-09', 'returned', '2026-05-09 14:00:00'
|
||||
WHERE @DS_T1 IS NOT NULL
|
||||
UNION ALL SELECT @LG_T, IFNULL(@SO_T, 0), @DS_T2, '10132', '일반용 10L', 'RET-202605-LG1-002', '매', 30, 340.00, 10200.00, '2026-05-16', 'returned', '2026-05-16 15:00:00'
|
||||
WHERE @DS_T2 IS NOT NULL;
|
||||
|
||||
-- 테스터 지자체관리자(mb_lg_idx=10 등) 환경: 파기만 시드(판매소 없을 수 있음)
|
||||
SET @LG_T = 10;
|
||||
DELETE FROM `bag_dispose`
|
||||
WHERE `bd_lg_idx` = @LG_T AND `bd_dispose_date` BETWEEN '2026-05-01' AND '2026-05-31';
|
||||
INSERT INTO `bag_dispose` (`bd_lg_idx`, `bd_dispose_date`, `bd_location`, `bd_bag_code`, `bd_bag_name`, `bd_qty`, `bd_reason`, `bd_regdate`) VALUES
|
||||
(@LG_T, '2026-05-06', '중구 종량제 물류창고', '10152', '일반용 20L', 50, '유통기한 경과', '2026-05-06 10:00:00');
|
||||
Reference in New Issue
Block a user