/** * wangweipeng 2021/07/27 * 新增修理时,默认查找到对应的直返收货地址 * 根据修理上选中医院的 OCM_man_province_txt__c 值,去匹配直返地址的省或市 */ public without sharing class RepairBeforeInsertHandler { public Map matchupMap; public RepairBeforeInsertHandler() { //map的键对应医院表上ocsm管理省值 //map的值对应地址表上类型为办事处的 省+','+市 matchupMap = new Map(); matchupMap.put('黑龙江','黑龙江,哈尔滨市'); matchupMap.put('青海','青海省,西宁市'); matchupMap.put('陕西','陕西省,西安市'); matchupMap.put('重庆','重庆市,渝中区'); matchupMap.put('贵州','贵州省,贵阳市'); matchupMap.put('福建','福建省,福州市'); matchupMap.put('甘肃','甘肃省,兰州市'); matchupMap.put('湖南','湖南省,长沙市'); matchupMap.put('湖北','湖北省,武汉市'); matchupMap.put('深圳','广东省,深圳市'); matchupMap.put('广东','广东省,广州市'); //matchupMap.put('海南','');//没有 matchupMap.put('浙江','浙江省,杭州市'); matchupMap.put('河南','河南省,郑州市'); matchupMap.put('河北','河北省,石家庄市'); matchupMap.put('沈阳','辽宁省,沈阳市'); matchupMap.put('大连','辽宁省,大连市'); matchupMap.put('江西','江西省,南昌市'); matchupMap.put('江苏','江苏省,南京市'); matchupMap.put('新疆','新疆维吾尔自治区,乌鲁木齐市'); matchupMap.put('广西','广西自治区,南宁市'); matchupMap.put('山西','山西省,太原市'); matchupMap.put('山东,济南市','山东省,济南市'); matchupMap.put('山东,青岛市','山东省,青岛市'); matchupMap.put('安徽','安徽省,合肥市'); matchupMap.put('宁夏','宁夏回族自治区,银川市'); matchupMap.put('天津','天津市,河西区'); matchupMap.put('四川/西藏','四川省,成都市'); matchupMap.put('吉林','吉林省,长春市'); matchupMap.put('北京','北京市,朝阳区'); matchupMap.put('内蒙古','内蒙古自治区,呼和浩特市'); matchupMap.put('云南','云南省,昆明市'); //add wangweipeng 2021/12/27 start matchupMap.put('上海','上海市,徐汇区'); //add wangweipeng 2021/12/27 end } //新建修理表的时候新增直返地址信息 public void beforeInsertValue(List newList,List oldList) { boolean falg = false; boolean falg2 = true; //存放查到的医院id List HospitalId = new List(); List provinceList = new List();//省 List cityList = new List();//市 for (Repair__c nObj : newList) { //医院的CSM管理省(文本) 值不为空,并且收货地址不为空 if(nObj.Hospital__c != null && nObj.address_Contacts__c == null && nObj.address_Telephone__c == null && nObj.address_Contacts_Name__c == null && nObj.address_City__c == null && nObj.Detailed_Address__c == null){ HospitalId.add(nObj.Hospital__C); } } if(HospitalId != null && HospitalId.size() > 0){ String HospitalSQl = 'SELECT id,OCM_man_province_txt__c,FieldCity_Master_Name__c from Account where id in :HospitalId'; List accountList = Database.query(HospitalSQl); for (Repair__c nObj : newList) { if(nObj.Hospital__c != null && nObj.address_Contacts__c == null && nObj.address_Telephone__c == null && nObj.address_Contacts_Name__c == null && nObj.address_City__c == null && nObj.Detailed_Address__c == null){ for(Account ac : accountList){ if(nObj.Hospital__c == ac.id){ String provinceAndCity = ''; if('山东' == ac.OCM_man_province_txt__c){ if('烟台市' == ac.FieldCity_Master_Name__c || '威海市' == ac.FieldCity_Master_Name__c || '日照市' == ac.FieldCity_Master_Name__c || '青岛市' == ac.FieldCity_Master_Name__c || '潍坊市' == ac.FieldCity_Master_Name__c){ provinceAndCity = matchupMap.get('山东,青岛市'); }else{ provinceAndCity = matchupMap.get('山东,济南市'); } }else{ provinceAndCity = matchupMap.get(ac.OCM_man_province_txt__c); } if(provinceAndCity != null){ falg = true; provinceList.add(provinceAndCity.split(',')[0]); cityList.add(provinceAndCity.split(',')[1]); } } } } } if(falg && provinceList != null && cityList != null && provinceList.size() > 0 && cityList.size() > 0){ String addressSQl = 'SELECT ID,Customer__c,Customer_Name__c,Contacts__c,Contacts_Name__c,Telephone__c,Province__c,Province_Name__c,City__c,City_Name__c,Detailed_Address__c,ZipCode__c' + ' from Address__c ' + ' where Address_Classification__c = \'办事处\' and Province_Name__c in :provinceList and City_Name__c in :cityList ' + ' order by Using_Datetime__c desc NULLS LAST '; List addressList = Database.query(addressSQl); if(addressList != null && addressList.size() > 0){ for (Repair__c nObj : newList) { if(nObj.Hospital__c != null && nObj.address_Contacts__c == null && nObj.address_Telephone__c == null && nObj.address_Contacts_Name__c == null && nObj.address_City__c == null && nObj.Detailed_Address__c == null){ //由于为了减少select ,所以获取我们配置好的map,根据保有设备上医院的 OCSM管理省(文本) 的值,获取对应的地址上的省和市 for(Account ac : accountList){ if(nObj.Hospital__c == ac.id){ String provinceAndCity = ''; matchupMap.get(ac.OCM_man_province_txt__c); if('山东' == ac.OCM_man_province_txt__c){ if('烟台市' == ac.FieldCity_Master_Name__c || '威海市' == ac.FieldCity_Master_Name__c || '日照市' == ac.FieldCity_Master_Name__c || '青岛市' == ac.FieldCity_Master_Name__c || '潍坊市' == ac.FieldCity_Master_Name__c){ provinceAndCity = matchupMap.get('山东,青岛市'); }else{ provinceAndCity = matchupMap.get('山东,济南市'); } }else{ provinceAndCity = matchupMap.get(ac.OCM_man_province_txt__c); } if(provinceAndCity != null){//不能为空 //地址表上省和市不能为空 if(addressList[0].Province_Name__c != null && addressList[0].City_Name__c!= null){ //拼接一个字符串方便对比 String pAc = addressList[0].Province_Name__c + ',' + addressList[0].City_Name__c; if(provinceAndCity.equals(pAc)){ //联系人 String contactsName = ''; if(!String.isBlank(addressList[0].Contacts__c)){ contactsName = addressList[0].Contacts_Name__c; } //省+市 String address = addressList[0].Detailed_Address__c.trim(); String cityName = addressList[0].City_Name__c.trim(); String ProvinceCity = addressList[0].Province_Name__c.trim()+cityName; //防止详细地址里面带着省份和市 if(!address.contains(ProvinceCity)){ address = ProvinceCity + address; } //联系人 String ContactPerson = ''; if(!String.isBlank(addressList[0].Customer__c)){ ContactPerson = addressList[0].Customer_Name__c; } nObj.address_Contacts__c=contactsName; nObj.address_ZipCode__c = addressList[0].ZipCode__c; nObj.address_City__c = cityName; nObj.address_Contacts_Name__c = ContactPerson; nObj.address_Telephone__c=addressList[0].Telephone__c; nObj.Detailed_Address__c=address; } } } } } } } } } } } }