사이트·관리자 봉투 물류 기능(수불·통계·레포트·재고·발주)과 DB·메뉴·E2E를 운영 반영한다.
통계 분석(전년대비·월별·계절별), 수급계획·LOT 수불, 지정판매소·실사·메뉴 링크 등을 포함한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -189,13 +189,18 @@ CREATE TABLE IF NOT EXISTS `bag_order` (
|
||||
`bo_agency_idx` INT UNSIGNED NULL COMMENT '입고처(대행소) FK (sales_agency)',
|
||||
`bo_fee_rate` DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '수수료율(%)',
|
||||
`bo_order_date` DATE NOT NULL COMMENT '발주일',
|
||||
`bo_bag_types` TEXT NULL COMMENT '봉투 종류 목록(JSON)',
|
||||
`bo_unit_prices` TEXT NULL COMMENT '발주 단가 목록(JSON)',
|
||||
`bo_qty_boxes` TEXT NULL COMMENT '발주 박스 수량 목록(JSON)',
|
||||
`bo_lot_no` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'LOT 번호',
|
||||
`bo_hash` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA-256 해시',
|
||||
`bo_status` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled/deleted',
|
||||
`bo_orderer_idx` INT UNSIGNED NULL COMMENT '발주자 mb_idx',
|
||||
`bo_regdate` DATETIME NOT NULL,
|
||||
`bo_moddate` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`bo_idx`),
|
||||
`bo_regdate` DATETIME NOT NULL COMMENT '등록일시',
|
||||
`bo_moddate` DATETIME NULL DEFAULT NULL COMMENT '수정일시',
|
||||
PRIMARY KEY (`bo_uuid`, `bo_version`),
|
||||
-- 코드/화면 로직은 bo_idx(숫자 PK)로 조회/취소/삭제하고 있어, bo_idx도 유니크로 유지한다.
|
||||
UNIQUE KEY `uk_bo_idx` (`bo_idx`),
|
||||
UNIQUE KEY `uk_bo_uuid_ver` (`bo_uuid`, `bo_version`),
|
||||
KEY `idx_bo_lg_idx` (`bo_lg_idx`),
|
||||
KEY `idx_bo_status` (`bo_status`),
|
||||
@@ -255,6 +260,7 @@ CREATE TABLE IF NOT EXISTS `shop_order` (
|
||||
`so_order_date` DATE NOT NULL COMMENT '접수일',
|
||||
`so_delivery_date` DATE NULL COMMENT '배달일',
|
||||
`so_payment_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '이체/가상계좌',
|
||||
`so_channel` VARCHAR(20) NOT NULL DEFAULT 'phone' COMMENT '접수채널 phone/web/app/counter',
|
||||
`so_paid` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입금여부 1=예',
|
||||
`so_received` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '수령여부 1=예',
|
||||
`so_total_qty` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
@@ -264,7 +270,8 @@ CREATE TABLE IF NOT EXISTS `shop_order` (
|
||||
`so_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`so_idx`),
|
||||
KEY `idx_so_lg_idx` (`so_lg_idx`),
|
||||
KEY `idx_so_ds_idx` (`so_ds_idx`)
|
||||
KEY `idx_so_ds_idx` (`so_ds_idx`),
|
||||
KEY `idx_so_lg_order_channel` (`so_lg_idx`, `so_order_date`, `so_channel`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='주문 접수';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `shop_order_item` (
|
||||
@@ -321,6 +328,22 @@ CREATE TABLE IF NOT EXISTS `bag_issue` (
|
||||
KEY `idx_bi2_date` (`bi2_issue_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_issue_item_code` (
|
||||
`bic_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bic_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bic_bi2_idx` INT UNSIGNED NOT NULL COMMENT 'bag_issue.bi2_idx',
|
||||
`bic_bag_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '봉투 종류 코드',
|
||||
`bic_issue_code` VARCHAR(80) NOT NULL DEFAULT '' COMMENT '불출 품목 코드',
|
||||
`bic_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '원수량(낱장)',
|
||||
`bic_cancel_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '취소수량(낱장)',
|
||||
`bic_state` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled',
|
||||
`bic_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`bic_idx`),
|
||||
KEY `idx_bic_lg_idx` (`bic_lg_idx`),
|
||||
KEY `idx_bic_bi2_idx` (`bic_bi2_idx`),
|
||||
KEY `idx_bic_issue_code` (`bic_issue_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출 품목코드 상세';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 감사 로그 (activity_log_tables.sql) — audit_helper.php
|
||||
-- ---------------------------------------------------------------------------
|
||||
@@ -340,6 +363,26 @@ CREATE TABLE IF NOT EXISTS `activity_log` (
|
||||
KEY `idx_al_regdate` (`al_regdate`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRUD 활동 로그';
|
||||
|
||||
-- 블록체인 원장 (폐쇄형 SQL Ledger)
|
||||
CREATE TABLE IF NOT EXISTS `blockchain_ledger` (
|
||||
`bl_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '블록 인덱스(Height)',
|
||||
`bl_created_at` DATETIME NOT NULL COMMENT '블록 생성 시각',
|
||||
`bl_tx_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '트랜잭션 타입(ORDER_CREATE/ORDER_UPDATE/...)',
|
||||
`bl_entity_uuid` CHAR(36) NULL COMMENT '업무 엔티티 UUID',
|
||||
`bl_entity_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '엔티티 버전',
|
||||
`bl_payload` JSON NOT NULL COMMENT '블록 payload(JSON)',
|
||||
`bl_previous_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '이전 블록 해시',
|
||||
`bl_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '현재 블록 해시',
|
||||
`bl_nonce` INT NOT NULL DEFAULT 0 COMMENT '논스(폐쇄형 체인에서 기본 0)',
|
||||
`bl_actor_idx` INT UNSIGNED NULL COMMENT '수행자 mb_idx',
|
||||
`bl_lg_idx` INT UNSIGNED NULL COMMENT '지자체 lg_idx',
|
||||
PRIMARY KEY (`bl_idx`),
|
||||
KEY `idx_bl_entity_uuid` (`bl_entity_uuid`),
|
||||
KEY `idx_bl_tx_type` (`bl_tx_type`),
|
||||
KEY `idx_bl_lg_idx` (`bl_lg_idx`),
|
||||
UNIQUE KEY `uk_bl_hash` (`bl_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='블록체인 원장';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 기타 입출고 리포트 (bag_misc_flow_tables.sql)
|
||||
-- ---------------------------------------------------------------------------
|
||||
|
||||
22
writable/database/bag_issue_item_code_table.sql
Normal file
22
writable/database/bag_issue_item_code_table.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
-- 무료용 불출 취소 화면 고도화용 상세 테이블
|
||||
-- 실행:
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/bag_issue_item_code_table.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET CHARACTER_SET_CLIENT = utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_issue_item_code` (
|
||||
`bic_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bic_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bic_bi2_idx` INT UNSIGNED NOT NULL COMMENT 'bag_issue.bi2_idx',
|
||||
`bic_bag_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '봉투 종류 코드',
|
||||
`bic_issue_code` VARCHAR(80) NOT NULL DEFAULT '' COMMENT '불출 품목 코드',
|
||||
`bic_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '원수량(낱장)',
|
||||
`bic_cancel_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '취소수량(낱장)',
|
||||
`bic_state` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled',
|
||||
`bic_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`bic_idx`),
|
||||
KEY `idx_bic_lg_idx` (`bic_lg_idx`),
|
||||
KEY `idx_bic_bi2_idx` (`bic_bi2_idx`),
|
||||
KEY `idx_bic_issue_code` (`bic_issue_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출 품목코드 상세';
|
||||
@@ -1,4 +1,5 @@
|
||||
-- 봉투 단가 테스트 데이터 (/bag/bag-prices — 적용 시작·종료 다양)
|
||||
-- 가격 기준: 대구시 공식 판매가 2024.7.1 (https://www.daegu.go.kr/env/index.do?menu_id=00001325)
|
||||
-- 전제: bag_price 테이블 존재, code_master O종 봉투코드와 맞춤(화면에서 선택 가능한 코드)
|
||||
-- 대상 지자체: 활성 지자체 중 최소 lg_idx + lg_code 110204(남구), UNION 중복 제거
|
||||
-- 재실행: 동일 (지자체, 봉투코드, 적용시작일) 이 이미 있으면 삽입 안 함
|
||||
@@ -24,21 +25,21 @@ SELECT
|
||||
NOW()
|
||||
FROM `target_lg` t
|
||||
CROSS JOIN (
|
||||
SELECT '10112' AS c, '일반용 3L' AS n, 22.00 AS o, 58.00 AS w, 78.00 AS co, DATE '2023-01-01' AS s, DATE '2023-12-31' AS e, 0 AS st
|
||||
UNION ALL SELECT '10112', '일반용 3L', 24.00, 59.00, 79.00, '2024-07-01', '2024-12-31', 0
|
||||
UNION ALL SELECT '10122', '일반용 5L', 33.00, 98.00, 128.00, '2024-01-01', '2024-08-31', 0
|
||||
UNION ALL SELECT '10122', '일반용 5L', 36.00, 102.00, 132.00, '2025-09-01', NULL, 1
|
||||
UNION ALL SELECT '10132', '일반용 10L', 55.00, 180.00, 240.00, '2025-11-01', '2025-12-31', 1
|
||||
UNION ALL SELECT '10132', '일반용 10L', 62.00, 192.00, 252.00, '2026-01-15', NULL, 1
|
||||
UNION ALL SELECT '10152', '일반용 20L', 88.00, 340.00, 450.00, '2022-05-01', '2022-12-31', 0
|
||||
UNION ALL SELECT '10152', '일반용 20L', 102.00, 375.00, 495.00, '2026-04-01', NULL, 1
|
||||
UNION ALL SELECT '60102', '음식물 2L', 17.00, 48.00, 58.00, '2025-01-01', NULL, 1
|
||||
UNION ALL SELECT '60132', '음식물 10L', 68.00, 205.00, 275.00, '2025-06-01', '2025-12-31', 0
|
||||
UNION ALL SELECT '60132', '음식물 10L', 72.00, 212.00, 282.00, '2026-03-01', NULL, 1
|
||||
UNION ALL SELECT '20172', '공공용 50L', 175.00, 680.00, 0.00, '2020-01-01', '2020-12-31', 0
|
||||
UNION ALL SELECT '40152', '공동주택용 20L', 85.00, 330.00, 440.00, '2025-12-01', '2026-02-28', 1
|
||||
UNION ALL SELECT '10172', '일반용 50L', 205.00, 850.00, 1120.00, '2026-06-01', NULL, 1
|
||||
UNION ALL SELECT '10192', '일반용 75L', 295.00, 1260.00, 1660.00, '2026-12-01', NULL, 1
|
||||
SELECT '10112' AS c, '일반용 3L' AS n, 24.00 AS o, 112.00 AS w, 120.00 AS co, DATE '2023-01-01' AS s, DATE '2023-12-31' AS e, 0 AS st
|
||||
UNION ALL SELECT '10112', '일반용 3L', 24.00, 112.00, 120.00, '2024-07-01', '2024-12-31', 0
|
||||
UNION ALL SELECT '10122', '일반용 5L', 36.00, 167.00, 180.00, '2024-01-01', '2024-08-31', 0
|
||||
UNION ALL SELECT '10122', '일반용 5L', 36.00, 167.00, 180.00, '2025-09-01', NULL, 1
|
||||
UNION ALL SELECT '10132', '일반용 10L', 68.00, 316.00, 340.00, '2025-11-01', '2025-12-31', 1
|
||||
UNION ALL SELECT '10132', '일반용 10L', 68.00, 316.00, 340.00, '2026-01-15', NULL, 1
|
||||
UNION ALL SELECT '10152', '일반용 20L', 120.00, 560.00, 600.00, '2022-05-01', '2024-06-30', 0
|
||||
UNION ALL SELECT '10152', '일반용 20L', 134.00, 623.00, 670.00, '2026-04-01', NULL, 1
|
||||
UNION ALL SELECT '60102', '음식물 2L', 22.00, 102.00, 110.00, '2025-01-01', NULL, 1
|
||||
UNION ALL SELECT '60132', '음식물 10L', 116.00, 539.00, 580.00, '2025-06-01', '2025-12-31', 0
|
||||
UNION ALL SELECT '60132', '음식물 10L', 116.00, 539.00, 580.00, '2026-03-01', NULL, 1
|
||||
UNION ALL SELECT '20172', '공공용 50L', 332.00, 1544.00, 1660.00, '2020-01-01', '2020-12-31', 0
|
||||
UNION ALL SELECT '40152', '공동주택용 20L', 128.00, 596.00, 640.00, '2025-12-01', '2026-02-28', 1
|
||||
UNION ALL SELECT '10172', '일반용 50L', 332.00, 1544.00, 1660.00, '2026-06-01', NULL, 1
|
||||
UNION ALL SELECT '10192', '일반용 75L', 494.00, 2297.00, 2470.00, '2026-12-01', NULL, 1
|
||||
) v
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `bag_price` b
|
||||
|
||||
20
writable/database/blockchain_ledger_fix_comments_utf8mb4.sql
Normal file
20
writable/database/blockchain_ledger_fix_comments_utf8mb4.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- blockchain_ledger 테이블/컬럼 COMMENT가 latin1 등으로 잘못 저장된 경우 복구
|
||||
-- 실행: mysql --default-character-set=utf8mb4 -u ... -p ... 데이터베이스명 < blockchain_ledger_fix_comments_utf8mb4.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET CHARACTER SET utf8mb4;
|
||||
|
||||
ALTER TABLE `blockchain_ledger` COMMENT = '블록체인 원장';
|
||||
|
||||
ALTER TABLE `blockchain_ledger`
|
||||
MODIFY `bl_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '블록 인덱스(Height)',
|
||||
MODIFY `bl_created_at` DATETIME NOT NULL COMMENT '블록 생성 시각',
|
||||
MODIFY `bl_tx_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '트랜잭션 타입(ORDER_CREATE/ORDER_UPDATE/...)',
|
||||
MODIFY `bl_entity_uuid` CHAR(36) NULL COMMENT '업무 엔티티 UUID',
|
||||
MODIFY `bl_entity_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '엔티티 버전',
|
||||
MODIFY `bl_payload` JSON NOT NULL COMMENT '블록 payload(JSON)',
|
||||
MODIFY `bl_previous_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '이전 블록 해시',
|
||||
MODIFY `bl_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '현재 블록 해시',
|
||||
MODIFY `bl_nonce` INT NOT NULL DEFAULT 0 COMMENT '논스(폐쇄형 체인에서 기본 0)',
|
||||
MODIFY `bl_actor_idx` INT UNSIGNED NULL COMMENT '수행자 mb_idx',
|
||||
MODIFY `bl_lg_idx` INT UNSIGNED NULL COMMENT '지자체 lg_idx';
|
||||
24
writable/database/blockchain_ledger_tables.sql
Normal file
24
writable/database/blockchain_ledger_tables.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
-- ============================================
|
||||
-- 블록체인 원장 테이블 (폐쇄형 SQL Ledger)
|
||||
-- ============================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `blockchain_ledger` (
|
||||
`bl_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '블록 인덱스(Height)',
|
||||
`bl_created_at` DATETIME NOT NULL COMMENT '블록 생성 시각',
|
||||
`bl_tx_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '트랜잭션 타입(ORDER_CREATE/ORDER_UPDATE/...)',
|
||||
`bl_entity_uuid` CHAR(36) NULL COMMENT '업무 엔티티 UUID',
|
||||
`bl_entity_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '엔티티 버전',
|
||||
`bl_payload` JSON NOT NULL COMMENT '블록 payload(JSON)',
|
||||
`bl_previous_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '이전 블록 해시',
|
||||
`bl_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '현재 블록 해시',
|
||||
`bl_nonce` INT NOT NULL DEFAULT 0 COMMENT '논스(폐쇄형 체인에서 기본 0)',
|
||||
`bl_actor_idx` INT UNSIGNED NULL COMMENT '수행자 mb_idx',
|
||||
`bl_lg_idx` INT UNSIGNED NULL COMMENT '지자체 lg_idx',
|
||||
PRIMARY KEY (`bl_idx`),
|
||||
KEY `idx_bl_entity_uuid` (`bl_entity_uuid`),
|
||||
KEY `idx_bl_tx_type` (`bl_tx_type`),
|
||||
KEY `idx_bl_lg_idx` (`bl_lg_idx`),
|
||||
UNIQUE KEY `uk_bl_hash` (`bl_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='블록체인 원장';
|
||||
38
writable/database/code_detail_bag_o_missing_by_kind.sql
Normal file
38
writable/database/code_detail_bag_o_missing_by_kind.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
-- 봉투구분(E)별 봉투명(O) 코드 보강 — 기타 입출고·단가 등에서 구분 선택 시 품목 표시
|
||||
-- 코드 규칙: E(2자) + 용량 G(2자) + 재질 F(1자, 고밀도=2) — 일반용 10122 = 10+12+2
|
||||
-- 플랫폼 공통(cd_lg_idx=0). 이미 있으면 건너뜀.
|
||||
|
||||
INSERT INTO `code_detail` (`cd_ck_idx`, `cd_code`, `cd_name`, `cd_sort`, `cd_state`, `cd_lg_idx`, `cd_regdate`)
|
||||
SELECT k.ck_idx, v.cd_code, v.cd_name, v.cd_sort, 1, 0, NOW()
|
||||
FROM `code_kind` k
|
||||
JOIN (
|
||||
/* 20 공공용 */
|
||||
SELECT '20112' AS cd_code, '공공용 3L' AS cd_name, 85 AS cd_sort UNION ALL
|
||||
SELECT '20122', '공공용 5L', 86 UNION ALL
|
||||
SELECT '20132', '공공용 10L', 87 UNION ALL
|
||||
SELECT '20152', '공공용 20L', 88 UNION ALL
|
||||
SELECT '20162', '공공용 30L', 89 UNION ALL
|
||||
/* 20172 공공용 50L — 기존 */
|
||||
SELECT '20192', '공공용 75L', 91 UNION ALL
|
||||
SELECT '20202', '공공용 100L', 92 UNION ALL
|
||||
/* 30 무료용 */
|
||||
SELECT '30112', '무료용 3L', 125 UNION ALL
|
||||
SELECT '30122', '무료용 5L', 126 UNION ALL
|
||||
SELECT '30132', '무료용 10L', 127 UNION ALL
|
||||
SELECT '30152', '무료용 20L', 128 UNION ALL
|
||||
SELECT '30162', '무료용 30L', 129 UNION ALL
|
||||
SELECT '30172', '무료용 50L', 130 UNION ALL
|
||||
SELECT '30192', '무료용 75L', 131 UNION ALL
|
||||
SELECT '30202', '무료용 100L', 132 UNION ALL
|
||||
/* 50 재사용 — 50122 외 용량 */
|
||||
SELECT '50112', '재사용 3L', 133 UNION ALL
|
||||
SELECT '50132', '재사용 10L', 135 UNION ALL
|
||||
SELECT '50152', '재사용 20L', 136 UNION ALL
|
||||
SELECT '50162', '재사용 30L', 137 UNION ALL
|
||||
SELECT '50172', '재사용 50L', 138
|
||||
) AS v
|
||||
WHERE k.ck_code = 'O'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `code_detail` d
|
||||
WHERE d.cd_ck_idx = k.ck_idx AND d.cd_code = v.cd_code AND d.cd_lg_idx = 0
|
||||
);
|
||||
@@ -285,11 +285,31 @@ JOIN (
|
||||
SELECT '10172' AS cd_code, '일반용 50L' AS cd_name, 60 AS cd_sort UNION ALL
|
||||
SELECT '10192' AS cd_code, '일반용 75L' AS cd_name, 70 AS cd_sort UNION ALL
|
||||
SELECT '10202' AS cd_code, '일반용 100L' AS cd_name, 80 AS cd_sort UNION ALL
|
||||
SELECT '20112' AS cd_code, '공공용 3L' AS cd_name, 85 AS cd_sort UNION ALL
|
||||
SELECT '20122' AS cd_code, '공공용 5L' AS cd_name, 86 AS cd_sort UNION ALL
|
||||
SELECT '20132' AS cd_code, '공공용 10L' AS cd_name, 87 AS cd_sort UNION ALL
|
||||
SELECT '20152' AS cd_code, '공공용 20L' AS cd_name, 88 AS cd_sort UNION ALL
|
||||
SELECT '20162' AS cd_code, '공공용 30L' AS cd_name, 89 AS cd_sort UNION ALL
|
||||
SELECT '20172' AS cd_code, '공공용 50L' AS cd_name, 90 AS cd_sort UNION ALL
|
||||
SELECT '20192' AS cd_code, '공공용 75L' AS cd_name, 91 AS cd_sort UNION ALL
|
||||
SELECT '20202' AS cd_code, '공공용 100L' AS cd_name, 92 AS cd_sort UNION ALL
|
||||
SELECT '30112' AS cd_code, '무료용 3L' AS cd_name, 125 AS cd_sort UNION ALL
|
||||
SELECT '30122' AS cd_code, '무료용 5L' AS cd_name, 126 AS cd_sort UNION ALL
|
||||
SELECT '30132' AS cd_code, '무료용 10L' AS cd_name, 127 AS cd_sort UNION ALL
|
||||
SELECT '30152' AS cd_code, '무료용 20L' AS cd_name, 128 AS cd_sort UNION ALL
|
||||
SELECT '30162' AS cd_code, '무료용 30L' AS cd_name, 129 AS cd_sort UNION ALL
|
||||
SELECT '30172' AS cd_code, '무료용 50L' AS cd_name, 130 AS cd_sort UNION ALL
|
||||
SELECT '30192' AS cd_code, '무료용 75L' AS cd_name, 131 AS cd_sort UNION ALL
|
||||
SELECT '30202' AS cd_code, '무료용 100L' AS cd_name, 132 AS cd_sort UNION ALL
|
||||
SELECT '40152' AS cd_code, '공동주택용 20L' AS cd_name, 100 AS cd_sort UNION ALL
|
||||
SELECT '40182' AS cd_code, '공동주택용 60L' AS cd_name, 110 AS cd_sort UNION ALL
|
||||
SELECT '40212' AS cd_code, '공동주택용 120L' AS cd_name, 120 AS cd_sort UNION ALL
|
||||
SELECT '50122' AS cd_code, '재사용 5L' AS cd_name, 130 AS cd_sort UNION ALL
|
||||
SELECT '50112' AS cd_code, '재사용 3L' AS cd_name, 133 AS cd_sort UNION ALL
|
||||
SELECT '50122' AS cd_code, '재사용 5L' AS cd_name, 134 AS cd_sort UNION ALL
|
||||
SELECT '50132' AS cd_code, '재사용 10L' AS cd_name, 135 AS cd_sort UNION ALL
|
||||
SELECT '50152' AS cd_code, '재사용 20L' AS cd_name, 136 AS cd_sort UNION ALL
|
||||
SELECT '50162' AS cd_code, '재사용 30L' AS cd_name, 137 AS cd_sort UNION ALL
|
||||
SELECT '50172' AS cd_code, '재사용 50L' AS cd_name, 138 AS cd_sort UNION ALL
|
||||
SELECT '60102' AS cd_code, '음식물 2L' AS cd_name, 140 AS cd_sort UNION ALL
|
||||
SELECT '60132' AS cd_code, '음식물 10L' AS cd_name, 150 AS cd_sort UNION ALL
|
||||
SELECT '61107' AS cd_code, '음식물 스티커 2L' AS cd_name, 160 AS cd_sort UNION ALL
|
||||
|
||||
3
writable/database/designated_shop_ds_sa_idx.sql
Normal file
3
writable/database/designated_shop_ds_sa_idx.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 지정판매소 ↔ 판매 대행소 FK
|
||||
-- 적용: designated_shop_ds_sa_idx_apply.sql
|
||||
-- 매핑: designated_shop_ds_sa_idx_backfill.sql (구·군별 발주 대행소 추정)
|
||||
16
writable/database/designated_shop_ds_sa_idx_apply.sql
Normal file
16
writable/database/designated_shop_ds_sa_idx_apply.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
-- 지정판매소 ↔ 판매 대행소 FK (통계·판매대장 필터용)
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/designated_shop_ds_sa_idx_apply.sql
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
SET @db = DATABASE();
|
||||
|
||||
SET @s = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'designated_shop' AND COLUMN_NAME = 'ds_sa_idx') > 0,
|
||||
'SELECT 1',
|
||||
'ALTER TABLE `designated_shop`
|
||||
ADD COLUMN `ds_sa_idx` INT UNSIGNED NULL DEFAULT NULL COMMENT ''소속 판매 대행소 FK'' AFTER `ds_lg_idx`,
|
||||
ADD KEY `idx_ds_sa_idx` (`ds_sa_idx`)'
|
||||
));
|
||||
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
29
writable/database/designated_shop_ds_sa_idx_backfill.sql
Normal file
29
writable/database/designated_shop_ds_sa_idx_backfill.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- ds_sa_idx 가 NULL 인 지정판매소에 구·군(bo_gugun_code)별 최다 발주 대행소를 매핑
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/designated_shop_ds_sa_idx_backfill.sql
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
UPDATE `designated_shop` ds
|
||||
INNER JOIN (
|
||||
SELECT bo.bo_lg_idx, bo.bo_gugun_code, bo.bo_agency_idx
|
||||
FROM `bag_order` bo
|
||||
INNER JOIN (
|
||||
SELECT bo_lg_idx, bo_gugun_code, bo_agency_idx, COUNT(*) AS cnt,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY bo_lg_idx, bo_gugun_code
|
||||
ORDER BY COUNT(*) DESC, bo_agency_idx DESC
|
||||
) AS rn
|
||||
FROM `bag_order`
|
||||
WHERE bo_status = 'normal'
|
||||
AND bo_agency_idx IS NOT NULL
|
||||
AND TRIM(bo_gugun_code) != ''
|
||||
GROUP BY bo_lg_idx, bo_gugun_code, bo_agency_idx
|
||||
) ranked ON ranked.bo_lg_idx = bo.bo_lg_idx
|
||||
AND ranked.bo_gugun_code = bo.bo_gugun_code
|
||||
AND ranked.bo_agency_idx = bo.bo_agency_idx
|
||||
AND ranked.rn = 1
|
||||
WHERE bo.bo_status = 'normal'
|
||||
GROUP BY bo.bo_lg_idx, bo.bo_gugun_code, bo.bo_agency_idx
|
||||
) map ON map.bo_lg_idx = ds.ds_lg_idx AND map.bo_gugun_code = ds.ds_gugun_code
|
||||
SET ds.ds_sa_idx = map.bo_agency_idx
|
||||
WHERE ds.ds_sa_idx IS NULL;
|
||||
156
writable/database/fix_bag_price_packaging_daegu_realistic.sql
Normal file
156
writable/database/fix_bag_price_packaging_daegu_realistic.sql
Normal file
@@ -0,0 +1,156 @@
|
||||
-- ================================================================
|
||||
-- 대구광역시 공식 종량제·음식물 납부필증 가격(2024.7.1~) 및 포장단위 현실값 반영
|
||||
-- 출처: https://www.daegu.go.kr/env/index.do?menu_id=00001325 (최근수정 2026.01.27)
|
||||
--
|
||||
-- bp_consumer : 시 판매가(장/매)
|
||||
-- bp_wholesale : 지정판매소 매입가 ≈ 판매가의 93% (도매 마진)
|
||||
-- bp_order_price: 제작 발주단가(장) ≈ 판매가의 20% (제조 원가 수준)
|
||||
--
|
||||
-- 포장: 대구 동구청 가격표(묶음·박스 매수) — dong.daegu.kr/reserve/contents.do?mid=0302000000
|
||||
-- 일반 3L: 20매/팩 × 150팩/박스 = 3,000매
|
||||
-- 일반 5L: 20매/팩 × 150팩/박스 = 3,000매 (표 미기재, 3L 동일 계열)
|
||||
-- 일반 10L: 10매/팩 × 200팩/박스 = 2,000매
|
||||
-- 일반 20L: 50매/팩 × 20팩/박스 = 1,000매
|
||||
-- 일반 30L: 50매/팩 × 6팩/박스 = 300매 (표 미기재)
|
||||
-- 일반 50L: 20매/팩 × 25팩/박스 = 500매
|
||||
-- 일반 75L: 10매/팩 × 30팩/박스 = 300매
|
||||
-- 음식물·스티커: 필증/스티커는 100매/팩 등 별도 (본 스크립트 일반·공공·공동주택·재사용만)
|
||||
--
|
||||
-- 실행: mysql ... jongryangje < writable/database/fix_bag_price_packaging_daegu_realistic.sql
|
||||
-- 이어서 O종 전체(27코드): fix_bag_price_packaging_daegu_realistic_all_codes.sql
|
||||
-- ================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------- 현행 단가 (적용 중인 행) ----------
|
||||
UPDATE `bag_price` SET
|
||||
`bp_order_price` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 24.00
|
||||
WHEN '10122' THEN 36.00
|
||||
WHEN '10132' THEN 68.00
|
||||
WHEN '10152' THEN 134.00
|
||||
WHEN '10162' THEN 216.00
|
||||
WHEN '10172' THEN 332.00
|
||||
WHEN '10192' THEN 494.00
|
||||
WHEN '10202' THEN 0.00
|
||||
WHEN '40152' THEN 128.00
|
||||
WHEN '20172' THEN 332.00
|
||||
WHEN '60102' THEN 22.00
|
||||
WHEN '60132' THEN 116.00
|
||||
ELSE `bp_order_price`
|
||||
END,
|
||||
`bp_wholesale` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 112.00
|
||||
WHEN '10122' THEN 167.00
|
||||
WHEN '10132' THEN 316.00
|
||||
WHEN '10152' THEN 623.00
|
||||
WHEN '10162' THEN 1004.00
|
||||
WHEN '10172' THEN 1544.00
|
||||
WHEN '10192' THEN 2297.00
|
||||
WHEN '10202' THEN 0.00
|
||||
WHEN '40152' THEN 596.00
|
||||
WHEN '20172' THEN 1544.00
|
||||
WHEN '60102' THEN 102.00
|
||||
WHEN '60132' THEN 539.00
|
||||
ELSE `bp_wholesale`
|
||||
END,
|
||||
`bp_consumer` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 120.00
|
||||
WHEN '10122' THEN 180.00
|
||||
WHEN '10132' THEN 340.00
|
||||
WHEN '10152' THEN 670.00
|
||||
WHEN '10162' THEN 1080.00
|
||||
WHEN '10172' THEN 1660.00
|
||||
WHEN '10192' THEN 2470.00
|
||||
WHEN '10202' THEN 0.00
|
||||
WHEN '40152' THEN 640.00
|
||||
WHEN '20172' THEN 1660.00
|
||||
WHEN '60102' THEN 110.00
|
||||
WHEN '60132' THEN 580.00
|
||||
ELSE `bp_consumer`
|
||||
END
|
||||
WHERE `bp_bag_code` IN (
|
||||
'10112','10122','10132','10152','10162','10172','10192','10202',
|
||||
'40152','20172','60102','60132'
|
||||
)
|
||||
AND `bp_state` = 1
|
||||
AND (`bp_end_date` IS NULL OR `bp_end_date` >= CURDATE());
|
||||
|
||||
-- ---------- 포장 단위 ----------
|
||||
UPDATE `packaging_unit` SET
|
||||
`pu_pack_per_sheet` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 20
|
||||
WHEN '10122' THEN 20
|
||||
WHEN '10132' THEN 10
|
||||
WHEN '10152' THEN 50
|
||||
WHEN '10162' THEN 50
|
||||
WHEN '10172' THEN 20
|
||||
WHEN '10192' THEN 10
|
||||
WHEN '10202' THEN 10
|
||||
WHEN '40152' THEN 50
|
||||
WHEN '20172' THEN 20
|
||||
WHEN '60102' THEN 100
|
||||
WHEN '60132' THEN 50
|
||||
ELSE `pu_pack_per_sheet`
|
||||
END,
|
||||
`pu_box_per_pack` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 150
|
||||
WHEN '10122' THEN 150
|
||||
WHEN '10132' THEN 200
|
||||
WHEN '10152' THEN 20
|
||||
WHEN '10162' THEN 6
|
||||
WHEN '10172' THEN 25
|
||||
WHEN '10192' THEN 30
|
||||
WHEN '10202' THEN 5
|
||||
WHEN '40152' THEN 20
|
||||
WHEN '20172' THEN 25
|
||||
WHEN '60102' THEN 10
|
||||
WHEN '60132' THEN 10
|
||||
ELSE `pu_box_per_pack`
|
||||
END,
|
||||
`pu_total_per_box` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 3000
|
||||
WHEN '10122' THEN 3000
|
||||
WHEN '10132' THEN 2000
|
||||
WHEN '10152' THEN 1000
|
||||
WHEN '10162' THEN 300
|
||||
WHEN '10172' THEN 500
|
||||
WHEN '10192' THEN 300
|
||||
WHEN '10202' THEN 50
|
||||
WHEN '40152' THEN 1000
|
||||
WHEN '20172' THEN 500
|
||||
WHEN '60102' THEN 1000
|
||||
WHEN '60132' THEN 500
|
||||
ELSE `pu_total_per_box`
|
||||
END
|
||||
WHERE `pu_bag_code` IN (
|
||||
'10112','10122','10132','10152','10162','10172','10192','10202',
|
||||
'40152','20172','60102','60132'
|
||||
)
|
||||
AND `pu_state` = 1
|
||||
AND (`pu_end_date` IS NULL OR `pu_end_date` >= CURDATE());
|
||||
|
||||
-- ---------- 판매·주문 단가를 현행 소비자가에 맞춤(선택적 정합) ----------
|
||||
UPDATE `bag_sale` bs
|
||||
INNER JOIN `bag_price` bp
|
||||
ON bp.`bp_lg_idx` = bs.`bs_lg_idx`
|
||||
AND bp.`bp_bag_code` = bs.`bs_bag_code`
|
||||
AND bp.`bp_state` = 1
|
||||
AND (bp.`bp_end_date` IS NULL OR bp.`bp_end_date` >= CURDATE())
|
||||
SET
|
||||
bs.`bs_unit_price` = bp.`bp_consumer`,
|
||||
bs.`bs_amount` = bs.`bs_qty` * bp.`bp_consumer`
|
||||
WHERE bs.`bs_type` = 'sale'
|
||||
AND bp.`bp_consumer` > 0;
|
||||
|
||||
UPDATE `shop_order_item` soi
|
||||
INNER JOIN `shop_order` so ON so.`so_idx` = soi.`soi_so_idx`
|
||||
INNER JOIN `bag_price` bp
|
||||
ON bp.`bp_lg_idx` = so.`so_lg_idx`
|
||||
AND bp.`bp_bag_code` = soi.`soi_bag_code`
|
||||
AND bp.`bp_state` = 1
|
||||
AND (bp.`bp_end_date` IS NULL OR bp.`bp_end_date` >= CURDATE())
|
||||
SET
|
||||
soi.`soi_unit_price` = bp.`bp_consumer`,
|
||||
soi.`soi_amount` = soi.`soi_qty` * bp.`bp_consumer`
|
||||
WHERE bp.`bp_consumer` > 0;
|
||||
@@ -0,0 +1,296 @@
|
||||
-- ================================================================
|
||||
-- [Part 2] O종 봉투 코드 전체 — 단가·포장단위 INSERT(누락분) + 일괄 UPDATE
|
||||
-- Part 1: fix_bag_price_packaging_daegu_realistic.sql 실행 후 이어서 실행
|
||||
-- 출처: 대구시 공식가 2024.7.1 + 동일 용량·스티커/용기·정액 스티커 합리 추정
|
||||
-- https://www.daegu.go.kr/env/index.do?menu_id=00001325
|
||||
--
|
||||
-- 대상 코드 27종 (code_master O종 전체)
|
||||
-- 일반 10112~10202, 공공 20172, 공동주택 40152/40182/40212, 재사용 50122
|
||||
-- 음식물 60102/60132, 음식물스티커 61107~61217, 음식물용기 62128/62158
|
||||
-- 폐기물정액스티커 70707/70727/70747/70787
|
||||
-- ================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ----------------------------------------------------------------
|
||||
-- 1) 현행 단가가 없는 (지자체 × 봉투코드) INSERT
|
||||
-- ----------------------------------------------------------------
|
||||
INSERT INTO `bag_price` (
|
||||
`bp_lg_idx`, `bp_bag_code`, `bp_bag_name`,
|
||||
`bp_order_price`, `bp_wholesale`, `bp_consumer`,
|
||||
`bp_start_date`, `bp_end_date`, `bp_state`, `bp_regdate`
|
||||
)
|
||||
SELECT
|
||||
lg.`lg_idx`,
|
||||
v.`bag_code`,
|
||||
v.`bag_name`,
|
||||
v.`order_price`,
|
||||
v.`wholesale`,
|
||||
v.`consumer`,
|
||||
DATE '2024-07-01',
|
||||
NULL,
|
||||
v.`bp_state`,
|
||||
NOW()
|
||||
FROM `local_government` lg
|
||||
CROSS JOIN (
|
||||
SELECT '10112' AS bag_code, '일반용 3L' AS bag_name, 24.00 AS order_price, 112.00 AS wholesale, 120.00 AS consumer, 1 AS bp_state UNION ALL
|
||||
SELECT '10122', '일반용 5L', 36.00, 167.00, 180.00, 1 UNION ALL
|
||||
SELECT '10132', '일반용 10L', 68.00, 316.00, 340.00, 1 UNION ALL
|
||||
SELECT '10152', '일반용 20L', 134.00, 623.00, 670.00, 1 UNION ALL
|
||||
SELECT '10162', '일반용 30L', 216.00, 1004.00, 1080.00, 1 UNION ALL
|
||||
SELECT '10172', '일반용 50L', 332.00, 1544.00, 1660.00, 1 UNION ALL
|
||||
SELECT '10192', '일반용 75L', 494.00, 2297.00, 2470.00, 1 UNION ALL
|
||||
SELECT '10202', '일반용 100L', 0.00, 0.00, 0.00, 0 UNION ALL
|
||||
SELECT '20172', '공공용 50L', 332.00, 1544.00, 1660.00, 1 UNION ALL
|
||||
SELECT '40152', '공동주택용 20L', 128.00, 596.00, 640.00, 1 UNION ALL
|
||||
SELECT '40182', '공동주택용 60L', 396.00, 1841.00, 1980.00, 1 UNION ALL
|
||||
SELECT '40212', '공동주택용 120L', 1360.00, 6324.00, 6800.00, 1 UNION ALL
|
||||
SELECT '50122', '재사용 5L', 30.00, 140.00, 150.00, 1 UNION ALL
|
||||
SELECT '60102', '음식물 2L', 22.00, 102.00, 110.00, 1 UNION ALL
|
||||
SELECT '60132', '음식물 10L', 116.00, 539.00, 580.00, 1 UNION ALL
|
||||
SELECT '61107', '음식물 스티커 2L', 22.00, 102.00, 110.00, 1 UNION ALL
|
||||
SELECT '61117', '음식물 스티커 3L', 34.00, 158.00, 170.00, 1 UNION ALL
|
||||
SELECT '61127', '음식물 스티커 5L', 58.00, 270.00, 290.00, 1 UNION ALL
|
||||
SELECT '61157', '음식물 스티커 20L', 232.00, 1079.00, 1160.00, 1 UNION ALL
|
||||
SELECT '61187', '음식물 스티커 60L', 696.00, 3236.00, 3480.00, 1 UNION ALL
|
||||
SELECT '61217', '음식물 스티커 120L', 1392.00, 6473.00, 6960.00, 1 UNION ALL
|
||||
SELECT '62128', '음식물용기 5L', 64.00, 298.00, 320.00, 1 UNION ALL
|
||||
SELECT '62158', '음식물용기 20L', 240.00, 1116.00, 1200.00, 1 UNION ALL
|
||||
SELECT '70707', '폐기물 스티커 1,000원', 200.00, 930.00, 1000.00, 1 UNION ALL
|
||||
SELECT '70727', '폐기물 스티커 3,000원', 600.00, 2790.00, 3000.00, 1 UNION ALL
|
||||
SELECT '70747', '폐기물 스티커 5,000원', 1000.00, 4650.00, 5000.00, 1 UNION ALL
|
||||
SELECT '70787', '폐기물 스티커 10,000원', 2000.00, 9300.00, 10000.00, 1
|
||||
) v
|
||||
WHERE lg.`lg_state` = 1
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `bag_price` b
|
||||
WHERE b.`bp_lg_idx` = lg.`lg_idx`
|
||||
AND b.`bp_bag_code` = v.`bag_code`
|
||||
AND b.`bp_state` = 1
|
||||
AND (b.`bp_end_date` IS NULL OR b.`bp_end_date` >= CURDATE())
|
||||
);
|
||||
|
||||
-- ----------------------------------------------------------------
|
||||
-- 2) 포장 단위 없는 (지자체 × 봉투코드) INSERT
|
||||
-- ----------------------------------------------------------------
|
||||
INSERT INTO `packaging_unit` (
|
||||
`pu_lg_idx`, `pu_bag_code`, `pu_bag_name`,
|
||||
`pu_box_per_pack`, `pu_pack_per_sheet`, `pu_total_per_box`,
|
||||
`pu_start_date`, `pu_end_date`, `pu_state`, `pu_regdate`
|
||||
)
|
||||
SELECT
|
||||
lg.`lg_idx`,
|
||||
v.`bag_code`,
|
||||
v.`bag_name`,
|
||||
v.`box_per_pack`,
|
||||
v.`pack_per_sheet`,
|
||||
v.`total_per_box`,
|
||||
DATE '2024-07-01',
|
||||
NULL,
|
||||
v.`pu_state`,
|
||||
NOW()
|
||||
FROM `local_government` lg
|
||||
CROSS JOIN (
|
||||
SELECT '10112' AS bag_code, '일반용 3L' AS bag_name, 150 AS box_per_pack, 20 AS pack_per_sheet, 3000 AS total_per_box, 1 AS pu_state UNION ALL
|
||||
SELECT '10122', '일반용 5L', 150, 20, 3000, 1 UNION ALL
|
||||
SELECT '10132', '일반용 10L', 200, 10, 2000, 1 UNION ALL
|
||||
SELECT '10152', '일반용 20L', 20, 50, 1000, 1 UNION ALL
|
||||
SELECT '10162', '일반용 30L', 6, 50, 300, 1 UNION ALL
|
||||
SELECT '10172', '일반용 50L', 25, 20, 500, 1 UNION ALL
|
||||
SELECT '10192', '일반용 75L', 30, 10, 300, 1 UNION ALL
|
||||
SELECT '10202', '일반용 100L', 5, 10, 50, 0 UNION ALL
|
||||
SELECT '20172', '공공용 50L', 25, 20, 500, 1 UNION ALL
|
||||
SELECT '40152', '공동주택용 20L', 20, 50, 1000, 1 UNION ALL
|
||||
SELECT '40182', '공동주택용 60L', 10, 20, 200, 1 UNION ALL
|
||||
SELECT '40212', '공동주택용 120L', 5, 10, 50, 1 UNION ALL
|
||||
SELECT '50122', '재사용 5L', 150, 20, 3000, 1 UNION ALL
|
||||
SELECT '60102', '음식물 2L', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '60132', '음식물 10L', 10, 50, 500, 1 UNION ALL
|
||||
SELECT '61107', '음식물 스티커 2L', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '61117', '음식물 스티커 3L', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '61127', '음식물 스티커 5L', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '61157', '음식물 스티커 20L', 10, 50, 500, 1 UNION ALL
|
||||
SELECT '61187', '음식물 스티커 60L', 5, 20, 100, 1 UNION ALL
|
||||
SELECT '61217', '음식물 스티커 120L', 5, 10, 50, 1 UNION ALL
|
||||
SELECT '62128', '음식물용기 5L', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '62158', '음식물용기 20L', 10, 50, 500, 1 UNION ALL
|
||||
SELECT '70707', '폐기물 스티커 1,000원', 10, 100, 1000, 1 UNION ALL
|
||||
SELECT '70727', '폐기물 스티커 3,000원', 10, 50, 500, 1 UNION ALL
|
||||
SELECT '70747', '폐기물 스티커 5,000원', 10, 20, 200, 1 UNION ALL
|
||||
SELECT '70787', '폐기물 스티커 10,000원', 10, 10, 100, 1
|
||||
) v
|
||||
WHERE lg.`lg_state` = 1
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `packaging_unit` p
|
||||
WHERE p.`pu_lg_idx` = lg.`lg_idx`
|
||||
AND p.`pu_bag_code` = v.`bag_code`
|
||||
AND p.`pu_state` = 1
|
||||
AND (p.`pu_end_date` IS NULL OR p.`pu_end_date` >= CURDATE())
|
||||
);
|
||||
|
||||
-- ----------------------------------------------------------------
|
||||
-- 3) 전체 O종 코드 — 현행 단가 일괄 UPDATE
|
||||
-- ----------------------------------------------------------------
|
||||
UPDATE `bag_price` SET
|
||||
`bp_bag_name` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN '일반용 3L'
|
||||
WHEN '10122' THEN '일반용 5L'
|
||||
WHEN '10132' THEN '일반용 10L'
|
||||
WHEN '10152' THEN '일반용 20L'
|
||||
WHEN '10162' THEN '일반용 30L'
|
||||
WHEN '10172' THEN '일반용 50L'
|
||||
WHEN '10192' THEN '일반용 75L'
|
||||
WHEN '10202' THEN '일반용 100L'
|
||||
WHEN '20172' THEN '공공용 50L'
|
||||
WHEN '40152' THEN '공동주택용 20L'
|
||||
WHEN '40182' THEN '공동주택용 60L'
|
||||
WHEN '40212' THEN '공동주택용 120L'
|
||||
WHEN '50122' THEN '재사용 5L'
|
||||
WHEN '60102' THEN '음식물 2L'
|
||||
WHEN '60132' THEN '음식물 10L'
|
||||
WHEN '61107' THEN '음식물 스티커 2L'
|
||||
WHEN '61117' THEN '음식물 스티커 3L'
|
||||
WHEN '61127' THEN '음식물 스티커 5L'
|
||||
WHEN '61157' THEN '음식물 스티커 20L'
|
||||
WHEN '61187' THEN '음식물 스티커 60L'
|
||||
WHEN '61217' THEN '음식물 스티커 120L'
|
||||
WHEN '62128' THEN '음식물용기 5L'
|
||||
WHEN '62158' THEN '음식물용기 20L'
|
||||
WHEN '70707' THEN '폐기물 스티커 1,000원'
|
||||
WHEN '70727' THEN '폐기물 스티커 3,000원'
|
||||
WHEN '70747' THEN '폐기물 스티커 5,000원'
|
||||
WHEN '70787' THEN '폐기물 스티커 10,000원'
|
||||
ELSE `bp_bag_name`
|
||||
END,
|
||||
`bp_order_price` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 24.00 WHEN '10122' THEN 36.00 WHEN '10132' THEN 68.00
|
||||
WHEN '10152' THEN 134.00 WHEN '10162' THEN 216.00 WHEN '10172' THEN 332.00
|
||||
WHEN '10192' THEN 494.00 WHEN '10202' THEN 0.00
|
||||
WHEN '20172' THEN 332.00
|
||||
WHEN '40152' THEN 128.00 WHEN '40182' THEN 396.00 WHEN '40212' THEN 1360.00
|
||||
WHEN '50122' THEN 30.00
|
||||
WHEN '60102' THEN 22.00 WHEN '60132' THEN 116.00
|
||||
WHEN '61107' THEN 22.00 WHEN '61117' THEN 34.00 WHEN '61127' THEN 58.00
|
||||
WHEN '61157' THEN 232.00 WHEN '61187' THEN 696.00 WHEN '61217' THEN 1392.00
|
||||
WHEN '62128' THEN 64.00 WHEN '62158' THEN 240.00
|
||||
WHEN '70707' THEN 200.00 WHEN '70727' THEN 600.00 WHEN '70747' THEN 1000.00 WHEN '70787' THEN 2000.00
|
||||
ELSE `bp_order_price`
|
||||
END,
|
||||
`bp_wholesale` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 112.00 WHEN '10122' THEN 167.00 WHEN '10132' THEN 316.00
|
||||
WHEN '10152' THEN 623.00 WHEN '10162' THEN 1004.00 WHEN '10172' THEN 1544.00
|
||||
WHEN '10192' THEN 2297.00 WHEN '10202' THEN 0.00
|
||||
WHEN '20172' THEN 1544.00
|
||||
WHEN '40152' THEN 596.00 WHEN '40182' THEN 1841.00 WHEN '40212' THEN 6324.00
|
||||
WHEN '50122' THEN 140.00
|
||||
WHEN '60102' THEN 102.00 WHEN '60132' THEN 539.00
|
||||
WHEN '61107' THEN 102.00 WHEN '61117' THEN 158.00 WHEN '61127' THEN 270.00
|
||||
WHEN '61157' THEN 1079.00 WHEN '61187' THEN 3236.00 WHEN '61217' THEN 6473.00
|
||||
WHEN '62128' THEN 298.00 WHEN '62158' THEN 1116.00
|
||||
WHEN '70707' THEN 930.00 WHEN '70727' THEN 2790.00 WHEN '70747' THEN 4650.00 WHEN '70787' THEN 9300.00
|
||||
ELSE `bp_wholesale`
|
||||
END,
|
||||
`bp_consumer` = CASE `bp_bag_code`
|
||||
WHEN '10112' THEN 120.00 WHEN '10122' THEN 180.00 WHEN '10132' THEN 340.00
|
||||
WHEN '10152' THEN 670.00 WHEN '10162' THEN 1080.00 WHEN '10172' THEN 1660.00
|
||||
WHEN '10192' THEN 2470.00 WHEN '10202' THEN 0.00
|
||||
WHEN '20172' THEN 1660.00
|
||||
WHEN '40152' THEN 640.00 WHEN '40182' THEN 1980.00 WHEN '40212' THEN 6800.00
|
||||
WHEN '50122' THEN 150.00
|
||||
WHEN '60102' THEN 110.00 WHEN '60132' THEN 580.00
|
||||
WHEN '61107' THEN 110.00 WHEN '61117' THEN 170.00 WHEN '61127' THEN 290.00
|
||||
WHEN '61157' THEN 1160.00 WHEN '61187' THEN 3480.00 WHEN '61217' THEN 6960.00
|
||||
WHEN '62128' THEN 320.00 WHEN '62158' THEN 1200.00
|
||||
WHEN '70707' THEN 1000.00 WHEN '70727' THEN 3000.00 WHEN '70747' THEN 5000.00 WHEN '70787' THEN 10000.00
|
||||
ELSE `bp_consumer`
|
||||
END,
|
||||
`bp_state` = CASE `bp_bag_code`
|
||||
WHEN '10202' THEN 0
|
||||
ELSE 1
|
||||
END
|
||||
WHERE `bp_bag_code` IN (
|
||||
'10112','10122','10132','10152','10162','10172','10192','10202',
|
||||
'20172','40152','40182','40212','50122',
|
||||
'60102','60132',
|
||||
'61107','61117','61127','61157','61187','61217',
|
||||
'62128','62158',
|
||||
'70707','70727','70747','70787'
|
||||
)
|
||||
AND `bp_state` = 1
|
||||
AND (`bp_end_date` IS NULL OR `bp_end_date` >= CURDATE());
|
||||
|
||||
-- ----------------------------------------------------------------
|
||||
-- 4) 전체 O종 코드 — 포장 단위 일괄 UPDATE
|
||||
-- ----------------------------------------------------------------
|
||||
UPDATE `packaging_unit` SET
|
||||
`pu_bag_name` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN '일반용 3L' WHEN '10122' THEN '일반용 5L' WHEN '10132' THEN '일반용 10L'
|
||||
WHEN '10152' THEN '일반용 20L' WHEN '10162' THEN '일반용 30L' WHEN '10172' THEN '일반용 50L'
|
||||
WHEN '10192' THEN '일반용 75L' WHEN '10202' THEN '일반용 100L'
|
||||
WHEN '20172' THEN '공공용 50L'
|
||||
WHEN '40152' THEN '공동주택용 20L' WHEN '40182' THEN '공동주택용 60L' WHEN '40212' THEN '공동주택용 120L'
|
||||
WHEN '50122' THEN '재사용 5L'
|
||||
WHEN '60102' THEN '음식물 2L' WHEN '60132' THEN '음식물 10L'
|
||||
WHEN '61107' THEN '음식물 스티커 2L' WHEN '61117' THEN '음식물 스티커 3L' WHEN '61127' THEN '음식물 스티커 5L'
|
||||
WHEN '61157' THEN '음식물 스티커 20L' WHEN '61187' THEN '음식물 스티커 60L' WHEN '61217' THEN '음식물 스티커 120L'
|
||||
WHEN '62128' THEN '음식물용기 5L' WHEN '62158' THEN '음식물용기 20L'
|
||||
WHEN '70707' THEN '폐기물 스티커 1,000원' WHEN '70727' THEN '폐기물 스티커 3,000원'
|
||||
WHEN '70747' THEN '폐기물 스티커 5,000원' WHEN '70787' THEN '폐기물 스티커 10,000원'
|
||||
ELSE `pu_bag_name`
|
||||
END,
|
||||
`pu_pack_per_sheet` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 20 WHEN '10122' THEN 20 WHEN '10132' THEN 10
|
||||
WHEN '10152' THEN 50 WHEN '10162' THEN 50 WHEN '10172' THEN 20
|
||||
WHEN '10192' THEN 10 WHEN '10202' THEN 10
|
||||
WHEN '20172' THEN 20
|
||||
WHEN '40152' THEN 50 WHEN '40182' THEN 20 WHEN '40212' THEN 10
|
||||
WHEN '50122' THEN 20
|
||||
WHEN '60102' THEN 100 WHEN '60132' THEN 50
|
||||
WHEN '61107' THEN 100 WHEN '61117' THEN 100 WHEN '61127' THEN 100
|
||||
WHEN '61157' THEN 50 WHEN '61187' THEN 20 WHEN '61217' THEN 10
|
||||
WHEN '62128' THEN 100 WHEN '62158' THEN 50
|
||||
WHEN '70707' THEN 100 WHEN '70727' THEN 50 WHEN '70747' THEN 20 WHEN '70787' THEN 10
|
||||
ELSE `pu_pack_per_sheet`
|
||||
END,
|
||||
`pu_box_per_pack` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 150 WHEN '10122' THEN 150 WHEN '10132' THEN 200
|
||||
WHEN '10152' THEN 20 WHEN '10162' THEN 6 WHEN '10172' THEN 25
|
||||
WHEN '10192' THEN 30 WHEN '10202' THEN 5
|
||||
WHEN '20172' THEN 25
|
||||
WHEN '40152' THEN 20 WHEN '40182' THEN 10 WHEN '40212' THEN 5
|
||||
WHEN '50122' THEN 150
|
||||
WHEN '60102' THEN 10 WHEN '60132' THEN 10
|
||||
WHEN '61107' THEN 10 WHEN '61117' THEN 10 WHEN '61127' THEN 10
|
||||
WHEN '61157' THEN 10 WHEN '61187' THEN 5 WHEN '61217' THEN 5
|
||||
WHEN '62128' THEN 10 WHEN '62158' THEN 10
|
||||
WHEN '70707' THEN 10 WHEN '70727' THEN 10 WHEN '70747' THEN 10 WHEN '70787' THEN 10
|
||||
ELSE `pu_box_per_pack`
|
||||
END,
|
||||
`pu_total_per_box` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 3000 WHEN '10122' THEN 3000 WHEN '10132' THEN 2000
|
||||
WHEN '10152' THEN 1000 WHEN '10162' THEN 300 WHEN '10172' THEN 500
|
||||
WHEN '10192' THEN 300 WHEN '10202' THEN 50
|
||||
WHEN '20172' THEN 500
|
||||
WHEN '40152' THEN 1000 WHEN '40182' THEN 200 WHEN '40212' THEN 50
|
||||
WHEN '50122' THEN 3000
|
||||
WHEN '60102' THEN 1000 WHEN '60132' THEN 500
|
||||
WHEN '61107' THEN 1000 WHEN '61117' THEN 1000 WHEN '61127' THEN 1000
|
||||
WHEN '61157' THEN 500 WHEN '61187' THEN 100 WHEN '61217' THEN 50
|
||||
WHEN '62128' THEN 1000 WHEN '62158' THEN 500
|
||||
WHEN '70707' THEN 1000 WHEN '70727' THEN 500 WHEN '70747' THEN 200 WHEN '70787' THEN 100
|
||||
ELSE `pu_total_per_box`
|
||||
END,
|
||||
`pu_state` = CASE `pu_bag_code`
|
||||
WHEN '10202' THEN 0
|
||||
ELSE 1
|
||||
END
|
||||
WHERE `pu_bag_code` IN (
|
||||
'10112','10122','10132','10152','10162','10172','10192','10202',
|
||||
'20172','40152','40182','40212','50122',
|
||||
'60102','60132',
|
||||
'61107','61117','61127','61157','61187','61217',
|
||||
'62128','62158',
|
||||
'70707','70727','70747','70787'
|
||||
)
|
||||
AND `pu_state` = 1
|
||||
AND (`pu_end_date` IS NULL OR `pu_end_date` >= CURDATE());
|
||||
13
writable/database/fix_menu_site_reports_links_bag_prefix.sql
Normal file
13
writable/database/fix_menu_site_reports_links_bag_prefix.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
-- 사이트 메뉴(mm_link): admin/reports/* → bag/reports/*
|
||||
-- 라우트는 app/Config/Routes.php 의 bag 그룹(bag/reports/...)만 존재.
|
||||
-- 메뉴 관리(/admin/menus)에는 DB 원문(admin/...)이 보이고,
|
||||
-- 상단 사이트 메뉴는 menu_link_preferred_href_path()가 bag/ 로 바꿔 열어서 불일치가 났음.
|
||||
--
|
||||
-- 실행: mysql ... jongryangje_dev < writable/database/fix_menu_site_reports_links_bag_prefix.sql
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
UPDATE `menu` m
|
||||
INNER JOIN `menu_type` t ON t.`mt_idx` = m.`mt_idx` AND t.`mt_code` = 'site'
|
||||
SET m.`mm_link` = REPLACE(m.`mm_link`, 'admin/reports/', 'bag/reports/')
|
||||
WHERE m.`mm_link` LIKE 'admin/reports/%';
|
||||
@@ -0,0 +1,72 @@
|
||||
-- ================================================================
|
||||
-- 대구 동구청 공식 종량제봉투 포장단위 반영 (가격표 묶음·박스 매수)
|
||||
-- 출처: https://dong.daegu.kr/reserve/contents.do?mid=0302000000
|
||||
--
|
||||
-- | 규격 | 묶음(팩)당 | 박스당 | 박스당 팩 수 (=박스÷묶음) |
|
||||
-- | 3L | 20 | 3,000 | 150 |
|
||||
-- | 10L | 10 | 2,000 | 200 |
|
||||
-- | 20L | (표 미기재) | 1,000 | 50매×20팩 추정 |
|
||||
-- | 50L | (표 미기재) | 500 | 20매×25팩 추정 |
|
||||
-- | 75L | (표 미기재) | 300 | 10매×30팩 추정 |
|
||||
-- 5L·30L: 동구 표에 묶음/박스 미기재 → 3L·20L·50L와 동일 계열로 20매·박스 3,000/300 유지
|
||||
--
|
||||
-- 실행: mysql -u jongryangje -p jongryangje_dev < writable/database/fix_packaging_unit_daegu_donggu_official.sql
|
||||
-- ================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
UPDATE `packaging_unit` SET
|
||||
`pu_pack_per_sheet` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 20
|
||||
WHEN '10122' THEN 20
|
||||
WHEN '10132' THEN 10
|
||||
WHEN '10152' THEN 50
|
||||
WHEN '10162' THEN 50
|
||||
WHEN '10172' THEN 20
|
||||
WHEN '10192' THEN 10
|
||||
WHEN '10202' THEN 10
|
||||
WHEN '20172' THEN 20
|
||||
WHEN '40152' THEN 50
|
||||
WHEN '40182' THEN 20
|
||||
WHEN '40212' THEN 10
|
||||
WHEN '50122' THEN 20
|
||||
ELSE `pu_pack_per_sheet`
|
||||
END,
|
||||
`pu_box_per_pack` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 150
|
||||
WHEN '10122' THEN 150
|
||||
WHEN '10132' THEN 200
|
||||
WHEN '10152' THEN 20
|
||||
WHEN '10162' THEN 6
|
||||
WHEN '10172' THEN 25
|
||||
WHEN '10192' THEN 30
|
||||
WHEN '10202' THEN 5
|
||||
WHEN '20172' THEN 25
|
||||
WHEN '40152' THEN 20
|
||||
WHEN '40182' THEN 10
|
||||
WHEN '40212' THEN 5
|
||||
WHEN '50122' THEN 150
|
||||
ELSE `pu_box_per_pack`
|
||||
END,
|
||||
`pu_total_per_box` = CASE `pu_bag_code`
|
||||
WHEN '10112' THEN 3000
|
||||
WHEN '10122' THEN 3000
|
||||
WHEN '10132' THEN 2000
|
||||
WHEN '10152' THEN 1000
|
||||
WHEN '10162' THEN 300
|
||||
WHEN '10172' THEN 500
|
||||
WHEN '10192' THEN 300
|
||||
WHEN '10202' THEN 50
|
||||
WHEN '20172' THEN 500
|
||||
WHEN '40152' THEN 1000
|
||||
WHEN '40182' THEN 200
|
||||
WHEN '40212' THEN 50
|
||||
WHEN '50122' THEN 3000
|
||||
ELSE `pu_total_per_box`
|
||||
END
|
||||
WHERE `pu_bag_code` IN (
|
||||
'10112','10122','10132','10152','10162','10172','10192','10202',
|
||||
'20172','40152','40182','40212','50122'
|
||||
)
|
||||
AND `pu_state` = 1
|
||||
AND (`pu_end_date` IS NULL OR `pu_end_date` >= CURDATE());
|
||||
70
writable/database/free_recipient_reset_to_screenshot.sql
Normal file
70
writable/database/free_recipient_reset_to_screenshot.sql
Normal file
@@ -0,0 +1,70 @@
|
||||
-- 무료용 대상자 관리 데이터를 스크린샷 형식으로 재구성
|
||||
-- 대상: 대구 북구(lg_code=110209) 우선, 없으면 활성 지자체 최소값
|
||||
-- 실행:
|
||||
-- mysql --default-character-set=utf8mb4 -h 116.122.157.166 -u jongryangje -p jongryangje_dev < writable/database/free_recipient_reset_to_screenshot.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET CHARACTER_SET_CLIENT = utf8mb4;
|
||||
|
||||
SET @lg_idx := COALESCE(
|
||||
(SELECT lg_idx FROM local_government WHERE lg_code = '110209' AND lg_state = 1 LIMIT 1),
|
||||
(SELECT lg_idx FROM local_government WHERE lg_state = 1 ORDER BY lg_idx ASC LIMIT 1)
|
||||
);
|
||||
|
||||
-- 기존 데이터 전체 삭제(해당 지자체)
|
||||
DELETE FROM free_recipient
|
||||
WHERE fr_lg_idx = @lg_idx;
|
||||
|
||||
-- 1) 읍.면.동 사무소 대상(동별 1건)
|
||||
INSERT INTO free_recipient
|
||||
(
|
||||
fr_lg_idx, fr_type_code, fr_name, fr_phone, fr_addr,
|
||||
fr_dong_code, fr_note, fr_end_date, fr_state, fr_regdate
|
||||
)
|
||||
SELECT
|
||||
@lg_idx,
|
||||
'office',
|
||||
d.cd_name,
|
||||
'',
|
||||
'',
|
||||
d.cd_code,
|
||||
'',
|
||||
'9999-12-31',
|
||||
1,
|
||||
NOW()
|
||||
FROM code_detail d
|
||||
INNER JOIN code_kind k ON k.ck_idx = d.cd_ck_idx
|
||||
WHERE k.ck_code = 'D'
|
||||
AND d.cd_state = 1
|
||||
AND (d.cd_lg_idx IS NULL OR d.cd_lg_idx = 0 OR d.cd_lg_idx = @lg_idx)
|
||||
AND d.cd_code <> ''
|
||||
ORDER BY d.cd_code;
|
||||
|
||||
-- 2) 무료 대상자(스크린샷 하단 항목)
|
||||
INSERT INTO free_recipient
|
||||
(
|
||||
fr_lg_idx, fr_type_code, fr_name, fr_phone, fr_addr,
|
||||
fr_dong_code, fr_note, fr_end_date, fr_state, fr_regdate
|
||||
)
|
||||
SELECT
|
||||
@lg_idx,
|
||||
'target',
|
||||
t.fr_name,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'9999-12-31',
|
||||
1,
|
||||
NOW()
|
||||
FROM (
|
||||
SELECT '한강관리과' AS fr_name
|
||||
UNION ALL SELECT '항무과'
|
||||
UNION ALL SELECT '도시시설기획과'
|
||||
UNION ALL SELECT '국민복지과'
|
||||
UNION ALL SELECT '자원순환과'
|
||||
UNION ALL SELECT '교통과'
|
||||
UNION ALL SELECT '대구시설과'
|
||||
UNION ALL SELECT '공지인격과'
|
||||
UNION ALL SELECT '재무과'
|
||||
) t;
|
||||
79
writable/database/free_recipient_seed_from_screenshot.sql
Normal file
79
writable/database/free_recipient_seed_from_screenshot.sql
Normal file
@@ -0,0 +1,79 @@
|
||||
-- 무료용 대상자 관리(스크린샷형) 데이터 반영
|
||||
-- 실행 예:
|
||||
-- mysql --default-character-set=utf8mb4 -h 116.122.157.166 -u jongryangje -p jongryangje_dev < writable/database/free_recipient_seed_from_screenshot.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET CHARACTER_SET_CLIENT = utf8mb4;
|
||||
|
||||
-- 대상 지자체: 대구 북구(lg_code=110209) 우선, 없으면 최소 활성 lg_idx
|
||||
SET @lg_idx := COALESCE(
|
||||
(SELECT lg_idx FROM local_government WHERE lg_code = '110209' AND lg_state = 1 LIMIT 1),
|
||||
(SELECT lg_idx FROM local_government WHERE lg_state = 1 ORDER BY lg_idx ASC LIMIT 1)
|
||||
);
|
||||
|
||||
-- 1) 동사무소(기관) 대상: 해당 지자체 동코드(D) 전체를 기본 등록
|
||||
INSERT INTO free_recipient
|
||||
(
|
||||
fr_lg_idx, fr_type_code, fr_name, fr_phone, fr_addr,
|
||||
fr_dong_code, fr_note, fr_end_date, fr_state, fr_regdate
|
||||
)
|
||||
SELECT
|
||||
@lg_idx,
|
||||
'office',
|
||||
'읍.면.동 사무소',
|
||||
'',
|
||||
'',
|
||||
d.cd_code,
|
||||
d.cd_name,
|
||||
'9999-12-31',
|
||||
1,
|
||||
NOW()
|
||||
FROM code_detail d
|
||||
INNER JOIN code_kind k ON k.ck_idx = d.cd_ck_idx
|
||||
WHERE k.ck_code = 'D'
|
||||
AND d.cd_state = 1
|
||||
AND (d.cd_lg_idx IS NULL OR d.cd_lg_idx = @lg_idx)
|
||||
AND d.cd_code <> ''
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM free_recipient f
|
||||
WHERE f.fr_lg_idx = @lg_idx
|
||||
AND f.fr_type_code = 'office'
|
||||
AND f.fr_dong_code = d.cd_code
|
||||
);
|
||||
|
||||
-- 2) 무료 대상자(기관/부서) 샘플: 스크린샷 하단 형태 반영
|
||||
INSERT INTO free_recipient
|
||||
(
|
||||
fr_lg_idx, fr_type_code, fr_name, fr_phone, fr_addr,
|
||||
fr_dong_code, fr_note, fr_end_date, fr_state, fr_regdate
|
||||
)
|
||||
SELECT
|
||||
@lg_idx,
|
||||
'target',
|
||||
t.fr_name,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'스크린샷형 기본 데이터',
|
||||
'9999-12-31',
|
||||
1,
|
||||
NOW()
|
||||
FROM (
|
||||
SELECT '한강관리과' AS fr_name
|
||||
UNION ALL SELECT '항무과'
|
||||
UNION ALL SELECT '도시시설기획과'
|
||||
UNION ALL SELECT '국민복지과'
|
||||
UNION ALL SELECT '자원순환과'
|
||||
UNION ALL SELECT '교통과'
|
||||
UNION ALL SELECT '대구시설과'
|
||||
UNION ALL SELECT '공지인격과'
|
||||
UNION ALL SELECT '재무과'
|
||||
) t
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM free_recipient f
|
||||
WHERE f.fr_lg_idx = @lg_idx
|
||||
AND f.fr_type_code = 'target'
|
||||
AND f.fr_name = t.fr_name
|
||||
);
|
||||
@@ -0,0 +1,22 @@
|
||||
-- ============================================
|
||||
-- 실사 팩 스냅샷 테이블
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_inventory_inspection_pack_snapshot` (
|
||||
`bisp_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bisp_bisi_idx` INT UNSIGNED NOT NULL COMMENT 'bag_inventory_inspection_item FK',
|
||||
`bisp_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bisp_bag_code` VARCHAR(50) NOT NULL,
|
||||
`bisp_box_code` VARCHAR(80) NOT NULL DEFAULT '',
|
||||
`bisp_pack_code` VARCHAR(80) NOT NULL,
|
||||
`bisp_sheet_start_code` VARCHAR(120) NOT NULL,
|
||||
`bisp_sheet_end_code` VARCHAR(120) NOT NULL,
|
||||
`bisp_sheet_qty` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`bisp_actual_qty` INT UNSIGNED NULL DEFAULT NULL,
|
||||
`bisp_diff_qty` INT NOT NULL DEFAULT 0,
|
||||
`bisp_checked_yn` CHAR(1) NOT NULL DEFAULT 'N',
|
||||
`bisp_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`bisp_idx`),
|
||||
UNIQUE KEY `uk_bisp_item_pack` (`bisp_bisi_idx`, `bisp_pack_code`),
|
||||
KEY `idx_bisp_item` (`bisp_bisi_idx`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='실사 팩 스냅샷';
|
||||
@@ -0,0 +1,19 @@
|
||||
-- ============================================
|
||||
-- 실사 낱장 스냅샷 테이블
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_inventory_inspection_sheet_snapshot` (
|
||||
`biss_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`biss_bisi_idx` INT UNSIGNED NOT NULL COMMENT 'bag_inventory_inspection_item FK',
|
||||
`biss_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`biss_pack_code` VARCHAR(80) NOT NULL,
|
||||
`biss_sheet_code` VARCHAR(120) NOT NULL,
|
||||
`biss_system_qty` INT UNSIGNED NOT NULL DEFAULT 1,
|
||||
`biss_actual_qty` INT UNSIGNED NULL DEFAULT NULL,
|
||||
`biss_diff_qty` INT NOT NULL DEFAULT 0,
|
||||
`biss_checked_yn` CHAR(1) NOT NULL DEFAULT 'N',
|
||||
`biss_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`biss_idx`),
|
||||
UNIQUE KEY `uk_biss_item_sheet` (`biss_bisi_idx`,`biss_sheet_code`),
|
||||
KEY `idx_biss_item_pack` (`biss_bisi_idx`,`biss_pack_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='실사 낱장 스냅샷';
|
||||
29
writable/database/inventory_inspection_tables.sql
Normal file
29
writable/database/inventory_inspection_tables.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- ============================================
|
||||
-- 실사(재고 실물조사) 테이블
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_inventory_inspection` (
|
||||
`bis_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bis_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bis_work_date` DATE NOT NULL,
|
||||
`bis_status` VARCHAR(20) NOT NULL DEFAULT 'selected' COMMENT 'selected/counted/applied',
|
||||
`bis_reg_mb_idx` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`bis_regdate` DATETIME NOT NULL,
|
||||
`bis_moddate` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`bis_idx`),
|
||||
KEY `idx_bis_lg_work` (`bis_lg_idx`, `bis_work_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='실사 작업 헤더';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_inventory_inspection_item` (
|
||||
`bisi_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bisi_bis_idx` INT UNSIGNED NOT NULL,
|
||||
`bisi_bag_code` VARCHAR(50) NOT NULL,
|
||||
`bisi_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`bisi_system_qty` INT NOT NULL DEFAULT 0,
|
||||
`bisi_actual_qty` INT NULL DEFAULT NULL,
|
||||
`bisi_diff_qty` INT NOT NULL DEFAULT 0,
|
||||
`bisi_has_barcode` CHAR(1) NOT NULL DEFAULT 'Y',
|
||||
`bisi_apply_yn` CHAR(1) NOT NULL DEFAULT 'N',
|
||||
PRIMARY KEY (`bisi_idx`),
|
||||
KEY `idx_bisi_bis` (`bisi_bis_idx`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='실사 작업 품목';
|
||||
66
writable/database/manager_remote_realistic_update.sql
Normal file
66
writable/database/manager_remote_realistic_update.sql
Normal file
@@ -0,0 +1,66 @@
|
||||
-- =============================================================================
|
||||
-- 담당자(manager) 원격/운영 DB 보정 스크립트
|
||||
-- =============================================================================
|
||||
-- 목적
|
||||
-- - 앱에서 사용하는 담당자 구분값(mg_dept_code): company | district | agency
|
||||
-- - 테스트용처럼 보이지 않도록 성명·전화·이메일·직위코드를 현실적인 형태로 정리
|
||||
--
|
||||
-- 실행 전
|
||||
-- 1) 반드시 백업(또는 스테이징 DB에서 먼저 검증)
|
||||
-- 2) 아래 @LG_IDX 를 운영 지자체 PK로 맞추거나, 전체 지자체에 적용하려면 NULL 로 둠
|
||||
--
|
||||
-- 사용 예 (MySQL 클라이언트)
|
||||
-- mysql -h HOST -u USER -p DBNAME < writable/database/manager_remote_realistic_update.sql
|
||||
--
|
||||
-- 주의
|
||||
-- - 이 스크립트는 **기존 manager 행을 UPDATE** 합니다(INSERT 아님).
|
||||
-- - mg_position_code 는 기존 시드에서 쓰던 직위 코드(1,2,3,5,6)를 순환 배정합니다.
|
||||
-- 운영 DB에 해당 code_detail(T) 코드가 없다면 직위 셀렉트가 비어 보일 수 있으니, 그 경우 직위 UPDATE 블록만 주석 처리하세요.
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 적용 대상 지자체: 예) 대구 시범 lg_idx=1 이면 1 / 전체 적용이면 NULL
|
||||
SET @LG_IDX := NULL;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 1) 카테고리(담당자 구분) 부여: mg_idx 기준으로 3종 순환
|
||||
-- ---------------------------------------------------------------------------
|
||||
UPDATE `manager` m
|
||||
SET m.`mg_dept_code` = ELT(MOD(m.`mg_idx`, 3) + 1, 'company', 'district', 'agency')
|
||||
WHERE m.`mg_state` = 1
|
||||
AND (@LG_IDX IS NULL OR m.`mg_lg_idx` = @LG_IDX);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 2) 성명/전화/이메일/직위: mg_idx 기반으로 일관되게 생성(완전 난수 아님)
|
||||
-- ---------------------------------------------------------------------------
|
||||
UPDATE `manager` m
|
||||
SET
|
||||
m.`mg_name` = ELT(
|
||||
MOD(m.`mg_idx`, 18) + 1,
|
||||
'김민환', '이서연', '박지훈', '최유진', '정다운', '한채원',
|
||||
'오승우', '윤가람', '강도현', '임하늘', '조은별', '배시현',
|
||||
'문태영', '신재원', '홍수진', '권도영', '안예린', '유재혁'
|
||||
),
|
||||
m.`mg_tel` = CONCAT(
|
||||
'053-661-',
|
||||
LPAD(300 + MOD(m.`mg_idx`, 700), 4, '0')
|
||||
),
|
||||
m.`mg_phone` = CONCAT(
|
||||
'010-',
|
||||
LPAD(2000 + MOD(m.`mg_idx` * 7, 7999), 4, '0'),
|
||||
'-',
|
||||
LPAD(3000 + MOD(m.`mg_idx` * 11, 7999), 4, '0')
|
||||
),
|
||||
m.`mg_email` = CONCAT('waste.mgr.', m.`mg_idx`, '@daegu.go.kr'),
|
||||
m.`mg_position_code` = ELT(MOD(m.`mg_idx`, 5) + 1, '1', '2', '3', '5', '6')
|
||||
WHERE m.`mg_state` = 1
|
||||
AND (@LG_IDX IS NULL OR m.`mg_lg_idx` = @LG_IDX);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 3) 확인용 SELECT (실행 후 결과 점검)
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- SELECT mg_idx, mg_lg_idx, mg_dept_code, mg_name, mg_position_code, mg_tel, mg_phone, mg_email
|
||||
-- FROM manager
|
||||
-- WHERE mg_state = 1 AND (@LG_IDX IS NULL OR mg_lg_idx = @LG_IDX)
|
||||
-- ORDER BY mg_lg_idx, mg_idx;
|
||||
14
writable/database/menu_analytics_links.sql
Normal file
14
writable/database/menu_analytics_links.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
-- 통계 분석 관리 하위 메뉴 링크 (스크린샷 3종)
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/menu_analytics_links.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
UPDATE `menu` m
|
||||
INNER JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
|
||||
SET m.mm_link = CASE m.mm_name
|
||||
WHEN '전년 대비 판매 분석' THEN 'bag/analytics/year-over-year'
|
||||
WHEN '월별 판매 추이 분석' THEN 'bag/analytics/monthly-trend'
|
||||
WHEN '계절별 판매 추이 분석' THEN 'bag/analytics/seasonal-trend'
|
||||
ELSE m.mm_link
|
||||
END
|
||||
WHERE m.mm_name IN ('전년 대비 판매 분석', '월별 판매 추이 분석', '계절별 판매 추이 분석');
|
||||
11
writable/database/menu_link_lot_seed_issue.sql
Normal file
11
writable/database/menu_link_lot_seed_issue.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- LOT-No 디스켓 불출 소메뉴 링크 보정
|
||||
-- 실행:
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/menu_link_lot_seed_issue.sql
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET CHARACTER_SET_CLIENT = utf8mb4;
|
||||
|
||||
UPDATE `menu` m
|
||||
INNER JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
|
||||
SET m.mm_link = 'bag/order/lot-seed'
|
||||
WHERE m.mm_name = 'LOT-No 디스켓 불출';
|
||||
@@ -26,7 +26,8 @@ SET m.mm_link = CASE m.mm_name
|
||||
WHEN '환경 설정' THEN 'dashboard'
|
||||
WHEN '지정 판매소 현황' THEN 'bag/designated-shops/district-new-cancel'
|
||||
WHEN '발주 등록' THEN 'bag/order/create'
|
||||
WHEN '발주 변경' THEN 'bag/bag-orders'
|
||||
WHEN '발주 변경' THEN 'bag/order/change'
|
||||
WHEN 'LOT-No 디스켓 불출' THEN 'bag/order/lot-seed'
|
||||
WHEN '발주 현황' THEN 'bag/bag-orders'
|
||||
WHEN '발주 입고[스캐너]' THEN 'bag/receiving/create'
|
||||
WHEN '입고 현황' THEN 'bag/bag-receivings'
|
||||
@@ -34,7 +35,7 @@ SET m.mm_link = CASE m.mm_name
|
||||
WHEN '무료용 불출 처리' THEN 'bag/issue/create'
|
||||
WHEN '무료용 불출 취소' THEN 'bag/issue'
|
||||
WHEN '재고 현황' THEN 'bag/inventory'
|
||||
WHEN '실사 관리' THEN 'bag/inventory/adjust'
|
||||
WHEN '실사 선별 조회' THEN 'bag/inventory/inspection-select'
|
||||
WHEN '전화 접수' THEN 'bag/shop-orders'
|
||||
WHEN '전화 접수 관리' THEN 'bag/shop-orders'
|
||||
WHEN '지정 판매소 판매' THEN 'bag/sale/create'
|
||||
@@ -57,9 +58,9 @@ SET m.mm_link = CASE m.mm_name
|
||||
WHEN '반품/파기 현황' THEN 'bag/reports/returns'
|
||||
WHEN '쓰레기 봉투 수급 계획' THEN 'bag/reports/supply-demand'
|
||||
WHEN 'LOT 수불 조회' THEN 'bag/reports/lot-flow'
|
||||
WHEN '전년 대비 판매 분석' THEN 'bag/analytics'
|
||||
WHEN '월별 판매 추이 분석' THEN 'bag/analytics'
|
||||
WHEN '계절별 판매 추이 분석' THEN 'bag/analytics'
|
||||
WHEN '전년 대비 판매 분석' THEN 'bag/analytics/year-over-year'
|
||||
WHEN '월별 판매 추이 분석' THEN 'bag/analytics/monthly-trend'
|
||||
WHEN '계절별 판매 추이 분석' THEN 'bag/analytics/seasonal-trend'
|
||||
WHEN '도움말 항목' THEN 'bag/help'
|
||||
WHEN '원격 요청' THEN 'bag/help'
|
||||
WHEN 'pda 리셋' THEN 'bag/help'
|
||||
|
||||
20
writable/database/menu_site_prune_inventory_submenus.sql
Normal file
20
writable/database/menu_site_prune_inventory_submenus.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- 재고 관리 하위 메뉴 정리:
|
||||
-- "재고 현황", "실사 선별 조회"를 제외한 항목 제거
|
||||
--
|
||||
-- 실행:
|
||||
-- mysql --default-character-set=utf8mb4 -u ... -p DBNAME < writable/database/menu_site_prune_inventory_submenus.sql
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
DELETE m
|
||||
FROM menu m
|
||||
INNER JOIN menu p
|
||||
ON p.mm_idx = m.mm_pidx
|
||||
INNER JOIN menu_type t
|
||||
ON t.mt_idx = m.mt_idx
|
||||
WHERE t.mt_code = 'site'
|
||||
AND p.mm_name IN ('재고 관리', '재고관리')
|
||||
AND m.mm_link NOT IN ('bag/inventory', 'bag/inventory/inspection-select');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -82,7 +82,8 @@ INSERT INTO menu (mt_idx, lg_idx, mm_name, mm_link, mm_pidx, mm_dep, mm_num, mm_
|
||||
SELECT @mt_site, 1, t.mm_name,
|
||||
CASE t.mm_name
|
||||
WHEN '발주 등록' THEN 'bag/order/create'
|
||||
WHEN '발주 변경' THEN 'bag/bag-orders'
|
||||
WHEN '발주 변경' THEN 'bag/order/change'
|
||||
WHEN 'LOT-No 디스켓 불출' THEN 'bag/order/lot-seed'
|
||||
WHEN '발주 현황' THEN 'bag/bag-orders'
|
||||
WHEN '발주 입고[스캐너]' THEN 'bag/receiving/create'
|
||||
WHEN '입고 현황' THEN 'bag/bag-receivings'
|
||||
@@ -148,20 +149,13 @@ INSERT INTO menu (mt_idx, lg_idx, mm_name, mm_link, mm_pidx, mm_dep, mm_num, mm_
|
||||
SELECT @mt_site, 1, t.mm_name,
|
||||
CASE t.mm_name
|
||||
WHEN '재고 현황' THEN 'bag/inventory'
|
||||
WHEN '실사 관리' THEN 'bag/inventory/adjust'
|
||||
WHEN '실사 선별 조회' THEN 'bag/inventory/inspection-select'
|
||||
ELSE ''
|
||||
END,
|
||||
@parent_inventory, 1, t.mm_num, 0, '', 'Y'
|
||||
FROM (
|
||||
SELECT 0 AS mm_num, '재고 현황' AS mm_name UNION ALL
|
||||
SELECT 1, '실사 관리' UNION ALL
|
||||
SELECT 2, '실사 선별' UNION ALL
|
||||
SELECT 3, '실사 선별 조회' UNION ALL
|
||||
SELECT 4, '실사 등록' UNION ALL
|
||||
SELECT 5, '실사 재고 조회' UNION ALL
|
||||
SELECT 6, '실사 오류 조회' UNION ALL
|
||||
SELECT 7, '실사 선별 취소' UNION ALL
|
||||
SELECT 8, '실사 등록 취소'
|
||||
SELECT 1, '실사 선별 조회'
|
||||
) AS t
|
||||
WHERE @parent_inventory IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
@@ -298,9 +292,9 @@ SET @parent_analytics := (
|
||||
INSERT INTO menu (mt_idx, lg_idx, mm_name, mm_link, mm_pidx, mm_dep, mm_num, mm_cnode, mm_level, mm_is_view)
|
||||
SELECT @mt_site, 1, t.mm_name,
|
||||
CASE t.mm_name
|
||||
WHEN '전년 대비 판매 분석' THEN 'bag/analytics'
|
||||
WHEN '월별 판매 추이 분석' THEN 'bag/analytics'
|
||||
WHEN '계절별 판매 추이 분석' THEN 'bag/analytics'
|
||||
WHEN '전년 대비 판매 분석' THEN 'bag/analytics/year-over-year'
|
||||
WHEN '월별 판매 추이 분석' THEN 'bag/analytics/monthly-trend'
|
||||
WHEN '계절별 판매 추이 분석' THEN 'bag/analytics/seasonal-trend'
|
||||
ELSE ''
|
||||
END,
|
||||
@parent_analytics, 1, t.mm_num, 0, '', 'Y'
|
||||
|
||||
@@ -18,7 +18,7 @@ FROM (
|
||||
SELECT 4, '판매 관리', 'bag/sales' UNION ALL
|
||||
SELECT 5, '판매 현황', 'bag/sales-stats' UNION ALL
|
||||
SELECT 6, '봉투 수불 관리', 'bag/flow' UNION ALL
|
||||
SELECT 7, '통계 분석 관리', 'bag/analytics' UNION ALL
|
||||
SELECT 7, '통계 분석 관리', 'bag/analytics/year-over-year' UNION ALL
|
||||
SELECT 8, '창', 'bag/window' UNION ALL
|
||||
SELECT 9, '도움말', 'bag/help'
|
||||
) AS t
|
||||
|
||||
@@ -14,13 +14,18 @@ CREATE TABLE IF NOT EXISTS `bag_order` (
|
||||
`bo_agency_idx` INT UNSIGNED NULL COMMENT '입고처(대행소) FK (sales_agency)',
|
||||
`bo_fee_rate` DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '수수료율(%)',
|
||||
`bo_order_date` DATE NOT NULL COMMENT '발주일',
|
||||
`bo_bag_types` TEXT NULL COMMENT '봉투 종류 목록(JSON)',
|
||||
`bo_unit_prices` TEXT NULL COMMENT '발주 단가 목록(JSON)',
|
||||
`bo_qty_boxes` TEXT NULL COMMENT '발주 박스 수량 목록(JSON)',
|
||||
`bo_lot_no` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'LOT 번호',
|
||||
`bo_hash` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA-256 해시',
|
||||
`bo_status` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled/deleted',
|
||||
`bo_orderer_idx` INT UNSIGNED NULL COMMENT '발주자 mb_idx',
|
||||
`bo_regdate` DATETIME NOT NULL,
|
||||
`bo_moddate` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`bo_idx`),
|
||||
`bo_regdate` DATETIME NOT NULL COMMENT '등록일시',
|
||||
`bo_moddate` DATETIME NULL DEFAULT NULL COMMENT '수정일시',
|
||||
PRIMARY KEY (`bo_uuid`, `bo_version`),
|
||||
-- 코드/화면 로직은 bo_idx(숫자 PK)로 조회/취소/삭제하고 있어, bo_idx도 유니크로 유지한다.
|
||||
UNIQUE KEY `uk_bo_idx` (`bo_idx`),
|
||||
UNIQUE KEY `uk_bo_uuid_ver` (`bo_uuid`, `bo_version`),
|
||||
KEY `idx_bo_lg_idx` (`bo_lg_idx`),
|
||||
KEY `idx_bo_status` (`bo_status`),
|
||||
|
||||
23
writable/database/receiving_pack_code_tables.sql
Normal file
23
writable/database/receiving_pack_code_tables.sql
Normal file
@@ -0,0 +1,23 @@
|
||||
-- ============================================
|
||||
-- 입고 팩/낱장 코드 테이블
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_receiving_pack_code` (
|
||||
`brpc_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`brpc_br_idx` INT UNSIGNED NOT NULL COMMENT 'bag_receiving FK',
|
||||
`brpc_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`brpc_bag_code` VARCHAR(50) NOT NULL,
|
||||
`brpc_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`brpc_lot_no` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`brpc_box_code` VARCHAR(80) NOT NULL DEFAULT '',
|
||||
`brpc_pack_code` VARCHAR(80) NOT NULL,
|
||||
`brpc_sheet_start_code` VARCHAR(120) NOT NULL,
|
||||
`brpc_sheet_end_code` VARCHAR(120) NOT NULL,
|
||||
`brpc_sheet_qty` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`brpc_state` VARCHAR(20) NOT NULL DEFAULT 'in_stock',
|
||||
`brpc_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`brpc_idx`),
|
||||
UNIQUE KEY `uk_brpc_pack_code` (`brpc_pack_code`),
|
||||
KEY `idx_brpc_br_idx` (`brpc_br_idx`),
|
||||
KEY `idx_brpc_lg_bag` (`brpc_lg_idx`, `brpc_bag_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='입고 팩/낱장 코드';
|
||||
@@ -11,6 +11,7 @@ CREATE TABLE IF NOT EXISTS `shop_order` (
|
||||
`so_order_date` DATE NOT NULL COMMENT '접수일',
|
||||
`so_delivery_date` DATE NULL COMMENT '배달일',
|
||||
`so_payment_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '이체/가상계좌',
|
||||
`so_channel` VARCHAR(20) NOT NULL DEFAULT 'phone' COMMENT '접수채널 phone/web/app/counter',
|
||||
`so_paid` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입금여부 1=예',
|
||||
`so_received` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '수령여부 1=예',
|
||||
`so_total_qty` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
@@ -20,7 +21,8 @@ CREATE TABLE IF NOT EXISTS `shop_order` (
|
||||
`so_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`so_idx`),
|
||||
KEY `idx_so_lg_idx` (`so_lg_idx`),
|
||||
KEY `idx_so_ds_idx` (`so_ds_idx`)
|
||||
KEY `idx_so_ds_idx` (`so_ds_idx`),
|
||||
KEY `idx_so_lg_order_channel` (`so_lg_idx`, `so_order_date`, `so_channel`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='주문 접수';
|
||||
|
||||
-- 주문 상세
|
||||
@@ -79,3 +81,19 @@ CREATE TABLE IF NOT EXISTS `bag_issue` (
|
||||
KEY `idx_bi2_lg_idx` (`bi2_lg_idx`),
|
||||
KEY `idx_bi2_date` (`bi2_issue_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `bag_issue_item_code` (
|
||||
`bic_idx` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bic_lg_idx` INT UNSIGNED NOT NULL,
|
||||
`bic_bi2_idx` INT UNSIGNED NOT NULL COMMENT 'bag_issue.bi2_idx',
|
||||
`bic_bag_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '봉투 종류 코드',
|
||||
`bic_issue_code` VARCHAR(80) NOT NULL DEFAULT '' COMMENT '불출 품목 코드',
|
||||
`bic_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '원수량(낱장)',
|
||||
`bic_cancel_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '취소수량(낱장)',
|
||||
`bic_state` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled',
|
||||
`bic_regdate` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`bic_idx`),
|
||||
KEY `idx_bic_lg_idx` (`bic_lg_idx`),
|
||||
KEY `idx_bic_bi2_idx` (`bic_bi2_idx`),
|
||||
KEY `idx_bic_issue_code` (`bic_issue_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출 품목코드 상세';
|
||||
|
||||
@@ -62,43 +62,45 @@ INSERT INTO `free_recipient` (`fr_lg_idx`, `fr_type_code`, `fr_name`, `fr_phone`
|
||||
(@LG_IDX, '4', '봉덕종합사회복지관', '053-664-7000', '대구 남구 봉덕로 120', '11020403', '복지시설 30L 150매/월', NULL, 1, NOW());
|
||||
|
||||
-- ================================================================
|
||||
-- 6. 봉투 단가 (bag_price) — 남구 주요 봉투 현행 단가
|
||||
-- 6. 봉투 단가 (bag_price) — 대구시 공식 판매가 2024.7.1 기준
|
||||
-- https://www.daegu.go.kr/env/index.do?menu_id=00001325
|
||||
-- 발주단가≈판매가20%, 도매가≈판매가93%
|
||||
-- ================================================================
|
||||
INSERT INTO `bag_price` (`bp_lg_idx`, `bp_bag_code`, `bp_bag_name`, `bp_order_price`, `bp_wholesale`, `bp_consumer`, `bp_start_date`, `bp_end_date`, `bp_state`, `bp_regdate`) VALUES
|
||||
(@LG_IDX, '10112', '일반용 3L', 25.00, 60.00, 80.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10122', '일반용 5L', 35.00, 100.00, 130.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10132', '일반용 10L', 60.00, 190.00, 250.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10152', '일반용 20L', 100.00, 370.00, 490.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10162', '일반용 30L', 140.00, 540.00, 710.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10172', '일반용 50L', 210.00, 860.00, 1130.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10192', '일반용 75L', 300.00, 1280.00, 1690.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10202', '일반용 100L', 380.00, 1700.00, 2250.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60102', '음식물 2L', 18.00, 50.00, 60.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60132', '음식물 10L', 70.00, 210.00, 280.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '40152', '공동주택용 20L', 90.00, 350.00, 460.00, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '20172', '공공용 50L', 180.00, 700.00, 0.00, '2025-01-01', NULL, 1, NOW());
|
||||
(@LG_IDX, '10112', '일반용 3L', 24.00, 112.00, 120.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10122', '일반용 5L', 36.00, 167.00, 180.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10132', '일반용 10L', 68.00, 316.00, 340.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10152', '일반용 20L', 134.00, 623.00, 670.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10162', '일반용 30L', 216.00, 1004.00, 1080.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10172', '일반용 50L', 332.00, 1544.00, 1660.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10192', '일반용 75L', 494.00, 2297.00, 2470.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10202', '일반용 100L', 0.00, 0.00, 0.00, '2024-07-01', NULL, 0, NOW()),
|
||||
(@LG_IDX, '60102', '음식물 2L', 22.00, 102.00, 110.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60132', '음식물 10L', 116.00, 539.00, 580.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '40152', '공동주택용 20L', 128.00, 596.00, 640.00, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '20172', '공공용 50L', 332.00, 1544.00, 1660.00, '2024-07-01', NULL, 1, NOW());
|
||||
|
||||
-- 이전 단가 (2024년, 만료)
|
||||
-- 이전 단가 (2024.7.1 인상 전, 만료)
|
||||
INSERT INTO `bag_price` (`bp_lg_idx`, `bp_bag_code`, `bp_bag_name`, `bp_order_price`, `bp_wholesale`, `bp_consumer`, `bp_start_date`, `bp_end_date`, `bp_state`, `bp_regdate`) VALUES
|
||||
(@LG_IDX, '10152', '일반용 20L', 95.00, 350.00, 460.00, '2024-01-01', '2024-12-31', 0, '2024-01-01'),
|
||||
(@LG_IDX, '10172', '일반용 50L', 200.00, 820.00, 1080.00, '2024-01-01', '2024-12-31', 0, '2024-01-01');
|
||||
(@LG_IDX, '10152', '일반용 20L', 120.00, 560.00, 600.00, '2023-01-01', '2024-06-30', 0, '2023-01-01'),
|
||||
(@LG_IDX, '10172', '일반용 50L', 300.00, 1400.00, 1500.00, '2023-01-01', '2024-06-30', 0, '2023-01-01');
|
||||
|
||||
-- ================================================================
|
||||
-- 7. 포장 단위 (packaging_unit) — 주요 봉투
|
||||
-- 7. 포장 단위 (packaging_unit) — 대구 동구청 가격표 묶음·박스 매수 (일반 3L=20매/팩·3000매/박스 등)
|
||||
-- ================================================================
|
||||
INSERT INTO `packaging_unit` (`pu_lg_idx`, `pu_bag_code`, `pu_bag_name`, `pu_box_per_pack`, `pu_pack_per_sheet`, `pu_total_per_box`, `pu_start_date`, `pu_end_date`, `pu_state`, `pu_regdate`) VALUES
|
||||
(@LG_IDX, '10112', '일반용 3L', 20, 50, 1000, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10122', '일반용 5L', 20, 50, 1000, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10132', '일반용 10L', 10, 50, 500, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10152', '일반용 20L', 10, 50, 500, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10162', '일반용 30L', 10, 30, 300, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10172', '일반용 50L', 10, 20, 200, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10192', '일반용 75L', 5, 20, 100, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10202', '일반용 100L', 5, 10, 50, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60102', '음식물 2L', 20, 50, 1000, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60132', '음식물 10L', 10, 50, 500, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '40152', '공동주택용 20L', 10, 50, 500, '2025-01-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '20172', '공공용 50L', 10, 20, 200, '2025-01-01', NULL, 1, NOW());
|
||||
(@LG_IDX, '10112', '일반용 3L', 150, 20, 3000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10122', '일반용 5L', 150, 20, 3000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10132', '일반용 10L', 200, 10, 2000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10152', '일반용 20L', 20, 50, 1000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10162', '일반용 30L', 6, 50, 300, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10172', '일반용 50L', 25, 20, 500, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10192', '일반용 75L', 30, 10, 300, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '10202', '일반용 100L', 5, 10, 50, '2024-07-01', NULL, 0, NOW()),
|
||||
(@LG_IDX, '60102', '음식물 2L', 10, 100, 1000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '60132', '음식물 10L', 10, 50, 500, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '40152', '공동주택용 20L', 20, 50, 1000, '2024-07-01', NULL, 1, NOW()),
|
||||
(@LG_IDX, '20172', '공공용 50L', 25, 20, 500, '2024-07-01', NULL, 1, NOW());
|
||||
|
||||
-- ================================================================
|
||||
-- 8. 발주 (bag_order + bag_order_item) — 2025~2026 분기별 발주
|
||||
@@ -111,39 +113,39 @@ INSERT INTO `bag_order` (`bo_uuid`, `bo_version`, `bo_lg_idx`, `bo_gugun_code`,
|
||||
(UUID(), 1, @LG_IDX, '110204', '', @CO1, @AG1, 3.50, '2025-01-15', 'LOT-2025-Q1-001', SHA2(UUID(), 256), 'normal', '2025-01-15 09:00:00');
|
||||
SET @BO1 = LAST_INSERT_ID();
|
||||
INSERT INTO `bag_order_item` (`boi_bo_idx`, `boi_bag_code`, `boi_bag_name`, `boi_unit_price`, `boi_qty_box`, `boi_qty_sheet`, `boi_amount`) VALUES
|
||||
(@BO1, '10152', '일반용 20L', 100.00, 200, 100000, 10000000.00),
|
||||
(@BO1, '10172', '일반용 50L', 210.00, 80, 16000, 3360000.00),
|
||||
(@BO1, '10132', '일반용 10L', 60.00, 100, 50000, 3000000.00),
|
||||
(@BO1, '60102', '음식물 2L', 18.00, 150, 150000, 2700000.00);
|
||||
(@BO1, '10152', '일반용 20L', 134.00, 200, 100000, 13400000.00),
|
||||
(@BO1, '10172', '일반용 50L', 332.00, 80, 16000, 5312000.00),
|
||||
(@BO1, '10132', '일반용 10L', 68.00, 100, 50000, 3400000.00),
|
||||
(@BO1, '60102', '음식물 2L', 22.00, 150, 150000, 3300000.00);
|
||||
|
||||
-- 2025 Q2 발주
|
||||
INSERT INTO `bag_order` (`bo_uuid`, `bo_version`, `bo_lg_idx`, `bo_gugun_code`, `bo_dong_code`, `bo_company_idx`, `bo_agency_idx`, `bo_fee_rate`, `bo_order_date`, `bo_lot_no`, `bo_hash`, `bo_status`, `bo_regdate`) VALUES
|
||||
(UUID(), 1, @LG_IDX, '110204', '', @CO1, @AG1, 3.50, '2025-04-10', 'LOT-2025-Q2-001', SHA2(UUID(), 256), 'normal', '2025-04-10 09:00:00');
|
||||
SET @BO2 = LAST_INSERT_ID();
|
||||
INSERT INTO `bag_order_item` (`boi_bo_idx`, `boi_bag_code`, `boi_bag_name`, `boi_unit_price`, `boi_qty_box`, `boi_qty_sheet`, `boi_amount`) VALUES
|
||||
(@BO2, '10152', '일반용 20L', 100.00, 250, 125000, 12500000.00),
|
||||
(@BO2, '10172', '일반용 50L', 210.00, 100, 20000, 4200000.00),
|
||||
(@BO2, '10162', '일반용 30L', 140.00, 60, 18000, 2520000.00);
|
||||
(@BO2, '10152', '일반용 20L', 134.00, 340, 125000, 16750000.00),
|
||||
(@BO2, '10172', '일반용 50L', 332.00, 100, 20000, 6640000.00),
|
||||
(@BO2, '10162', '일반용 30L', 216.00, 60, 18000, 3888000.00);
|
||||
|
||||
-- 2025 Q3 발주
|
||||
INSERT INTO `bag_order` (`bo_uuid`, `bo_version`, `bo_lg_idx`, `bo_gugun_code`, `bo_dong_code`, `bo_company_idx`, `bo_agency_idx`, `bo_fee_rate`, `bo_order_date`, `bo_lot_no`, `bo_hash`, `bo_status`, `bo_regdate`) VALUES
|
||||
(UUID(), 1, @LG_IDX, '110204', '', @CO1, @AG1, 3.50, '2025-07-15', 'LOT-2025-Q3-001', SHA2(UUID(), 256), 'normal', '2025-07-15 09:00:00');
|
||||
SET @BO3 = LAST_INSERT_ID();
|
||||
INSERT INTO `bag_order_item` (`boi_bo_idx`, `boi_bag_code`, `boi_bag_name`, `boi_unit_price`, `boi_qty_box`, `boi_qty_sheet`, `boi_amount`) VALUES
|
||||
(@BO3, '10152', '일반용 20L', 100.00, 220, 110000, 11000000.00),
|
||||
(@BO3, '10132', '일반용 10L', 60.00, 120, 60000, 3600000.00),
|
||||
(@BO3, '60132', '음식물 10L', 70.00, 80, 40000, 2800000.00);
|
||||
(@BO3, '10152', '일반용 20L', 134.00, 220, 110000, 14740000.00),
|
||||
(@BO3, '10132', '일반용 10L', 68.00, 120, 60000, 4080000.00),
|
||||
(@BO3, '60132', '음식물 10L', 116.00, 80, 40000, 4640000.00);
|
||||
|
||||
-- 2026 Q1 발주 (최근)
|
||||
INSERT INTO `bag_order` (`bo_uuid`, `bo_version`, `bo_lg_idx`, `bo_gugun_code`, `bo_dong_code`, `bo_company_idx`, `bo_agency_idx`, `bo_fee_rate`, `bo_order_date`, `bo_lot_no`, `bo_hash`, `bo_status`, `bo_regdate`) VALUES
|
||||
(UUID(), 1, @LG_IDX, '110204', '', @CO1, @AG1, 3.50, '2026-01-20', 'LOT-2026-Q1-001', SHA2(UUID(), 256), 'normal', '2026-01-20 09:00:00');
|
||||
SET @BO4 = LAST_INSERT_ID();
|
||||
INSERT INTO `bag_order_item` (`boi_bo_idx`, `boi_bag_code`, `boi_bag_name`, `boi_unit_price`, `boi_qty_box`, `boi_qty_sheet`, `boi_amount`) VALUES
|
||||
(@BO4, '10152', '일반용 20L', 100.00, 300, 150000, 15000000.00),
|
||||
(@BO4, '10172', '일반용 50L', 210.00, 120, 24000, 5040000.00),
|
||||
(@BO4, '10132', '일반용 10L', 60.00, 150, 75000, 4500000.00),
|
||||
(@BO4, '60102', '음식물 2L', 18.00, 200, 200000, 3600000.00),
|
||||
(@BO4, '10162', '일반용 30L', 140.00, 50, 15000, 2100000.00);
|
||||
(@BO4, '10152', '일반용 20L', 134.00, 300, 150000, 20100000.00),
|
||||
(@BO4, '10172', '일반용 50L', 332.00, 120, 24000, 7968000.00),
|
||||
(@BO4, '10132', '일반용 10L', 68.00, 150, 75000, 5100000.00),
|
||||
(@BO4, '60102', '음식물 2L', 22.00, 200, 200000, 4400000.00),
|
||||
(@BO4, '10162', '일반용 30L', 216.00, 50, 15000, 3240000.00);
|
||||
|
||||
-- 취소된 발주 1건
|
||||
INSERT INTO `bag_order` (`bo_uuid`, `bo_version`, `bo_lg_idx`, `bo_gugun_code`, `bo_dong_code`, `bo_company_idx`, `bo_agency_idx`, `bo_fee_rate`, `bo_order_date`, `bo_lot_no`, `bo_hash`, `bo_status`, `bo_regdate`) VALUES
|
||||
@@ -157,7 +159,7 @@ INSERT INTO `bag_receiving` (`br_bo_idx`, `br_lg_idx`, `br_bag_code`, `br_bag_na
|
||||
(@BO1, @LG_IDX, '10172', '일반용 50L', 80, 16000, '2025-02-01', '(주)대구폴리머', 'scanner', '2025-02-01 10:30:00'),
|
||||
(@BO1, @LG_IDX, '10132', '일반용 10L', 100, 50000, '2025-02-03', '(주)대구폴리머', 'scanner', '2025-02-03 09:00:00'),
|
||||
(@BO1, @LG_IDX, '60102', '음식물 2L', 150, 150000, '2025-02-03', '(주)대구폴리머', 'scanner', '2025-02-03 09:30:00'),
|
||||
(@BO2, @LG_IDX, '10152', '일반용 20L', 250, 125000, '2025-04-25', '(주)대구폴리머', 'scanner', '2025-04-25 10:00:00'),
|
||||
(@BO2, @LG_IDX, '10152', '일반용 20L', 340, 125000, '2025-04-25', '(주)대구폴리머', 'scanner', '2025-04-25 10:00:00'),
|
||||
(@BO2, @LG_IDX, '10172', '일반용 50L', 100, 20000, '2025-04-25', '(주)대구폴리머', 'scanner', '2025-04-25 10:30:00'),
|
||||
(@BO2, @LG_IDX, '10162', '일반용 30L', 60, 18000, '2025-04-28', '(주)영남포장', 'scanner', '2025-04-28 09:00:00'),
|
||||
(@BO3, @LG_IDX, '10152', '일반용 20L', 220, 110000, '2025-08-01', '(주)대구폴리머', 'scanner', '2025-08-01 10:00:00'),
|
||||
@@ -206,41 +208,41 @@ INSERT INTO `shop_order` (`so_lg_idx`, `so_ds_idx`, `so_ds_name`, `so_order_date
|
||||
-- 주문 품목
|
||||
SET @SO1 = (SELECT so_idx FROM shop_order WHERE so_lg_idx = @LG_IDX ORDER BY so_idx ASC LIMIT 1);
|
||||
INSERT INTO `shop_order_item` (`soi_so_idx`, `soi_bag_code`, `soi_bag_name`, `soi_unit_price`, `soi_qty`, `soi_amount`, `soi_box_count`, `soi_pack_count`, `soi_sheet_count`) VALUES
|
||||
(@SO1, '10152', '일반용 20L', 490.00, 300, 147000, 0, 6, 300),
|
||||
(@SO1, '10132', '일반용 10L', 250.00, 200, 50000, 0, 4, 200);
|
||||
(@SO1, '10152', '일반용 20L', 670.00, 300, 201000, 0, 6, 300),
|
||||
(@SO1, '10132', '일반용 10L', 340.00, 200, 68000, 0, 4, 200);
|
||||
SET @SO2 = @SO1 + 1;
|
||||
INSERT INTO `shop_order_item` (`soi_so_idx`, `soi_bag_code`, `soi_bag_name`, `soi_unit_price`, `soi_qty`, `soi_amount`, `soi_box_count`, `soi_pack_count`, `soi_sheet_count`) VALUES
|
||||
(@SO2, '10152', '일반용 20L', 490.00, 300, 147000, 0, 6, 300);
|
||||
(@SO2, '10152', '일반용 20L', 670.00, 300, 201000, 0, 6, 300);
|
||||
|
||||
-- ================================================================
|
||||
-- 12. 판매/반품 (bag_sale) — 2026년 1~3월 판매 데이터
|
||||
-- ================================================================
|
||||
INSERT INTO `bag_sale` (`bs_lg_idx`, `bs_ds_idx`, `bs_ds_name`, `bs_sale_date`, `bs_bag_code`, `bs_bag_name`, `bs_qty`, `bs_unit_price`, `bs_amount`, `bs_type`, `bs_regdate`) VALUES
|
||||
-- 3월
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-02', '10152', '일반용 20L', 150, 490, 73500, 'sale', '2026-03-02 10:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-02', '10132', '일반용 10L', 100, 250, 25000, 'sale', '2026-03-02 10:05:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-05', '10152', '일반용 20L', 200, 490, 98000, 'sale', '2026-03-05 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-08', '10172', '일반용 50L', 80, 1130, 90400, 'sale', '2026-03-08 09:30:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-08', '10152', '일반용 20L', 300, 490, 147000, 'sale', '2026-03-08 09:35:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-03-12', '10132', '일반용 10L', 200, 250, 50000, 'sale', '2026-03-12 10:00:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-03-12', '60102', '음식물 2L', 300, 60, 18000, 'sale', '2026-03-12 10:05:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-18', '10152', '일반용 20L', 250, 490, 122500, 'sale', '2026-03-18 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-22', '10162', '일반용 30L', 100, 710, 71000, 'sale', '2026-03-22 11:30:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-25', '10152', '일반용 20L', 400, 490, 196000, 'sale', '2026-03-25 09:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-02', '10152', '일반용 20L', 150, 670, 100500, 'sale', '2026-03-02 10:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-02', '10132', '일반용 10L', 100, 340, 34000, 'sale', '2026-03-02 10:05:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-05', '10152', '일반용 20L', 200, 670, 134000, 'sale', '2026-03-05 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-08', '10172', '일반용 50L', 80, 1660, 132800, 'sale', '2026-03-08 09:30:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-08', '10152', '일반용 20L', 300, 670, 201000, 'sale', '2026-03-08 09:35:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-03-12', '10132', '일반용 10L', 200, 340, 68000, 'sale', '2026-03-12 10:00:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-03-12', '60102', '음식물 2L', 300, 110, 33000, 'sale', '2026-03-12 10:05:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-03-18', '10152', '일반용 20L', 250, 670, 167500, 'sale', '2026-03-18 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-22', '10162', '일반용 30L', 100, 1080, 108000, 'sale', '2026-03-22 11:30:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-03-25', '10152', '일반용 20L', 400, 670, 268000, 'sale', '2026-03-25 09:00:00'),
|
||||
-- 2월
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-02-05', '10152', '일반용 20L', 180, 490, 88200, 'sale', '2026-02-05 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-02-10', '10152', '일반용 20L', 220, 490, 107800, 'sale', '2026-02-10 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-02-15', '10172', '일반용 50L', 60, 1130, 67800, 'sale', '2026-02-15 09:30:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-02-20', '60102', '음식물 2L', 500, 60, 30000, 'sale', '2026-02-20 10:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-02-25', '10132', '일반용 10L', 300, 250, 75000, 'sale', '2026-02-25 10:30:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-02-05', '10152', '일반용 20L', 180, 670, 120600, 'sale', '2026-02-05 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-02-10', '10152', '일반용 20L', 220, 670, 147400, 'sale', '2026-02-10 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-02-15', '10172', '일반용 50L', 60, 1660, 99600, 'sale', '2026-02-15 09:30:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-02-20', '60102', '음식물 2L', 500, 110, 55000, 'sale', '2026-02-20 10:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-02-25', '10132', '일반용 10L', 300, 340, 102000, 'sale', '2026-02-25 10:30:00'),
|
||||
-- 1월
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-01-08', '10152', '일반용 20L', 200, 490, 98000, 'sale', '2026-01-08 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-01-15', '10172', '일반용 50L', 50, 1130, 56500, 'sale', '2026-01-15 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-01-22', '10152', '일반용 20L', 350, 490, 171500, 'sale', '2026-01-22 09:30:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-01-28', '10132', '일반용 10L', 150, 250, 37500, 'sale', '2026-01-28 10:00:00'),
|
||||
(@LG_IDX, @DS1, 'CU 대명점', '2026-01-08', '10152', '일반용 20L', 200, 670, 134000, 'sale', '2026-01-08 10:00:00'),
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-01-15', '10172', '일반용 50L', 50, 1660, 83000, 'sale', '2026-01-15 11:00:00'),
|
||||
(@LG_IDX, @DS3, '세븐일레븐 남구청점', '2026-01-22', '10152', '일반용 20L', 350, 670, 234500, 'sale', '2026-01-22 09:30:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-01-28', '10132', '일반용 10L', 150, 340, 51000, 'sale', '2026-01-28 10:00:00'),
|
||||
-- 반품 2건
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-10', '10152', '일반용 20L', 50, 490, 24500, 'return', '2026-03-10 14:00:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-02-28', '10132', '일반용 10L', 30, 250, 7500, 'return', '2026-02-28 15:00:00');
|
||||
(@LG_IDX, @DS2, 'GS25 앞산점', '2026-03-10', '10152', '일반용 20L', 50, 670, 33500, 'return', '2026-03-10 14:00:00'),
|
||||
(@LG_IDX, @DS4, '봉덕슈퍼', '2026-02-28', '10132', '일반용 10L', 30, 340, 10200, 'return', '2026-02-28 15:00:00');
|
||||
|
||||
-- ================================================================
|
||||
-- 13. 무료용 불출 (bag_issue)
|
||||
|
||||
10
writable/database/shop_order_add_channel.sql
Normal file
10
writable/database/shop_order_add_channel.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- shop_order 접수채널 컬럼 추가
|
||||
-- 실행 대상: 이미 운영/개발 DB가 생성된 환경
|
||||
|
||||
ALTER TABLE `shop_order`
|
||||
ADD COLUMN `so_channel` VARCHAR(20) NOT NULL DEFAULT 'phone' COMMENT '접수채널 phone/web/app/counter'
|
||||
AFTER `so_payment_type`;
|
||||
|
||||
ALTER TABLE `shop_order`
|
||||
ADD KEY `idx_so_lg_order_channel` (`so_lg_idx`, `so_order_date`, `so_channel`);
|
||||
|
||||
Reference in New Issue
Block a user