From a2f7f78e8b02e3613c9ff9cf584de2ec0bda075d Mon Sep 17 00:00:00 2001
From: 李彤 <litong@prec-tech.com>
Date: 星期四, 12 五月 2022 09:34:08 +0800
Subject: [PATCH] 替换字段

---
 force-app/main/default/classes/ApplicationForCAHandler.cls |  145 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 131 insertions(+), 14 deletions(-)

diff --git a/force-app/main/default/classes/ApplicationForCAHandler.cls b/force-app/main/default/classes/ApplicationForCAHandler.cls
index 79d405f..50fed32 100644
--- a/force-app/main/default/classes/ApplicationForCAHandler.cls
+++ b/force-app/main/default/classes/ApplicationForCAHandler.cls
@@ -1,14 +1,17 @@
 /**
  * 2022-01-20 create
  * 
- * 1.SFDC鍏堝垱寤轰細璁啀鍙戦�丱BPM鏃讹紝705鎺ュ彛澶勭悊浜嗗喅瑁佹煡鎵惧浼氱殑鎿嶄綔锛宼rigger閲岄渶瑕佹绱㈠苟鏇存柊瀛︿細涓婄殑鏌ユ壘鍐宠
- * 2.鍐宠鐘舵�佹洿鏂颁负涓嶅彲鐢ㄧ殑鏃跺�欙紙椹冲洖銆佸垹闄わ級锛屾竻闄ゅ浼氫笂鐨勫喅瑁佷俊鎭��
+ * 1.鍐宠鐘舵�佹洿鏂颁负涓嶅彲鐢ㄧ殑鏃跺�欙紙椹冲洖銆佸垹闄わ級锛屾竻闄ゅ浼氫笂鐨勫喅瑁佷俊鎭��
+ * 2.opd璁″垝涓婄殑寮曠敤瀛楁杈惧埌涓婄嚎锛屼笉鑳戒娇鐢ㄥ叕寮忓叧鑱斿喅瑁佺殑鐘舵�侊紝鍦ㄥ喅瑁佺姸鎬佹洿鏂版椂锛屾洿鏂癘PD璁″垝涓婄殑鏂囨湰瀛楁銆�
  */
 public without sharing class ApplicationForCAHandler extends Oly_TriggerHandler  {
     private Map<Id, Application_for_Conference_Adjudication__c> newMap;
     private Map<Id, Application_for_Conference_Adjudication__c> oldMap;
     private List<Application_for_Conference_Adjudication__c> newList;
     private List<Application_for_Conference_Adjudication__c> oldList;
+
+    private static Map<String, String> states;
+    private static Map<String, String> cities;
     
     public ApplicationForCAHandler() {
         this.newMap = (Map<Id, Application_for_Conference_Adjudication__c>) Trigger.newMap;
@@ -18,21 +21,46 @@
     }
 
     protected override void beforeUpdate() {
+        // 鏇存柊鏃跺垽鏂槸鍚︽洿鏂颁簡缁戝畾鐨勫浼氾紝濡傛灉缁戝畾澶氫釜瀛︿細涓斾笉鏄禐鍔╀細鏃讹紝娓呯┖缁戝畾鍏崇郴
+        clean_binding();
         clean_campaign();
-        clean_application();
+        update_campaign();
     }
 
     protected override void afterUpdate() {
-
+        // opd璁″垝鐨勫紩鐢ㄥ瓧娈佃揪鍒颁笂绾匡紝鍐宠鐘舵�侀渶瑕佸湪瑙﹀彂鍣ㄩ噷鏇存柊
+        update_status_on_opd();
     }
 
-    // 瀹℃壒涓嶉�氳繃鐨勬椂鍊� 娓呯┖浼氳涓婄殑鍐宠淇℃伅
+    // 鏇存柊鏃跺垽鏂槸鍚︽洿鏂颁簡缁戝畾鐨勫浼氾紝濡傛灉缁戝畾澶氫釜瀛︿細涓斾笉鏄禐鍔╀細鏃讹紝娓呯┖缁戝畾鍏崇郴
+    private void clean_binding() {
+        Map<String, String> app_cam_binds = new Map<String, String>();
+        for (Application_for_Conference_Adjudication__c app : this.newList) {
+            Application_for_Conference_Adjudication__c old_app = this.oldMap.get(app.Id);
+            if (String.isNotBlank(old_app.Num__c) && !old_app.Num__c.equals(app.Num__c) && app.MeetingType__c != '璧炲姪浼�') {
+                app_cam_binds.put(old_app.Id, old_app.Num__c);
+            }
+        }
+        if (app_cam_binds.size() > 0) {
+            List<Campaign> cams = [select Id, MeetingApprovedNo__c, Meeting_Approved_No__c from Campaign where Meeting_Approved_No__c in :app_cam_binds.keySet() and Num__c in :app_cam_binds.values()];
+            if (cams != null && cams.size() > 0) {
+                for (Campaign cam : cams) {
+                    cam.MeetingApprovedNo__c = null;
+                    cam.Meeting_Approved_No__c = null;
+                }
+                update cams;
+            }
+        }
+    }
+
+    // 瀹℃壒涓嶉�氳繃鐨勬椂鍊� 娓呯┖浼氳鍜孫PD璁″垝涓婄殑鍐宠淇℃伅
     private void clean_campaign() {
         List<String> approved_nos = new List<String>();
         for (Application_for_Conference_Adjudication__c app : this.newList) {
             if (app.ProcessState__c == '椹冲洖' || 
                 app.ProcessState__c == '缁堟鐢宠' || 
-                app.ProcessState__c == '鍙栨秷') {
+                app.ProcessState__c == '鍙栨秷' ||
+                app.ProcessState__c == '鍒犻櫎') {
                     approved_nos.add(app.Id);
             }
         }
@@ -45,18 +73,107 @@
                 }
                 update campaigns;
             }
