/**
|
* @url:/services/apexrest/NFM704/execute
|
*
|
*/
|
|
@RestResource(urlMapping='/NFM704/*')
|
global with sharing class NFM704Rest {
|
|
global class GeDatas {
|
public NFMUtil.Monitoring Monitoring;
|
public GeData[] GeData;
|
}
|
|
public static final String LOG_TYPE = 'NFM704';
|
|
global class GeData {
|
public String StaffMCode; //SFDC人员管理编码
|
public String HospitalMCode; //医院管理编码
|
public String OfficeMCode; //科室管理编码
|
public String HcpNo; //HPC编码
|
public String HCPLevel; //HCP等级
|
public String Name; //姓名
|
public String Mobile; //电话
|
}
|
|
@HttpPost
|
global static void doPost() {
|
//取得接口传输内容
|
String strData = RestContext.request.requestBody.toString();
|
GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
|
|
if(ges == null) {
|
return;
|
}
|
|
NFMUtil.Monitoring Monitoring = ges.Monitoring;
|
if(Monitoring == null ) {
|
return;
|
}
|
|
BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, LOG_TYPE, ges.GeData);
|
system.debug('String.isBlank(rowData.Log__c) == false?');
|
if(String.isBlank(rowData.Log__c) == false){
|
System.debug('进入if方法,成功调用executefuture');
|
executefuture(rowData.Id);
|
}
|
|
// JSONを戻す
|
RestResponse res = RestContext.response;
|
res.addHeader('Content-Type', 'application/json');
|
res.statusCode = 200;
|
String jsonResponse = '{"Result":{"Result": "00", "Message":""}}';
|
res.responseBody = blob.valueOf(jsonResponse);
|
return;
|
|
}
|
|
@future(callout = true)
|
global static void executefuture(String rowData_Id){
|
main(rowData_Id);
|
}
|
|
global static void main(String rowData_Id){
|
|
String logstr = 'start\n';
|
BatchIF_Log__c iflog = new BatchIF_Log__c();
|
iflog.Type__c = LOG_TYPE;
|
iflog.ErrorLog__c = '';
|
iflog.Log__c = logstr;
|
insert iflog;
|
|
GeDatas gds = new GeDatas();
|
gds.GeData = new List< GeData >();
|
|
BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, retry_cnt__c from BatchIF_Log__c where RowDataFlg__c = true and Id =: rowData_Id];
|
|
String rowDataStr = NFMUtil.getRowDataStr(rowData);
|
|
List < GeData > itemMasterList = (List < GeData > ) JSON.deserialize(rowDataStr, List < GeData > .class);
|
logstr += '数据总数为:' + itemMasterList.size() + '\n';
|
if (itemMasterList == null || itemMasterList.size() == 0) {
|
return;
|
}
|
|
Savepoint sp = Database.setSavepoint();
|
|
try{
|
//管理编码List
|
List<String> DoctorNoList = new List<String>();
|
|
//待更新的客户人员List
|
List<Contact> updateList = new List<Contact>();
|
|
//科室编码List
|
List<String> officeMCodeList = new List<String>();
|
|
for(GeData ged : itemMasterList){
|
String dataComplete = verify(ged);
|
if (!String.isBlank(dataComplete)) {
|
logstr += dataComplete;
|
continue;
|
}
|
DoctorNoList.add(ged.StaffMCode);
|
officeMCodeList.add(ged.OfficeMCode);
|
}
|
|
Map<String, Contact> conListMap = new Map<String, Contact>();
|
List<Contact> conList = [select Id,
|
CManageCode__c, //人员管理编码
|
Account.Hospital_Name__c, //医院名称
|
Account.Department_Name__c, //科室名称
|
Name, //姓名
|
Phone, //电话
|
HcpNo__c, //HCP编码
|
Isactive__c, //是否有效
|
UpdateStatus__c //操作类型
|
from Contact WHERE CManageCode__c IN:DoctorNoList order by AccountId];
|
|
|
for(Contact con : conList ){
|
conListMap.put(con.CManageCode__c, con);
|
}
|
|
//Management_Code__c
|
List<Account> accList = [select Id, Name, Management_Code__c from Account where Management_Code__c in :officeMCodeList];
|
|
Map<String, Account> accMap = new Map<String, Account>();
|
|
for(Account acc : accList){
|
accMap.put(acc.Management_Code__c, acc);
|
}
|
|
for( GeData ged : itemMasterList ){
|
|
Contact con = new Contact();
|
|
logstr += conListMap.get(ged.StaffMCode).Id;
|
|
if(conListMap.containsKey(ged.StaffMCode)){
|
|
logstr += '已存在客户人员\n';
|
con.Id = conListMap.get(ged.StaffMCode).Id;
|
|
}else {
|
logstr += '不存在的客户人员\n';
|
}
|
|
//AccountId
|
if( accMap.get(ged.OfficeMCode) != null ){
|
con.AccountId = accMap.get(ged.OfficeMCode).Id;
|
}else {
|
logstr += '当前科室id有误或不存在';
|
}
|
|
con.HcpNo__c = ged.HcpNo;
|
con.HCPLevel__c = ged.HCPLevel;
|
con.LastName = ged.Name;
|
con.MobilePhone = ged.Mobile;
|
|
conListMap.put(ged.StaffMCode, con);
|
|
}
|
|
if(conListMap.size() > 0 ){
|
// Update updateList;
|
UpSert conListMap.values();
|
}
|
|
rowData.retry_cnt__c = 0;
|
logstr += '\nend';
|
|
}catch (Exception ex) {
|
Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
|
// エラーが発生した場合
|
Database.rollback(sp);
|
logstr += '\n' + ex.getMessage();
|
iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
|
// 异常重发
|
rowData = NFMUtil.LogAutoSend(rowData, ex, null);
|
}
|
iflog.Log__c = logstr;
|
upsert iflog;
|
}
|
|
public static String verify(GeData ged){
|
String result = '';
|
|
if (ged.StaffMCode == null) {
|
result += 'DataError: SFDC人员管理编码 [ StaffMCode ] is null!\n';
|
}
|
if (ged.HospitalMCode == null) {
|
result += 'DataError: 医院管理编码 [ HospitalMCode ] is null!\n';
|
}
|
if (ged.OfficeMCode == null) {
|
result += 'DataError: 科室管理编码 [ OfficeMCode ] is null!\n';
|
}
|
if (ged.HcpNo == null) {
|
result += 'DataError: HCP编码 [ HcpNo ] is null!\n';
|
}
|
if (ged.HCPLevel == null) {
|
result += 'DataError: HCP等级 [ HCPLevel ] is null!\n';
|
}
|
if (ged.Name == null) {
|
result += 'DataError: 姓名 [ Name ] is null!\n';
|
}
|
if (ged.Mobile == null) {
|
result += 'DataError: 电话 [ Mobile ] is null!\n';
|
}
|
|
return result;
|
}
|
|
}
|