From 928399eceec50e3d37ea08669a12789a9410a9d2 Mon Sep 17 00:00:00 2001
From: 沙世明 <shashiming@prec-tech.com>
Date: 星期二, 22 十一月 2022 16:51:16 +0800
Subject: [PATCH] 111

---
 force-app/main/default/classes/AssetWhereabouts.cls |  119 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 91 insertions(+), 28 deletions(-)

diff --git a/force-app/main/default/classes/AssetWhereabouts.cls b/force-app/main/default/classes/AssetWhereabouts.cls
index ae91fe2..a8ec2d7 100644
--- a/force-app/main/default/classes/AssetWhereabouts.cls
+++ b/force-app/main/default/classes/AssetWhereabouts.cls
@@ -1,64 +1,114 @@
 global class AssetWhereabouts implements Database.Batchable<sObject>,Database.Stateful {
     public String query;
     public BatchIF_Log__c iflog ;
-    public Date toDay = Date.today().addYears(-1);
+    public Date toDay = Date.today();
+    public List < String > assetIdList;
     global AssetWhereabouts() {
         this.query = query;
     }
-
+    global AssetWhereabouts(List < String > assetIdList) {
+        this.query = query;
+        this.assetIdList = assetIdList;
+    }
     global Database.QueryLocator start(Database.BatchableContext bc) {
         iflog  = new BatchIF_Log__c();
         iflog.Type__c = 'PushNotification';
         iflog.Log__c  = 'AssetWhereabouts start\n';
         iflog.ErrorLog__c = '';
         insert iflog;
-        query = 'select id,Asset__c,Maintenance_Contract__c,Asset__r.CurrentContract__r.RecordType_Name__c,Asset__r.CurrentContract__r.Status__c'
-                +' from Maintenance_Contract_Asset__c where Asset__r.AssetWhereabouts__c = null ';
+        query = 'select id,Asset__r.AssetWhereabouts__c,Maintenance_Contract__r.status__c ,Asset__r.id,Maintenance_Contract__r.id,endDateGurantee_Text__c  '
+                +' from Maintenance_Contract_Asset__c where Maintenance_Contract__r.RecordType_Name__c =\'澶氬勾淇濅慨鍚堝悓\' and endDateGurantee_Text__c < :toDay and Asset__r.AssetWhereabouts__c!=\'鏈嶅姟鍚堝悓\'';
+        if (assetIdList != null && assetIdList.size() > 0) {
+            query += ' and Asset__c in :assetIdList ';
+        }
+        query += '  order by CreatedDate ';
         return Database.getQueryLocator(query);
     }
 
     global void execute(Database.BatchableContext BC, list<Maintenance_Contract_Asset__c> mcaList) {
-        List<Asset> Asslist = new List<Asset>();
-        List<String> mcList = new List<String>();
-        List<Repair__c> reList  = [select id,Maintenance_Contract__c,Status1__c,DateReceiptQuestions__c  
-                                    from Repair__c 
-                                    where DateReceiptQuestions__c >= :toDay and Status1__c != '0.鍙栨秷' and Status1__c != '0.鍒犻櫎' and Maintenance_Contract__c != null];
-        System.debug('reList=='+reList);                                           
-        for (Repair__c re: reList) {
-            mcList.add(re.Maintenance_Contract__c);
+        Map<String,Asset> assMap = new Map<String,Asset>();
+        // 鐢ㄤ綔鏌ヨ鍚堝悓涓殑鏈嶅姟鍚堝悓
+        Set<String> assSet = new Set<String>();
+        Set<String> fuwuSet = new Set<String>();
+        // 鐢ㄤ綔鏌ヨ涓�鑸淮淇�
+        Set<String> weixiuSet = new Set<String>();
+        Map<String,Repair__c> mcMap = new Map<String,Repair__c>();
+         for (Maintenance_Contract_Asset__c  mca: mcaList) {
+            assSet.add(mca.Asset__r.id);
+            weixiuSet.add(mca.Asset__r.id);
         }
-        System.debug('mcaList=='+mcaList );
+
+        // 鏌ヨ绗﹀悎鏉′欢鐨勪慨鐞�
+        List<Repair__c> reList  = [select id,Maintenance_Contract__r.id,Status1__c,Failure_Occurrence_Date__c,CreatedDate,Delivered_Product__c  
+                                    from Repair__c 
+                                    where Status1__c != '0.鍙栨秷' and Status1__c != '0.鍒犻櫎' and Status2__c != '00.鍒犻櫎' and Status2__c != '00.鍙栨秷'
+                                   and Maintenance_Contract__c = null  and Delivered_Product__c in :weixiuSet order by CreatedDate ];
+        for (Repair__c re: reList) {
+             if ( mcMap.get(re.Delivered_Product__c)==null) {
+                 mcMap.put(re.Delivered_Product__c,re);
+            }
+            // 鍙栨渶杩戜竴鏈熺殑淇悊璁板綍
+            if( mcMap.get(re.Delivered_Product__c)!=null && re.CreatedDate>mcMap.get(re.Delivered_Product__c).CreatedDate){
+                mcMap.remove(re.Delivered_Product__c);
+                mcMap.put(re.Delivered_Product__c,re);
+            }
+        }
+       // 鏌ヨ鏄惁鏈夊悎鍚屼腑鐨勬湇鍔″悎鍚�
+        list<Maintenance_Contract_Asset__c>   mcaList2 = [select Id,Asset__r.id from Maintenance_Contract_Asset__c 
+                                                          where Maintenance_Contract__r.RecordType_Name__c ='鏈嶅姟鍚堝悓' 
+                                                          and Maintenance_Contract__r.status__c ='濂戠磩' and Asset__c in :assSet];
+        for (Maintenance_Contract_Asset__c mca: mcaList2) {
+                fuwuSet.add(mca.Asset__r.id);
+        }                                                 
+
+
         for (Maintenance_Contract_Asset__c  mca: mcaList) {
                 Asset ass =  new Asset();
-                // System.debug('mca.Maintenance_Contract__r.RecordType_Name__c=='+mca.Maintenance_Contract__r.RecordType_Name__c);
-                // System.debug('mca.Maintenance_Contract__r.Status__c=='+mca.Maintenance_Contract__r.Status__c);
-            if (mca.Asset__r.CurrentContract__r.RecordType_Name__c == '鏈嶅姟鍚堝悓' && mca.Asset__r.CurrentContract__r.Status__c == '濂戠磩') {
-                ass.id = mca.Asset__c;
+                Date PassDay = mca.endDateGurantee_Text__c.addyears(1);
+                Boolean isXiuli = false;
+                // 鍒ゆ柇淇悊鏄惁鏄湭鏉�1骞村唴
+                if (mcMap.get(mca.Asset__r.id)!=null &&mcMap.get(mca.Asset__r.id).Failure_Occurrence_Date__c>mca.endDateGurantee_Text__c && mcMap.get(mca.Asset__r.id).Failure_Occurrence_Date__c < PassDay) {
+                    isXiuli = true;
+                }
+                // 鍘诲悜锛氭湇鍔″悎鍚�   鍏宠仈鐨勬墽琛屼腑鍚堝悓璁板綍涓恒�愭湇鍔″悎鍚屻�戠姸鎬佷负濂戠害
+            if (fuwuSet.contains(mca.Asset__r.id)) {
+                ass.id = mca.Asset__r.id;
                 ass.AssetWhereabouts__c = '鏈嶅姟鍚堝悓';
-                if (!Asslist.contains(ass)) {
-                         Asslist.add(ass);
+                if (assMap.containsKey(ass.id)&&assMap.get(ass.id).AssetWhereabouts__c =='鍏朵粬') {
+                    assMap.remove(ass.id);
+                    assMap.put(ass.id,ass);
+                }else{
+                    assMap.put(ass.id,ass);
                 }
             }
-             else if(mca.Asset__r.CurrentContract__r.Status__c != '濂戠磩' && mcList.contains(mca.Maintenance_Contract__c)){
+            // 鍘诲悜锛氫竴鑸淮淇�
+             else if(mca.Maintenance_Contract__r.status__c  != '濂戠磩' && isXiuli){
                     ass.id = mca.Asset__c;
                     ass.AssetWhereabouts__c = '涓�鑸淮淇�';
-                    if (!Asslist.contains(ass)) {
-                         Asslist.add(ass);
-                    }
-            } else{
+                    if (assMap.containsKey(ass.id)&&assMap.get(ass.id).AssetWhereabouts__c =='鍏朵粬') {
+                        assMap.remove(ass.id);
+                        assMap.put(ass.id,ass);
+                     }else{
+                        assMap.put(ass.id,ass);
+                     }
+            } else {
+                // 鍘诲悜锛氬叾浠�
                     ass.id = mca.Asset__c;
                     ass.AssetWhereabouts__c = '鍏朵粬';
-                    if (!Asslist.contains(ass)) {
-                         Asslist.add(ass);
+                    
+                    if (!assMap.containsKey(ass.id)) {
+                        assMap.put(ass.id,ass);
                     }
             }
         } 
-        if (Asslist!=null && Asslist.size()!= 0) {
-            update Asslist;
+        system.debug('鏇存柊鏁版嵁='+assMap.values());
+        if (assMap.values()!=null && assMap.values().size()!= 0) {
+            update assMap.values();
         }  
     }
 
     global void finish(Database.BatchableContext BC) {
+
         iflog.Log__c += '\nAssetWhereabouts end';
         String tmp = iflog.ErrorLog__c;
         integer i=0;
@@ -70,6 +120,19 @@
         }
         i++;
         i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
         update iflog;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1