/** * ASE日报 */ @RestResource(urlMapping = '/NFM607/*') global with sharing class NFM607Rest { //add to AWS 回复 start sushanhu 20220225 static Boolean SFStatus=true; static String SFMessage=''; //add to AWS 回复 end sushanhu 20220225 private static final String LOG_TYPE = 'NFM607'; //add Response to aws 20220221 add sushanhu static NFMUtil.NFMResponse result = new NFMUtil.NFMResponse(); global class GeData { public String mngCd; // ASE管理编码 public String activityDailyDate; // 活动日报日期 public String strategicDepartmenCd; //战略科室编码 public String departmentCd; //科室编码 public String customerNm; //客户姓名 public String activityID; //活动ID public String purposeOfVisit; //拜访目的 public String activityDifferentiation; //活动区分 public String taskItem;// 任务类型 public String visitDistinction; //拜访区分 public String activityStartTime; //活动开始时间 public String activityEndTime; //活动结束时间 public String workDesc; //工作描述 // add 加密字段索引 add 20220210 public String DataId; //加密字段索引 //add 加密字段密文 20220210 public String customerNmEncrypted; //add wangweipeng 2022/02/14 start public String customerTel;//客户手机号码 public String workPlace;//工作场所 //add wangweipeng 2022/02/14 end //add 20220216 sushanhu start public String customerTelEncrypted; public String workPlaceEncrypted; // add 20220216 sushanhu end } @HttpPost global static void execute() { // 取得接口传输内容 String strData = RestContext.request.requestBody.toString(); List < GeData > ges = (List < GeData > ) JSON.deserializeStrict(strData, List < GeData > .class); system.debug('ges---'+ges); if (ges == null) { return; } BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = LOG_TYPE; iflog.ErrorLog__c = ''; iflog.Log__c = 'callout start\n'; BatchIF_Log__c rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, ges); insert rowData; if (String.isBlank(rowData.Log__c) == false) { executefuture(rowData.Id); } // JSONを戻す RestResponse res = RestContext.response; res.addHeader('Content-Type', 'application/json'); res.statusCode = 200; // String jsonResponse = '{"status": "Success", "Message":"成功"}'; // res.responseBody = Blob.valueOf(jsonResponse); //updata response toAWS 20220225 sushanhu start NFMUtil.NFMResponse result = NFMUtil.getNFMResponse(); result.SFStatus=SFStatus; result.SFMessage=SFMessage; String jsonResponse =JSON.serialize(result); system.debug('result---'+jsonResponse); res.responseBody = blob.valueOf(jsonResponse); //updata response toAWS 20220225 sushanhu end return; } @future(callout = true) global static void executefuture(String rowData_Id) { main(rowData_Id); } global static void main(String rowData_Id) { 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 logstr = rowData.MessageGroupNumber__c + ' start\n'; BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = LOG_TYPE; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; insert iflog; String rowDataStr = NFMUtil.getRowDataStr(rowData); List < GeData > itemMasterList = (List < GeData > ) JSON.deserialize(rowDataStr, List < GeData > .class); if (itemMasterList == null || itemMasterList.size() == 0) { return; } Savepoint sp = Database.setSavepoint(); try { List < String > userList = new List < String > (); List < String > accountCodeList = new List < String > (); Map < String, GeData > geDataMap = new Map < String, GeData > (); Map dateCalendarMap = new Map(); for (GeData ged: itemMasterList) { //验证数据完整性 String dataComplete = verify(ged); if (!String.isBlank(dataComplete)) { logstr += dataComplete; continue; } geDataMap.put(ged.activityID, ged); userList.add(ged.mngCd); if (String.isNotBlank(ged.departmentCd)) { accountCodeList.add(ged.departmentCd); } system.debug('date---'+Date.valueOf(ged.activityDailyDate)); dateCalendarMap.put(Date.valueOf(ged.activityDailyDate), null); } GeData gd = new GeData(); if (geDataMap.size() > 0) { // 获取社内用户 // Map < String, Id > userMap = getUserMap(userList); // 获取客户 Map < String, Account > accMap = getAccountMap(accountCodeList); // 获取ASE活动 Map < String, ASEActivity__c > aSEActivityMap = getASEActivityMap(geDataMap); // 获取联系人 Map contactMap = getContactMap(userList); List < ASEActivity__c > upsertASEList = new List < ASEActivity__c > (); // 获取奥林巴斯日历 dateCalendarMap = getdateCalendarMap(dateCalendarMap); String activityIDStr = '活动ID [ \n'; for (String activityID: geDataMap.keySet()) { GeData ged = geDataMap.get(activityID); if (!contactMap.containsKey(ged.mngCd)) { logstr += 'DataError: ASE管理编码 [ ' + ged.mngCd + ' ] 对应的客户人员不存在 ,此条数据跳过,不执行!\n'; continue; } if (String.isNotBlank(ged.departmentCd) && !accMap.containsKey(ged.departmentCd)) { logstr += 'DataError: 科室编码 [ ' + ged.departmentCd + ' ] 对应的客户不存在,此条数据跳过,不执行!\n'; continue; } String contactId =contactMap.get(ged.mngCd); ASEActivity__c ASEAct = new ASEActivity__c(); if (aSEActivityMap.containsKey(ged.activityID)) { ASEAct = aSEActivityMap.get(ged.activityID); } if (String.isNotBlank(ged.departmentCd)) { ASEAct.Department__c = accMap.get(ged.departmentCd).Id;//科室 ASEAct.StrategicDepartment__c = accMap.get(ged.departmentCd).ParentId;//战略科室 ASEAct.Account__c = accMap.get(ged.departmentCd).Parent.ParentId;//医院 } // 所有人默认为 接口用户 ASEAct.OwnerId = '00510000000gmxH';//userMap.get(ged.mngCd);//所有人 ASEAct.ASEActivityCode__c = ged.activityID;//管理编码 ASEAct.activityStartTime__c = NFMUtil.parseStr2DateTime(ged.activityStartTime);//活动开始时间 ASEAct.activityEndTime__c = NFMUtil.parseStr2DateTime(ged.activityEndTime);//活动结束时间 ASEAct.WorkDesc__c = ged.workDesc;//工作描述(日报) ASEAct.Activity_Purpose__c = ged.purposeOfVisit;//拜访目的 ASEAct.Purpose_Type__c = ged.activityDifferentiation;//活动区分 ASEAct.ServiceItem__c = ged.taskItem;//项目任务 ASEAct.VisitDistinction__c = ged.visitDistinction;//拜访区分 ASEAct.ASEActivityDate__c = Date.valueOf(ged.activityDailyDate);//活动日报日期 ASEAct.OlympusCalendar__c = dateCalendarMap.get(Date.valueOf(ged.activityDailyDate)); ASEAct.VisitStaff__c = ged.customerNm; ASEAct.ReporterASE__c = contactId;//报告者 ASEAct.DurationInMinutes__c = getDurationInMinutes(ged);//持续时间分钟 activityIDStr += ged.activityID +'\n'; //add wangweipeng 2022/02/14 start ASEAct.CustomerTel__c = ged.customerTel;//客户手机号码 ASEAct.WorkPlace__c = ged.workPlace;//工作场所 //add wangweipeng 2022/02/14 end ASEAct.AWS_Data_Id__c =ged.DataId;//加密索引 20220207 ASEAct.VisitStaffEncrypt__c=ged.customerNmEncrypted;//密文 20220207 //add sushanhu 2022/02/16 sart ASEAct.CustomerTel_Encrypted__c=ged.customerTelEncrypted; ASEAct.WorkPlace_Encrypted__c =ged.workPlaceEncrypted; //add sushanhu 2022/02/16 end upsertASEList.add(ASEAct); } if (upsertASEList.size() > 0) { activityIDStr += ' ]\n'; upsert upsertASEList; logstr += activityIDStr + 'ASE日报 保存成功 '; } } logstr += 'End\n'; rowData.retry_cnt__c = 0; //必加 } 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); } update rowData; iflog.Log__c = logstr; if (iflog.Log__c.length() > 131072) { iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...'; } if (iflog.ErrorLog__c.length() > 32768) { iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...'; } upsert iflog; } // 计算持续时间分钟 public static Integer getDurationInMinutes(GeData ged){ String startTime = ged.activityStartTime.substring(0, 12)+'00'; String endTime = ged.activityEndTime.substring(0, 12)+'00'; Datetime startDateTime= NFMUtil.parseStr2DateTime(startTime); Datetime endDateTime= NFMUtil.parseStr2DateTime(endTime); return Integer.valueOf((endDateTime.getTime() - startDateTime.getTime()) / 1000 / 60); } // 获取奥林巴斯日历 private static Map getdateCalendarMap(Map dateCalendarMap){ if (dateCalendarMap.size() > 0) { for (OlympusCalendar__c cal : [ Select Id, Date__c from OlympusCalendar__c Where Date__c in :dateCalendarMap.keySet() ] ) { dateCalendarMap.put(cal.Date__c, cal.Id); } } return dateCalendarMap; } // 获取联系人 private static Map getContactMap(List < String > userList){ Map result = new Map(); List < Contact > contactList = [ SELECT Id,CManageCode__c FROM Contact WHERE CManageCode__c IN: userList OR Employee_No_manual__c IN:userList]; for (Contact con: contactList) { result.put(con.CManageCode__c, con.Id); } return result; } // 获取用户 // private static Map < String, Id > getUserMap(List < String > userList) { // Map < String, Id > result = new Map < String, Id > (); // List < User > uList = [SELECT Id, Employee_No__c,Contact.CManageCode__c // FROM User // WHERE IsActive = true AND (Employee_No__c IN: userList OR Contact.CManageCode__c IN:userList) // ]; // for (User u: uList) { // if (String.isNotBlank(u.Contact.CManageCode__c)) { // result.put(u.Contact.CManageCode__c, u.Id); // } // result.put(u.Employee_No__c, u.Id); //员工编码 // } // return result; // } // 获取科室 private static Map < String, Account > getAccountMap(List < String > accountCodeList) { Map < String, Account > result = new Map < String, Account > (); if (accountCodeList.size() > 0) { List < Account > aList = [SELECT Id, ParentId,Parent.ParentId,Management_Code__c, Management_Code_Auto__c FROM Account WHERE Management_Code__c IN: accountCodeList ]; for (Account acc: aList) { result.put(acc.Management_Code__c, acc); //科室编码 } } return result; } // 获取ASE日报 private static Map < String, ASEActivity__c > getASEActivityMap(Map < String, GeData > geDataMap) { Map < String, ASEActivity__c > result = new Map < String, ASEActivity__c > (); List < ASEActivity__c > ASEList = [SELECT Id,ASEActivityCode__c FROM ASEActivity__c WHERE ASEActivityCode__c IN: geDataMap.keySet() ]; for (ASEActivity__c ASEAct: ASEList) { result.put(ASEAct.ASEActivityCode__c, ASEAct); } return result; } // 必填字段验证 private static String verify(GeData ged) { String result = ''; String activityID = ''; if (ged.mngCd == null) { result += 'DataError: ASE管理编码 [ mngCd ] is null!\n'; } if (ged.activityDailyDate == null) { result += 'DataError: 活动日报日期 [ activityDailyDate ] is null!\n'; } if (ged.activityID == null) { result += 'DataError: 活动ID [ activityID ] is null!\n'; } else { activityID = '活动ID [ ' + ged.activityID + ' ]\n'; } if (ged.purposeOfVisit == null) { result += 'DataError: 拜访目的 [ purposeOfVisit ] is null!\n'; } if (ged.activityDifferentiation == null) { result += 'DataError: 活动区分 [ activityDifferentiation ] is null!\n'; } if (ged.activityStartTime == null) { result += 'DataError: 活动开始时间 [ activityStartTime ] is null!\n'; } if (ged.activityEndTime == null) { result += 'DataError: 活动结束时间 [ activityEndTime ] is null!\n'; } if (String.isBlank(ged.taskItem) ) { result += 'DataError: 任务类型 [ taskItem ] is null!\n'; } if (String.isBlank(ged.visitDistinction) ) { result += 'DataError: 拜访区分 [ visitDistinction ] is null!\n'; } // if (String.isBlank(ged.DataId) ) { // result += 'DataError: 加密索引 [ DataId ] is null!\n'; // } // if (String.isBlank(ged.customerNmEncrypted)) { // result += 'DataError: 客户姓名密文 [ customerNmEncrypted ] is null!\n'; // } if (String.isNotBlank(activityID) && String.isNotBlank(result)) { result = activityID + result; } return result; } }