+            List<OPDPlan__c> opdplans = [select Id, Approved_No__c, Approved_Status__c from OPDPlan__c where Approved_No__c in :approved_nos];
+            if (opdplans != null && opdplans.size() > 0) {
+                for (OPDPlan__c plan : opdplans) {
+                    plan.Approved_No__c = null;
+                    plan.Approved_Status__c = null;
+                }
+                update opdplans;
+            }
         }
     }
 
-    // 瀹℃壒涓嶉�氳繃鐨勬椂鍊� 娓呯┖鍐宠涓婄殑浼氳淇℃伅
-    private void clean_application() {
-        List<String> campaign_ids = new List<String>();
-        for (Application_for_Conference_Adjudication__c app : this.newList) {
-            if (app.ProcessState__c == '椹冲洖' || 
-                app.ProcessState__c == '缁堟鐢宠' || 
-                app.ProcessState__c == '鍙栨秷') {
-                app.Num__c = null;
+    // 瀹℃壒閫氳繃鐨勬椂鍊欙紝鏇存柊瀛︿細淇℃伅
+    private void update_campaign() {
+        List<String> app_ids = new List<String>();
+        Map<String, Application_for_Conference_Adjudication__c> app_nos = new Map<String, Application_for_Conference_Adjudication__c>();
+        for (Application_for_Conference_Adjudication__c app : this.newList) { 
+            if (app.ProcessState__c == '瀹℃壒鎴愬姛') {
+                app.Approved_Date__c = Date.today();
+                app_ids.add(app.Id);
+                // 琛ュ厖鍐宠
+                if (app.IsSupplemental__c) {
+                    app_nos.put(app.MeetingApprovedNo__c, app);
+                }
             }
         }
+        Map<String, Campaign> wait_upd_campaigns = new Map<String, Campaign>();
+        if (app_ids.size() > 0) {
+            List<Campaign> campaigns = [select Id, Num__c, MeetingApprovedNo__c, Meeting_Approved_No__c from Campaign where Meeting_Approved_No__c in :app_ids and Meeting_Type__c != '璧炲姪浼�'];
+            if (campaigns.size() > 0) {
+                for (Campaign cam : campaigns) {
+                    Application_for_Conference_Adjudication__c app = this.newMap.get(cam.Meeting_Approved_No__c);
+                    if (app.IsSupplemental__c) {
+                        cam = update_info_from_app(cam, app);
+                    }
+                    wait_upd_campaigns.put(cam.Id, cam);
+                }
+            }
+        }
+        if (app_nos.size() > 0) {
+            List<Campaign> campaigns = [select Id, Num__c, MeetingApprovedNo__c, Meeting_Approved_No__c from Campaign where MeetingApprovedNo__c in :app_nos.keySet()];
+            if (campaigns.size() > 0) {
+                for (Campaign cam : campaigns) {
+                    Application_for_Conference_Adjudication__c app = app_nos.get(cam.MeetingApprovedNo__c);
+                    // 褰撳喅瑁佷笂鐨勪細璁紪鍙峰拰瀛︿細鐨勭紪鍙风浉鍚屾椂锛屾洿鏂扮姸鎬�
+                    if (String.isNotBlank(app.Num__c) && app.Num__c == cam.Num__c) {
+                        cam.Meeting_Approved_No__c = app.Id;
+                        cam = update_info_from_app(cam, app);
+                    }
+                    wait_upd_campaigns.put(cam.Id, cam);
+                }
+            }
+        }
+        if (wait_upd_campaigns.size() > 0) {
+            update wait_upd_campaigns.values();
+        }
+    }
+
+    // 鍐宠鐘舵�佹洿鏂扮殑鏃跺�欙紝鏇存柊opd璁″垝涓婄殑鍐宠鐘舵��
+    private void update_status_on_opd() {
+        List<String> app_ids = new List<String>();
+        for (Application_for_Conference_Adjudication__c app : this.newList) {
+            Application_for_Conference_Adjudication__c old_app = this.oldMap != null ? this.oldMap.get(app.Id) : new Application_for_Conference_Adjudication__c();
+            if (String.isNotBlank(app.ProcessState__c) && String.isNotBlank(old_app.ProcessState__c) && app.ProcessState__c != old_app.ProcessState__c){
+                app_ids.add(app.Id);
+            }
+        }
+        if (app_ids.size() > 0) {
+            List<OPDPlan__c> opdplans = [select Id, Approved_No__c, Approved_Status__c from OPDPlan__c where Approved_No__c in :app_ids];
+            if (opdplans != null && opdplans.size() > 0) {
+                for (OPDPlan__c plan : opdplans) {
+                    plan.Approved_Status__c = this.newMap.get(plan.Approved_No__c).ProcessState__c;
+                }
+                update opdplans;
+            }
+        }
+    }
+
+    // 鏇存柊鍐宠鐨勪俊鎭埌瀛︿細涓�
+    private Campaign update_info_from_app(Campaign cam, Application_for_Conference_Adjudication__c app) {
+        cam.StartDate                        = app.StartDate__c;
+        cam.EndDate                          = app.EndDate__c;
+        cam.Implementation_Purpose__c                   = app.BudgetType__c;
+        cam.OfficeCategory__c                = app.OfficeCategory__c;
+        cam.Meeting_Type__c                  = app.MeetingType__c;
+
+        cam.WorkshopPlace__c                 = app.WorkshopPlace__c;
+        cam.HostName__c                      = app.HostName__c;
+        cam.cooperatorCompany__c             = app.CooperatorCompany__c;
+        cam.Convening_Participants_Num__c    = app.ConveningParticipantsNum__c;
+
+        // OBPM瀵规帴 鏂板瀛楁
+        cam.Expected_Olympus_Attendance__c   = app.ExpectedOlympusAttendance__c;
+        cam.Expected_Hcp_Attendance__c       = app.ExpectedHcpAttendance__c;
+        cam.SponsorshipCategory__c           = app.SponsorshipCategory__c;
+        cam.IsPaidToSponsor__c               = app.IsPaidToSponsor__c;
+        // cam.Activity_Type_Name__c            = app.ActivityTypeName__c;
+        cam.Activity_Type_Name__c            = app.Type_of_adjudication_meeting__c;
+        // 杩欓噷闇�瑕侀澶栧姞鎿嶄綔
+        cam.State_Master__c                  = StateCityUtil.get_state(app.StateMaster__c);                 
+        cam.City_Master__c                   = StateCityUtil.get_city(app.CityMaster__c);
+
+        return cam;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1