@RestResource(urlMapping = '/NFM612/*')
|
global with sharing class NFM612Rest {
|
//add to AWS 回复 start sushanhu 20220225
|
static Boolean SFStatus=true;
|
static String SFMessage='';
|
//add to AWS 回复 end sushanhu 20220225
|
public static final String LOG_TYPE = 'NFM612';
|
global class GeData {
|
public RepairOderInfo repairOderInfo;
|
public ApplyRepairInfo applyRepairInfo;
|
}
|
//报修单信息
|
public class RepairOderInfo {
|
public String repairOrderNo; //报修单号
|
public String repairOrderNo2; //报修单子单号
|
public String hospitalCd; //报修医院编码
|
public String strategicDepartmenCd; //战略科室编码
|
public String departmentCd; //报修科室编码
|
public String repairApplyPerson; //报修人用户编码
|
public String repairApplicantName; //报修人姓名
|
public String repairApplicantNameEncrypted; //报修人姓名密文 add20220214
|
public String repairApplyPersonTel; //报修人联系人电话
|
public String repairApplyPersonTelEncrypted;//保修人联系电话 密文 add 20220214
|
public String DataId;//aws 存储凭证 add 20220214
|
public String repairApplyType; // 报修人岗位
|
public String equipmentCategory; //设备大类
|
public String assetType; //设备类型
|
public String equipmentCd; //机身编码(医院)
|
public String faultDate; //故障发生日
|
public String repairOrderTime; //报修时间
|
public String faultType; //故障类型
|
public String problemDesc; //问题描述
|
public String problemPhotoName; //问题照片
|
public String problemPhotofile; //照片附件
|
public String repairSubOrderType; //报修单类型
|
public String responseResultType; //应对结果类型
|
public String receiverType; //受理人类型
|
public String receiverId; //受理人用户编号
|
public String receiverDate; //受理日
|
public String plannedVisitDay; //计划上门日
|
//public String actualVisitTimeFirst;//实际上门日
|
public String startTimeFirst; //开始时间
|
public String endTimeFirst; //结束时间
|
public String faultDescriptionFirst; //故障描述
|
public String actualVisitTimeSecond; //二次上门日
|
public String startTimeSecond; //二次上门开始时间
|
public String endTimeSecond; //二次上门结束时间
|
public String faultDescriptionSecond; //二次故障描述
|
public String actualVisitTimeThird; //三次上门日
|
public String startTimeThird; //三次上门开始时间
|
public String endTimeThird; //三次上门结束时间
|
public String faultDescriptionThird; //三次故障描述
|
public String applicantType; //申请修理人类型
|
public String applicantId; //申请修理人编号
|
public String applyDate; //申请时间
|
public String repairOrderNo2FSEID; //报修子单所属FSE的ID
|
|
// 上线前 报修子单与修理上的相关字段都删除
|
public String responseResultsFirst; //上门应对结果(暂时注掉)
|
public String responseResultsSecond; //二次上门应对结果(暂时注掉)
|
public String responseResultsThird; //三次上门应对结果(暂时注掉)
|
public String cancellerType; //取消人类型
|
public String cancellerId; //取消人用户编号
|
public String cancelleRepairDate; //取消报修日
|
public String cancelReportReason; //取消报修原因
|
|
|
}
|
//设备信息
|
public class ApplyRepairInfo {
|
public String equipmentModel; //设备型号
|
public String equipmentCd; //机身编码(工程师)
|
public String responseResultDesc; //应对描述
|
public String processResult; //处理结果
|
}
|
@HttpPost
|
global static void doPost() {
|
// 取得接口传输内容
|
String strData = RestContext.request.requestBody.toString();
|
List < GeData > ges = (List < GeData > ) JSON.deserializeStrict(strData, List < GeData > .class);
|
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":' + gedata + '}';
|
// 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 = ' 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 = '';
|
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 < RepairSubOrder__c > repairList = new List < RepairSubOrder__c > ();
|
Map < String, GeData > gedMap = new Map < String, GeData > ();
|
List < String > managementCodeList = new List < String > (); //存放科室编码
|
List < String > rpersonList = new List < String > (); //存放报修人用户编码
|
List < String > canIdList = new List < String > (); //存放取消人用户编号
|
for (GeData ged: itemMasterList) {
|
String dataComplete = verify(ged);
|
if (!String.isBlank(dataComplete)) {
|
logstr += dataComplete;
|
continue;
|
}
|
gedMap.put(ged.repairOderInfo.repairOrderNo2, ged);
|
|
managementCodeList.add(ged.repairOderInfo.departmentCd);
|
// 报修人用户编码
|
if (String.isNotBlank(ged.repairOderInfo.repairApplyPerson)) {
|
rpersonList.add(ged.repairOderInfo.repairApplyPerson);
|
}
|
//申请修理人编号
|
if (String.isNotBlank(ged.repairOderInfo.applicantId)) {
|
// canIdList.add(ged.repairOderInfo.applicantId);
|
rpersonList.add(ged.repairOderInfo.applicantId);
|
|
}
|
// 受理人用户编号(经销商用户、社内用户)
|
if (String.isNotBlank(ged.repairOderInfo.receiverId)) {
|
rpersonList.add(ged.repairOderInfo.receiverId);
|
// canIdList.add(ged.repairOderInfo.receiverId);
|
}
|
canIdList.add(ged.repairOderInfo.repairOrderNo2FSEID);
|
}
|
if (gedMap.size() > 0) {
|
|
// 根据科室编码获取科室、战略科室、医院
|
Map < String, Account > accountMap = getAccountMap(managementCodeList);
|
//存放报修人用户编码,id
|
Map < String, Id > personMap = getContactMap(rpersonList);
|
//存放取消人用户编码,受理人id.申请修理人编号,报修子单所属FSE的ID,id
|
Map < String, User > canidMap = getUserMap(canIdList);
|
|
// 附件下载标记
|
Boolean attachmentDownloadFlg = false;
|
String repairOrderNo2Str = '报修子单No [ \n';
|
for (String repairOrderNo2: gedMap.keySet()) {
|
GeData ged = gedMap.get(repairOrderNo2);
|
|
if (!accountMap.containsKey(ged.repairOderInfo.departmentCd)) {
|
logstr += ged.repairOderInfo.departmentCd + '该科室不存在,此条数据跳过!';
|
continue;
|
}
|
if (String.isNotBlank(ged.repairOderInfo.repairApplyPerson) && !personMap.containsKey(ged.repairOderInfo.repairApplyPerson)) {
|
logstr += ged.repairOderInfo.repairApplyPerson + '报修人用户编码不存在,此条数据跳过';
|
continue;
|
}
|
|
if (!personMap.containsKey(ged.repairOderInfo.receiverId)) {
|
logstr += ged.repairOderInfo.receiverId + '受理人用户编号不存在,此条数据跳过';
|
continue;
|
}
|
|
if ('申请修理'.equals(ged.applyRepairInfo.processResult) && !personMap.containsKey(ged.repairOderInfo.applicantId)) {
|
logstr += ged.repairOderInfo.applicantId + '申请修理人编号不存在,此条数据跳过';
|
continue;
|
}
|
if (!canidMap.containsKey(ged.repairOderInfo.repairOrderNo2FSEID)) {
|
logstr += ged.repairOderInfo.repairOrderNo2FSEID + '报修子单所属FSE的ID不存在,此条数据跳过';
|
continue;
|
}
|
RepairSubOrder__c repair = new RepairSubOrder__c();
|
repair.RepairOrderNo__c = ged.repairOderInfo.repairOrderNo; //报修单号
|
repair.RepairSubOrderNo__c = ged.repairOderInfo.repairOrderNo2; //报修单子单号
|
repair.Name = ged.repairOderInfo.repairOrderNo2; //报修单名称
|
Account dep = accountMap.get(ged.repairOderInfo.departmentCd);
|
repair.Hospital__c = dep.Parent.ParentId; //报修医院编码
|
repair.StrategicDepartment__c = dep.ParentId; //战略科室
|
repair.Department__c = dep.Id; //报修科室编码
|
|
repair.RepairApplicant__c = personMap.get(ged.repairOderInfo.repairApplyPerson); //报修人用户编码
|
repair.RepairApplicantName__c = ged.repairOderInfo.repairApplicantName; //报修人姓名
|
repair.RepairApplicantTel__c = ged.repairOderInfo.repairApplyPersonTel; //报修人联系电话
|
repair.RepairSubOrderPost__c = ged.repairOderInfo.repairApplyType; //报修人岗位
|
repair.EquipmentCategory__c = ged.repairOderInfo.equipmentCategory; //设备大类
|
repair.AssetType__c = ged.repairOderInfo.assetType; //设备类型
|
repair.AssetCode__c = ged.repairOderInfo.equipmentCd; //机身编码
|
repair.FaultTime__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.faultDate); //故障发生日
|
repair.RepairTime__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.repairOrderTime); //报修时间
|
repair.FaultType__c = ged.repairOderInfo.faultType; //故障类型
|
repair.ProblemDescription__c = ged.repairOderInfo.problemDesc; //问题描述
|
repair.RepairSubOrderType__c = ged.repairOderInfo.repairSubOrderType; //报修单类型
|
repair.ResponseResultType__c = ged.repairOderInfo.responseResultType; //应对结果类型
|
|
repair.ReceiverType__c = ged.repairOderInfo.receiverType; //受理人类型
|
|
// repair.ReceiverFSE__c = canidMap.get(ged.repairOderInfo.receiverId).Id; //受理人(FSE)
|
repair.Receiver__c = personMap.get(ged.repairOderInfo.receiverId); //受理人
|
repair.ReceiverTime__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.receiverDate); //受理日
|
repair.PlannedVisitDay__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.plannedVisitDay); //计划上门日
|
repair.StartTimeFirst__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.startTimeFirst); //开始时间
|
repair.EndTimeFirst__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.endTimeThird); //结束时间
|
repair.FaultDescriptionFirst__c = ged.repairOderInfo.faultDescriptionFirst; //故障描述
|
repair.ActualVisitTimeSecond__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.actualVisitTimeSecond); //二次上门日
|
repair.StartTimeSecond__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.startTimeSecond); //二次上门开始时间
|
repair.EndTimeSecond__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.endTimeSecond); //二次上门结束时间
|
repair.FaultDescriptionSecond__c = ged.repairOderInfo.faultDescriptionSecond; //二次故障描述
|
repair.ActualVisitTimeThird__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.actualVisitTimeThird); //三次上门日
|
repair.StartTimeThird__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.startTimeThird); //三次上门开始时间
|
repair.EndTimeThird__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.endTimeThird); //三次上门结束时间
|
repair.FaultDescriptionThird__c = ged.repairOderInfo.faultDescriptionThird; //三次故障描述
|
repair.ApplicantType__c = ged.repairOderInfo.applicantType; //申请修理人类型
|
repair.RepairApplicantName_Encrypted__c =ged.repairOderInfo.repairApplicantNameEncrypted; //报修人姓名密文 add 20220214
|
repair.RepairApplicantTel_Encrypted__c = ged.repairOderInfo.repairApplyPersonTelEncrypted;//保修人联系电话密文 add 20220214
|
repair.AWS_Data_Id__c =ged.repairOderInfo.DataId;//AWS 存储凭证 add 20220214
|
// repair.Applicant__c = canidMap.get(ged.repairOderInfo.applicantId).Id; //申请修理人编号
|
repair.Applicanter__c = personMap.get(ged.repairOderInfo.applicantId);//申请修理人编号
|
repair.ApplicationTime__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.applyDate); //申请时间
|
|
repair.Ownerid = canidMap.get(ged.repairOderInfo.repairOrderNo2FSEID).Id; //报修子单所属FSE的ID
|
repair.AssetModel__c = ged.applyRepairInfo.equipmentModel; //设备型号
|
repair.AirframeCodeEngineer__c = ged.applyRepairInfo.equipmentCd; //机身编码(工程师)
|
repair.ResponseResultDesc__c = ged.applyRepairInfo.responseResultDesc; //应对描述
|
repair.ProcessResult__c = ged.applyRepairInfo.processResult; //处理结果
|
|
|
if ('问题已解决'.equals(ged.applyRepairInfo.processResult)) {
|
repair.Status__c = '关闭';
|
} else {
|
repair.Status__c = '待处理';
|
|
}
|
// 附件信息
|
repair.AttachmentLink__c = ged.repairOderInfo.problemPhotofile;
|
String attachmentName = ged.repairOderInfo.problemPhotoName;
|
|
if (ged.repairOderInfo != null && String.isNotBlank(ged.repairOderInfo.problemPhotofile)) {
|
repair.AttachmentDownload__c = true;
|
attachmentDownloadFlg = true;
|
if (String.isBlank(attachmentName) || (String.isNotBlank(attachmentName) && !attachmentName.contains('.zip'))){
|
attachmentName = '附件.zip';
|
}
|
|
}
|
repair.AttachmentName__c = attachmentName;
|
repairOrderNo2Str += repairOrderNo2 + '\n';
|
repairList.add(repair);
|
}
|
|
if (repairList.size() > 0) {
|
|
insert repairList;
|
repairOrderNo2Str += ' ]\n';
|
logstr += repairOrderNo2Str + '新增完成, 新增总数数为:' + repairList.size() + '\n';
|
if (attachmentDownloadFlg) {
|
NFM609Schedule.assignOneMinute('RepairSubOrder__c');
|
}
|
|
}
|
}
|
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;
|
|
insert iflog;
|
}
|
/**
|
* [getAccountMap description] 根据科室编码查找科室,与科室对应的战略科室和医院
|
* @param managementCodeList [可数的管理编码]
|
* @return [科室信息]
|
*/
|
private static Map < String, Account > getAccountMap(List < String > managementCodeList) {
|
List < Account > accountList =
|
[SELECT id, Management_Code__c, ParentId, Parent.ParentId
|
FROM Account
|
WHERE Management_Code__c
|
IN: managementCodeList
|
];
|
|
Map < String, Account > hosMap = new Map < String, Account > ();
|
for (Account ac: accountList) {
|
hosMap.put(ac.Management_Code__c, ac);
|
}
|
return hosMap;
|
}
|
/**
|
* [获取系统里的联系人]
|
* @param rpersonList [报修人/申请人/受理人的管理人员编号或对应用户的员工编码]
|
* @return [联系人信息]
|
*/
|
private static Map < String, Id > getContactMap(List < String > rpersonList) {
|
List < Contact > couList = [
|
SELECT id, CManageCode__c,Employee_No_manual__c
|
FROM Contact
|
WHERE CManageCode__c IN: rpersonList OR Employee_No_manual__c IN:rpersonList];
|
Map < String, Id > contactMap = new Map < String, Id > ();
|
for (Contact con: couList) {
|
contactMap.put(con.CManageCode__c, con.Id);
|
if (String.isNotBlank(con.Employee_No_manual__c)) {
|
contactMap.put(con.Employee_No_manual__c, con.Id);
|
}
|
}
|
return contactMap;
|
}
|
/**
|
* [获取系统里的用户]
|
* @param canIdList [description]
|
* @return [description]
|
*/
|
private static Map < String, User > getUserMap(List < String > canIdList) {
|
List < User > userList =
|
[SELECT id, Employee_No__c, Contact.CManageCode__c,IsActive,Contact.Employee_No_manual__c
|
FROM User
|
WHERE Employee_No__c IN: canIdList OR Contact.CManageCode__c IN: canIdList OR Contact.Employee_No_manual__c IN:canIdList
|
];
|
Map < String, User > result = new Map < String, User > ();
|
for (User u: userList) {
|
if (String.isNotBlank(u.Contact.CManageCode__c)) {
|
result.put(u.Contact.CManageCode__c, u);
|
}
|
if (String.isNotBlank(u.Contact.Employee_No_manual__c)) {
|
result.put(u.Contact.Employee_No_manual__c, u);
|
}
|
result.put(u.Employee_No__c, u);
|
}
|
|
return result;
|
}
|
|
private static String verify(GeData ged) {
|
String result = '';
|
String repairOrderNo2 = '';
|
if (ged.repairOderInfo == null) {
|
result += ' DataError: repairOderInfo is null!\n';
|
} else {
|
if (ged.repairOderInfo.repairOrderNo == null) {
|
result += ' DataError: 报修单 [ repairOrderNo ] is null!\n';
|
}
|
if (ged.repairOderInfo.repairOrderNo2 == null) {
|
result += ' DataError: 报修子单 [ repairOrderNo2 ] is null!\n';
|
} else {
|
repairOrderNo2 = '报修子单 [ ' + ged.repairOderInfo.repairOrderNo2 + ' ]\n';
|
}
|
if (ged.repairOderInfo.departmentCd == null) {
|
result += ' DataError: 报修科室编码 [ departmentCd ] is null!\n';
|
}
|
|
if (ged.repairOderInfo.faultDate == null) {
|
result += ' DataError: 故障发生日 [ faultDate ] is null!\n';
|
}
|
if (ged.repairOderInfo.repairOrderTime == null) {
|
result += ' DataError: 报修时间 [ repairOrderTime ] is null!\n';
|
}
|
if (ged.repairOderInfo.faultType == null) {
|
result += ' DataError: 故障类型 [ faultType ] is null!\n';
|
}
|
if (ged.repairOderInfo.repairSubOrderType == null) {
|
result += ' DataError: 报修单类型 [ repairSubOrderType ] is null!\n';
|
}
|
|
if (String.isBlank(ged.repairOderInfo.receiverType)) {
|
result += ' DataError: 受理人类型 [ receiverType ] is null!\n';
|
}
|
if (String.isBlank(ged.repairOderInfo.receiverId)) {
|
result += ' DataError: 受理人用户编号 [ receiverId ] is null!\n';
|
}
|
if (String.isBlank(ged.repairOderInfo.receiverDate)) {
|
result += ' DataError: 受理日 [ receiverDate ] is null!\n';
|
}
|
if (ged.repairOderInfo.repairOrderNo2FSEID == null) {
|
result += ' DataError: 报修子单所属FSE的ID [ repairOrderNo2FSEID ] is null!\n';
|
}
|
}
|
if (ged.applyRepairInfo == null) {
|
result += ' DataError: applyRepairInfo is null!\n';
|
} else {
|
if (String.isBlank(ged.applyRepairInfo.equipmentModel)) {
|
result += ' DataError: 设备型号 [ equipmentModel ] is null!\n';
|
}
|
|
if (String.isBlank(ged.applyRepairInfo.processResult)) {
|
result += ' DataError: 处理结果 [ processResult ] is null!\n';
|
} else {
|
if ('申请修理'.equals(ged.applyRepairInfo.processResult)) {
|
if (String.isBlank(ged.repairOderInfo.applicantId)) {
|
result += ' DataError: 申请修理人编号 [ applicantId ] is null!\n';
|
}
|
if (String.isBlank(ged.repairOderInfo.applyDate)) {
|
result += ' DataError: 申请时间 [ applyDate ] is null!\n';
|
}
|
}
|
}
|
}
|
|
if (String.isNotBlank(repairOrderNo2) && String.isNotBlank(result)) {
|
result = repairOrderNo2 + result;
|
}
|
return result;
|
}
|
}
|