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 UPDATE plm_proofing_information_tracking SET comments = #{comments,jdbcType=NVARCHAR}, update_date = GETDATE(), update_by = #{updateBy} WHERE id = #{trackingId} 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})