// 日付を更新するため、更新をbeforeにする
|
// SAP送信はWF値を送信しないので、before更新でも問題ない
|
trigger NFM001 on Account (before insert, before update, after insert) {
|
if (ControllerUtil.EscapeNFM001Trigger) {
|
System.debug('TriggerEscape、EscapeNFM001Trigger:::::' + ControllerUtil.EscapeNFM001Trigger);
|
return;
|
}
|
|
// WFなど設定により、2回目呼び出される場合もある、2回目をここに入らないように NFM001Controller.isRunning を判断する
|
// LHJ Start
|
//if (NFM001Controller.isRunning) {
|
if (NFM001Controller.isRunning || NFM201Controller.isRunning) {
|
// LHJ End
|
return;
|
}
|
// 送信対象のレコードタイプ
|
String[] needSendTypes = new String[] {'病院', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'};
|
// LD 20200807 优化account record type ID 读取方法 Start
|
|
// 原逻辑
|
// List<RecordType> rects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :needSendTypes];
|
// Map<String, String> needSendRectMap = new Map<String, String>();
|
// for (RecordType rect : rects) {
|
// needSendRectMap.put(rect.Id, rect.Name);
|
// }
|
|
|
// 新逻辑
|
String [] RecordTypeId = new String[] {System.Label.HP , System.Label.Department_OTH , System.Label.Department_BF , System.Label.Department_GYN , System.Label.Department_GS , System.Label.Department_URO , System.Label.Department_GI , System.Label.Department_ENT };
|
Map<String, String> needSendRectMap = new Map<String, String>();
|
needSendRectMap.put(RecordTypeId[0], needSendTypes[0]);
|
needSendRectMap.put(RecordTypeId[1], needSendTypes[1]);
|
needSendRectMap.put(RecordTypeId[2], needSendTypes[2]);
|
needSendRectMap.put(RecordTypeId[3], needSendTypes[3]);
|
needSendRectMap.put(RecordTypeId[4], needSendTypes[4]);
|
needSendRectMap.put(RecordTypeId[5], needSendTypes[5]);
|
needSendRectMap.put(RecordTypeId[6], needSendTypes[6]);
|
needSendRectMap.put(RecordTypeId[7], needSendTypes[7]);
|
|
// LD 20200807 优化account record type ID 读取方法 End
|
|
// 送信対象 Id をセット
|
List<String> accIds = new List<String>();
|
Map<String, String> purposeOfAdviceMap = new Map<String, String>(); // 1:Delete 2:Add(Insert) 3:Change(Update)
|
// 病院ID:{Name(変更後)、OCM_Category__c(変更後)、State_Text__c(変更後)}, isUpdate のところ値を設定
|
Map<Id, Account> hpAfterAccMap = new Map<Id, Account>();
|
// 病院ID:{Name(変更後)}, isUpdate のところ値を設定
|
Map<Id, Account> hpNameAfterAccMap = new Map<Id, Account>();
|
// 病院の省、変更したIDを集める
|
List<String> stateIds = new List<String>();
|
|
// LHJ CBPR 20190321 Start
|
Map<String, String> needQuolifiedMap = new Map<String, String>();
|
// LHJ CBPR 20190321 End
|
|
if (Trigger.isInsert) {
|
if (Trigger.isBefore) {
|
for(Account a : Trigger.new) {
|
// I/F と関係ない
|
if (needSendRectMap.get(a.RecordTypeId) == '病院' && String.isBlank(a.State_Master__c) == false) {
|
stateIds.add(a.State_Master__c);
|
}
|
}
|
} else if (Trigger.isAfter){
|
// isAfter
|
for(Account a : Trigger.new) {
|
if (needSendRectMap.get(a.RecordTypeId) == null) {
|
continue;
|
}
|
//未能审批通过的,不上传sap
|
if(a.Is_Active__c == '草案中' || a.Is_Active__c == '申请中'){
|
continue;
|
}
|
NFM001Controller.isRunning = true;
|
// LHJ Start
|
NFM201Controller.isRunning = true;
|
// LHJ End
|
accIds.add(a.Id);
|
purposeOfAdviceMap.put(a.Id, '2');
|
NFM001Controller.debug_msg = 'NFM001_callout_insert_' + a.Name;
|
}
|
}
|
}
|
else if (Trigger.isUpdate) {
|
List<String> hospitalIds = new List<String>();
|
List<String> hospitalIdsNeedUpdateAccountIsActive = new List<String>();
|
Map<Id, String> hpDateToMap = new Map<Id, String>(); // 変更後のDepartmentEffectiveDateTo__c
|
Map<Id, String> hpIsActiveMap = new Map<Id, String>(); // 変更後の有効/無効
|
for(Account a : Trigger.new) {
|
if (needSendRectMap.get(a.RecordTypeId) == null) {
|
continue;
|
}
|
//未能审批通过的,不上传sap
|
if(a.Is_Active__c == '草案中' || a.Is_Active__c == '申请中'){
|
continue;
|
}
|
// I/F と関係ない
|
if (needSendRectMap.get(a.RecordTypeId) == '病院' && Trigger.oldMap.get(a.Id).get('State_Master__c') != a.State_Master__c) {
|
stateIds.add(a.State_Master__c);
|
}
|
// NFM001の送信項目として、isChanged かを確認
|
Boolean isChanged = false;
|
Boolean needChild = false;
|
// 論理削除/復活の判断
|
Boolean isLogicDeleteFlg = false;
|
// Is_Active__c変更する度に、callout必要
|
if (Trigger.oldMap.get(a.Id).get('Is_Active__c') != a.Is_Active__c) {
|
isLogicDeleteFlg = true;
|
}
|
if (Trigger.oldMap.get(a.Id).get('Name') != a.Name && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Name_' + a.Name;
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
hpAfterAccMap.put(a.Id, a);
|
hpNameAfterAccMap.put(a.Id, a);
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('Site') != a.Site && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Site';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('Postal_Code__c') != a.Postal_Code__c && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Postal_Code__c';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('State_Master__c') != a.State_Master__c && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'State_Master__c';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('City_Master__c') != a.City_Master__c && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'City_Master__c';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('Town__c') != a.Town__c && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Town__c';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
if (Trigger.oldMap.get(a.Id).get('Street__c') != a.Street__c && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Street__c';
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
needChild = true;
|
}
|
}
|
// OCM_Category__cについて病院しかつかってないため、診療科より変更はありえない
|
if (Trigger.oldMap.get(a.Id).get('OCM_Category__c') != a.OCM_Category__c && needSendRectMap.get(a.RecordTypeId) == '病院' && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'OCM_Category__c';
|
needChild = true;
|
hpAfterAccMap.put(a.Id, a);
|
}
|
// needChildいらない項目の変更チェック
|
if (Trigger.oldMap.get(a.Id).get('Phone') != a.Phone && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Phone';
|
}
|
if (Trigger.oldMap.get(a.Id).get('Fax') != a.Fax && isChanged == false) {
|
isChanged = true;
|
NFM001Controller.debug_msg = 'Fax';
|
}
|
|
// LHJ Start
|
if (Trigger.oldMap.get(a.Id).get('Alias_Name2__c') != a.Alias_Name2__c
|
|| Trigger.oldMap.get(a.Id).get('Attribute_Type__c') != a.Attribute_Type__c
|
|| Trigger.oldMap.get(a.Id).get('Grade__c') != a.Grade__c
|
|| Trigger.oldMap.get(a.Id).get('If_Need_Quolified__c') == false && a.If_Need_Quolified__c == true
|
|| Trigger.oldMap.get(a.Id).get('Speciality_Type__c') != a.Speciality_Type__c
|
|| Trigger.oldMap.get(a.Id).get('Goverment_key_customer__c') != a.Goverment_key_customer__c) {
|
|
isChanged = true;
|
needChild = true;
|
}
|
if (a.If_Need_Quolified__c) {
|
needQuolifiedMap.put(a.Id, '1');
|
}
|
// LHJ End
|
|
// 論理削除/復活の判断は、isChangedより優先
|
if (isLogicDeleteFlg) {
|
NFM001Controller.isRunning = true;
|
// LHJ Start
|
NFM201Controller.isRunning = true;
|
// LHJ End
|
accIds.add(a.Id);
|
if (needSendRectMap.get(a.RecordTypeId) == '病院') {
|
hospitalIdsNeedUpdateAccountIsActive.add(a.Id);
|
}
|
if (a.Is_Active__c == '無効') {
|
// 無効→論理削除
|
a.DepartmentEffectiveDateTo__c = System.now().format('yyyy/MM/dd_') + a.Management_Code__c;
|
hpDateToMap.put(a.Id, a.DepartmentEffectiveDateTo__c);
|
hpIsActiveMap.put(a.Id, a.Is_Active__c);
|
purposeOfAdviceMap.put(a.Id, '1');
|
NFM001Controller.debug_msg = 'NFM001_callout_logic_delete_' + a.DepartmentEffectiveDateTo__c;
|
System.debug(Logginglevel.DEBUG, 'NFM001Controller.debug_msg=' + NFM001Controller.debug_msg);
|
} else {
|
// 有効→論理復活
|
a.DepartmentEffectiveDateTo__c = null;
|
hpDateToMap.put(a.Id, a.DepartmentEffectiveDateTo__c);
|
hpIsActiveMap.put(a.Id, a.Is_Active__c);
|
purposeOfAdviceMap.put(a.Id, '3');
|
NFM001Controller.debug_msg = 'NFM001_callout_logic_undelete';
|
}
|
} else if (isChanged) {
|
NFM001Controller.isRunning = true;
|
// LHJ Start
|
NFM201Controller.isRunning = true;
|
NFM201Controller.debug_msg += '_NFMq01_callout_update';
|
// LHJ End
|
accIds.add(a.Id);
|
purposeOfAdviceMap.put(a.Id, '3');
|
NFM001Controller.debug_msg += '_NFM001_callout_update';
|
if (needChild) {
|
hospitalIds.add(a.Id);
|
}
|
}
|
}
|
System.debug(Logginglevel.DEBUG, 'hospitalIdsNeedUpdateAccountIsActive.size()=' + hospitalIdsNeedUpdateAccountIsActive.size());
|
ControllerUtil.updateDeptIsActive(accIds, purposeOfAdviceMap, hospitalIdsNeedUpdateAccountIsActive, hpIsActiveMap, hpDateToMap);
|
ControllerUtil.collectDeptId(accIds, purposeOfAdviceMap, hospitalIds);
|
|
// LHJ 20190319 CBPR 发送医院资质审批后,将标志置为False
|
for(Account a : Trigger.new) {
|
if (Trigger.oldMap.get(a.Id).get('If_Need_Quolified__c') == false && a.If_Need_Quolified__c == true) {
|
a.If_Need_Quolified__c = false;
|
}
|
}
|
}
|
|
if (stateIds.size() > 0) {
|
// 病院しかないはず、しかも beforeのはず
|
Map<Id, Address_Level__c> stateMasterMap = new Map<Id, Address_Level__c>([Select Id, Name from Address_Level__c where Id IN :stateIds]);
|
for(Account a : Trigger.new) {
|
// I/F と関係ない、下記のifのチェックはいらないはずが、念のためifにてチェックしています
|
if (needSendRectMap.get(a.RecordTypeId) == '病院' && stateMasterMap.get(a.State_Master__c) != null) {
|
// 病院 before insert, before update
|
a.State_Text__c = stateMasterMap.get(a.State_Master__c).Name;
|
System.debug(Logginglevel.DEBUG, 'a.State_Text__c=' + a.State_Text__c);
|
if (Trigger.isUpdate) {
|
System.debug(Logginglevel.DEBUG, 'Trigger.isUpdate');
|
hpAfterAccMap.put(a.Id, a);
|
}
|
}
|
}
|
}
|
if (hpAfterAccMap.size() > 0) {
|
ControllerUtil.updateDeptName(hpAfterAccMap);
|
}
|
if (hpNameAfterAccMap.size() > 0) {
|
ControllerUtil.updateAgencyName(hpNameAfterAccMap);
|
}
|
// // 更新の場合、配下の診療科も更新
|
// if (Trigger.isUpdate) {
|
// List<Account> accUpdList = new List<Account>();
|
// // 戦略課室と診療科の省(Text)を更新
|
// Set<Id> accHpStateKeys = hpStateNameMap.keySet();
|
//System.debug(Logginglevel.DEBUG, 'Trigger.isUpdate accHpStateKeys.size()' + accHpStateKeys.size());
|
// Map<Id, Account> accUpdStateMap = new Map<Id, Account>([Select Id, Name, Parent.Id, Parent.RecordType.DeveloperName, Parent.Parent.Id from Account where (Parent.Id IN :accHpStateKeys or Parent.Parent.Id IN :accHpStateKeys)]);
|
//System.debug(Logginglevel.DEBUG, 'accUpdStateMap.size()' + accUpdStateMap.size());
|
// for (String accId: accUpdStateMap.keySet()) {
|
// Account acc = accUpdStateMap.get(accId);
|
// if (acc.Parent.RecordType.DeveloperName == 'HP') {
|
// acc.State_Text__c = hpStateNameMap.get(acc.Parent.Id);
|
// accUpdList.add(acc);
|
// }
|
// else {
|
// acc.State_Text__c = hpStateNameMap.get(acc.Parent.Parent.Id);
|
// accUpdList.add(acc);
|
// }
|
// }
|
// if (accUpdList.size() > 0) update accUpdList;
|
// }
|
System.debug('*****************'+accIds.size());
|
if (accIds.size() > 0) {
|
NFM001Controller.debug_msg = accIds.size() + ',' + NFM001Controller.debug_msg;
|
// MessageGroupNumber の採番
|
BatchIF_Log__c iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'NFM001';
|
iflog.Log__c = 'callout start\n'+accIds+'\n';
|
insert iflog;
|
iflog = [Select Id, Name from BatchIF_Log__c where Id = :iflog.Id];
|
System.debug(Logginglevel.DEBUG, 'NFM001_' + iflog.Name + ' start'); // callout の中 end のlogを出します
|
NFM001Controller.callout(iflog.Id, accIds, purposeOfAdviceMap, needSendRectMap);
|
|
// LHJ 向SPO传NFM201 Start
|
NFM201Controller.debug_msg = accIds.size() + ',' + NFM201Controller.debug_msg;
|
BatchIF_Log__c iflog201 = new BatchIF_Log__c();
|
iflog201.Type__c = 'NFM201';
|
iflog201.Log__c = 'callout start\n'+accIds+'\n';
|
insert iflog201;
|
iflog201 = [Select Id, Name from BatchIF_Log__c where Id = :iflog201.Id];
|
System.debug(Logginglevel.DEBUG, 'NFM201_' + iflog201.Name + ' start'); // callout の中 end のlogを出します
|
//NFM201Controller.callout(iflog201.Id, accIds, purposeOfAdviceMap, needSendRectMap);
|
if(!System.Test.isRunningTest()){
|
NFM201Controller.callout(iflog201.Id, accIds, purposeOfAdviceMap, needSendRectMap, needQuolifiedMap);
|
}
|
// LHJ End
|
//NFM201Controller.debug_msg = accIds.size() + ',' + NFM201Controller.debug_msg;
|
// BatchIF_Log__c iflog601 = new BatchIF_Log__c();
|
// iflog601.Type__c = 'NFM601';
|
// iflog601.Log__c = 'callout start\n'+accIds+'\n';
|
// insert iflog601;
|
// if(!System.Test.isRunningTest()){
|
// NFM601Controller.callout(iflog601.Id, accIds);
|
// }
|
}
|
// LHJ 20190321 CBPR 发送医院资质审批后,将标志置为False
|
if (Trigger.isUpdate) {
|
for (Account a : Trigger.new) {
|
if (Trigger.oldMap.get(a.Id).get('If_Need_Quolified__c') == false && a.If_Need_Quolified__c == true) {
|
a.If_Need_Quolified__c = false;
|
}
|
}
|
}
|
// LHJ 20190321 End
|
}
|