/** 20201106 you SWAG-BSC5WP 可能存在的问题 3月份创建的 opd计划是 4月份这时候还没有目标客户,所以没值 以实施日期 为标准 计算当财年 \上财年 的 目标客户 opd计划上 字段 “是否营业目标客户”来源(1/0)::---计划出借备品信息字段 上显示 借出得哪个产品 就去对应得 对象“目标客户”(当年)上匹配对应得字段 (目标客户:)如果有 则显示1 ,没有显示0 “是否有询价 ” 同上 去目标客户上 找 询价数: 如果有值就显示1 否则显示0 “是否已有设备” 同上 去目标客户上 找 保有设备数: 如果有值就显示1 否则显示0 “本期OPD次数” 同上 去目标客户上 找 opd数 累计相加 出借次数 是否产品OPD目标客户 看opd对象 **/ public without sharing class OPDPlanHandler extends Oly_TriggerHandler { /** * Enum representing each of before/after CRUD events on Sobjects */ private Map newMap; private Map oldMap; private List newList; private List oldList; public OPDPlanHandler() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void afterUpdate() { //计划延期后,在延期日新规日报时间 newEventIns(); //计划取消后,删除日报 //cancelEventApply(); //2021-9-16 yjk 当opd计划完成时,更新任务和事件完成 updateTaskAndEvent(); } protected override void beforeUpdate() { // 20201022 mzy SFDC-BUF6LN add //新建时,OPD状态为提交时,OPD无报告申请时 给推广经理赋值 updateMng(); // 20201022 mzy SFDC-BUF6LN end //start SWAG-BSC5WP 20201106 you NewOppPlan(); updateOppPlan(); //end SWAG-BSC5WP 20201106 you } //start SWAG-BSC5WP 20201106 you protected override void afterInsert() { //start SWAG-BSC5WP 20201106 you NewOppPlan(); //end SWAG-BSC5WP 20201106 you } // ***SWAG-BZCAHL***XHL***20210331***START********* protected override void beforeInsert() { beforeOpdPlan(); } private void beforeOpdPlan() { // OPD计划点击"再申请"按钮 创建生成的新OPD计划 的 再申请 复选框 赋值 List originalOpdPlanIdList = new List(); Map originalOpdPlanIdMap = new Map(); List originalOpdPlanApplicationIdList = new List(); Map originalOpdPlanApplicationIdMap = new Map(); for (OPDPlan__c nObj : newList) { if (String.isNotBlank(nObj.OriginalOpdPlan__c) && String.isNotBlank(nObj.OriginalOpdPlanApplication__c)) { // 报错 nObj.OriginalOpdPlan__c.addError('原OPD计划(再申请) 与 原OPD计划(补充申请) 只能一个有值'); } if (String.isNotBlank(nObj.OriginalOpdPlan__c)) { originalOpdPlanIdList.add(nObj.OriginalOpdPlan__c); } if (String.isNotBlank(nObj.OriginalOpdPlanApplication__c)) { originalOpdPlanApplicationIdList.add(nObj.OriginalOpdPlanApplication__c); } //20210422 ljh add SWAG-BZK68V start if (String.isNotBlank(nObj.OriginalOpdPlanRental__c)) { originalOpdPlanApplicationIdList.add(nObj.OriginalOpdPlanRental__c); } //20210422 ljh add SWAG-BZK68V end } system.debug('originalOpdPlanApplicationIdList:'+originalOpdPlanApplicationIdList.size()); //根据模型出借配套 更新 模型出借产品 精琢技术 wql 2021/04/13 start updateModelLending(newList); //根据模型出借配套 更新 模型出借产品 精琢技术 wql 2021/04/13 end // OPD计划 补充申请 system.debug('originalOpdPlanApplicationIdList:'+originalOpdPlanApplicationIdList.size()); if (originalOpdPlanApplicationIdList.size() > 0) { // 获取 原OPD计划(补充申请) 的值,验证必填字段规则 List getOPDPlanList = [SELECT Id,Name, OwnerId, //所有人 Status__c, //状态 OPDPlan_ImplementDate__c, //OPD计划实施日期 OPDPlan_ImplementDate_temp__c, // OPD计划实施日期(Temp) Activity_Type2__c, //拜访区分 Account_Laboratory__c, //科室 OPDPlan_Report__c, //报告书 Campaign__c, //学会 Related_Opportunity1_ID__c, //跟进询价ID1 Related_Opportunity2_ID__c, //跟进询价ID2 NoOpp_Reason__c,//无询价申请理由 OPDType__c, //OPD计划来源 SalesManager__c, //推广经理 SalesManager_Txt__c, PlanProdDetail__c, DelayCancel_Reason__c, Rental_Apply2__c, Rental_Apply2__r.Name, RentalReson__c, //出借目的 noReportStatus__c, //无报告状态 ModelLendingProduct__c, //模型出借产品 CorrespondingRepairNo__c, //对应修理维修NO AttachmentCertificate__c, //附件证明 AdditionalSupport__c //原OPD计划(追加配套用) FROM OPDPlan__c WHERE Id IN:originalOpdPlanApplicationIdList]; system.debug('getOPDPlanList:'+getOPDPlanList.size()); String opdplanNameSql = ''; String soql = 'Select Id,Name From OPDPlan__c where Id != \'\''; for(OPDPlan__c opdplan:getOPDPlanList){ originalOpdPlanApplicationIdMap.put(opdplan.Id, opdplan); String opdplanName = opdplan.Name.indexOf('-') >= 0 ? opdplan.Name.split('-')[0]+'%':opdplan.Name+'%'; if (String.isNotBlank(opdplanNameSql)) { opdplanNameSql += ' OR Name Like \'' + opdplanName +'\''; } else { opdplanNameSql = ' AND ( Name Like \'' + opdplanName +'\''; } } system.debug('opdplanNameSql:'+opdplanNameSql); Map opdplanQuantityMap = new Map(); if (String.isNotBlank(opdplanNameSql)) { soql += opdplanNameSql + ' )'; List getOPDPlanList01 = Database.query(soql); for (OPDPlan__c opdplan :getOPDPlanList01) { String opdplanName = opdplan.Name.indexOf('-') >= 0 ? opdplan.Name.split('-')[0]:opdplan.Name; Integer quantity = 1; if (opdplanQuantityMap.containsKey(opdplanName)) { quantity = opdplanQuantityMap.get(opdplanName) + 1; } opdplanQuantityMap.put(opdplanName,quantity); } } for (OPDPlan__c nObj : newList) { //20210422 ljh update SWAG-BZK68V start //String opdPlanId = nObj.OriginalOpdPlanApplication__c; String opdPlanId = nObj.OriginalOpdPlanApplication__c; String opdPlanIdR = nObj.OriginalOpdPlanRental__c; //if (String.isNotBlank(opdPlanId)) { if (String.isNotBlank(opdPlanId)||String.isNotBlank(opdPlanIdR) ) { if (originalOpdPlanApplicationIdMap.containsKey(opdPlanId) || originalOpdPlanApplicationIdMap.containsKey(opdPlanIdR)) { OPDPlan__c originalOpdPlanApplication = originalOpdPlanApplicationIdMap.get(opdPlanId); //20210422 ljh update SWAG-BZK68V start if(originalOpdPlanApplication == null){ originalOpdPlanApplication = originalOpdPlanApplicationIdMap.get(opdPlanIdR); } //20210422 ljh update SWAG-BZK68V end // 验证 //20210422 ljh update SWAG-BZK68V //if (!nObj.RentalSplit__c) { if (String.isBlank(nObj.OriginalOpdPlanRental__c)) { nobj.SkipValidationRulesAndWorkflows__c = true;//跳过验证规则或工作流 nObj.supplementaryApplication__c = true; nobj.originalOpdRentalApply__c = originalOpdPlanApplication.Rental_Apply2__c; //nobj.originalOpdRentalApplyName__c = originalOpdPlanApplication.Rental_Apply2__r.Name; if (nObj.Account_Laboratory__c != originalOpdPlanApplication.Account_Laboratory__c) { nObj.Account_Laboratory__c.addError('补充申请的OPD计划,不可修改科室的值'); } if ((String.isNotBlank(nObj.RentalReson__c) && !'追加配套'.equals(nObj.RentalReson__c)) || nObj.OPDPlan_ImplementDate__c != originalOpdPlanApplication.OPDPlan_ImplementDate__c) { nObj.addError('出借目的必须是追加配套,且不可修改OPD计划实施日期'); } if (originalOpdPlanApplication.Status__c != '计划中') { nObj.OriginalOpdPlanApplication__c.addError('只有OPD计划状态为计划中,才能进行补充申请'); } } // else { // nObj.PlanProdDetail__c = originalOpdPlanApplication.PlanProdDetail__c; // } nObj.SalesManager__c = originalOpdPlanApplication.SalesManager__c; nobj.SalesManager_Txt__c = originalOpdPlanApplication.SalesManager_Txt__c; nObj.Campaign__c = originalOpdPlanApplication.Campaign__c; String opdplanName = originalOpdPlanApplication.Name; if (opdplanName.indexOf('-') >=0) { opdplanName = opdplanName.split('-')[0]; } nObj.Name = opdplanName + '-' + opdplanQuantityMap.get(opdplanName); system.debug('nObj---->'+nObj); } } } } // OPD计划 再申请 if (originalOpdPlanIdList.size() > 0) { List getOPDPlanList = [SELECT Id,Name,PlanProdDetail__c,Campaign__c,Account_Laboratory__c,Status__c,DelayCancel_Reason__c,RentalApplyId__c,RentalApplyName__c,Rental_Apply2__r.Id,Rental_Apply2__r.Name from OPDPlan__c WHERE Id IN:originalOpdPlanIdList]; for(OPDPlan__c opdplan:getOPDPlanList){ originalOpdPlanIdMap.put(opdplan.Id, opdplan); } for (OPDPlan__c nObj : newList) { String opdPlanId = nObj.OriginalOpdPlan__c; if (String.isNotBlank(opdPlanId)) { if (originalOpdPlanIdMap.containsKey(opdPlanId)) { nObj.PlanProdDetail__c = originalOpdPlanIdMap.get(opdPlanId).PlanProdDetail__c; nObj.Campaign__c = originalOpdPlanIdMap.get(opdPlanId).Campaign__c; nObj.RentalApplyId__c = originalOpdPlanIdMap.get(opdPlanId).Rental_Apply2__r.Id; nObj.RentalApplyName__c = originalOpdPlanIdMap.get(opdPlanId).Rental_Apply2__r.Name; if (nObj.Account_Laboratory__c != originalOpdPlanIdMap.get(opdPlanId).Account_Laboratory__c) { nObj.Account_Laboratory__c.addError('再申请的OPD计划,不可修改科室的值'); } //2021-06-28 mzy update 备品不足 对应的API名为 无备品 //if (originalOpdPlanIdMap.get(opdPlanId).Status__c != '取消' || originalOpdPlanIdMap.get(opdPlanId).DelayCancel_Reason__c != '备品不足' ) { if (originalOpdPlanIdMap.get(opdPlanId).Status__c != '取消' || (originalOpdPlanIdMap.get(opdPlanId).DelayCancel_Reason__c != '无备品' && originalOpdPlanIdMap.get(opdPlanId).DelayCancel_Reason__c != '备品不足')) { //if (originalOpdPlanIdMap.get(opdPlanId).Status__c != '取消' || originalOpdPlanIdMap.get(opdPlanId).DelayCancel_Reason__c != '无备品') { nObj.OriginalOpdPlan__c.addError('只有OPD计划状态为取消,并且延期取消理由为备品不足才可再申请'); } } nObj.Reapply__c = true; } } } } // ***SWAG-BZCAHL***XHL***20210331***END********* //end SWAG-BSC5WP 20201106 you private void newEventIns() { Set oSetIdSet = new Set(); Map opdMap = new Map(); for (OPDPlan__c nObj : newList) { OPDPlan__c oObj = oldMap.get(nObj.Id); if (oObj.OPDPlan_ImplementDate__c != null && nObj.OPDPlan_ImplementDate__c != null // && oObj.OPDPlan_ImplementDate__c < nObj.OPDPlan_ImplementDate__c) { && oObj.OPDPlan_ImplementDate__c != nObj.OPDPlan_ImplementDate__c ) { oSetIdSet.add(oObj.Id); opdMap.put(oObj.Id,oObj); } } system.debug('oSetIdSet+++++' + oSetIdSet); List eventList = new List(); List eveCloneList = new List(); List taskList = new List(); if (oSetIdSet.size() > 0) { eventList = [select Id, StartDateTime, DurationInMinutes, EventStatus__c,Task_ID__c, OPDPlan_Flag__c, Location, whatid__c, Related_Opportunity1_ID__c, Activity_Type2__c, Related_Opportunity1__c, Purpose_Type__c, Related_Service1__c, Related_Service1_ID__c, Activity_Purpose__c, Purpose_TypeFSE__c, Purpose_TypeEscFSE__c, Activity_PurposeFSE__c, Activity_PurposeEscFSE__c, Opd_Plan__c, Opd_Plan_ImplementDate__c, //2021-08-13 mzy SWAG-C5RAZV 事件——计划 延期 调查 start delayReason__c, //2021-08-13 mzy SWAG-C5RAZV 事件——计划 延期 调查 end Subject from Event where Opd_Plan__c in: oSetIdSet]; } if (eventList.size() > 0) { list dailyReportOPDIdList = new list(); //Map tskOpdMap = new Map(); //Map tskeventMap = new Map(); for (Event evn : eventList) { System.debug('new时间:'+newMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c +'旧时间'+OldMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c); if(newMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c < OldMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c){ //提前 Datetime startD = evn.StartDateTime; Date startDateTime = Date.newInstance(startD.year(), startD.month(), startD.day()); Integer betweenDay = startDateTime.daysBetween(evn.Opd_Plan_ImplementDate__c); evn.StartDateTime = evn.StartDateTime.addDays(betweenDay); Task__c tempTask = new Task__c(); tempTask.Id = newMap.get(evn.Opd_Plan__c).Task_ID__c; temptask.Activity_Date__c = newMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c; taskList.add(tempTask); }else{ if(!(newMap.get(opdMap.get(evn.Opd_Plan__c).id)).isDailyReportDelay__c){ //延期 Event eveClone = evn.clone(); Datetime startD = eveClone.StartDateTime; Date startDateTime = Date.newInstance(startD.year(), startD.month(), startD.day()); Integer betweenDay = startDateTime.daysBetween(evn.Opd_Plan_ImplementDate__c); eveClone.StartDateTime = eveClone.StartDateTime.addDays(betweenDay); eveClone.delayReason__c = null; //20210527 zh 任务框架修改 start eveClone.EventStatus__c = '02 接受'; if (opdMap.containsKey(evn.Opd_Plan__c)) { eveClone.Task_ID__c = opdMap.get(evn.Opd_Plan__c).Task_ID__c; eveClone.PlanProdDetail__c = opdMap.get(evn.Opd_Plan__c).PlanProdDetail__c; } //20210527 zh 任务框架修改 end //2021-08-13 mzy SWAG-C5RAZV 事件——计划 延期 调查 start if(newMap.get(evn.Opd_Plan__c).DelayCancel_Reason__c!=null && evn.delayReason__c == null){ String DelayReason = newMap.get(evn.Opd_Plan__c).DelayCancel_Reason__c; System.debug('延期理由:'+DelayReason); if('医院试用改期'.equals(DelayReason)){ evn.delayReason__c = '客户时间变更或冲突'; evn.delayReasonSelect__c = '客户时间变更或冲突'; }else if('工作计划变化'.equals(DelayReason)){ evn.delayReason__c = '与其他突发事件冲突'; evn.delayReasonSelect__c = '与其他突发事件冲突'; }else if('备品到货推迟'.equals(DelayReason)){ evn.delayReason__c = '备品未到'; evn.delayReasonSelect__c = '备品未到'; }else if('手术改期'.equals(DelayReason)){ evn.delayReason__c = '无合适病例(适合病例流失)OPD延期'; evn.delayReasonSelect__c = '无合适病例(适合病例流失)OPD延期'; }else if('日期填写错误'.equals(DelayReason)){ evn.delayReason__c = '日期填写错误'; evn.delayReasonSelect__c = '日期填写错误'; }else if('医院设备不到位'.equals(DelayReason)){ evn.delayReason__c = '医院设备不到位'; evn.delayReasonSelect__c = '医院设备不到位'; }else if('其他'.equals(DelayReason)){ evn.delayReason__c = '其他'; evn.delayReasonSelect__c = '其他'; }else if('系统自动延期'.equals(DelayReason)){ evn.delayReason__c = '其他'; evn.delayReasonSelect__c = '其他'; evn.delayReasonOther__c = DelayReason; } evn.delayToDate__c = newMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c; } evn.isDelay__c = true; //2021-08-13 mzy SWAG-C5RAZV 事件——计划 延期 调查 end evn.OPDPlan_Flag__c = false; //2021-066-25 mzy OPD延期 if(evn.task_ID__c == eveClone.Task_ID__c){ String subjectName = evn.Subject; if(String.isNotBlank(subjectName)&&subjectName.contains('【')){ evn.Subject = subjectName.split('【')[0] + '【已延期】'; }else { evn.Subject = subjectName +'【已延期】'; } evn.task_ID__c = null; evn.EventStatus__c = '05 延期'; Task__c tempTask = new Task__c(); tempTask.Id = newMap.get(evn.Opd_Plan__c).Task_ID__c; temptask.Activity_Date__c = newMap.get(evn.Opd_Plan__c).OPDPlan_ImplementDate__c; taskList.add(tempTask); } evn.Opd_Plan__c = null; //2021-066-25 mzy OPD延期 //2022-1-7 yjk opd延期新建事件 if(eveClone.Subject!=null&&String.isNotBlank(eveClone.Subject)){ eveClone.Subject = eveClone.Subject.Split('【')[0]; } eveCloneList.add(eveClone); }else{ dailyReportOPDIdList.add(evn.Opd_Plan__c); //tskOpdMap.put(opdMap.get(evn.Opd_Plan__c).Task_ID__c,evn.Opd_Plan__c); } } } if(dailyReportOPDIdList.size() > 0){ List opdList = [select id,Task_ID__c,Task_ID__r.delayTask__c from OPDPlan__c where id in :dailyReportOPDIdList]; for(OPDPlan__c opdPlan : opdList){ opdPlan.Task_ID__c = opdPlan.Task_ID__r.delayTask__c; } update opdList; } //system.debug('eveCloneList+++++' + eveCloneList); //system.debug('eventList+++++' + eventList); update eventList; insert eveCloneList; update taskList; } } private void updateMng() { Boolean userFlg = false; for (OPDPlan__c n : newList) { if ((String.isNotBlank(n.Status__c) && n.Status__c.equals('提交') && (String.isBlank(oldMap.get(n.Id).Status__c) || oldMap.get(n.Id).Status__c.equals('草案中')))) { // 设置是否取User的FLG userFlg = True; } //2022-01-05 mzy 无报告申请报错 start if((String.isNotBlank(n.noReportStatus__c) && n.noReportStatus__c.equals('提交') && (String.isBlank(oldMap.get(n.Id).noReportStatus__c) || oldMap.get(n.Id).noReportStatus__c.equals('已保存')))){ // 设置是否取User的FLG userFlg = True; } //2021-01-05 mzy 无报告申请报错 end } // 取得User审批人 List uList = new List(); if (userFlg) { uList = [select Id, SalesManager__c, SalesManager__r.Name from user where SalesManager__r.IsActive = true And id = :UserInfo.getUserId()]; } // 设置审批人 for (OPDPlan__c n : newList) { if ((String.isNotBlank(n.Status__c) && n.Status__c.equals('提交') && (String.isBlank(oldMap.get(n.Id).Status__c) || oldMap.get(n.Id).Status__c.equals('草案中'))) || ((String.isNotBlank(n.noReportStatus__c) && n.noReportStatus__c.equals('提交') && (String.isBlank(oldMap.get(n.Id).noReportStatus__c) || oldMap.get(n.Id).noReportStatus__c.equals('已保存'))))) { if (uList.size() > 0) { String MId = uList[0].SalesManager__c; if (String.isBlank(MId)) { n.addError('经理无效,请联系管理员。'); } else { n.SalesManager__c = MId; // SWAG-BZNBKZ 审批人文本化 LHJ Start n.SalesManager_Txt__c = uList[0].SalesManager__r.Name; // SWAG-BZNBKZ 审批人文本化 LHJ End } }else { n.addError('经理无效/离职,请联系管理员。'); } }else //推广经理发生变化赋值文本字段 if(oldMap.get(n.Id).SalesManager__c != n.SalesManager__c){ //推广经理 等于空 if(String.isBlank(n.SalesManager__c)){ n.SalesManager_Txt__c = ''; }else { List tempUList = new List(); tempUList = [select Id, Name from user where IsActive = true And id = :n.SalesManager__c]; if(tempUList.size() > 0){ n.SalesManager_Txt__c = tempUList[0].Name; }else { n.addError('经理无效/离职,请联系管理员。'); } } } } } private void NewOppPlan() { //opd创建时把符合条件的目标客户带过来 //将OPD计划的战略科室id放到List 当做客户-目标客户的检索条件 Map accsMap = new Map(); // 将OPD计划的战略科室id作为key ,本财年作为value 用于下面判断 Map opdMap = new Map(); List opdPlanList = new List(); //上一财年 Map opdLastMap = new Map(); map opplansmap = new map(); //set OpdTargetAcc = new set(); //opp计划上的本财年的目标客户 // set OpdTargetLastAcc = new set(); //opp计划上的上财年的目标客户 Map OpdTargetAcc = new Map(); Map OpdTargetLastAcc = new Map(); Integer buffer = Integer.valueOf(System.Label.opd_oldDate_update);//为了刷新prod上的老数据 Map reapplyopdMap = new Map(); Map sApplicationopdMap = new Map(); for (OPDPlan__c t : newList) { // Trigger.new[0].addError('=t.OCM_category_ID__c=='+t.OCM_category_ID__c); if (Trigger.isInsert || (Trigger.isUpdate && (oldMap.get(t.id).Account_Laboratory__c != t.Account_Laboratory__c || buffer==1))) { if (t.OCM_category_ID__c != null && t.OPDPlan_ImplementDate__c != null) { accsMap.put(t.OCM_category_ID__c, t.Id); Date dateToday = t.OPDPlan_ImplementDate__c; // Date yesterday = dateToday.addDays(-1); Integer year = dateToday.year(); Integer month = dateToday.month(); if (month < 4) { year -= 1; } // String ocmYear = year + '年度'; 本财年 String annual = year - 1867 + 'P'; opdMap.put(t.OCM_category_ID__c, annual); //上财年 String annual1 = year - 1868 + 'P'; opdLastMap.put(t.OCM_category_ID__c, annual1); } } if (Trigger.isInsert && String.isNotBlank(t.OriginalOpdPlan__c)) { reapplyopdMap.put(t.OriginalOpdPlan__c, t.Id); } //20210422 ljh update SWAG-BZK68V //if (Trigger.isInsert && String.isNotBlank(t.OriginalOpdPlanApplication__c) && t.RentalSplit__c ) { if (Trigger.isInsert && String.isNotBlank(t.OriginalOpdPlanRental__c)) { sApplicationopdMap.put(t.OriginalOpdPlanRental__c, t.Id); } } // ***SWAG-BZCAHL***XHL***20210331***START********* // 原OPD计划下的 计划出借备品 和 附件 if (reapplyopdMap != null && reapplyopdMap.size() > 0) { insertCloneData(reapplyopdMap); } // ***SWAG-BZCAHL***XHL***20210331***END********* // ***SWAG-BZK68V***XHL***20210420***START********* // 备品拆单 携带 原OPD计划下的 计划出借备品 和 附件 if (sApplicationopdMap != null && sApplicationopdMap.size() >0) { insertCloneData(sApplicationopdMap); } // ***SWAG-BZK68V***XHL***20210420***END********* //检索OPD计划的战略科室的所有客户-目标客户 // 20210624 SQL优化 Start //if (accsMap != null) { if (accsMap.size() > 0) { // 20210624 SQL优化 End List anotList = [select Id, OCM_Period__c, Submit_Customer_target_new__c, Account__c from Account_Number_of_target__c where Account__c IN :accsMap.keySet()]; for (OPDPlan__c t : newList) { OPDPlan__c opdplan = new OPDPlan__c(); for (Account_Number_of_target__c an : anotList) { //判断是否为同一战略科室 String subStr = an.Account__c; //Trigger.new[0].addError(subStr.SubString(0,15)+'==='+t.OCM_category_ID__c); if (subStr.SubString(0, 15) == t.OCM_category_ID__c) { //判断本年度财年是否相同 当期的客户-目标客户 opdplan.Id = accsMap.get(subStr.SubString(0, 15)); if (opdMap.get(subStr.SubString(0, 15)) == an.OCM_Period__c) { if (Trigger.isInsert) { opdplan.OPD_Customers_Target__c = an.Id; opdPlanList.add(opdplan); } if (Trigger.isUpdate && (oldMap.get(t.id).Account_Laboratory__c != t.Account_Laboratory__c || buffer==1)) { t.OPD_Customers_Target__c = an.Id; } if(t.OPDType__c=='学会'){ OpdTargetAcc.put(t.id,an.Id+''); //本财年 } } system.debug('上财年' + opdLastMap.get(subStr.SubString(0, 15)) + '==' + an.OCM_Period__c); //判断上年度财年是否相同 上期的客户-目标客户 if (opdLastMap.get(subStr.SubString(0, 15)) == an.OCM_Period__c) { if (Trigger.isInsert) { opdplan.OPD_Customers_Target_Last__c = an.Id; opdPlanList.add(opdplan); } if (Trigger.isUpdate && (oldMap.get(t.id).Account_Laboratory__c != t.Account_Laboratory__c || buffer==1)) { t.OPD_Customers_Target_Last__c = an.Id; } if(t.OPDType__c=='学会'){ OpdTargetLastAcc.put(t.id,an.Id+'');//上财年 dcListMap.keySet() dcListMap.values() } } } } } } system.debug('==opdPlanList==' + opdPlanList); if(opdPlanList!=null){ opplansmap.putall(opdPlanList); } if (Trigger.isInsert && opplansmap.size() > 0) { update opplansmap.values(); } if (!OpdTargetAcc.isEmpty() || !OpdTargetLastAcc.isEmpty()){ upsertOppPlan(OpdTargetAcc,OpdTargetLastAcc); } //Trigger.new[0].addError('==anotList =='+anotList+'更新的数据:'+opdPlanList); //更新OPD计划对象上的客户-目标客户的查找字段 // if (Trigger.isInsert &&opdPlanList.size() > 0) update opdPlanList; } // 创建 克隆数据 private void insertCloneData(Map reapplyopdMap){ // 查找原OPD计划下 计划出借备品 List getPREList = [select Id,Name,Event_ID__c,OPD_Plan__c,Campaign__c,Rental_Quantity__c,Rental_Equipment__c from Plan_Rental_Equipment__c WHERE OPD_Plan__c In:reapplyopdMap.keySet()]; if (getPREList.size() > 0) { List insertCloneList = new List(); for (Plan_Rental_Equipment__c pre:getPREList){ Plan_Rental_Equipment__c preClone = new Plan_Rental_Equipment__c(); preClone = pre.clone(); preClone.Id = null; preClone.Event_ID__c = null; preClone.Campaign__c = null; preClone.OPD_Plan__c = reapplyopdMap.get(pre.OPD_Plan__c); insertCloneList.add(preClone); } if (insertCloneList.size() > 0) { insert insertCloneList; } } List getAttachmentList = [SELECT Id, Body, Name, ParentId FROM Attachment WHERE ParentId In:reapplyopdMap.keySet()]; List insertAttachmentCloneList = new List(); if (getAttachmentList.size() > 0 ) { for(Attachment att :getAttachmentList){ Attachment attClone = new Attachment(); attClone = att.clone(); attClone.Id = null; attClone.Body = att.Body; attClone.Name = att.Name; attClone.ParentId = reapplyopdMap.get(att.ParentId); insertAttachmentCloneList.add(attClone); } if (insertAttachmentCloneList.size() > 0) { insert insertAttachmentCloneList; } } } private void updateOppPlan() { //set OpdTargetAcc = new set(); //opp计划上的本财年的目标客户 //set OpdTargetLastAcc = new set(); //opp计划上的上财年的目标客户 Map OpdTargetAcc = new Map(); Map OpdTargetLastAcc = new Map(); Integer buffer = Integer.valueOf(System.Label.opd_oldDate_update);//为了刷新prod上的老数据 //存放模型出借配套的id List opdModelLendList = new List (); for (OPDPlan__c t : newList) { if (Trigger.isUpdate && (oldMap.get(t.id).Status__c != t.Status__c && t.Status__c == '审批中' || buffer==1)) { // OpdTargetAcc.add(t.OPD_Customers_Target__c); //本财年 // OpdTargetLastAcc.add(t.OPD_Customers_Target_Last__c);//上财年 OpdTargetAcc.put(t.id,t.OPD_Customers_Target__c); OpdTargetLastAcc.put(t.id,t.OPD_Customers_Target_Last__c); } if (Trigger.isUpdate && oldMap.get(t.id).Name != t.Name && !t.NoNSupplementaryApplication__c) { t.Name = oldMap.get(t.id).Name; } t.NoNSupplementaryApplication__c = false; //更新 模型出借产品 精琢技术 wql 2021/04/13 start if(Trigger.isUpdate && (oldMap.get(t.id).ModelLending__c != t.ModelLending__c)){ opdModelLendList.add(t); } // SWAG-BUF6J5 20201112 you // SWAG-BXW4AH XHL 20210312 因OPD计划 系统自动延期 后 会清空 备品出借优先度与排序日期 // 因此 注掉 Start // if(Trigger.isUpdate && oldMap.get(t.id).OPDPlan_ImplementDate__c!= t.OPDPlan_ImplementDate__c){ // Date olddate=oldMap.get(t.id).OPDPlan_ImplementDate__c; // Date newdate=t.OPDPlan_ImplementDate__c; // System.debug('尝试反引用空对象 : '+ olddate +'*****'+newdate +'(((((' + t); // if((null==olddate && newdate!=null )|| (olddate.month() != newdate.month())){ // Integer a; // t.OPDLendSort__c=a; // t.SortDate__c = null; // } // } // SWAG-BXW4AH XHL 20210312 因OPD计划 系统自动延期 后 会清空 备品出借优先度与排序日期 // 因此 注掉 End } if(opdModelLendList.size()>0){ updateModelLending(opdModelLendList); } if (!OpdTargetAcc.isEmpty() || !OpdTargetLastAcc.isEmpty()) { upsertOppPlan(OpdTargetAcc,OpdTargetLastAcc); } } //2021-9-16 yjk 当opd任务完成时,将对应的任务和事件也完成 ----start----- private void updateTaskAndEvent(){ List taskIdList = new List(); for (OPDPlan__c opdP: newList) { if('完毕'.equals(opdP.Status__c) && !'完毕'.equals(oldMap.get(opdP.Id).Status__c)&&opdP.Task_ID__c != null){ taskIdList.add(opdP.Task_ID__c); } } if(taskIdList == null || taskIdList.size() == 0 ){ return; } //2022-1-5 yjk opd任务的才能完成 List tskupdIdList = new List(); List taskList = [select id,taskStatus__c from task__c where NeedActivity__c = false and id in :taskIdList]; for(Task__c tsk : taskList){ tskupdIdList.add(tsk.id); tsk.taskStatus__c = '03 完成'; } if(taskList != null && taskList.size()>0){ update taskList; } List eventList = [select id,EventStatus__c from event where Task_ID__c in :tskupdIdList]; for(Event evt : eventList){ evt.EventStatus__c = '03 完成'; } if(eventList != null &&eventList.size()>0){ update eventList; } } //2021-9-16 yjk 当opd任务完成时,将对应的任务和事件也完成 ----end----- private void upsertOppPlan(Map OpdTargetAcc,Map OpdTargetLastAcc){ List opdPlanList = new List(); map opplansmap = new map(); set OpdPlanDetail = new set(); //计划出借备品信息. Integer FIELDMAX = 200; //去mapping表中找到名字为targetKeyProduct的一条数据 SS_Batch_Column_Mapping__c mpdMapping = SS_Batch_Column_Mapping__c.getValues('targetKeyProduct'); //对应目标客户中的一系列 opd对象 用来判断“是否产品OPD目标客户” List column = new List(); Map> tempImportantProduct = new Map>(); //对应目标客户中的一系列 目标客户字段 用来判断“是否营业目标客户” List columnSalesTar = new List(); Map> tempImportantSalesTar = new Map>(); //对应目标客户中的一系列 询价数 用来判断“是否有询价” List columnOppCnt = new List(); Map tempImportantOppCnt = new Map(); //对应目标客户中的一系列 设备数 用来判断“是否已有设备” List columnAsset = new List(); Map tempImportantAsset = new Map(); //对应目标客户中的一系列 OPD数(今年) 用来计算本期OPD次数 List columnOPDAmount = new List(); Map tempImportantOPDAmount = new Map(); //对应目标客户中的一系列 借出次数 用来统计借出次数 List columnRental = new List(); Map tempImportantRental = new Map(); for (Integer i = 1; i <= FIELDMAX; i++) { String lpadI = ('00' + i).right(3); String fromColumn = 'From_Column_' + lpadI + '__c';//假设执行此时 值是 From_Column_115__c String apiStr = String.valueOf(mpdMapping.get(fromColumn)); //取字段fromColumn上存储的数据为Rental_Cnt_USG400__c if (String.isBlank(apiStr) == false) { String ssColumn = 'SS_Column_' + lpadI + '__c';//SS_Column_115__c String ssApiStr = String.valueOf(mpdMapping.get(ssColumn));//取得是 字段SS_Column_115__c 上的存储的数据 USG-400 //Trigger.new[0].addError('=apiStr=='+apiStr+'==ssColumn =='+ssColumn+'==ssApiStr =='+ssApiStr ); //打印的值 Rental_Cnt_USG400__c==ssColumn ==SS_Column_115__c==ssApiStr ==USG-400 if (i < 101) { //opd对象 column.add(apiStr); List ssApiStrList = new List(ssApiStr.Split(',')); tempImportantProduct.put(apiStr, ssApiStrList); } if (i >= 118 && i < 127) { //目标客户 columnSalesTar.add(apiStr); List ssApiStrList1 = new List(ssApiStr.Split(',')); tempImportantSalesTar.put(apiStr, ssApiStrList1); } if (i >= 129 && i < 144) { //询价数 1,0 columnOppCnt.add(apiStr); tempImportantOppCnt.put(apiStr, ssApiStr); } if (i >= 146 && i < 161) { //设备数 1,0 columnAsset.add(apiStr); tempImportantAsset.put(apiStr, ssApiStr); } if (i >= 163 && i < 178) { //OPD数 本期/上期 累计数 columnOPDAmount.add(apiStr); tempImportantOPDAmount.put(apiStr, ssApiStr); } if (i >= 101 && i < 116) { //出借次数 累计数 columnRental.add(apiStr); tempImportantRental.put(apiStr, ssApiStr); } } } // Trigger.new[0].addError('=columnAsset='+columnAsset+'--columnOppCnt--'+columnOppCnt+'--columnSalesTar--'+columnSalesTar+'--column--'+column); // Trigger.new[0].addError('=column=='+column+'==tempImportantProduct=='+tempImportantProduct ); Map acctarList = new Map([select id, OPD_CV290__c, OPD_EUME2__c, OPD_290Miro__c, OPD_GFUCT260__c, OPD_OTVS300S400__c, OPD_CV170__c, OPD_190Main__c, OPD_ENG__c, OPD_TB__c, Sales_target_CV290__c, Sales_target_290Miro__c, Sales_target_EUME2__c, Sales_target_GFUCT260__c, Sales_target_OTVS300S400__c, Sales_target_CV170__c, Sales_target_190Main__c, Sales_target_ENG__c, Sales_target_TB__c, Opp_cnt_290MiroBF__c, Opp_cnt_290MiroGI__c, Opp_cnt_290MiroGI_CF__c, Opp_cnt_290MiroGI_Plus__c, Opp_cnt_CV170__c, Opp_cnt_CV190__c, Opp_cnt_CV290__c, Opp_cnt_ESG400__c, Opp_cnt_EUME2__c, Opp_cnt_GFUCT260__c, Opp_cnt_OTVS190__c, Opp_cnt_OTVS300__c, Opp_cnt_OTVS400__c, Opp_cnt_TB__c, Opp_cnt_USG400__c, Opp_cnt_190Main__c, Asset_Cnt_290MiroBF__c, Asset_Cnt_290MiroGI__c, Asset_Cnt_290MiroGI_CF__c, Asset_Cnt_290MiroGI_Plus__c, Asset_Cnt_CV170__c, Asset_Cnt_CV190__c, Asset_Cnt_CV290__c, Asset_Cnt_ESG400__c, Asset_Cnt_EUME2__c, Asset_Cnt_GFUCT260__c, Asset_Cnt_OTVS190__c, Asset_Cnt_OTVS300__c, Asset_Cnt_OTVS400__c, Asset_Cnt_TB__c, Asset_Cnt_USG400__c, Asset_Cnt_190Main__c, OPD_amount_290MiroBF__c, OPD_amount_290MiroGI__c, OPD_amount_290MiroGI_CF__c, OPD_amount_290MiroGI_Plus__c, OPD_amount_CV170__c, OPD_amount_CV190__c, OPD_amount_CV290__c, OPD_amount_ESG400__c, OPD_amount_EUME2__c, OPD_amount_GFUCT260__c, OPD_amount_OTVS190__c, OPD_amount_OTVS300__c, OPD_amount_OTVS400__c, OPD_amount_TB__c, OPD_amount_USG400__c, OPD_amount_190Main__c, Rental_Cnt_290MiroBF__c, Rental_Cnt_290MiroGI__c, Rental_Cnt_290MiroGI_CF__c, Rental_Cnt_290MiroGI_Plus__c, Rental_Cnt_CV170__c, Rental_Cnt_CV190__c, Rental_Cnt_CV290__c, Rental_Cnt_ESG400__c, Rental_Cnt_EUME2__c, Rental_Cnt_GFUCT260__c, Rental_Cnt_OTVS190__c, Rental_Cnt_OTVS300__c, Rental_Cnt_OTVS400__c, Rental_Cnt_TB__c, Rental_Cnt_USG400__c, Rental_Cnt_190Main__c from Account_Number_of_target__c where id in :OpdTargetAcc.values()]);//查询目标客户 本财年的 system.debug('==本财年' + acctarList.size()); Map acctarlastList = new Map([select id, OPD_amount_290MiroBF__c, OPD_amount_290MiroGI__c, OPD_amount_290MiroGI_CF__c, OPD_amount_290MiroGI_Plus__c, OPD_amount_CV170__c, OPD_amount_CV190__c, OPD_amount_CV290__c, OPD_amount_ESG400__c, OPD_amount_EUME2__c, OPD_amount_GFUCT260__c, OPD_amount_OTVS190__c, OPD_amount_OTVS300__c, OPD_amount_OTVS400__c, OPD_amount_TB__c, OPD_amount_USG400__c, OPD_amount_190Main__c from Account_Number_of_target__c where id = :OpdTargetLastAcc.values()]);//查询目标客户 上财年的 system.debug('==上财年' + acctarlastList); for (OPDPlan__c t : newList) { if(Trigger.isUpdate){ Integer intes; t.if_OPDTarget__c = intes; t.if_HaveSalestarget__c = intes; t.if_HaveOpportunity__c = intes; t.if_HaveEquipment__c = intes; t.Cnt_OPD_ThisYear__c = 0; t.Cnt_OPD_LastYear__c = 0; t.Cnt_Rentals__c = 0; } String opdct = OpdTargetAcc.get(t.id); String opdla = OpdTargetLastAcc.get(t.id); if (acctarList.containskey(opdct) || acctarlastList.containskey(opdla)) { // || if(t.PlanProdDetail__c!=null){ String ppd = t.PlanProdDetail__c;//不能去掉所有空格,因为有一个特殊得(OTV-S400 4K主机).replaceAll(' ', ''); //GI-290镜子*3; GI-290镜子CF*1; OTV-S400 4K主机*3; OTV-S190*2; TB*8 String[] strs = ppd.split(';');//(GI-290镜子*3, GI-290镜子CF*1, OTV-S400 4K主机*3, OTV-S190*2, TB*8) for (Integer i = 0; i < strs.size(); i++) { OpdPlanDetail.add(strs[i].split('\\*')[0].trim());//{ GI-290镜子CF, OTV-S190, OTV-S400 4K主机, TB, GI-290镜子} } } system.debug('上财年是否有符合条件得数据==' + acctarlastList.containskey(opdla)); //Trigger.new[0].addError('==tempImportantProduct=='+tempImportantProduct+'==OpdPlanDetail=='+OpdPlanDetail); Decimal bqopdsum = 0;//计算 本期OPD次数 Decimal cntrensum = 0;//计算 出借次数 Decimal bqopdlastsum = 0;//计算 上期OPD次数 //20210701 SWAG-C4A4RJ you 为了不重复累计数据 Integer cv_190_In=0; //出街次数 Boolean cv_190_flag =false;//出借次数判断 Integer this_cv_190_In=0; //今年opd计划数 Boolean this_cv_190_flag =false;//今年opd计划数判断 Integer last_cv_190_In=0; //去年opd计划数 Boolean last_cv_190_flag =false;//去年opd计划数判断 OPDPlan__c opdplan = new OPDPlan__c(); for (String opd : OpdPlanDetail) { opdplan.id = t.id; if(acctarList !=null && acctarList.size() >0){ if (column != null) { for (Integer i = 0; i < column.size(); i++) { //是否产品OPD目标客户 List titleAccout = tempImportantProduct.get(column[i]); system.debug(titleAccout + '===opd===' + opd); if (titleAccout.contains(opd)) { // system.debug(column[i] + '==anotList ==' + acctarList.get(opdct).get(column[i]) + '====' + acctarList.get(opdct).get(column[i])); //Trigger.new[0].addError(column[i]+'==anotList =='+acctarList.get(opdct).get(column[i])); if (acctarList.get(opdct).get(column[i]) != null && acctarList.get(opdct).get(column[i]) != 0) { if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.if_OPDTarget__c = 1; opdPlanList.add(opdplan); }else{ t.if_OPDTarget__c = 1; } break; } } } } if (acctarList.containskey(opdct)) { if (columnSalesTar != null) { for (Integer i = 0; i < columnSalesTar.size(); i++) { //是否有营业目标客户 List titleAccout1 = tempImportantSalesTar.get(columnSalesTar[i]); if (titleAccout1.contains(opd)) { system.debug(columnSalesTar[i] + '==是否有营业目标客户==' + acctarList.get(opdct).get(columnSalesTar[i])); if (acctarList.get(opdct).get(columnSalesTar[i]) != null && acctarList.get(opdct).get(columnSalesTar[i]) != 0) { if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.if_HaveSalestarget__c = 1; opdPlanList.add(opdplan); }else{ t.if_HaveSalestarget__c = 1; } break; } } } } if (columnOppCnt != null) { for (Integer i = 0; i < columnOppCnt.size(); i++) { //是否有询价数 String titleAccout2 = tempImportantOppCnt.get(columnOppCnt[i]); if (opd.indexOf(titleAccout2) != -1) { if (acctarList.get(opdct).get(columnOppCnt[i]) != null && acctarList.get(opdct).get(columnOppCnt[i]) != 0) { if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.if_HaveOpportunity__c = 1; opdPlanList.add(opdplan); }else{ t.if_HaveOpportunity__c = 1; } break; } } } } if (columnAsset != null) { for (Integer i = 0; i < columnAsset.size(); i++) { //是否已有设备 String titleAccout3 = tempImportantAsset.get(columnAsset[i]); if (opd.indexOf(titleAccout3) != -1) { system.debug('==opd==' + opd + '==titleAccout3==' + titleAccout3 + '==columnAsset[i]==' + columnAsset[i]); system.debug('==' + opdct + '==opd==' + acctarList.get(opdct).get(columnAsset[i])); if (acctarList.get(opdct).get(columnAsset[i]) != null && acctarList.get(opdct).get(columnAsset[i]) != 0) { if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.if_HaveEquipment__c = 1; opdPlanList.add(opdplan); }else{ t.if_HaveEquipment__c = 1; } break; } } } } if (columnRental != null) {//目标客户上得api字段 for (Integer i = 0; i < columnRental.size(); i++) { //出借次数 String titleAccout4 = tempImportantRental.get(columnRental[i]); //取出来得是CV-190或者是OTV-S190 if (opd == titleAccout4) { system.debug('出借次数' + opd + '==titleAccout4==' + titleAccout4 + '==columnRental[i]==' + columnRental[i]); if (acctarList.get(opdct).get(columnRental[i]) != null && acctarList.get(opdct).get(columnRental[i]) != 0) { Decimal aa = acctarList.get(opdct).get(columnRental[i]) == null ? 0 : Decimal.valueOf(String.valueOf(acctarList.get(opdct).get(columnRental[i]))); system.debug('===出借次数' + aa); //20210701 SWAG-C4A4RJ you 为了不重复累计数据 if(opd=='CV-190' || opd=='OTV-S190'){ cv_190_In ++; cv_190_flag = true; }else{ cv_190_flag = false; } system.debug('zheli=='+cv_190_In+'==false=='+cv_190_flag); if(cv_190_In < 2 || !cv_190_flag){ cntrensum += aa; } } } } if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.Cnt_Rentals__c = cntrensum; opdPlanList.add(opdplan); }else{ t.Cnt_Rentals__c = cntrensum; } } } } if (columnOPDAmount != null) { for (Integer i = 0; i < columnOPDAmount.size(); i++) { //本期OPD次数 String titleAccout5 = tempImportantOPDAmount.get(columnOPDAmount[i]); if (opd == titleAccout5) { if(acctarList !=null && acctarList.size()>0){ if (acctarList.containskey(opdct) && acctarList.get(opdct).get(columnOPDAmount[i]) != null && acctarList.get(opdct).get(columnOPDAmount[i]) != 0) { system.debug('=columnOPDAmount[i]==' + columnOPDAmount[i] + '=本期OPD次数=' + acctarList.get(opdct).get(columnOPDAmount[i])); Decimal aa = acctarList.get(opdct).get(columnOPDAmount[i]) == null ? 0 : Decimal.valueOf(String.valueOf(acctarList.get(opdct).get(columnOPDAmount[i]))); system.debug('===aa' + aa); //20210701 SWAG-C4A4RJ you 为了不重复累计数据 if(opd=='CV-190' || opd=='OTV-S190'){ this_cv_190_In ++; this_cv_190_flag = true; }else{ this_cv_190_flag = false; } if(this_cv_190_In < 2 || !this_cv_190_flag){ bqopdsum += aa; } } } if(acctarlastList !=null && acctarlastList.size()>0){ if (acctarlastList.containskey(opdla) && acctarlastList.get(opdla).get(columnOPDAmount[i]) != null && acctarlastList.get(opdla).get(columnOPDAmount[i]) != 0) { system.debug('=columnOPDAmount[i]==' + columnOPDAmount[i] + '=上期OPD次数=' + acctarlastList.get(opdla).get(columnOPDAmount[i])); Decimal bb = acctarlastList.get(opdla).get(columnOPDAmount[i]) == null ? 0 : Decimal.valueOf(String.valueOf(acctarlastList.get(opdla).get(columnOPDAmount[i]))); system.debug('===bb' + bb); //20210701 SWAG-C4A4RJ you 为了不重复累计数据 if(opd=='CV-190' || opd=='OTV-S190'){ last_cv_190_In ++; last_cv_190_flag = true; }else{ last_cv_190_flag = false; } if(last_cv_190_In < 2 || !last_cv_190_flag){ bqopdlastsum += bb; } } } } } if (Trigger.isInsert && t.OPDType__c=='学会') { opdplan.Cnt_OPD_ThisYear__c = bqopdsum; opdplan.Cnt_OPD_LastYear__c = bqopdlastsum; opdPlanList.add(opdplan); }else{ t.Cnt_OPD_ThisYear__c = bqopdsum; t.Cnt_OPD_LastYear__c = bqopdlastsum; } } // } } } system.debug('=来源直接是学会得=opdPlanList==' + opdPlanList); opplansmap.putall(opdPlanList); if (Trigger.isInsert && opplansmap.size() > 0) { update opplansmap.values(); } } //更新 模型出借产品 精琢技术 wql 2021/04/13 start private void updateModelLending(List oplanList){ Map ModelLendMap = new Map (); //查询 模型出借配套表 获取模型出借产品 List ModelLendList= [select id,Name,Product__c,productName__c,ModelAndProductName__c from ModelLendingProduct__c ]; //将所有的数据都检索处理 目前<100条 未来再考虑传参缩小数据范围 if(ModelLendList.size()>0){ for(ModelLendingProduct__c ml :ModelLendList){ ModelLendMap.put(ml.id,ml.Product__c); } } //①新增 ②更新 同步赋值即可 if(oplanList.size() >0){ for(OPDPlan__c opd :oplanList){ if(opd.ModelLending__c == null){ opd.ModelLendingProduct__c = null; }else{ opd.ModelLendingProduct__c = ModelLendMap.get(opd.ModelLending__c); } } } } }