INSERT INTO plm_project_info_tracking
(id, site, bu_no, project_no, ori_project_id, project_category, project_name, project_desc, status, project_source,
customer_no, final_customer_id, priority, customer_remark, remark, need_date, parent_project_no, c_project_region,
project_manager, project_owner, engineer, c_quality_engineer1, c_quality_engineer2, c_quality_engineer3,
c_quality_engineer4, c_quality_engineer5, c_quality_engineer6, c_manufacture_engineer, doc_engineer,
ipqc_hard_tag, c_quality_engineer7, doc_engineer2, project_creation_date, project_close_date,
create_date, create_by, update_date, update_by)
SELECT
p.id,
p.site,
p.bu_no,
p.project_no,
p.ori_project_id,
p.project_category,
p.project_name,
p.project_desc,
ISNULL(p.status, N'草稿'),
p.project_source,
p.customer_no,
p.final_customer_id,
p.priority,
'',
p.remark,
p.need_date,
'',
p.c_project_region,
p.project_manager,
p.project_owner,
p.engineer,
p.c_quality_engineer1,
p.c_quality_engineer2,
p.c_quality_engineer3,
p.c_quality_engineer4,
p.c_quality_engineer5,
p.c_quality_engineer6,
p.c_manufacture_engineer,
p.doc_engineer,
p.ipqc_hard_tag,
p.c_quality_engineer7,
p.doc_engineer2,
p.project_creation_date,
p.project_close_date,
GETDATE(),
#{operateUser},
GETDATE(),
#{operateUser}
FROM plm_project_info p
WHERE p.id = #{projectId}
AND NOT EXISTS (
SELECT 1
FROM plm_project_info_tracking t
WHERE t.id = p.id
)
INSERT INTO plm_project_part_tracking
(id, site, project_id, test_part_no, part_type, dry_wet_type, part_desc, part_spec, material_number, final_part_desc,
create_date, create_by, update_date, update_by, part_name, final_part_no, base_no, rev_no,
project_manager, project_owner, build_date, c_quality_engineer1, c_quality_engineer2, c_quality_engineer3,
c_manufacture_engineer, close_date, engineer, status, priority, project_category, need_date, doc_engineer,
c_quality_engineer4, c_quality_engineer5, c_quality_engineer6, customer_no, ipqc_hard_tag, c_quality_engineer7, doc_engineer2, remark)
SELECT
pp.id,
pp.site,
pp.project_id,
pp.test_part_no,
pp.part_type,
pp.dry_wet_type,
pp.part_desc,
pp.part_spec,
pp.material_number,
pp.final_part_desc,
GETDATE(),
#{operateUser},
GETDATE(),
#{operateUser},
pp.part_name,
pp.final_part_no,
pp.base_no,
pp.rev_no,
pp.project_manager,
pp.project_owner,
pp.build_date,
pp.c_quality_engineer1,
pp.c_quality_engineer2,
pp.c_quality_engineer3,
pp.c_manufacture_engineer,
pp.close_date,
pp.engineer,
ISNULL(pp.status, N'草稿'),
pp.priority,
pp.project_category,
pp.need_date,
pp.doc_engineer,
pp.c_quality_engineer4,
pp.c_quality_engineer5,
pp.c_quality_engineer6,
pp.customer_no,
pp.ipqc_hard_tag,
pp.c_quality_engineer7,
pp.doc_engineer2,
pp.remark
FROM plm_project_part pp
WHERE pp.project_id = #{projectId}
AND pp.id = #{projectPartId}
AND NOT EXISTS (
SELECT 1
FROM plm_project_part_tracking t
WHERE t.id = pp.id
)
SELECT ISNULL(MAX(CASE WHEN id >= 100000 THEN id END), 100000) + 1
FROM plm_project_info_tracking WITH (TABLOCKX, HOLDLOCK)
INSERT INTO plm_project_info_tracking
(id, site, bu_no, project_no, ori_project_id, project_category, project_name, project_desc, status, project_source,
customer_no, final_customer_id, priority, customer_remark, remark, need_date, parent_project_no, c_project_region,
project_manager, project_owner, engineer, c_quality_engineer1, c_quality_engineer2, c_quality_engineer3,
c_quality_engineer4, c_quality_engineer5, c_quality_engineer6, c_manufacture_engineer, doc_engineer,
ipqc_hard_tag, c_quality_engineer7, doc_engineer2, project_creation_date, project_close_date,
create_date, create_by, update_date, update_by)
VALUES
(#{projectId}, #{site}, #{buNo}, #{projectNo}, #{oriProjectId}, #{projectCategory}, #{projectName}, #{projectDesc}, #{projectStatus}, #{projectSource},
#{customerNo}, #{finalCustomerId}, #{priorityLevel}, #{customerRemark}, #{remark}, #{needDate,jdbcType=DATE}, #{parentProjectNo}, #{cProjectRegion},
#{projectManager}, #{projectOwner}, #{engineer}, #{cQualityEngineer1}, #{cQualityEngineer2}, #{cQualityEngineer3},
#{cQualityEngineer4}, #{cQualityEngineer5}, #{cQualityEngineer6}, #{cManufactureEngineer}, #{docEngineer},
#{ipqcHardTag}, #{cQualityEngineer7}, #{docEngineer2}, #{projectCreationDate,jdbcType=DATE}, #{projectCloseDate,jdbcType=DATE},
GETDATE(), #{createBy}, GETDATE(), #{updateBy})
SELECT ISNULL(MAX(CASE WHEN id >= 100000 THEN id END), 100000) + 1
FROM plm_project_part_tracking WITH (TABLOCKX, HOLDLOCK)
INSERT INTO plm_project_part_tracking
(id, site, project_id, test_part_no, part_type, dry_wet_type, part_desc, part_spec, material_number, final_part_desc,
create_date, create_by, update_date, update_by, part_name, final_part_no, base_no, rev_no,
project_manager, project_owner, build_date, c_quality_engineer1, c_quality_engineer2, c_quality_engineer3,
c_manufacture_engineer, close_date, engineer, status, priority, project_category, need_date, doc_engineer,
c_quality_engineer4, c_quality_engineer5, c_quality_engineer6, customer_no, ipqc_hard_tag, c_quality_engineer7, doc_engineer2, remark)
VALUES
(#{projectPartId}, #{site}, #{projectId}, #{testPartNo}, #{partType}, #{dryWetType}, #{partDesc}, #{partSpec}, #{materialNumber}, #{finalPartDesc},
GETDATE(), #{createBy}, GETDATE(), #{updateBy}, #{partName}, #{finalPartNo}, #{baseNo}, #{revNo},
#{projectManager}, #{projectOwner}, #{buildDate,jdbcType=DATE}, #{cQualityEngineer1}, #{cQualityEngineer2}, #{cQualityEngineer3},
#{cManufactureEngineer}, #{closeDate,jdbcType=DATE}, #{engineer}, #{partStatus}, #{priorityLevel}, #{projectCategory}, #{needDate,jdbcType=DATE}, #{docEngineer},
#{cQualityEngineer4}, #{cQualityEngineer5}, #{cQualityEngineer6}, #{customerNo}, #{ipqcHardTag}, #{cQualityEngineer7}, #{docEngineer2}, #{remark})
SELECT CASE
WHEN #{trackingId,jdbcType=INTEGER} IS NOT NULL AND #{trackingId,jdbcType=INTEGER} > 0
THEN #{trackingId,jdbcType=INTEGER}
ELSE (
SELECT ISNULL(MAX(CASE WHEN id >= 100000 THEN id END), 100000) + 1
FROM plm_proofing_information_tracking WITH (TABLOCKX, HOLDLOCK)
)
END
INSERT INTO plm_proofing_information_tracking
(id, site, project_id, project_part_id, proofing_id, proofing_no, proofing_status, project_phase, project_category,
tracker, engineer, priority_level, proofing_number, plan_start_date, required_delivery_date, baseline, actuality_delivery_date,
pm_inquery_time, importance, comments, remark, create_date, create_by, update_date, update_by)
VALUES
(#{trackingId}, #{site}, #{projectId}, #{projectPartId}, #{proofingId}, #{proofingNo}, #{proofingStatus}, #{projectPhase}, #{projectCategory},
#{tracker}, #{engineer}, #{priorityLevel}, #{proofingNumber}, #{planStartDate,jdbcType=DATE}, #{requiredDeliveryDate,jdbcType=DATE}, #{baseline,jdbcType=DATE}, #{actualityDeliveryDate,jdbcType=DATE},
#{pmInqueryTime,jdbcType=DATE}, #{importance}, #{comments}, #{remark}, GETDATE(), #{createBy}, GETDATE(), #{updateBy})
UPDATE plm_proofing_process_value
SET actual_date = #{actualDate,jdbcType=DATE},
process_status = #{status},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE tracking_id = #{trackingId}
AND process_code = #{processCode}
INSERT INTO plm_proofing_process_value
(tracking_id, site, process_code, plan_date, actual_date, process_status, create_date, create_by, update_date, update_by)
VALUES
(#{trackingId}, #{site}, #{processCode}, #{planDate,jdbcType=DATE}, #{actualDate,jdbcType=DATE}, #{status}, GETDATE(), #{createBy}, GETDATE(), #{updateBy})
UPDATE plm_proofing_information_tracking
SET proofing_status = N'打样完成',
actuality_delivery_date = ISNULL(#{actualityDeliveryDate,jdbcType=DATE}, GETDATE()),
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
UPDATE plm_proofing_information_tracking
SET proofing_status = #{proofingStatus},
actuality_delivery_date = #{actualityDeliveryDate,jdbcType=DATE},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
DELETE FROM plm_proofing_information_tracking_log
WHERE tracking_id = #{trackingId}
DELETE FROM plm_proofing_process_value
WHERE tracking_id = #{trackingId}
DELETE FROM plm_proofing_information_tracking
WHERE id = #{trackingId}
UPDATE plm_proofing_information_tracking
SET proofing_id = #{proofingId},
proofing_no = #{proofingNo},
proofing_number = #{proofingNumber},
plan_start_date = #{planStartDate,jdbcType=DATE},
required_delivery_date = #{requiredDeliveryDate,jdbcType=DATE},
baseline = #{baseline,jdbcType=DATE},
pm_inquery_time = #{pmInqueryTime,jdbcType=DATE},
importance = #{importance},
project_phase = #{projectPhase},
proofing_status = #{proofingStatus},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
UPDATE plm_proofing_information_tracking
SET project_phase = #{projectPhase},
project_category = #{projectCategory},
proofing_no = #{proofingNo},
proofing_status = #{proofingStatus},
proofing_number = #{proofingNumber},
plan_start_date = #{planStartDate,jdbcType=DATE},
required_delivery_date = #{requiredDeliveryDate,jdbcType=DATE},
baseline = #{baseline,jdbcType=DATE},
pm_inquery_time = #{pmInqueryTime,jdbcType=DATE},
importance = #{importance},
tracker = #{tracker},
engineer = #{engineer},
priority_level = #{priorityLevel},
remark = #{remark,jdbcType=NVARCHAR},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
UPDATE plm_proofing_information_tracking
SET required_delivery_date = #{requiredDeliveryDate,jdbcType=DATE},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
UPDATE plm_proofing_information_tracking
SET baseline = #{baseline,jdbcType=DATE},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
AND baseline IS NULL
SELECT ISNULL(MAX(CASE WHEN id >= 100000 THEN id END), 100000) + 1
FROM plm_proofing_information_tracking WITH (TABLOCKX, HOLDLOCK)
INSERT INTO plm_proofing_information_tracking
(id, site, project_id, project_part_id, proofing_id, proofing_no, proofing_status, project_phase, project_category,
tracker, engineer, priority_level, proofing_number, plan_start_date, required_delivery_date, actuality_delivery_date,
comments, remark, create_date, create_by, update_date, update_by)
SELECT
#{trackingId},
pp.site,
pp.project_id,
pp.id,
NULL,
NULL,
N'草稿',
'Sample',
ISNULL(pp.project_category, p.project_category),
ISNULL(pp.project_owner, ''),
ISNULL(pp.engineer, ''),
ISNULL(pp.priority, p.priority),
1,
GETDATE(),
NULL,
NULL,
NULL,
NULL,
GETDATE(), #{createBy}, GETDATE(), #{updateBy}
FROM plm_project_part_tracking pp
LEFT JOIN plm_project_info_tracking p ON pp.project_id = p.id
WHERE pp.site = #{site}
AND pp.project_id = #{projectId}
AND pp.id = #{projectPartId}
INSERT INTO plm_document_list_definition
(site, proofing_id, test_part_id, project_id, created_by, manual_flag, uploaded_flag, create_date, document_type_id)
VALUES
(#{site}, #{proofingId}, #{projectPartId}, #{projectId}, #{createBy}, 'N', 'N', GETDATE(), #{documentTypeId})
INSERT INTO plm_proofing_information_tracking_log
(tracking_id, process_code, process_name, old_status, new_status, old_plan_date, new_plan_date,
old_actual_date, new_actual_date, change_type, remark, changed_by, changed_date)
VALUES
(#{trackingId}, #{processCode}, #{processName}, #{oldStatus}, #{newStatus}, #{oldPlanDate,jdbcType=DATE},
#{newPlanDate,jdbcType=DATE}, #{oldActualDate,jdbcType=DATE}, #{newActualDate,jdbcType=DATE},
#{changeType}, #{remark}, #{changedBy}, GETDATE())
UPDATE plm_proofing_process_column_config
SET sort_no = #{sortNo},
process_category_code = #{processCategoryCode},
active_flag = #{activeFlag},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE site = #{site}
AND bu_no = #{buNo}
AND process_code = #{processCode}
DELETE FROM plm_proofing_process_column_config
WHERE site = #{site}
AND bu_no = #{buNo}
DELETE FROM plm_proofing_process_column_config
WHERE site = #{site}
AND bu_no = #{buNo}
AND process_code IN
#{code}
INSERT INTO plm_proofing_process_column_config
(site, bu_no, process_code, process_label, plan_field, actual_field, status_field, process_category_code, sort_no, active_flag,
create_date, create_by, update_date, update_by)
VALUES
(#{site}, #{buNo}, #{code}, #{label}, #{planField}, #{actualField}, #{statusField}, #{processCategoryCode}, #{sortNo}, #{activeFlag},
GETDATE(), #{createBy}, GETDATE(), #{updateBy})
DELETE FROM plm_proofing_process_category
WHERE site = #{site}
AND bu_no = #{buNo}
INSERT INTO plm_proofing_process_category
(site, bu_no, category_code, category_name, sort_no, create_date, create_by, update_date, update_by)
VALUES
(#{site}, #{buNo}, #{categoryCode}, #{categoryName}, #{sortNo}, GETDATE(), #{createBy}, GETDATE(), #{updateBy})