From d8dc84a3d56df839895f1c417a4d9cbee763d262 Mon Sep 17 00:00:00 2001
From: 高章伟 <gaozhangwei@prec-tech.com>
Date: 星期五, 03 三月 2023 14:50:59 +0800
Subject: [PATCH] gzw 测试环境代码更新
---
force-app/main/default/classes/NFM603Controller.cls | 559 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 531 insertions(+), 28 deletions(-)
diff --git a/force-app/main/default/classes/NFM603Controller.cls b/force-app/main/default/classes/NFM603Controller.cls
index b62e5c9..c480862 100644
--- a/force-app/main/default/classes/NFM603Controller.cls
+++ b/force-app/main/default/classes/NFM603Controller.cls
@@ -4,6 +4,11 @@
// private static final String API = '/admin/api/scd/save';
private static final String API = '/admin/api/repair/save';
+ // 2022-05-05 zyh update start
+ private static List < BatchIF_Log__c > logList = new List < BatchIF_Log__c > ();
+ private static List < BatchIF_Log__c > rowList = new List < BatchIF_Log__c > ();
+ private static Map < Id,BatchIF_Log__c > logMap = new Map < Id,BatchIF_Log__c > ();
+ // 2022-05-05 zyh update end
public static Integer status;
public static String message;
public class RepairOrderInfo {
@@ -40,7 +45,16 @@
public String RepairType; //淇悊鍖哄垎-------------------
public String QuotationGread; //鎶ヤ环绛夌骇(new)
public String detectionResult; //妫�娴嬬粨鏋�
+ //LLIU-CG53S9 LY 20220711 start
+ public String isContractUser; //鏄惁鍚堝悓鐢ㄦ埛
+ public String oldRepairNo; //鍘熶慨鐞嗗崟鍙�
+ public String closeRepairDate; //淇悊鍗曞叧闂棩
+ //LLIU-CG53S9 LY 20220711 end
public String cus_dn; //DN鍙�
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 start
+ public String OTSRepairOrder;
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 end
+
//閫佷慨鐗╂祦
public String deliveryLogisticsMode; //閫佷慨鐗╂祦鏂瑰紡
public String engineerSendDate; //宸ョ▼甯堜慨鐞嗗搧瀵勯�佹棩
@@ -125,7 +139,7 @@
public static void executefuture(BatchIF_Log__c iflog, List < String > repairOrderIdList) {
Datetime nowDT = Datetime.now();
- String nowStr = nowDT.format('yyyyMMddHHmm');
+ String nowStr = nowDT.format('yyyyMMddHHmmss');
if (iflog != null) {
iflog.ErrorLog__c = '';
} else {
@@ -136,6 +150,7 @@
iflog.MessageGroupNumber__c = nowStr;
}
List < RepairOrderInfo > repairs = new List < RepairOrderInfo > ();
+ List < RepairOrderInfo > repairs1 = new List < RepairOrderInfo > ();
BatchIF_Log__c rowData = null;
List < Repair__c > repairList = new List < Repair__c > ();
if (repairOrderIdList != null && repairOrderIdList.size() > 0) {
@@ -216,6 +231,7 @@
RcSorcDate__c,
SorcAcceptDate__c,
SorcOgzDate__c,
+ RcOgzDate__c,
Returns_Product_waySAP__c,
DnNO__c,
OgzAcceptDate__c,
@@ -233,11 +249,23 @@
Repair_Final_Inspection_DateTime__c,
Repair_Shipped_DateTime__c,
Repair_Discount_approval_DateTime_form__c,
- Agreed_DateTime__c
+ // 2022-05-20 zyh update start
+ Repair_Estimated_Date__c,
+ Repair_Estimated_date_formula__c,
+ // 2022-05-20 zyh update end
+ Agreed_DateTime__c,
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 start
+ OTSRepairOrder__c
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 end
+ //LLIU-CG53S9 LY 20220711 start
+ ,IF_ContractUser__c
+ ,Old_Name__c
+ ,SAP_not_accept_repair_result__c
+ //LLIU-CG53S9 LY 20220711 end
from Repair__c where id in: repairOrderIdList
];
}
- String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + repairList.size() + '\n';
+ String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + repairList.size() + '\n' + repairList[0].Name + '\n';
try {
List < Id > repairIdList = new List < Id > ();
for (Repair__c repair: repairList) {
@@ -248,6 +276,10 @@
// 澶囧搧鍑哄�熻褰� 鏌ユ壘澶囧搧鍑哄�熶竴瑙堟槑缁嗙殑 浜у搧鍨嬪彿
Map < id, List < SparePartsLendingRecord >> rentalMap = getrentalMap(repairIdList);
+ // String downSDt = ''; 2022-5-10 zyh update
+ // String downEDt = ''; 2022-5-10 zyh update
+ // String upSDt = ''; 2022-5-10 zyh update
+ // String upEDt = ''; 2022-5-10 zyh update
for (Repair__c repair: repairList) {
@@ -283,6 +315,11 @@
info.RepairType = repair.Repair_Severity_Rank__c; //淇悊鍖哄垎----------
info.QuotationGread = repair.Repair_Rank__c; //鎶ヤ环绛夌骇
info.detectionResult = repair.InspectionResultFlag__c; //妫�娴嬬粨鏋�
+ //LLIU-CG53S9 LY 20220711 start
+ info.isContractUser = repair.IF_ContractUser__c ? 'true' : 'false'; //鏄惁鍚堝悓鐢ㄦ埛
+ info.oldRepairNo = repair.Old_Name__c; //鍘熶慨鐞嗗彈浠樼暘鍙�
+ info.closeRepairDate = NFMUtil.formatDate2StrDateTime(repair.SAP_not_accept_repair_result__c); //淇悊鍗曞叧闂棩
+ //LLIU-CG53S9 LY 20220711 end
info.FaultDesc = reasonMap.get(repair.id); //鏁呴殰鎻忚堪List
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
info.deliveryLogisticsMode = repair.DeliveryLogisticsMode__c; //閫佷慨鐗╂祦鏂瑰紡======鑷繁鍐欏瓧娈�
@@ -312,10 +349,12 @@
info.RCacceptanceDate = NFMUtil.formatDateTime2Str(repair.Repair_Ordered_DateTime__c); //4.淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級
//info.inspectionDate = NFMUtil.formatDate2StrDateTime(repair.Repair_Inspection_Date__c); //淇悊妫�娴嬫棩
info.inspectionDate = NFMUtil.formatDateTime2Str(repair.Repair_Inspection_DateTime__c); //5.淇悊妫�娴嬫棩锛堝皬绋嬪簭锛�
- info.FirstQuotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Firstestimated_Date_formula__c); //鍒濇鎶ヤ环鏃�
+ // info.FirstQuotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Firstestimated_Date_formula__c); //鍒濇鎶ヤ环鏃� 2022-05-20 zyh 娉ㄩ噴
+ info.FirstQuotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Estimated_Date__c); //鍒濇鎶ヤ环鏃� 2022-05-20 zyh add
//info.priceApprovalDate = NFMUtil.formatDate2StrDateTime(repair.Repair_Discount_approval_Date_formula__c); //鍑忎环鐢宠鎵瑰噯鏃�
info.priceApprovalDate = NFMUtil.formatDateTime2Str(repair.Repair_Discount_approval_DateTime_form__c); //鍑忎环鐢宠鎵瑰噯鏃ワ紙灏忕▼搴忥級
- info.quotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Quotation_date__c); //鎶ヤ环鏃�
+ // info.quotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Quotation_date__c); //鎶ヤ环鏃� 2022-05-20 zyh 娉ㄩ噴
+ info.quotationDate = NFMUtil.formatDate2StrDateNewTime(repair.Repair_Estimated_date_formula__c); //鎶ヤ环鏃� 2022-05-20 zyh add
//info.cancelRepairDate = NFMUtil.formatDate2StrDateTime(repair.repair_cancel_date__c); //淇悊鍙栨秷鏃�
info.cancelRepairDate = NFMUtil.formatDateTime2Str(repair.repair_cancel_dateTime__c); //淇悊鍙栨秷鏃ワ紙灏忕▼搴忥級
//info.userAgreeDAte = NFMUtil.formatDate2StrDateTime(repair.Agreed_Date__c); //鐢ㄦ埛鍚屾剰鏃�
@@ -366,15 +405,133 @@
info.OgzAcceptDate = NFMUtil.formatDateTime2Str(repair.OgzAcceptDateTime__c);//OGZ鍙楃悊鏃ワ紙灏忕▼搴忥級
//update wangweipeng 2022/02/16 end
- info.SorcOgzDate = NFMUtil.formatDate2StrDateTime(repair.SorcOgzDate__c);
+ // info.SorcOgzDate = NFMUtil.formatDate2StrDateTime(repair.SorcOgzDate__c);RcOgzDate__c
+
+ //update zhangyuheng 2022/03/07
+ info.SorcOgzDate = NFMUtil.formatDate2StrDateTime(repair.RcOgzDate__c);
info.cus_dn = repair.DnNO__c;
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 start
+ info.OTSRepairOrder = repair.OTSRepairOrder__c;
+ //淇悊澧炲姞OTS杩愬崟鍙峰瓧娈� thh 20220308 end
+
+ //鎶ヤ环鏃ャ�佸垵娆℃姤浠锋棩銆丷C淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鏃堕棿鍒ゆ柇 zyh 20220315 start
+ // downSDt = DownStartDt(); // 2022-5-10 zyh update 瀹氫箟涓婁笅鐝椂闂村悓姝ヤ慨鏀�
+ // downEDt = DownEndDt(); // 2022-5-10 zyh update 瀹氫箟涓婁笅鐝椂闂村悓姝ヤ慨鏀�
+ // upSDt = UpStartDt(); // 2022-5-10 zyh update 瀹氫箟涓婁笅鐝椂闂村悓姝ヤ慨鏀�
+ // upEDt = UpEndDt(); // 2022-5-10 zyh update 瀹氫箟涓婁笅鐝椂闂村悓姝ヤ慨鏀�
+ // 2022-05-07 zyh update start
+ if (String.isNotBlank(info.FirstQuotationDate)) {
+ info.FirstQuotationDate = info.FirstQuotationDate.deleteWhitespace();
+ }
+ if (String.isNotBlank(info.quotationDate)) {
+ info.quotationDate = info.quotationDate.deleteWhitespace();
+ }
+ // 2022-05-07 zyh update end
+ //瀹氫箟涓嬬彮鏃堕棿
+ if (String.valueOf(info.FirstQuotationDate) >= String.valueOf(DownStartDt(info.FirstQuotationDate)) && String.valueOf(info.FirstQuotationDate) <= String.valueOf(DownEndDt(info.FirstQuotationDate))) {
+ info.FirstQuotationDate = DownDt(info.FirstQuotationDate);//鍒濇鎶ヤ环鏃�
+ }
+ if (String.valueOf(info.RCacceptanceDate) >= String.valueOf(DownStartDt(info.RCacceptanceDate)) && String.valueOf(info.RCacceptanceDate) <= String.valueOf(DownEndDt(info.RCacceptanceDate))) {
+ info.RCacceptanceDate = DownDt(info.RCacceptanceDate);//4.淇悊鍝丷C鍙楃悊鏃�
+ }
+ if (String.valueOf(info.quotationDate) >= String.valueOf(DownStartDt(info.quotationDate)) && String.valueOf(info.quotationDate) <= String.valueOf(DownEndDt(info.quotationDate))) {
+ info.quotationDate = DownDt(info.quotationDate);//鎶ヤ环鏃�
+ }
+ if (String.valueOf(info.FSErepairApplyDate) >= String.valueOf(DownStartDt(info.FSErepairApplyDate)) && String.valueOf(info.FSErepairApplyDate) <= String.valueOf(DownEndDt(info.FSErepairApplyDate))) {
+ info.FSErepairApplyDate = DownDt(info.FSErepairApplyDate);//FSE淇悊鐢宠鏃堕棿 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.RCreturnDate) >= String.valueOf(DownStartDt(info.RCreturnDate)) && String.valueOf(info.RCreturnDate) <= String.valueOf(DownEndDt(info.RCreturnDate))) {
+ info.RCreturnDate = DownDt(info.RCreturnDate);//RC淇悊鍝佽繑閫佹棩 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.finalTestDate) >= String.valueOf(DownStartDt(info.finalTestDate)) && String.valueOf(info.finalTestDate) <= String.valueOf(DownEndDt(info.finalTestDate))) {
+ info.finalTestDate = DownDt(info.finalTestDate);//10.鏈�缁堟娴嬫棩锛堝皬绋嬪簭锛� 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.userAgreeDAte) >= String.valueOf(DownStartDt(info.userAgreeDAte)) && String.valueOf(info.userAgreeDAte) <= String.valueOf(DownEndDt(info.userAgreeDAte))) {
+ info.userAgreeDAte = DownDt(info.userAgreeDAte);//7.鐢ㄦ埛鍚屾剰鏃ワ紙灏忕▼搴忥級 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.engineerSendDate) >= String.valueOf(DownStartDt(info.engineerSendDate)) && String.valueOf(info.engineerSendDate) <= String.valueOf(DownEndDt(info.engineerSendDate))) {
+ info.engineerSendDate = DownDt(info.engineerSendDate);//宸ョ▼甯堜慨鐞嗗搧瀵勯�佹棩 2022-05-06--zyh--add
+ }
+ //瀹氫箟涓婄彮鏃堕棿
+ if (String.valueOf(info.FirstQuotationDate) >= String.valueOf(UpStartDt(info.FirstQuotationDate)) && String.valueOf(info.FirstQuotationDate) <= String.valueOf(UpEndDt(info.FirstQuotationDate))) {
+ info.FirstQuotationDate = UpDt(info.FirstQuotationDate);//鍒濇鎶ヤ环鏃�
+ }
+ if (String.valueOf(info.RCacceptanceDate) >= String.valueOf(UpStartDt(info.RCacceptanceDate)) && String.valueOf(info.RCacceptanceDate) <= String.valueOf(UpEndDt(info.RCacceptanceDate))) {
+ info.RCacceptanceDate = UpDt(info.RCacceptanceDate);//4.淇悊鍝丷C鍙楃悊鏃�
+ }
+ if (String.valueOf(info.quotationDate) >= String.valueOf(UpStartDt(info.quotationDate)) && String.valueOf(info.quotationDate) <= String.valueOf(UpEndDt(info.quotationDate))) {
+ info.quotationDate = UpDt(info.quotationDate);//鎶ヤ环鏃�
+ }
+ if (String.valueOf(info.FSErepairApplyDate) >= String.valueOf(UpStartDt(info.FSErepairApplyDate)) && String.valueOf(info.FSErepairApplyDate) <= String.valueOf(UpEndDt(info.FSErepairApplyDate))) {
+ info.FSErepairApplyDate = UpDt(info.FSErepairApplyDate);//FSE淇悊鐢宠鏃堕棿 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.RCreturnDate) >= String.valueOf(UpStartDt(info.RCreturnDate)) && String.valueOf(info.RCreturnDate) <= String.valueOf(UpEndDt(info.RCreturnDate))) {
+ info.RCreturnDate = UpDt(info.RCreturnDate);//RC淇悊鍝佽繑閫佹棩 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.finalTestDate) >= String.valueOf(UpStartDt(info.finalTestDate)) && String.valueOf(info.finalTestDate) <= String.valueOf(UpEndDt(info.finalTestDate))) {
+ info.finalTestDate = UpDt(info.finalTestDate);//10.鏈�缁堟娴嬫棩锛堝皬绋嬪簭锛� 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.userAgreeDAte) >= String.valueOf(UpStartDt(info.userAgreeDAte)) && String.valueOf(info.userAgreeDAte) <= String.valueOf(UpEndDt(info.userAgreeDAte))) {
+ info.userAgreeDAte = UpDt(info.userAgreeDAte);//7.鐢ㄦ埛鍚屾剰鏃ワ紙灏忕▼搴忥級 2022-05-06--zyh--add
+ }
+ if (String.valueOf(info.engineerSendDate) >= String.valueOf(UpStartDt(info.engineerSendDate)) && String.valueOf(info.engineerSendDate) <= String.valueOf(UpEndDt(info.engineerSendDate))) {
+ info.engineerSendDate = UpDt(info.engineerSendDate);//宸ョ▼甯堜慨鐞嗗搧瀵勯�佹棩 2022-05-06--zyh--add
+ }
+ //鎶ヤ环鏃ャ�佸垵娆℃姤浠锋棩銆丷C淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鏃堕棿鍒ゆ柇 zyh 20220315 end
repairs.add(info);
+ System.debug('repairs1:' + repairs);
}
logstr += '\nend';
if (repairs.size() > 0) {
- rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, repairs);
- execute(rowData, iflog);
+ // 2022-05-05 zyh update start
+ /*for (RepairOrderInfo roi : repairs ) {
+ repairs1.add(roi);
+ rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, repairs1);
+ // 2022-05-07 zyh update start
+ if (String.isBlank(rowData.MessageGroupNumber__c)) {
+ rowData.MessageGroupNumber__c = nowStr;
+ }
+ // 2022-05-07 zyh update end
+ execute1(rowData, iflog);
+ // rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, repairs);
+ // execute(rowData, iflog);
+ repairs1 = new List < RepairOrderInfo > ();
+ }// 2022-08-19 zyh 灏忕▼搴忓紓姝ュ鐞嗭紝鎭㈠鎵归噺鍙戦��
+ */ // 2023-02-02 zyh 浜斾釜涓�鎵规帹閫佸皬绋嬪簭 娉ㄩ噴涓婃柟for寰幆
+ // 2023-02-02 zyh 浜斾釜涓�鎵规帹閫佸皬绋嬪簭 start
+ for (Integer i=1; i <= repairs.size();i++ ) {
+ if(Math.mod(i, 5) > 0 ){
+ repairs1.add(repairs[i-1]);
+ if(i == repairs.size()){
+ rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, repairs1);
+ if (String.isBlank(rowData.MessageGroupNumber__c)) {
+ rowData.MessageGroupNumber__c = nowStr;
+ }
+ execute1(rowData, iflog);
+ }
+ }else{
+ repairs1.add(repairs[i-1]);
+ rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, repairs1);
+ if (String.isBlank(rowData.MessageGroupNumber__c)) {
+ rowData.MessageGroupNumber__c = nowStr;
+ }
+ execute1(rowData, iflog);
+ repairs1 = new List < RepairOrderInfo > ();
+ }
+
+ }
+ // 2023-02-02 zyh 浜斾釜涓�鎵规帹閫佸皬绋嬪簭 end
+ upsert logList;
+ upsert rowList;
+ // 2022-05-11 zyh update start
+ if (logMap.size() > 0) {
+ delete logMap.values();
+ }
+ // 2022-05-11 zyh update end
+ // delete logMap.values();
+ // 2022-05-05 zyh update end
+ // upsert rowData;
}
} catch (Exception e) {
// 鍙戠敓閿欒鏃�
@@ -417,7 +574,7 @@
public static void execute(BatchIF_Log__c rowDataSFDC, BatchIF_Log__c iflog) {
Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
- String logstr = rowDataSFDC.MessageGroupNumber__c + ' start\n';
+ String logstr = rowDataSFDC.Name + ' start\n';
if (iflog == null) {
iflog = new BatchIF_Log__c();
iflog.Type__c = LOG_TYPE;
@@ -440,7 +597,22 @@
logstr += status + '\n';
rowDataSFDC.retry_cnt__c = 0;
} else {
- rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status);
+ // rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status); //2022-06-24 zyh 娉ㄩ噴锛氶噸鍙戦�昏緫淇敼
+ //2022-06-24 zyh update start
+ if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0;
+ if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) {
+ rowDataSFDC.retry_cnt__c++;
+ // 20230201 ljh start
+ // LogAutoSendSchedule.logId = rowDataSFDC.Id;
+ LogAutoSendSchedule.assignOneMinute();
+ // LogAutoSendSchedule.assignOneMinute(rowDataSFDC.MessageGroupNumber__c,rowDataSFDC.Type__c);
+ // 20230201 ljh end
+ }
+ if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) {
+ rowDataSFDC.ErrorLog__c = 'status:' + status +
+ '\n閿欒娆℃暟宸茬粡瓒呰繃鑷姩閫佷俊璁惧畾鐨勬渶澶ф鏁帮紝璇锋墜鍔ㄩ�佷俊';
+ }
+ //2022-06-24 zyh update end
}
} catch (Exception ex) {
@@ -449,14 +621,120 @@
logstr += ex.getMessage();
iflog.ErrorLog__c += ex.getMessage() + '\n';
iflog.ErrorLog__c += ex.getStackTraceString() + '\n';
- rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, ex, null);
+ if(!Test.isRunningTest()){
+ // rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, ex, null); //2022-06-24 zyh 娉ㄩ噴锛氶噸鍙戦�昏緫淇敼
+ //2022-06-24 zyh update start
+ if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0;
+ if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt){
+ rowDataSFDC.retry_cnt__c++;
+ // 20230201 ljh start
+ // LogAutoSendSchedule.logId = rowDataSFDC.Id;
+ LogAutoSendSchedule.assignOneMinute();
+ // LogAutoSendSchedule.assignOneMinute(rowDataSFDC.MessageGroupNumber__c,rowDataSFDC.Type__c);
+ // 20230201 ljh end
+ }
+ if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt){
+ rowDataSFDC.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowDataSFDC.ErrorLog__c+'閿欒娆℃暟宸茬粡瓒呰繃鑷姩閫佷俊璁惧畾鐨勬渶澶ф鏁帮紝璇锋墜鍔ㄩ�佷俊';
+ }
+ //2022-06-24 zyh update end
+ }
}
iflog.Log__c = logstr;
upsert iflog;
upsert rowDataSFDC;
+ // logList.add(iflog);
+ // rowList.add(rowDataSFDC);
+
+ }
+ // 2022-05-05 zyh update start
+ public static void execute1(BatchIF_Log__c rowDataSFDC, BatchIF_Log__c iflog) {
+ Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
+
+ String logstr = rowDataSFDC.MessageGroupNumber__c + ' start\n';
+ if (iflog == null) {
+ iflog = new BatchIF_Log__c();
+ iflog.Type__c = LOG_TYPE;
+ iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c;
+ iflog.Log__c = logstr;
+ iflog.ErrorLog__c = '';
+
+ } else {
+ // iflog.Type__c = LOG_TYPE;
+ // iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c;
+ // logstr = iflog.Log__c;
+ // 2022-05-11 zyh update start
+ if (String.isNotBlank(iflog.Id)) {
+ logMap.put(iflog.Id, iflog);
+ }
+ // 2022-05-11 zyh update end
+ // logMap.put(iflog.Id, iflog);
+ iflog = new BatchIF_Log__c();
+ iflog.Type__c = LOG_TYPE;
+ iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c;
+ iflog.Log__c = logstr;
+ iflog.ErrorLog__c = '';
+ }
+
+ try {
+ String data = NFMUtil.getRowDataStr(rowDataSFDC);
+ String status = NFMUtil.sendToAWS(data, API);
+ System.debug('NFM603Log--status->' + status);
+
+ if ('OK'.equals(status)) {
+ logstr += status + '\n';
+ rowDataSFDC.retry_cnt__c = 0;
+ } else {
+ // rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status); //2022-06-24 zyh 娉ㄩ噴锛氶噸鍙戦�昏緫淇敼
+ //2022-06-24 zyh update start
+ if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0;
+ if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) {
+ rowDataSFDC.retry_cnt__c++;
+ // 20230201 ljh start
+ // LogAutoSendSchedule.logId = rowDataSFDC.Id;
+ LogAutoSendSchedule.assignOneMinute();
+ // LogAutoSendSchedule.assignOneMinute(rowDataSFDC.MessageGroupNumber__c,rowDataSFDC.Type__c);
+ // 20230201 ljh end
+ }
+ if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) {
+ rowDataSFDC.ErrorLog__c = 'status:' + status +
+ '\n閿欒娆℃暟宸茬粡瓒呰繃鑷姩閫佷俊璁惧畾鐨勬渶澶ф鏁帮紝璇锋墜鍔ㄩ�佷俊';
+ }
+ //2022-06-24 zyh update end
+ }
+
+ } catch (Exception ex) {
+ // TODO IOException
+ // 閿欒鍙戠敓鏃�
+ logstr += ex.getMessage();
+ iflog.ErrorLog__c += ex.getMessage() + '\n';
+ iflog.ErrorLog__c += ex.getStackTraceString() + '\n';
+ if(!Test.isRunningTest()){
+ // rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, ex, null); //2022-06-24 zyh 娉ㄩ噴锛氶噸鍙戦�昏緫淇敼
+ //2022-06-24 zyh update start
+ if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0;
+ if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt){
+ rowDataSFDC.retry_cnt__c++;
+ // 20230201 ljh start
+ // LogAutoSendSchedule.logId = rowDataSFDC.Id;
+ LogAutoSendSchedule.assignOneMinute();
+ // LogAutoSendSchedule.assignOneMinute(rowDataSFDC.MessageGroupNumber__c,rowDataSFDC.Type__c);
+ // 20230201 ljh end
+ }
+ if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt){
+ rowDataSFDC.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowDataSFDC.ErrorLog__c+'閿欒娆℃暟宸茬粡瓒呰繃鑷姩閫佷俊璁惧畾鐨勬渶澶ф鏁帮紝璇锋墜鍔ㄩ�佷俊';
+ }
+ //2022-06-24 zyh update end
+ }
+ }
+ iflog.Log__c = logstr;
+ // upsert iflog;
+ // upsert rowDataSFDC;
+ logList.add(iflog);
+ rowList.add(rowDataSFDC);
}
+ // 2022-05-05 zyh update end
// 鏁呴殰鎻忚堪
private static Map < id, List < FaultDesc >> getFaultDescMap(List < String > repairOrderIdList) {
List < Repair_reason__c > reasonList =
@@ -513,7 +791,7 @@
public static Set < Id > NFM603_Ids = new Set < Id > ();
// public static Map<Id,Id> rprIdMap = new Map<Id,Id>();
-
+
public static void NFM603Trigger(List < Repair__c > newList, Map < Id, Repair__c > newMap, List < Repair__c > oldList, Map < Id, Repair__c > oldMap) {
List < String > rprIds = new List < String > ();
Map < Id, Id > rprIdMap = new Map < Id, Id > ();
@@ -538,27 +816,139 @@
Repair__c oldrpr = oldMap.get(rpr.Id);
// 淇悊鏈夋姤淇瓙鍗曞彿锛屽苟涓� 寰呭彂閫丄WS涓篺alse 鍙戦�佺粰AWS
if (String.isNotBlank(rpr.RepairSubOrder__c) && !rpr.AwaitToSendAWS__c) {
- if (((rpr.status__c == '0.鐢宠瀹屾瘯' || rpr.status__c == '1.鍙楃悊瀹屾瘯') && (oldrpr.SAP_Transfer_time__c == null && rpr.SAP_Transfer_time__c != null)) || (rpr.Address_type__c == 'X' && (rpr.Address_Type_Index__c != oldrpr.Address_Type_Index__c))) {
-
+ if (((rpr.status__c == '0.鐢宠瀹屾瘯' || rpr.status__c == '1.鍙楃悊瀹屾瘯' || rpr.Status1__c == '0.鍒犻櫎') && (oldrpr.SAP_Transfer_time__c == null && rpr.SAP_Transfer_time__c != null)) ||
+ (rpr.Address_type__c == 'X' && (rpr.Address_Type_Index__c != oldrpr.Address_Type_Index__c)) ||
+ // 2022/4/6 zhangyuheng update start
+ (rpr.OTSRepairOrder__c != oldrpr.OTSRepairOrder__c) || // OTS璁㈠崟鍙锋湁鍊硷紝鍙戦�丄WS
+ // 2022/4/6 zhangyuheng update end
+ // 2022/4/7 zhangyuheng update start
+ (rpr.DeliveryLogisticsNo__c != oldrpr.DeliveryLogisticsNo__c) || // 閫佷慨鐗╂祦鍗曞彿鏈夊�硷紝鍙戦�丄WS
+ // ((rpr.Discount_Price_formula__c != oldrpr.Discount_Price_formula__c) && rpr.Repair_Firstestimated_Date_formula__c != null) || // 鎶ヤ环閲戦鍙戠敓鏀瑰彉涓斿垵娆℃姤浠锋棩鏈夊�硷紝鍙戦�丄WS
+ ((rpr.Returns_Product_waySAP__c != oldrpr.Returns_Product_waySAP__c) && rpr.Repair_Shipped_DateTime__c != null) || // 閫佷慨鏂瑰紡鍙戠敓鏀瑰彉涓斿瘎閫佹棩鏈夊�硷紝鍙戦�丄WS
+ // 2022/4/7 zhangyuheng update end
+ // 2022/4/18 zhangyuheng update start
+ (rpr.FSE_ApplyForRepair_time__c != oldrpr.FSE_ApplyForRepair_time__c) || // FSE鐢宠淇悊鏃ュ彂鐢熸敼鍙橈紝鍙戦�丄WS
+ (rpr.Repair_Ordered_DateTime__c != oldrpr.Repair_Ordered_DateTime__c) || // 4.淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鍙戠敓鏀瑰彉锛屽彂閫丄WS
+ // (rpr.Repair_Firstestimated_Date__c != oldrpr.Repair_Firstestimated_Date__c) || // 鍒濇鎶ヤ环鏃ワ紙涓嶇敤锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS 2022-05-20 zyh 娉ㄩ噴
+ (rpr.Repair_Estimated_Date__c != oldrpr.Repair_Estimated_Date__c) || // 鎶ヤ环鏃ワ紙涓嶇敤锛�--鍒濇鎶ヤ环鏃ョ敤鍙戠敓鏀瑰彉锛屽彂閫丄WS 2022-05-20 zyh add
+ (rpr.Repair_Shipped_DateTime__c != oldrpr.Repair_Shipped_DateTime__c) || // 11.RC淇悊鍝佽繑閫佹棩锛堝皬绋嬪簭锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ (rpr.Repair_Final_Inspection_DateTime__c != oldrpr.Repair_Final_Inspection_DateTime__c) || // 10.鏈�缁堟娴嬫棩锛堝皬绋嬪簭锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ (rpr.Agreed_DateTime__c != oldrpr.Agreed_DateTime__c) || //7.鐢ㄦ埛鍚屾剰鏃ワ紙灏忕▼搴忥級鍙戠敓鏀瑰彉锛屽彂閫丄WS
+ (rpr.Agreed_Date__c != oldrpr.Agreed_Date__c) || // 7.鐢ㄦ埛鍚屾剰鏃ュ彂鐢熸敼鍙橈紝鍙戦�丄WS
+ (rpr.engineerSendDate__c != oldrpr.engineerSendDate__c) //淇悊鍝佸瘎閫佹棩鍙戠敓鏀瑰彉锛屽彂閫丄WS
+ // 2022/4/18 zhangyuheng update start
+ //LLIU-CG53S9(鐘舵�佹槸宸插垹闄ょ殑淇悊鍗曡鍚屾鍒版湇鍔$郴缁�) LY 20220713 start
+ || (rpr.SAP_not_accept_repair_result__c != oldrpr.SAP_not_accept_repair_result__c) //淇悊鍗曞叧闂棩
+ //LLIU-CG53S9(鐘舵�佹槸宸插垹闄ょ殑淇悊鍗曡鍚屾鍒版湇鍔$郴缁�) LY 20220713 end
+ ) {
+ if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ NFM603Controller.NFM603_Ids.add(rpr.Id);
+ rprIdMap.put(rpr.Id, rpr.Id);
+ System.debug('111111111111111111112222222222');
+ }
+ }
+ // 2022/4/19 zhangyuheng update start
+ // 濡傛灉鍚屾湡涓殑淇悊鎶ヤ环锛圧epair_Quotation_Id__c锛変负绌猴紝鍒ゆ柇鍒濇鎶ヤ环鏃ュ拰鎶ヤ环閲戦
+ if (rpr.Repair_Quotation_Id__c != oldrpr.Repair_Quotation_Id__c) {
if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
NFM603Controller.NFM603_Ids.add(rpr.Id);
rprIdMap.put(rpr.Id, rpr.Id);
}
}
+ if (rpr.Repair_Quotation_Id__c == null) {
+ // 濡傛灉鍒濇鎶ヤ环鏃ワ紙涓嶇敤锛夋垨鎶樻墸鍚庨噾棰濓紙涓嶇敤锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ if (rpr.Discount_Price__c != oldrpr.Discount_Price__c || rpr.Repair_Estimated_Date__c != oldrpr.Repair_Estimated_Date__c) {
+ if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ NFM603Controller.NFM603_Ids.add(rpr.Id);
+ rprIdMap.put(rpr.Id, rpr.Id);
+ }
+ }
+ }
+ // 濡傛灉鍚屾湡涓殑淇悊鎶ヤ环锛圧epair_Quotation_Id__c锛変笉涓虹┖锛屽湪RepairQuoteTrigger.ChangeRepair杩涜鍒ゆ柇瑙﹀彂
+ // 2022/4/19 zhangyuheng update end
+
+ // 2022/4/6 zhangyuheng update start
+ //OTS璁㈠崟鍙锋湁鍊硷紝鍙戦�丄WS
+ // if ((oldrpr.OTSRepairOrder__c == null && String.isNotBlank(rpr.OTSRepairOrder__c)) || rpr.OTSRepairOrder__c != oldrpr.OTSRepairOrder__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 2022/4/6 zhangyuheng update end
+ // 2022/4/7 zhangyuheng update start
+ //閫佷慨鐗╂祦鍗曞彿鏈夊�硷紝鍙戦�丄WS
+ // if ((oldrpr.DeliveryLogisticsNo__c == null && String.isNotBlank(rpr.DeliveryLogisticsNo__c)) || rpr.DeliveryLogisticsNo__c != oldrpr.DeliveryLogisticsNo__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ //鎶ヤ环閲戦鍙戠敓鏀瑰彉涓斿垵娆℃姤浠锋棩鏈夊�硷紝鍙戦�丄WS
+ // if ((rpr.Discount_Price_formula__c != oldrpr.Discount_Price_formula__c) && rpr.Repair_Firstestimated_Date_formula__c != null) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // if ((rpr.Returns_Product_waySAP__c != oldrpr.Returns_Product_waySAP__c) && rpr.Repair_Shipped_DateTime__c != null) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 2022/4/7 zhangyuheng update end
+ // 2022/4/18 zhangyuheng update start
+ // FSE鐢宠淇悊鏃ュ彂鐢熸敼鍙橈紝鍙戦�丄WS
+ // if (rpr.FSE_ApplyForRepair_time__c != oldrpr.FSE_ApplyForRepair_time__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 4.淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鍙戠敓鏀瑰彉锛屽彂閫丄WS
+ // if (rpr.Repair_Ordered_DateTime__c != oldrpr.Repair_Ordered_DateTime__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 鍒濇鎶ヤ环鏃ワ紙涓嶇敤锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ // if (rpr.Repair_Firstestimated_Date__c != oldrpr.Repair_Firstestimated_Date__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 11.RC淇悊鍝佽繑閫佹棩锛堝皬绋嬪簭锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ // if (rpr.Repair_Shipped_DateTime__c != oldrpr.Repair_Shipped_DateTime__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 10.鏈�缁堟娴嬫棩锛堝皬绋嬪簭锛夊彂鐢熸敼鍙橈紝鍙戦�丄WS
+ // if (rpr.Repair_Final_Inspection_DateTime__c != oldrpr.Repair_Final_Inspection_DateTime__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // 2022/4/18 zhangyuheng update end
// 娴嬭瘯鐜娴嬭瘯鐢紝涓婄嚎鍓嶈娉ㄦ帀
- if (rpr.Repair_Firstestimated_Date__c != oldrpr.Repair_Firstestimated_Date__c) {
- if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
- NFM603Controller.NFM603_Ids.add(rpr.Id);
- // rprIds.add(rpr.Id);
- rprIdMap.put(rpr.Id, rpr.Id);
- }
- }
- if (rpr.Repair_Shipped_Date__c != oldrpr.Repair_Shipped_Date__c) {
- if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
- NFM603Controller.NFM603_Ids.add(rpr.Id);
- rprIdMap.put(rpr.Id, rpr.Id);
- }
- }
+ // if (rpr.Repair_Firstestimated_Date__c != oldrpr.Repair_Firstestimated_Date__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // // rprIds.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
+ // if (rpr.Repair_Shipped_Date__c != oldrpr.Repair_Shipped_Date__c) {
+ // if (NFM603Controller.NFM603_Ids.contains(rpr.Id) == false) {
+ // NFM603Controller.NFM603_Ids.add(rpr.Id);
+ // rprIdMap.put(rpr.Id, rpr.Id);
+ // }
+ // }
// 娴嬭瘯鐜娴嬭瘯鐢紝涓婄嚎鍓嶈娉ㄦ帀
}
@@ -572,7 +962,13 @@
iflog.Type__c = LOG_TYPE;
iflog.Log__c = 'callout start\n';
insert iflog;
- NFM603Controller.callout(iflog.Id, rprIds);
+ // 2022-04-29 zyh update start
+ if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){
+ NFM603Controller.executefuture(iflog, rprIds);
+ }else{
+ NFM603Controller.callout(iflog.Id, rprIds);
+ }
+ // 2022-04-29 zyh update end
}
} else {
if (Trigger.isUpdate) {
@@ -586,4 +982,111 @@
}
}
}
+
+ //鎶ヤ环鏃ャ�佸垵娆℃姤浠锋棩銆丷C淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鏃堕棿鏂规硶 zyh 20220315 start
+ //涓嬬彮寮�濮嬫椂闂�
+ public static String DownStartDt(String dt){
+ // String timenow = Datetime.now().format('yyyyMMddHHmmss'); 2022-5-10 zyh update
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '173001';
+ }
+ //涓嬬彮缁撴潫鏃堕棿
+ public static String DownEndDt(String dt){
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '235959';
+ }
+ //涓婄彮寮�濮嬫椂闂�
+ public static String UpStartDt(String dt){
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '000000';
+ }
+ //涓婄彮缁撴潫鏃堕棿
+ public static String UpEndDt(String dt){
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '084459';
+ }
+ //涓婄彮瀹氫箟鏃堕棿
+ public static String UpDt(String dt){
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '090000';
+ }
+ //涓嬬彮瀹氫箟鏃堕棿
+ public static String DownDt(String dt){
+ // String dt = NFMUtil.formatDate2Str(Date.today()); 2022-5-10 zyh update
+ String rtn = null;
+ if (dt == null) {
+ return rtn;
+ }
+ dt = dt.substring(0,8); // 2022-5-10 zyh update
+ rtn = String.valueOf(dt);
+ rtn = rtn.replaceAll('-', '');
+ if (rtn >= '40001231') {
+ rtn = '99991231';
+ } else if (rtn < '19000101') {
+ rtn = '19000101';
+ }
+ return rtn + '170000';
+ }
+ //鎶ヤ环鏃ャ�佸垵娆℃姤浠锋棩銆丷C淇悊鍝丷C鍙楃悊鏃ワ紙灏忕▼搴忥級鏃堕棿鏂规硶 zyh 20220315 end
+
}
\ No newline at end of file
--
Gitblit v1.9.1