Merge pull request 'hjjeong' (#16) from hjjeong into main

Reviewed-on: https://g.wace.me/chpark/vexplor_rps/pulls/16
This commit is contained in:
hjjeong
2026-05-19 02:53:51 +00:00
36 changed files with 4319 additions and 1352 deletions
@@ -0,0 +1,31 @@
-- ====================================================================
-- inventory_mgmt — 자재 마스터 (품번 + Location 단위 자재 정보)
-- ====================================================================
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm (PG 16.8)
-- 추출일: 2026-05-15
-- 자식: inventory_mgmt_in (입고/이동 히스토리), inventory_mgmt_out (불출 라인)
-- ====================================================================
CREATE TABLE IF NOT EXISTS inventory_mgmt (
objid VARCHAR NOT NULL,
contract_objid VARCHAR NOT NULL,
unit VARCHAR(100) NOT NULL,
part_objid VARCHAR(100) NOT NULL,
cls_cd VARCHAR(100),
cau_cd VARCHAR(100),
qty VARCHAR(20),
location VARCHAR(20) NOT NULL DEFAULT '',
sub_location VARCHAR(20) NOT NULL DEFAULT '',
reg_date VARCHAR(10),
price VARCHAR(20),
writer VARCHAR(20),
input_contract_objid VARCHAR,
input_qty VARCHAR,
input_date VARCHAR,
assumption_user VARCHAR,
successor_user VARCHAR,
CONSTRAINT inventory_mgmt_pkey PRIMARY KEY (contract_objid, unit, part_objid)
);
CREATE INDEX IF NOT EXISTS inventory_mgmt_objid_idx ON inventory_mgmt (objid);
CREATE INDEX IF NOT EXISTS inventory_mgmt_part_objid_idx ON inventory_mgmt (part_objid);
@@ -0,0 +1,33 @@
-- ====================================================================
-- inventory_mgmt_in — 자재 입고/이동 히스토리 라인
-- ====================================================================
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm
-- 추출일: 2026-05-15
-- 부모: inventory_mgmt.objid → parent_objid
-- 외부키: out_objid (콤마분리 inventory_mgmt_out.objid 누적)
-- ====================================================================
CREATE TABLE IF NOT EXISTS inventory_mgmt_in (
objid VARCHAR NOT NULL,
parent_objid VARCHAR,
receipt_qty VARCHAR,
location VARCHAR,
sub_location VARCHAR,
writer VARCHAR,
regdate TIMESTAMP,
contract_mgmt_objid VARCHAR,
purchase_order_master_objid VARCHAR,
purchase_order_sub_objid VARCHAR,
out_objid VARCHAR,
out_qty VARCHAR,
move_objid VARCHAR,
move_qty VARCHAR,
move_date VARCHAR,
move_user VARCHAR,
request_qty VARCHAR,
receipt_date VARCHAR,
CONSTRAINT inventory_mgmt_in_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS inventory_mgmt_in_parent_objid_idx ON inventory_mgmt_in (parent_objid);
CREATE INDEX IF NOT EXISTS inventory_mgmt_in_contract_mgmt_objid_idx ON inventory_mgmt_in (contract_mgmt_objid);
@@ -0,0 +1,28 @@
-- ====================================================================
-- inventory_mgmt_out — 불출 라인 (의뢰 + 실제 불출)
-- ====================================================================
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm
-- 추출일: 2026-05-15
-- 부모: inventory_mgmt.objid → parent_objid (자재 마스터)
-- 부모2: inventory_mgmt_out_master.objid → inventory_request_master_objid
-- 흐름: REQUEST_QTY 먼저 입력 (의뢰) → OUT_QTY/OUT_DATE/ACQ_USER/SIGN 입력 (불출)
-- ====================================================================
CREATE TABLE IF NOT EXISTS inventory_mgmt_out (
objid VARCHAR NOT NULL,
parent_objid VARCHAR,
request_qty VARCHAR,
out_qty VARCHAR,
out_date VARCHAR,
writer VARCHAR,
acq_user VARCHAR,
regdate TIMESTAMP,
inventory_request_master_objid VARCHAR,
sign VARCHAR,
contract_mgmt_objid VARCHAR,
unit VARCHAR,
CONSTRAINT inventory_mgmt_out_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS inventory_mgmt_out_parent_objid_idx ON inventory_mgmt_out (parent_objid);
CREATE INDEX IF NOT EXISTS inventory_mgmt_out_master_objid_idx ON inventory_mgmt_out (inventory_request_master_objid);
@@ -0,0 +1,32 @@
-- ====================================================================
-- inventory_mgmt_out_master — 불출의뢰 마스터 (Rfw-YYYY-seq)
-- ====================================================================
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm
-- 추출일: 2026-05-15
-- 자식: inventory_mgmt_out (불출 라인) → inventory_request_master_objid
-- 상태:
-- reception_status='reception' / ''=미접수
-- outstatus='complete' / ''=미완료
-- 채번: inventory_out_no = 'Rfw-' || YYYY || '-' || seq
-- ====================================================================
CREATE TABLE IF NOT EXISTS inventory_mgmt_out_master (
objid VARCHAR NOT NULL,
parent_objid VARCHAR,
inventory_out_no VARCHAR,
request_date VARCHAR,
request_id VARCHAR,
reception_status VARCHAR,
reception_id VARCHAR,
reception_date VARCHAR,
outstatus VARCHAR,
writer VARCHAR,
regdate TIMESTAMP,
remark VARCHAR,
contract_mgmt_objid VARCHAR,
sign VARCHAR,
CONSTRAINT inventory_mgmt_out_master_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS inventory_mgmt_out_master_no_idx ON inventory_mgmt_out_master (inventory_out_no);
CREATE INDEX IF NOT EXISTS inventory_mgmt_out_master_status_idx ON inventory_mgmt_out_master (reception_status, outstatus);
@@ -0,0 +1,18 @@
-- ====================================================================
-- inventory_mgmt_history — 자재 투입(인계/인수) 이력
-- ====================================================================
-- 출처: wace_plm 운영 DB 211.115.91.141:11133/waceplm
-- 추출일: 2026-05-15
-- ====================================================================
CREATE TABLE IF NOT EXISTS inventory_mgmt_history (
objid VARCHAR NOT NULL,
parent_objid VARCHAR,
contract_objid VARCHAR,
reg_date VARCHAR,
input_qty VARCHAR,
input_date VARCHAR,
assumption_user VARCHAR,
successor_user VARCHAR,
CONSTRAINT inventory_mgmt_history_pkey PRIMARY KEY (objid)
);
@@ -0,0 +1,51 @@
-- ============================================================
-- 견적요청서 운영 sample 데이터 → RPS 이관
-- 운영: 211.115.91.141:11133/waceplm
-- quotation_request_master 4건 / quotation_request_detail 4건
-- 대상: 211.115.91.141:11134/vexplor_rps
--
-- 함정:
-- 1) objid / sales_request_master_objid / project_mgmt_objid : numeric → varchar
-- 2) detail.part_objid : numeric → bigint (RPS part_mng.objid bigint 호환)
-- 3) FK 미매칭 sales_request_part_objid 는 NULL 처리
--
-- 멱등성: ON CONFLICT DO NOTHING.
-- ============================================================
-- ── master ────────────────────────────────────────────────────
INSERT INTO quotation_request_master
(objid, quotation_request_no, sales_request_master_objid, project_mgmt_objid,
vendor_objid, vendor_type, status, mail_send_date, mail_send_yn, due_date,
remark, writer, reg_date, edit_date)
VALUES
('-1554146727','Q20260401-115','-722096187','-1752090174','0000000007','SUPPLY','received','2026-04-03 04:36:11.666917','Y','2026-04-06',NULL,'ady1225','2026-04-01 07:11:30.812611','2026-04-01 07:16:21.513931'),
('-1629785580','Q20260401-116','-722096187','-1752090174','0000000012','PROCESSING','create',NULL,'N','2026-04-06',NULL,'ady1225','2026-04-01 07:11:30.814099',NULL),
('185180465','Q20260401-118','-722096187','-1752090174','0000008379','PROCESSING','create',NULL,'N','2026-04-06',NULL,'ady1225','2026-04-01 07:11:30.836506',NULL),
('211976545','Q20260401-119','-722096187','-1752090174','0000012062','PROCESSING','create',NULL,'N','2026-04-06',NULL,'ady1225','2026-04-01 07:11:30.841764',NULL)
ON CONFLICT (objid) DO NOTHING;
-- ── detail ────────────────────────────────────────────────────
INSERT INTO quotation_request_detail
(objid, quotation_request_master_objid, sales_request_part_objid, part_objid,
part_no, part_name, raw_material, size, qty, unit_price, total_price,
remark, delivery_request_date, reg_date, edit_date)
VALUES
('-1266428262','-1554146727','-1279349416',1868255637,'C3P50L22','Ti(GR5)','Ti(GR5)','Ø50*22',0,10000,0,NULL,'2026-04-03','2026-04-01 07:11:30.812611','2026-04-01 07:16:21.513931'),
('-2130546975','-1629785580','1187291883',1868255516,'10024-0066','SHEET',NULL,NULL,4,0,0,NULL,NULL,'2026-04-01 07:11:30.814099',NULL),
('-392083183','185180465','-1279349416',1868255637,'10026-0031','HOLDER',NULL,NULL,4,0,0,NULL,NULL,'2026-04-01 07:11:30.836506',NULL),
('-563828077','211976545','-1291084031',1868257572,'30004-0098','NUT',NULL,NULL,4,0,0,NULL,NULL,'2026-04-01 07:11:30.841764',NULL)
ON CONFLICT (objid) DO NOTHING;
-- FK 미매칭 sales_request_part_objid 는 NULL 처리 (현재 RPS sales_request_part 0건)
UPDATE quotation_request_detail
SET sales_request_part_objid = NULL
WHERE sales_request_part_objid IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM sales_request_part WHERE objid = quotation_request_detail.sales_request_part_objid
);
-- FK 미매칭 part_objid 는 NULL 처리 (RPS part_mng 와 매칭 안 되면)
UPDATE quotation_request_detail
SET part_objid = NULL
WHERE part_objid IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM part_mng WHERE objid = quotation_request_detail.part_objid);
@@ -0,0 +1,61 @@
-- ============================================================
-- 발주/입고 운영 sample 데이터 → RPS 이관
-- 운영: 211.115.91.141:11133/waceplm
-- purchase_order_master 1건 / purchase_order_part 1건 / arrival_plan 1건
-- 대상: 211.115.91.141:11134/vexplor_rps
--
-- FK 매칭 (확인):
-- sales_request_objid='-233034270' → RPS sales_request_master.objid (있음)
-- contract_mgmt_objid='-1752090174' → 운영DB project_mgmt.objid (RPS contract_mgmt 미매칭, project_mgmt 매칭)
-- part_objid=1868260552 → RPS part_mng (있음)
-- partner_objid='0000000007' → RPS client_mng 서울반도체(주) (있음)
--
-- 멱등성: ON CONFLICT DO NOTHING
-- ============================================================
-- ── purchase_order_master (RPS 이미 존재하면 mail_send_* 만 보강) ──
-- PK constraint 없어 ON CONFLICT 사용 불가 → WHERE NOT EXISTS 패턴
INSERT INTO purchase_order_master
(objid, purchase_order_no, partner_objid, contract_mgmt_objid, sales_request_objid,
regdate, writer, status, mail_send_yn, mail_send_date,
sales_mng_user_id, payment_terms)
SELECT
'-2135417309','RPS26-0401-01','0000000007','-1752090174','-233034270',
'2026-04-01 07:20:58.687075','ady1225','create','Y','2026-04-03',
'ish0312','0001069'
WHERE NOT EXISTS (SELECT 1 FROM purchase_order_master WHERE objid='-2135417309');
-- 이미 있던 행에는 매퍼 필수 필드(mail_send_*) 보강
UPDATE purchase_order_master
SET mail_send_yn='Y', mail_send_date='2026-04-03'
WHERE objid='-2135417309'
AND COALESCE(mail_send_yn,'') = '';
-- ── purchase_order_part ───────────────────────────────────────
INSERT INTO purchase_order_part
(objid, purchase_order_master_objid, part_objid, order_qty, partner_price,
remark, writer, regdate, part_name, spec, supply_unit_price, unit,
part_no, qty, part_delivery_place, delivery_request_date)
VALUES
('-192149597','-2135417309',1868260552,'1','10000',
'W/M ASSY (RWMR1070-NO07 LH) / HOLDER','ady1225','2026-04-01 07:20:58.687075',
'Ti(GR5)','Ø50*22','10000','0001400','C3P50L22','1','RPS','2026-04-03')
ON CONFLICT (objid) DO NOTHING;
-- ── arrival_plan ──────────────────────────────────────────────
INSERT INTO arrival_plan
(objid, parent_objid, order_part_objid, part_objid,
arrival_qty, receipt_qty, receipt_date, location,
writer, group_seq, seq, inventory_status, sub_location, receiver_id)
VALUES
('1030275443','-2135417309','-192149597',1868260552,
'1','1','2026-04-01','L101',
'ady1225','1','1','Y','1490000','ady1225')
ON CONFLICT (objid) DO NOTHING;
-- 검증: 매퍼 WHERE (mail_send_date IS NOT NULL AND status='create') 통과 여부
-- SELECT pom.purchase_order_no, pop.part_no, ap.receipt_date
-- FROM purchase_order_master pom
-- JOIN purchase_order_part pop ON pop.purchase_order_master_objid = pom.objid
-- LEFT JOIN arrival_plan ap ON ap.parent_objid = pom.objid AND ap.part_objid = pop.part_objid
-- WHERE pom.mail_send_date IS NOT NULL AND pom.status = 'create';
@@ -0,0 +1,73 @@
-- ============================================================
-- 견적요청서 (Quotation Request) — 구매관리 단독
-- 원본: 운영DB 211.115.91.141:11133/waceplm (quotation_request_master 4건, quotation_request_detail 4건)
-- 추출일: 2026-05-15
-- 적용대상: vexplor_rps (11134)
--
-- 운영 ↔ RPS 타입 차이 (feedback_createobjid_pattern.md):
-- 운영: quotation_request_master.objid numeric → RPS varchar(64)
-- 운영: sales_request_master_objid / project_mgmt_objid numeric → RPS varchar(64) (FK 호환)
-- 운영: detail.part_objid numeric → RPS bigint (part_mng.objid bigint 호환)
-- 운영: detail.sales_request_part_objid numeric → RPS varchar(64)
--
-- 비즈니스 흐름:
-- 구매리스트(sales_request_master) → 견적요청서(quotation_request_master + detail)
-- → 품의서 → 발주서(purchase_order_master + part) → 입고(arrival_plan + inventory_*)
--
-- 매퍼 본문(getQuotationRequestList): wace_plm/src/com/pms/mapper/salesMng.xml:5248-5349
-- ============================================================
-- ── 1. quotation_request_master ──────────────────────────────
CREATE TABLE IF NOT EXISTS quotation_request_master (
objid varchar(64) NOT NULL,
quotation_request_no varchar(50),
sales_request_master_objid varchar(64),
project_mgmt_objid varchar(64),
vendor_objid varchar(64),
vendor_type varchar(20),
status varchar(50) DEFAULT 'create',
mail_send_date timestamp,
mail_send_yn varchar(1) DEFAULT 'N',
due_date date,
remark text,
writer varchar(50),
reg_date timestamp DEFAULT now(),
edit_date timestamp,
CONSTRAINT quotation_request_master_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS idx_qrm_sales_request ON quotation_request_master (sales_request_master_objid);
CREATE INDEX IF NOT EXISTS idx_qrm_project ON quotation_request_master (project_mgmt_objid);
CREATE INDEX IF NOT EXISTS idx_qrm_vendor ON quotation_request_master (vendor_objid);
CREATE INDEX IF NOT EXISTS idx_qrm_status ON quotation_request_master (status);
-- ── 2. quotation_request_detail ──────────────────────────────
CREATE TABLE IF NOT EXISTS quotation_request_detail (
objid varchar(64) NOT NULL,
quotation_request_master_objid varchar(64),
sales_request_part_objid varchar(64),
part_objid bigint,
part_no varchar(100),
part_name varchar(200),
raw_material varchar(100),
size varchar(100),
qty numeric DEFAULT 0,
unit_price numeric DEFAULT 0,
total_price numeric DEFAULT 0,
remark text,
delivery_request_date varchar(10),
reg_date timestamp DEFAULT now(),
edit_date timestamp,
CONSTRAINT quotation_request_detail_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS idx_qrd_master ON quotation_request_detail (quotation_request_master_objid);
CREATE INDEX IF NOT EXISTS idx_qrd_part ON quotation_request_detail (sales_request_part_objid);
ALTER TABLE quotation_request_detail
DROP CONSTRAINT IF EXISTS fk_qrd_master;
ALTER TABLE quotation_request_detail
ADD CONSTRAINT fk_qrd_master
FOREIGN KEY (quotation_request_master_objid)
REFERENCES quotation_request_master (objid)
ON DELETE CASCADE;
@@ -0,0 +1,131 @@
-- ============================================================
-- 발주서 + 입고관리 — 구매관리 입고 3메뉴 + 발주서관리 의존 테이블
-- 원본: 운영DB 211.115.91.141:11133/waceplm
-- purchase_order_master 1건 (mail_send_yn='Y', status='create')
-- purchase_order_part 1건 (RPS26-0401-01 / C3P50L22)
-- arrival_plan 1건 (receipt_qty=1, receipt_date=2026-04-01)
-- 추출일: 2026-05-15
-- 적용대상: vexplor_rps (11134)
--
-- 운영 ↔ RPS 타입 차이:
-- part_objid: 운영 varchar(64) → RPS bigint (part_mng.objid bigint 호환)
--
-- 매퍼:
-- deliveryMngPartList: wace_plm/src/com/pms/mapper/purchaseOrder.xml:6309-6543
-- purchaseCloseList: wace_plm/src/com/pms/mapper/purchaseOrder.xml:6549-6765
-- projectPurchaseStat: wace_plm/src/com/pms/mapper/purchaseOrder.xml:6768-6951
--
-- 함정:
-- 1) wace 매퍼는 PROJECT_MGMT.OBJID = POM.CONTRACT_MGMT_OBJID 로 LEFT JOIN
-- (즉 contract_mgmt_objid 컬럼명이 실제로는 project_mgmt 키를 저장)
-- 2) WHERE: POM.MAIL_SEND_DATE IS NOT NULL AND POM.STATUS='create'
-- ============================================================
-- ── 1. purchase_order_master 보충 컬럼 (10개) ───────────────────
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS mail_send_yn varchar;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS mail_send_date varchar;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS form_type varchar(20);
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS sales_mng_user_id2 varchar(50);
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS request_content text;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS purchase_close_date varchar(10);
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS shipment varchar;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS packing varchar;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS validity varchar;
ALTER TABLE purchase_order_master ADD COLUMN IF NOT EXISTS attn_to varchar;
-- ── 2. purchase_order_part (운영 43 cols 1:1, part_objid 만 bigint) ─
CREATE TABLE IF NOT EXISTS purchase_order_part (
objid varchar(64) NOT NULL,
purchase_order_master_objid varchar(64),
part_objid bigint,
order_qty varchar,
partner_price varchar,
remark varchar,
writer varchar,
regdate timestamp,
status varchar,
part_name varchar,
do_no varchar,
thickness varchar,
width varchar,
height varchar,
out_diameter varchar,
length varchar,
in_diameter varchar,
inven_total_qty varchar,
ld_part_objid varchar,
spec varchar,
maker varchar,
supply_unit_price varchar,
unit varchar,
price1 varchar,
price2 varchar,
price3 varchar,
part_no varchar,
supply_unit_vat_price varchar,
price4 varchar,
supply_unit_vat_sum_price varchar,
total_order_qty varchar,
stock_qty varchar,
real_order_qty varchar,
update_date timestamp,
modifier varchar,
real_supply_price varchar,
bom_qty varchar,
qty varchar,
part_delivery_place varchar(50),
product_name varchar(200),
work_order_no varchar(50),
delivery_request_date varchar(20),
currency varchar,
CONSTRAINT purchase_order_part_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS idx_pop_master ON purchase_order_part (purchase_order_master_objid);
CREATE INDEX IF NOT EXISTS idx_pop_part ON purchase_order_part (part_objid);
-- ── 3. arrival_plan (운영 37 cols 1:1, part_objid bigint) ───────
CREATE TABLE IF NOT EXISTS arrival_plan (
objid varchar(64) NOT NULL,
parent_objid varchar(64),
order_part_objid varchar(64),
part_objid bigint,
arrival_plan_date varchar,
re_arrival_plan_date varchar,
arrival_qty varchar,
receipt_qty varchar,
genuine_qty varchar,
receipt_date varchar,
inspection_date varchar,
location varchar,
error_qty varchar,
error_reason varchar,
attribution varchar,
status varchar,
assembly_status varchar,
writer varchar,
group_seq varchar,
seq varchar,
defect_content varchar,
defect_action varchar,
defect_note varchar,
defect_action_date varchar,
defect_action_title varchar,
inventory_status varchar,
sub_location varchar,
receiver_id varchar,
purchase_close_date varchar,
foreign_type varchar(10),
exchange_rate numeric(15,2),
duty numeric(15,2),
import_vat numeric(15,2),
tax_invoice_date varchar(10),
export_decl_no varchar(100),
loading_date varchar(10),
tax_type varchar(20),
CONSTRAINT arrival_plan_pkey PRIMARY KEY (objid)
);
CREATE INDEX IF NOT EXISTS idx_arrival_parent ON arrival_plan (parent_objid);
CREATE INDEX IF NOT EXISTS idx_arrival_order_part ON arrival_plan (order_part_objid);
CREATE INDEX IF NOT EXISTS idx_arrival_part ON arrival_plan (part_objid);