public with sharing class LexOPDSupplementaryController { public LexOPDSupplementaryController(){ integer i = 1; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } @AuraEnabled public static OPDPlan__c init(String recordId){ try{ OPDPlan__c res = [SELECT id,OPDPlan_ImplementDate__c,Status__c, OriginalOpdPlanRental__c,Rental_Apply2__c,Account_Laboratory__c,Related_Opportunity1_ID__c, PlanProdDetail__c,Cnt_OPD_LastYear__c,Cnt_OPD_ThisYear__c,Cnt_Rentals__c, lastMonth_Plan__c,SalesManager__c,OPDType__c,OriginalOpdPlanApplication__c, BuchangApprovalManagerSales__c,SalesManager_Txt__c, Name,supplementaryApplication__c ,OPD_DelayCancel_Last__c , EndDateTime__c ,StartDateTime__c FROM OPDPlan__c Where Id = : recordId]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); } return null; } //获取当前登录人的 id 备品智能化add sx start @AuraEnabled public static UserResult UserInfo_Owner() { UserResult result = new UserResult(); ID myUserID = UserInfo.getUserId(); try { User tempUser = [select Id,Job_Category__c,isFormal_Stuff__c,FirstName,LastName,Province__c from user where id = : myUserID ]; result.id = tempUser.Id; result.isFormalStuff = tempUser.isFormal_Stuff__c; result.firstName = tempUser.FirstName == null ? '' : tempUser.FirstName; result.lastName = tempUser.LastName == null ? '' : tempUser.LastName; result.userProvince = tempUser.Province__c; result.userJobCategory = tempUser.Job_Category__c; } catch (exception e) { result.result = e.getMessage(); } return result; } //获取当前登录人的 id 备品智能化add sx end @AuraEnabled public static List getTheOPDPlan(String Id){ try{ List res = [Select Id, Name,supplementaryApplication__c ,OriginalOpdPlanApplication__c FROM OPDPlan__c WHERE supplementaryApplication__c = true AND OriginalOpdPlanApplication__c = :Id]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); } return null; } @AuraEnabled public static InitData init2(String recordId){ InitData res = new initData(); OPDPlan__c opdUpdate = new OPDPlan__c(); Set quoteIdSet = new Set(); Set opdIdSet = new Set(); Set renModelSet = new Set(); List proModelList = new List(); Integer proSameNum = 0; Integer proAccSameNum = 0; Integer proModelNum = 0; Integer proStopNum = 0; String planNotFromDetai = ''; String planFromDetai = ''; try{ //备品智能化 2023-10-19 update by dzk Start 验证OPD计划与询价报价行项目无一对应 List repList = [SELECT Id,OPDPlan_ImplementDate__c,Status__c,OriginalOpdPlanApplication__r.RentalReson__c,Related_Opportunity1_ID__r.Estimation_Id__c, OriginalOpdPlanRental__c,Rental_Apply2__c,Account_Laboratory__c,Related_Opportunity1_ID__c,AttachmentCertificate__c,NeedReport__c, PlanProdDetail__c,Cnt_OPD_LastYear__c,Cnt_OPD_ThisYear__c,Cnt_Rentals__c,HospitalID__c,NoOpp_Reason__c,RentalApplyId__c,Related_Opportunity2_ID__c, lastMonth_Plan__c,SalesManager__c,OPDType__c,OriginalOpdPlanApplication__c,Campaign__c,IsJump__c,JumpCause__c, Rental_Apply_Flag__c,CampaignRecodeTypeId__c,Internal_in_charge_province__c,CampaignStatus__c,OCM_category_ID__c, BuchangApprovalManagerSales__c,SalesManager_Txt__c,IF_Approved__c,Approved_No__c,Approved_Status__c,OriginalOpdPlan__c, Name,supplementaryApplication__c ,OPD_DelayCancel_Last__c , EndDateTime__c ,StartDateTime__c,RentalReson__c,StayOrNot__c FROM OPDPlan__c Where Id = : recordId]; List planREList = [SELECT Id,Quote__c, Rental_Quantity__c,MDM_Model_No__c,ProductCode__c FROM Plan_Rental_Equipment__c WHERE OPD_Plan__c =: recordId]; //备品智能化 2023-12-13 update by dzk Start 验证OPD计划与询价报价行项目无一对应 // 取得符合备品借出条件的产品信息 List quoteLineItemList = [SELECT Id,QuoteId, Product2.Name, Product2.Asset_Model_No__c FROM QuoteLineItem WHERE QuoteId =: repList[0].Related_Opportunity1_ID__r.Estimation_Id__c]; //备品智能化 2023-12-13 update by dzk End 验证OPD计划与询价报价行项目无一对应 Map planRenUpdateMap = new Map(); for(QuoteLineItem quoteItem : quoteLineItemList){ for(Plan_Rental_Equipment__c planRE : planREList){ Plan_Rental_Equipment__c planRenUpdate = new Plan_Rental_Equipment__c(); if(quoteItem.Product2.Asset_Model_No__c == planRE.MDM_Model_No__c){ proSameNum = proSameNum + 1; // 备品智能化 2023-12-20 add by dzk Start // 从科室创建的OPD计划,先选产品后填写询价,提交审批时 // 如果产品与询价最新报价的产品匹配,将报价编码重新赋值 planRenUpdate.Id = planRE.Id; planRenUpdate.Quote__c = quoteItem.QuoteId; planRenUpdateMap.put(planRenUpdate.Id,planRenUpdate); } } } List planRenUpdateList = new List(planRenUpdateMap.values()); Update planRenUpdateList; List planRenNewList = [SELECT Id,Quote__c, Rental_Quantity__c,MDM_Model_No__c FROM Plan_Rental_Equipment__c WHERE OPD_Plan__c =: recordId]; opdUpdate.Id = repList[0].Id; if(repList[0].Related_Opportunity1_ID__c != null){ for(Plan_Rental_Equipment__c renNew : planRenNewList){ if(renNew.Quote__c == null){ planNotFromDetai += renNew.MDM_Model_No__c + '*' + renNew.Rental_Quantity__c + '; '; }else{ planFromDetai += renNew.MDM_Model_No__c + '*' + renNew.Rental_Quantity__c + '; '; } } opdUpdate.EquipmentNotFromOpp__c = planNotFromDetai; opdUpdate.EquipmentFromOpp__c = planFromDetai; } // 备品智能化 2023-12-20 add by dzk End // 从科室创建的OPD计划,先选产品后填写询价,提交审批时 // 如果产品与询价最新报价的产品匹配,将报价编码重新赋值 if(repList[0].Related_Opportunity1_ID__c == null || repList[0].OriginalOpdPlanApplication__c != null){ proSameNum = 1; } // 备品智能化2023-10-19 Add by dzk End 验证OPD计划与询价报价行项目无一对应 // v2023-10-20 ADD by dzk Start 同一科室下,计划中的OPD计划是否包含相同产品 if(proSameNum != 0){ List renList = [SELECT Id,Name FROM Rental_Apply__c WHERE Shippment_ng_num__c > 0 AND Account__c =: repList[0].Account_Laboratory__c]; List renAppSetList = [SELECT Id,Rental_Apply__r.Name,Loaner_code_F__c FROM Rental_Apply_Equipment_Set__c WHERE Rental_Apply__r.Shippment_ng_num__c > 0 AND Rental_Apply__r.Account__c =: repList[0].Account_Laboratory__c]; // 备品智能化 2023-12-14 ADD by dzk Start 增加备品上所需要的重复产品信息 // opdUpdate.Id = repList[0].Id; res.renAppName = ''; res.proNewNum = 0; opdUpdate.RepeatRentalModel__c = ''; Map renAppNameMap = new Map(); Map renAppModelMap = new Map(); for(Rental_Apply_Equipment_Set__c renAppSet : renAppSetList){ for(Plan_Rental_Equipment__c planRE : planREList){ if(planRE.MDM_Model_No__c == renAppSet.Loaner_code_F__c){ proAccSameNum = proAccSameNum += 1; if(!renAppNameMap.containsKey(renAppSet.Rental_Apply__r.Name)){ if(proAccSameNum == renAppSetList.size()){ res.renAppName += renAppSet.Rental_Apply__r.Name; }else{ res.renAppName += renAppSet.Rental_Apply__r.Name + ','; } } if(!renAppModelMap.containsKey(planRE.MDM_Model_No__c)){ opdUpdate.RepeatRentalModel__c += planRE.MDM_Model_No__c + ','; } renAppModelMap.put(planRE.MDM_Model_No__c,planRE.MDM_Model_No__c); renAppNameMap.put(renAppSet.Rental_Apply__r.Name,renAppSet.Rental_Apply__r.Name); } } } if(renAppNameMap.size() == 1){ List valuesList = new List(renAppNameMap.values()); res.renAppName = valuesList[0]; } // 备品智能化 2023-12-14 ADD by dzk End 增加备品上所需要的重复产品信息 } update opdUpdate; // 备品智能化 2023-10-20 ADD by dzk End 同一科室下,计划中的OPD计划是否包含相同产品 // 备品智能化 2023-10-27 ADD by dzk Start 防止出借目的修改,提交时OPD计划下存在不符合条件的备品数据 String rentalReson = repList[0].RentalReson__c; for(Plan_Rental_Equipment__c reList : planREList){ renModelSet.add(reList.ProductCode__c); } String query = 'SELECT Id, Name, Loaner_categoryII__c FROM Product2 '; query += ' WHERE ProductCode =: renModelSet '; // 判断出借目的为追加配套 if(repList[0].RentalReson__c == '追加配套'){ rentalReson = repList[0].OriginalOpdPlanApplication__r.RentalReson__c; } if(rentalReson == 'OPD' || rentalReson == '对应修理' ){ query += ' AND (Loaner_categoryII__c IN (\'模型\') '; query += ' OR (Loaner_categoryII__c NOT IN (\'台车\',\'监视器\',\'录像设备\') AND Manual_Entry__c = false AND SFDA_Status__c IN (\'停止\'))) '; }else if(rentalReson == '新产品评价' ){ List newProList = [SELECT Id,Name,Product_Type__c FROM Product2 WHERE ProductCode =: renModelSet AND Product_Type__c = '新产品']; res.proNewNum = newProList.size(); query += ' AND Loaner_categoryII__c IN (\'模型\') '; }else if(rentalReson == '演示'){ query += ' AND Loaner_categoryII__c IN (\'模型\') '; }else if(rentalReson == '模型出借'){ query += ' AND (Loaner_categoryII__c NOT IN (\'模型\') '; query += ' OR (SFDA_Status__c IN (\'停止\') AND Manual_Entry__c = false)) '; } system.debug('query-------------' + query); if(String.isNotBlank(rentalReson)){ proModelList = Database.query(query); } if(proModelList.size() != 0){ proStopNum = 1; } res.proModelNum = proModelNum; res.proStopNum = proStopNum; res.rentalReson = rentalReson; // 备品智能化 2023-11-27 ADD by dzk End 防止出借目的修改,提交时OPD计划下存在不符合条件的备品数据 res.opdPlanRecord = repList[0]; res.proAccSameNum = proAccSameNum; res.proSameNum = proSameNum; res.opdStatusProcessState = System.Label.StatusProcessState; res.opdCampaignTypeId = Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Service_trainig').getRecordTypeId(); res.opdInternalinchargeprovince = repList[0].Internal_in_charge_province__c == null ? '' : repList[0].Internal_in_charge_province__c; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } } @AuraEnabled public static String NewAndUpdateOPDStatus(String Id, Boolean RepeatRentalSign){ try{ //sx 20231109 备品智能化add start Rental_Apply__c tempRa = new Rental_Apply__c(); List raList = [SELECT Id, Status__c FROM Rental_Apply__c WHERE OPDPlan__c = :Id order by CreatedDate DESC LIMIT 1 ]; if(raList.size()>0){ if(raList[0].Status__c == '申请中(OPD未通过)'){ tempRa.Id = raList[0].Id; tempRa.Status__c = '填写完毕'; UPDATE tempRa; } // UPDATE tempRa; } //sx 20231109 备品智能化add end OPDPlan__c res =new OPDPlan__c(); res.Id = Id; res.Status__c='提交'; //杜 智能化重复审批标识 add start if(RepeatRentalSign == true){ res.RepeatRentalSign__c=true; } //杜 智能化重复审批标识 add end update res; return 'success'; } catch (Exception e) { String messageText=''; if(e.getMessage().contains(':')){ String eMessage =e.getMessage(); Integer left = eMessage.indexOf(',')+1; Integer right= eMessage.lastIndexOf(':')+1; if(right>eMessage.length()||right<=left){ right=eMessage.length(); } String mes=eMessage.substring(left,right); messageText = mes; return messageText + e.getLineNumber() + '行'; }else{ messageText=e.getMessage(); return messageText + e.getLineNumber() + '行'; } } } // @AuraEnabled // public static String UpdateSign(String recordId){ // try{ // OPDPlan__c res =new OPDPlan__c(); // res.Id = recordId; // res.Status__c='提交'; // res.RepeatRentalSign__c=true; // update res; // return 'success'; // } // catch (DMLException e) { // return e.getDmlMessage(0); // } // } @AuraEnabled public static OPDPlan__c init3(String recordId){ OPDPlan__c res = new OPDPlan__c(); try{ res = [SELECT Id,Name,Status__c,DelayCancel_Reason__c ,Account_Laboratory__c,OPDType__c,RentalReson__c, Related_Opportunity1_ID__c, CorrespondingRepairNo__c,AdditionalSupport__c,Campaign__c, NoOpp_Reason__c,ModelLending__c,ModelLendingProduct__c, PlanProdDetail__c FROM OPDPlan__c WHERE Id = :recordId]; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); } return res; } @AuraEnabled public static List reapplyFindOPD(String Id){ List res =new List(); try{ res =[SELECT Id, Name,Reapply__c FROM OPDPlan__c WHERE Reapply__c = true AND OriginalOpdPlan__c = :Id]; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } return res; } //新建OPD计划(科室) 客户上的按钮 @AuraEnabled public static Account initNewOPDButton(String recordId){ Account res = new Account(); try{ res = [SELECT Id,Is_Active__c FROM Account WHERE Id=:recordId]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } } //新建OPD计划(询价) 询价上的按钮 @AuraEnabled public static Opportunity initNewOPDButton2(String recordId){ Opportunity res = new Opportunity(); try{ res = [SELECT Id,AccountId,Name ,StageName FROM Opportunity WHERE Id=:recordId]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } } //取消按钮 @AuraEnabled public static OPDPlan__c initCancleSumbit(String recordId){ OPDPlan__c res = new OPDPlan__c(); try{ res = [SELECT Id,Status__c,Name FROM OPDPlan__c WHERE Id=:recordId]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } } //OPD报告 @AuraEnabled public static OPDPlan__c initReportSubmit(String recordId){ OPDPlan__c res = new OPDPlan__c(); try{ res = [SELECT Id,Status__c,Name,Rental_Apply2_Status_New__c,Rental_Apply1_Status_New__c, Rental_Apply3_Status_New__c,Rental_Apply4_Status_New__c,Rental_Apply5_Status_New__c, Related_Opportunity1_ID__c,Related_Opportunity2_ID__c,Activity_Type2__c, Account_Laboratory__c,OCM_category_ID__c,OCM_category_Name__c,HospitalID__c, HospitalName__c,Rental_Apply2__c FROM OPDPlan__c WHERE Id=:recordId]; return res; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return null; } } //提交审批失败发送邮件提醒 // @AuraEnabled // public static void sendFailEmail(String recordId){ // try { // EmailTemplate et=[Select id from EmailTemplate where name =:'OPD计划提交审批创建备品失败' limit 1]; // List currUser = [ // SELECT Id, Name, Email, Default_Referable_Apply_Equipment_Center__c // FROM User // WHERE Id = :UserInfo.getUserId()]; // List emails = new List(); // Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); // mail = Messaging.renderStoredEmailTemplate(et.Id, null , recordId); // mail.setSaveAsActivity(false); // List toAddresses = new List(); // //toAddresses.add(currUser[0].Email); // toAddresses.add('@sunxia@prec-tech.com'); // List ccAddresses = new List(); // if (String.isNotBlank(System.Label.AuthRental_Apply_TEST)) { // String[] toAddresses1 = System.Label.AuthRental_Apply_TEST.split(','); // if(toAddresses1 != null) { // mail.setCcAddresses(toAddresses1); // } // } // mail.setToAddresses(toAddresses); // //mail.setCcAddresses(ccAddresses); // emails.add(mail); // Messaging.sendEmail(emails); // } // catch (Exception e) { // System.debug(e.getMessage()); // } // } //自定义模板发送邮件 @AuraEnabled public static void sendTemperatureEmail(String opdName, String ErrorMessage, String opdId){ // 邮件List集合 try { List emails = new List(); List currUser = [ SELECT Id, Name, Email, Default_Referable_Apply_Equipment_Center__c FROM User WHERE Id = :UserInfo.getUserId()]; System.debug('currUser==='+currUser.get(0)); System.debug('currUser==='+currUser[0]); // 发件人 OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address = 'olympus@prec-tech.com']; //To Cc List toAddresses = new List(); toAddresses.add(currUser.get(0).Email); String[] ccAddresses; if (String.isNotBlank(System.Label.AuthRental_Apply_TEST)) { ccAddresses = System.Label.AuthRental_Apply_TEST.split(','); } Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); mail.setSaveAsActivity(false); mail.setToAddresses(toAddresses); mail.setCcAddresses(ccAddresses); mail.setSubject('OPD计划:' + opdName + '自动新建备品借出申请失败'); mail.setOrgWideEmailAddressId(owea.get(0).Id); String emailBody = ''; emailBody += '您好:
'; emailBody += 'OPD计划自动创建备品申请失败,还请参考如下信息调整相关内容,谢谢。
'; emailBody += ErrorMessage+'
'; emailBody += 'OPD计划链接如下:
'; emailBody += URL.getSalesforceBaseUrl().toExternalForm() + '/' + opdId; //地址变成获取 20240106 sx 修改 mail.setHtmlBody(emailBody); emails.add(mail); Messaging.sendEmail(emails); } catch (Exception e) { System.debug('sendTemperatureEmail====' + e.getMessage()); } } @AuraEnabled public static String getRecordTypeByNameAndSobject(String Name ,String SobjectType){ List res = new List(); try{ res = [SELECT Id FROM RecordType WHERE Name=:Name AND SobjectType=: SobjectType]; return res[0].Id; } catch(Exception e){ System.debug(LoggingLevel.INFO, '*** e: ' + e); return e.getMessage(); } } @AuraEnabled public static String cloneOPD(String recordId){ String s=''; try { String objectName = 'OPDPlan__c'; // 要获取字段的对象名 Map globalDescribe = Schema.getGlobalDescribe(); Schema.SObjectType objType = globalDescribe.get(objectName); if (objType != null) { Schema.DescribeSObjectResult objDescribe = objType.getDescribe(); Map fieldMap = objDescribe.fields.getMap(); s+='SELECT '; // 现在,fieldMap中包含了对象的所有字段信息 for (String fieldName : fieldMap.keySet()) { if(!fieldName.equals('id')) s+=fieldName+','; } s=s.removeEnd(','); s+=' FROM OPDPlan__c where id=\''+recordId+'\''; system.debug('SQL:'+s); List opportunitys = Database.query(s); s=''; if(opportunitys.size()>0){ system.debug('in!'); for (String fieldName : fieldMap.keySet()) { String formaF=fieldMap.get(fieldName).getDescribe().getName(); if(opportunitys.get(0).get(fieldName)!=null&&!opportunitys.get(0).get(fieldName).equals('null')) s+=formaF+'='+opportunitys.get(0).get(fieldName)+','; } s=s.removeEnd(','); return s; } } return s; } catch (Exception e) { System.debug('lexCopyToBaseController init error:'+e.getMessage()); } return s; } //新建申请单 sx 备品智能化 add 20231008 start @AuraEnabled public static String newRentalApply(String recordId){ OPDPlan__c opd = [SELECT Id, Name, OriginalOpdPlan__c, OriginalOpdPlanApplication__c, OPDType__c, Campaign__c, Status__c, EquipmentFromOpp__c, EquipmentNotFromOpp__c, Account_Laboratory__c, OCM_category_ID__c, HospitalID__c, IsJump__c, Related_Opportunity1_ID__c, RentalApplyId__c, RentalReson__c, OPDPlan_ImplementDate__c, JumpCause__c, Approved_Status__c, Approved_No__c, Approved_No__r.Name, NoOpp_Reason__c, PlanProdDetail__c, PlanProdDetailSys__c, OwnerId, Owner.Name, OriginalOpdPlan__r.RentalApplyId__c from OPDPlan__c where Id = :recordId]; System.debug('====newRentalApply===start===' + recordId ); //新建备品 产品分类(GI/SP) String productCategory; //备品配套 Map fixMap = new Map(); List fixList = new List(); Map fixDeduplicateMap = new Map(); //配套去重 List fixSets = new List(); // 去重之后的配套List //备品配套明细 List fixSetDetails = new List(); //分配配套 从OPD计划的 List updateraesList = new List(); list updateraedelList = new List(); //配套和配套明细的关系 <配套Id, List<明细>> Map> setDetalMap = new Map>(); List fixtureModels = new List(); if(opd.PlanProdDetail__c != null){ List fixSetStrings = opd.PlanProdDetail__c.split(';'); if(fixSetStrings.size() > 0){ for(String fixSet : fixSetStrings){ String tempString = fixSet.trim(); if(tempString.indexOf('*')!= -1){ fixtureModels.add(tempString.substring(0, tempString.indexOf('*'))); } } } } if(fixtureModels.size() > 0){ //计划出借备品的第一个产品上去判断 如果产品第一分类 List firstProduct = [SELECT Id, Family FROM Product2 WHERE Fixture_Model_No_T__c = :fixtureModels]; if(firstProduct.size()>0){ if(firstProduct[0].Family == 'GI'){ productCategory = firstProduct[0].Family; }else{ productCategory = 'SP'; } } fixList = [SELECT Id, Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels Order By Name]; System.debug('fixList====='+fixList); for(Fixture_Set__c fix : fixList){ if(!fixDeduplicateMap.containsKey(fix.Fixture_Set_Body_Model_No__c)){ fixDeduplicateMap.put(fix.Fixture_Set_Body_Model_No__c,fix); } } System.debug('fixDeduplicateMap====='+fixDeduplicateMap.values()); fixSets = fixDeduplicateMap.values(); System.debug('fixSets====='+fixSets); fixMap = new Map([SELECT Id FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels]); fixSetDetails = [SELECT Id, SortInt__c, Fixture_Set__c FROM Fixture_Set_Detail__c WHERE Is_Body__c = true AND Fixture_Set__c IN :fixSets]; System.debug('fixMap====='+ fixMap); System.debug('fixSetDetails====='+fixSetDetails); //一个备品配套 对应各自明细 for(Fixture_Set_Detail__c fixDetail : fixSetDetails){ if(setDetalMap.containsKey(fixDetail.Fixture_Set__c)){ setDetalMap.get(fixDetail.Fixture_Set__c).add(fixDetail); }else{ List temp = new List(); temp.add(fixDetail); setDetalMap.put(fixDetail.Fixture_Set__c,temp); } } System.debug('setDetalMap===='+setDetalMap); }else{ return '该OPD计划的【计划出借备品信息】没有填写'; } //新建备品借出申请 Rental_Apply__c newRa = new Rental_Apply__c(); try { //新产品评价 if(opd.RentalReson__c == '新产品评价'){ newRa.Demo_purpose1__c = '产品试用'; newRa.demo_purpose2__c = '新产品评价'; newRa.OPDPlan__c = opd.Id; newRa.Hospital__c = opd.HospitalID__c; newRa.Name = '*'; newRa.Strategic_dept__c = opd.OCM_category_ID__c; //战略科室 newRa.Person_In_Charge__c = opd.OwnerId; newRa.applyUser__c = opd.OwnerId; newRa.Account__c = opd.Account_Laboratory__c; newRa.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); newRa.Product_category__c = productCategory; newRa.OPDProduct__c = opd.EquipmentNotFromOpp__c; newRa.OppProduct__c = opd.EquipmentFromOpp__c; newRa.Is_Auto__c = true; //newRa.Hope_Lonaer_date_Num__c = 1; INSERT newRa; //分配配套 分配配套明细 for(Fixture_Set__c fix : fixSets){ Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); raes.Name = '*'; raes.Rental_Apply__c = newRa.Id; raes.Fixture_Set__c = fix.Id; raes.IndexFromUniqueKey__c = 1; raes.Rental_Num__c = 1; updateraesList.add(raes); } INSERT updateraesList; for(Rental_Apply_Equipment_Set__c raes : updateraesList){ if(fixMap.containsKey(raes.Fixture_Set__c)){ Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c(); raesdel.Name = '*'; raesdel.Rental_Apply__c = newRa.Id; raesdel.Fixture_Set_Detail__c = setDetalMap.get(raes.Fixture_Set__c)[0].Id; raesdel.Rental_Num__c = 1; raesdel.Rental_Apply_Equipment_Set__c = raes.Id; raesdel.Is_Body__c = true; raesdel.IndexFromUniqueKey__c = 1; raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(raes.Fixture_Set__c)[0].SortInt__c + ''; updateraedelList.add(raesdel); } } INSERT updateraedelList; if(updateraedelList.size()>0){ for(Rental_Apply_Equipment_Set__c raes : updateraesList){ for(Rental_Apply_Equipment_Set_Detail__c raesd : updateraedelList){ if(raes.Id == raesd.Rental_Apply_Equipment_Set__c){ System.debug('更新配套第一个明细'); raes.First_RAESD__c = raesd.Id; } } } UPDATE updateraesList; } return '备品新建成功'; } //学会 if(opd.OriginalOpdPlan__c == null && opd.OriginalOpdPlanApplication__c == null){ if(opd.OPDType__c == '学会' && opd.Campaign__c != null){ System.debug('学会=======' + opd.Campaign__c); //决裁状态 = 草稿 发送自动生成失败提醒 List legalString = System.Label.StatusProcessState.split(','); System.debug('legalString='+legalString); if(legalString.contains(opd.Approved_Status__c) && opd.Approved_Status__c != '草稿'){ sendTemperatureEmail(opd.Name,'已申请决裁但决裁状态不符合条件', opd.Id); return '已申请决裁但决裁状态不符合条件'; } newRa.Demo_purpose1__c = '产品试用'; newRa.demo_purpose2__c = '学会展会'; newRa.Campaign__c = opd.Campaign__c; newRa.Account__c = opd.Account_Laboratory__c; newRa.Strategic_dept__c = opd.OCM_category_ID__c; newRa.Hospital__c = opd.HospitalID__c; newRa.OPDPlan__c = opd.Id; newRa.Person_In_Charge__c = opd.OwnerId; //备品出借担当 newRa.applyUser__c = opd.OwnerId; //操作者 newRa.Loaner_received_staff__c = opd.Owner.Name; //收件人姓名 newRa.IsJump__c = opd.IsJump__c; newRa.JumpCause__c = opd.JumpCause__c; newRa.Name = '*'; newRa.Approved_State_Create__c = opd.Approved_Status__c; newRa.ApprovedNo_Create__c = opd.Approved_No__r.Name; newRa.Product_category__c = productCategory; newRa.OPDProduct__c = opd.EquipmentNotFromOpp__c; newRa.OppProduct__c = opd.EquipmentFromOpp__c; newRa.Is_Auto__c = true; newRa.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); }else if(String.isNotBlank(opd.Related_Opportunity1_ID__c)){ newRa.Demo_purpose1__c = '产品试用'; newRa.demo_purpose2__c = '试用(有询价)'; newRa.Follow_UP_Opp__c = opd.Related_Opportunity1_ID__c; newRa.Account__c = opd.Account_Laboratory__c; newRa.Strategic_dept__c = opd.OCM_category_ID__c; newRa.Hospital__c = opd.HospitalID__c; newRa.OPDPlan__c = opd.Id; newRa.Person_In_Charge__c = opd.OwnerId; newRa.applyUser__c = opd.OwnerId; newRa.Loaner_received_staff__c = opd.Owner.Name; newRa.IsJump__c = opd.IsJump__c; newRa.JumpCause__c = opd.JumpCause__c; newRa.Name = '*'; newRa.Approved_State_Create__c = opd.Approved_Status__c; newRa.ApprovedNo_Create__c = opd.Approved_No__r.Name; newRa.Product_category__c = productCategory; newRa.OPDProduct__c = opd.EquipmentNotFromOpp__c; newRa.OppProduct__c = opd.EquipmentFromOpp__c; newRa.Is_Auto__c = true; //newRa.Hope_Lonaer_date_Num__c = 1; newRa.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); }else{ newRa.Demo_purpose1__c = '产品试用'; newRa.demo_purpose2__c = '试用(无询价)'; newRa.NoOpp_Reason__c = opd.NoOpp_Reason__c; newRa.Account__c = opd.Account_Laboratory__c; newRa.Strategic_dept__c = opd.OCM_category_ID__c; newRa.Hospital__c = opd.HospitalID__c; newRa.OPDPlan__c = opd.Id; newRa.Person_In_Charge__c = opd.OwnerId; newRa.applyUser__c = opd.OwnerId; newRa.Loaner_received_staff__c = opd.Owner.Name; newRa.IsJump__c = opd.IsJump__c; newRa.JumpCause__c = opd.JumpCause__c; newRa.Name = '*'; newRa.Approved_State_Create__c = opd.Approved_Status__c; newRa.ApprovedNo_Create__c = opd.Approved_No__r.Name; newRa.Product_category__c = productCategory; newRa.OPDProduct__c = opd.EquipmentNotFromOpp__c; newRa.OppProduct__c = opd.EquipmentFromOpp__c; newRa.Is_Auto__c = true; //newRa.Hope_Lonaer_date_Num__c = 1; newRa.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); } //INSERT newRa; Database.SaveResult insertRaResult = Database.insert(newRa, false); if(!insertRaResult.isSuccess()){ Database.Error emsg = insertRaResult.getErrors()[0]; sendTemperatureEmail(opd.Name, emsg.getMessage(), opd.Id); return '备品新建失败' + emsg.getMessage(); } //分配配套 分配配套明细 如果是学会类型的 ,明细插队申请自动打开 Allow_Adjust_Queue_Flag__c for(Fixture_Set__c fix : fixSets){ Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); raes.Name = '*'; raes.Rental_Apply__c = newRa.Id; raes.Fixture_Set__c = fix.Id; raes.IndexFromUniqueKey__c = 1; raes.Rental_Num__c = 1; updateraesList.add(raes); } INSERT updateraesList; for(Rental_Apply_Equipment_Set__c raes : updateraesList){ if(fixMap.containsKey(raes.Fixture_Set__c)){ Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c(); raesdel.Name = '*'; raesdel.Rental_Apply__c = newRa.Id; raesdel.Fixture_Set_Detail__c = setDetalMap.get(raes.Fixture_Set__c)[0].Id; raesdel.Rental_Num__c = 1; raesdel.Rental_Apply_Equipment_Set__c = raes.Id; raesdel.Is_Body__c = true; raesdel.IndexFromUniqueKey__c = 1; raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(raes.Fixture_Set__c)[0].SortInt__c + ''; if(newRa.demo_purpose2__c == '学会展会'){ raesdel.Allow_Adjust_Queue_Flag__c = true; raesdel.jumpReason__c = '默认插队标记'; } updateraedelList.add(raesdel); } } INSERT updateraedelList; if(updateraedelList.size()>0){ for(Rental_Apply_Equipment_Set__c raes : updateraesList){ for(Rental_Apply_Equipment_Set_Detail__c raesd : updateraedelList){ if(raes.Id == raesd.Rental_Apply_Equipment_Set__c){ System.debug('更新配套第一个明细'); raes.First_RAESD__c = raesd.Id; } } } UPDATE updateraesList; } return newRa.Id+''; } } catch (Exception e) { //sendTemperatureEmail(opd.Name, e.getDmlMessage(0) , opd.Id); try { Integer n = e.getNumDml(); //System.assert(false, 'Exception 2 expected'); sendTemperatureEmail(opd.Name, e.getDmlMessage(0) , opd.Id); return '备品新建失败' + e.getDmlMessage(0); } catch (TypeException ee) { System.assertEquals('Procedure is only valid for System.DmlException and System.MailException', ee.getMessage()); sendTemperatureEmail(opd.Name, ee.getMessage() , opd.Id); return '备品新建失败' + ee.getMessage(); } } // 原OPD计划(再申请) OriginalOpdPlan__c 原OPD计划(补充申请) OriginalOpdPlanApplication__c if(String.isNotBlank(opd.OriginalOpdPlan__c)){ List opdIdList = new List(); String s=''; List OPDPlans1 = new List(); try { //获取旧的OPD计划 List opdList = [SELECT Id,Name,OriginalOpdPlan__c FROM OPDPlan__c WHERE Id = :recordId]; if(opdList.size() > 0){ for (OPDPlan__c opdId : opdList) { opdIdList.add(opdId.OriginalOpdPlan__c); } String objectName = 'Rental_Apply__c'; // 要获取字段的对象名 Map globalDescribe = Schema.getGlobalDescribe(); Schema.SObjectType objType = globalDescribe.get(objectName); if(objType != null){ Schema.DescribeSObjectResult objDescribe = objType.getDescribe(); Map fieldMap = objDescribe.fields.getMap(); s+='SELECT '; //跟进询价1的Name deloitte-zhj 20230921 // 现在,fieldMap中包含了对象的所有字段信息 for (String fieldName : fieldMap.keySet()) { if(!fieldName.equals('id') && !fieldName.equals('createddate') && !fieldName.equals('lastmodifieddate')) s+=fieldName+','; } s=s.removeEnd(','); s+=' FROM Rental_Apply__c where OPDPlan__c=\''+opdIdList[0]+'\''; System.debug('===sql======='+s); OPDPlans1 = Database.query(s); } //Rental_Apply__c nObj = nObjList[0]; Rental_Apply__c newApp = new Rental_Apply__c(); if(OPDPlans1.size()>0){ newApp = OPDPlans1[0]; }else{ sendTemperatureEmail(opd.Name, '原OPD计划没有关联备品借出申请单' , opd.Id); return '备品新建失败' + '原OPD计划没有关联备品借出申请单'; } newApp.Id = null; newApp.Name = '*'; newApp.Status__c = '草案中'; //状态 newApp.OPDPlan__c = opd.Id; if(OPDPlans1[0].AWS_Data_Id__c == null){ //正常情况应该没有不存在AWDId没值的情况,为了防止报错,所以这么赋值 newApp.AWS_Data_Id__c = OPDPlans1[0].Name + 'X'; }else{ newApp.AWS_Data_Id__c = OPDPlans1[0].AWS_Data_Id__c + 'X'; } //清空若干字段 newApp.Request_shipping_day__c = null; newApp.Hope_Lonaer_date_Num__c = null; newApp.Old_Rental_Apply__c = null; newApp.Split_Apply_Reason__c = null; newApp.Cancel_Reason__c = null; newApp.Loaner_cancel_reason__c = null; newApp.Loaner_cancel_request__c = null; newApp.Zsq_Rental_Apply__c = opd.RentalApplyId__c; newApp.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); newApp.Product_category__c = productCategory; newApp.OPDProduct__c = opd.EquipmentNotFromOpp__c; newApp.OppProduct__c = opd.EquipmentFromOpp__c; newApp.Is_Auto__c = true; System.debug('newApp===='+newApp.Is_Auto__c ); INSERT newApp; //Rental_Apply__c ra = [SELECT Id] System.debug('再申请 备品配套====='+fixSets); //分配配套 分配配套明细 // for(Fixture_Set__c fix : fixSets){ // Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); // raes.Name = '*'; // raes.Rental_Apply__c = newApp.Id; // raes.Fixture_Set__c = fix.Id; // raes.IndexFromUniqueKey__c = 1; // raes.Rental_Num__c = 1; // updateraesList.add(raes); // } // INSERT updateraesList; // for(Rental_Apply_Equipment_Set__c raes : updateraesList){ // if(fixMap.containsKey(raes.Fixture_Set__c)){ // Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c(); // raesdel.Name = '*'; // raesdel.Rental_Apply__c = newApp.Id; // raesdel.Fixture_Set_Detail__c = setDetalMap.get(raes.Fixture_Set__c)[0].Id; // raesdel.Rental_Num__c = 1; // raesdel.Rental_Apply_Equipment_Set__c = raes.Id; // raesdel.Is_Body__c = true; // raesdel.IndexFromUniqueKey__c = 1; // raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(raes.Fixture_Set__c)[0].SortInt__c + ''; // updateraedelList.add(raesdel); // } // } // INSERT updateraedelList; return '备品创建成功'; } }catch (DmlException de) { String errormessage = ''; errormessage = de.getDmlMessage(0); sendTemperatureEmail(opd.Name, errormessage , opd.Id); return '备品新建失败' + errormessage; }catch (Exception e){ String errormessage = ''; errormessage = e.getMessage(); sendTemperatureEmail(opd.Name, errormessage , opd.Id); return '备品新建失败' + errormessage; } } if(opd.OriginalOpdPlan__c == null && opd.OriginalOpdPlanApplication__c != null){ System.debug('======补充申请=====' + opd.OriginalOpdPlanApplication__c); List opdIdList = new List(); String s=''; List OPDPlans = new List(); try { List opdList = [SELECT Id,Name,OriginalOpdPlanApplication__c FROM OPDPlan__c WHERE Id = :recordId]; if (opdList.size() > 0) { for (OPDPlan__c opdId : opdList) { opdIdList.add(opdId.OriginalOpdPlanApplication__c); } String objectName = 'Rental_Apply__c'; // 要获取字段的对象名 Map globalDescribe = Schema.getGlobalDescribe(); Schema.SObjectType objType = globalDescribe.get(objectName); if (objType != null) { Schema.DescribeSObjectResult objDescribe = objType.getDescribe(); Map fieldMap = objDescribe.fields.getMap(); s+='SELECT '; //跟进询价1的Name deloitte-zhj 20230921 // 现在,fieldMap中包含了对象的所有字段信息 for (String fieldName : fieldMap.keySet()) { if(!fieldName.equals('id') && !fieldName.equals('createddate') && !fieldName.equals('lastmodifieddate')) s+=fieldName+','; } s=s.removeEnd(','); s+=' FROM Rental_Apply__c where OPDPlan__c=\''+opdIdList[0]+'\''; system.debug('SQL:'+s); OPDPlans = Database.query(s); } List nObjList = [SELECT Id,Name, Request_return_day__c, // 预定归还日 Request_shipping_day__c, // 希望到货日 Hope_Lonaer_date_Num__c, // 希望借用天数 Cancel_Reason__c, // 取消理由 Loaner_cancel_reason__c, // 备品申请取消理由 Loaner_cancel_request__c, // 备品申请取消理由备注 Request_demo_time__c, // 申请时间 Request_approval_time__c, // 批准时间(申请提交时间) Application_accept_time__c, // 申请受理时间(回答时间) Request_answer_time__c, // 备品首次分配时间 Response__c, // 应答沟通 Assign_Person__c, // 分配人 Old_Rental_Apply__c, // 旧借出申请 Loaner_medical_Staff__r.Id, // Loaner_medical_Staff__r.AWS_Data_Id__c, //deloitte-zhj 科室负责人的AWSID 20230916 // AWS_Data_Id__c, //deloitte-zhj 备品借出申请的AWSID 20230916 Follow_UP_Opp__r.Id, Follow_UP_Opp__r.Name, //deloitte-zhj 跟进询价1 20230922 repair__r.Id, repair__r.Name //deloitte-zhj 修理 20230922 FROM Rental_Apply__c WHERE OPDPlan__c = :opdIdList[0]]; if (nObjList.size() > 0) { //需要从原申请单再特殊赋值 Rental_Apply__c nObj = nObjList[0]; Rental_Apply__c newApp = new Rental_Apply__c(); if(OPDPlans.size()>0){ //原单赋值 newApp = OPDPlans[0]; } newApp.Id = null; newApp.Name = '*'; newApp.Status__c = '草案中'; //状态 newApp.OPDPlan__c = opd.Id; // newApp.AWS_Data_Id__c = OPDPlans[0].AWS_Data_Id__c + 'X'; newApp.AWS_Data_Id__c =''; newApp.OPDProduct__c = opd.EquipmentNotFromOpp__c; newApp.OppProduct__c = opd.EquipmentFromOpp__c; newApp.Is_Auto__c = true; newApp.Request_shipping_day__c = opd.OPDPlan_ImplementDate__c.addDays(-3); newApp.Hope_Lonaer_date_Num__c = nObjList[0].Hope_Lonaer_date_Num__c; INSERT newApp; //分配配套 分配配套明细 for(Fixture_Set__c fix : fixSets){ Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); raes.Name = '*'; raes.Rental_Apply__c = newApp.Id; raes.Fixture_Set__c = fix.Id; raes.IndexFromUniqueKey__c = 1; raes.Rental_Num__c = 1; updateraesList.add(raes); } INSERT updateraesList; for(Rental_Apply_Equipment_Set__c raes : updateraesList){ if(fixMap.containsKey(raes.Fixture_Set__c)){ Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c(); raesdel.Name = '*'; raesdel.Rental_Apply__c = newApp.Id; raesdel.Fixture_Set_Detail__c = setDetalMap.get(raes.Fixture_Set__c)[0].Id; raesdel.Rental_Num__c = 1; raesdel.Rental_Apply_Equipment_Set__c = raes.Id; raesdel.Is_Body__c = true; raesdel.IndexFromUniqueKey__c = 1; raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(raes.Fixture_Set__c)[0].SortInt__c + ''; updateraedelList.add(raesdel); } } INSERT updateraedelList; if(updateraedelList.size()>0){ for(Rental_Apply_Equipment_Set__c raes : updateraesList){ for(Rental_Apply_Equipment_Set_Detail__c raesd : updateraedelList){ if(raes.Id == raesd.Rental_Apply_Equipment_Set__c){ System.debug('更新配套第一个明细'); raes.First_RAESD__c = raesd.Id; } } } UPDATE updateraesList; } return '备品创建成功'; } } } catch (Exception e) { sendTemperatureEmail(opd.Name, e.getDmlMessage(0) , opd.Id); return '备品新建失败' + e.getMessage(); } } return '新建备品成功'; } //新建申请单 sx 备品智能化 add 20231008 end //反映维修合同 封装调用UpdateAssetToCurrentMCWebService @AuraEnabled public static void callUpdateAssetToCurrentMC(String targetAssetId){ UpdateAssetToCurrentMCWebService.UpdateAssetToCurrentMC(targetAssetId); } // public static void UpdateAssetToCurrentMC(String targetAssetId ){ // UpdateAssetToCurrentMCBatch u = new UpdateAssetToCurrentMCBatch(); // u.targetAssetId = targetAssetId; // Id execBTId = Database.executeBatch(u, 50); // } public class UserResult { @AuraEnabled public string result; public UserResult( ) { result = 'Success'; } @AuraEnabled public string id; @AuraEnabled public Boolean isFormalStuff; @AuraEnabled public string firstName; @AuraEnabled public string lastName; @AuraEnabled public string userProvince; @AuraEnabled public string userJobCategory; } public class InitData{ @AuraEnabled public Integer proNewNum; @AuraEnabled public Integer proSameNum; @AuraEnabled public Integer proAccSameNum; @AuraEnabled public Integer proModelNum; @AuraEnabled public Integer proStopNum; @AuraEnabled public OPDPlan__c opdPlanRecord; @AuraEnabled public String renAppName; @AuraEnabled public String opdStatusProcessState; @AuraEnabled public String opdCampaignTypeId; @AuraEnabled public String opdInternalinchargeprovince; @AuraEnabled public String rentalReson; } }