111
沙世明
2022-11-22 928399eceec50e3d37ea08669a12789a9410a9d2
force-app/main/default/classes/EquipmentRepairBatch.cls
@@ -9,11 +9,11 @@
    public String query;
    public List < String > accountIdList;
    private BatchIF_Log__c iflog;
    public Date td = Date.today();
    public Date td = Date.today();  //如2022.10.15
    public String OCSM_Period_half;
    public String OCSM_Period;
    public Date sTime;
    public Date eTime;
    public Date eTime=td.toStartOfMonth(); //如 2022.10.1
    public Date sTime=eTime.addYears(-3);  // 2019.10.1
    global EquipmentRepairBatch() {
        this.query = query;
@@ -39,14 +39,14 @@
            OCSM_Period_half = '2H';
        }
        if(td.month() >= 4){
            sTime = Date.newInstance(td.year()-3,4,1);
            eTime = Date.newInstance(td.year(),3,31);
        // if(td.month() >= 4){
        //     sTime = Date.newInstance(td.year()-3,4,1);
        //     eTime = Date.newInstance(td.year(),3,31);
            
        }else{
            sTime = Date.newInstance(td.year()-4,4,1);
            eTime = Date.newInstance(td.year()-1,3,31);
        }
        // }else{
        //     sTime = Date.newInstance(td.year()-4,4,1);
        //     eTime = Date.newInstance(td.year()-1,3,31);
        // }
        // query ='select Id,Hospital__c,Product2.ServiceCategory__c from Asset where Id not in (Select Asset__c from Maintenance_Contract_Asset__c) and Id in (select Delivered_Product__c from Repair__c)';//没有维修合同的数据
        // query += 'and IF_Coverage_Target_Asset_F__c=1';
        //不再查询是否有维修合同
@@ -112,47 +112,90 @@
        //最后upsert客户服务目标对象 list目标
        List<Account_Service_Of_Target__c> asslist = new List<Account_Service_Of_Target__c>();
        //amaplist
        //保有设备为单位 过去三年维修实绩
        Map<Id,Decimal> ThreeYearPriceSumMap = new Map<Id,Decimal>();
        //过去三年维修实际 2022/10/13 修改 为当前时间的上一个月最后一天 往前推三年
        for(Repair__c rp :[SELECT Hospital__c,PurchaseOrInstallationDate__c,Repair_List_Price_formula__c,Delivered_Product__c
                           FROM Repair__c WHERE Delivered_Product__c in:mids
                           AND Repair_List_Price_formula__c !=null
                           AND Repair_List_Price_formula__c!=0
                           AND Status1__c!='0.删除'
                           AND Status1__c!='0.取消'
                           AND Status2__c!='00.删除'
                           AND Status2__c!='00.取消'
                           AND Agreed_Date__c >=:sTime
                           AND Agreed_Date__c <:eTime
                           ]){
            Date purDate = rp.PurchaseOrInstallationDate__c;
            if(purDate!=null){
                Decimal bDay = purDate.daysBetween(eTime);
                Decimal hmoney = 0;
                if(bDay < 0){
                    bDay *=-1;
                }
                //设备年龄不足三年的 按平均每天计算 再乘 365 再乘 3
                if((bDay < 365*3) && bDay>0){
                    hmoney = (rp.Repair_List_Price_formula__c / bDay) *365*3;
                }else{
                    hmoney = rp.Repair_List_Price_formula__c / 3;
                }
                if(ThreeYearPriceSumMap.containsKey(rp.Delivered_Product__c)){
                    ThreeYearPriceSumMap.put(rp.Delivered_Product__c, ThreeYearPriceSumMap.get(rp.Delivered_Product__c)+hmoney);
                }else{
                    ThreeYearPriceSumMap.put(rp.Delivered_Product__c, hmoney);
                }
            }
        }
        
        //修改时间为过去三个完成财年
        
        // Date LastThirdYearDate = td.addYears(-3);
        // System.debug(LoggingLevel.INFO, '*** LastThirdYearDate: ' + LastThirdYearDate);
        List<AggregateResult> ThreeyearList = [
            select
            sum(Discount_Price_formula__c) SumPrice,
            sum(Repair_Quotation_Id__r.sales_discount__c) sales_discount,
            sum(Repair_Quotation_Id__r.Contract_target__c) contract_target,
            sum(Repair_Quotation_Id__r.Loaner_repair__c) loaner_repair,
            sum(Repair_Quotation_Id__r.long_term_insurance__c) long_term_insurance,
            sum(Repair_Quotation_Id__r.Set_discount__c) set_discount,
            sum(Repair_Quotation_Id__r.Servince_contract_discount_amount__c) sercince,
            sum(Repair_Quotation_Id__r.long_term_insurance_MD__c) long_term_insuranceMD,
            sum(Repair_Quotation_Id__r.Delivery_compensation__c) delivery,
            sum(Repair_Quotation_Id__r.Other_discount__c) other,
            AVG(Delivered_Product__r.Last_Years_Repair_Month__c) threeYearM,
            Delivered_Product__c
            from
            Repair__c
            where
            Delivered_Product__c in:mids
            and Agreed_Date__c != null
            and Agreed_Date__c <= :eTime
            and Agreed_Date__c >= :sTime
            group by Delivered_Product__c
        ];
        Map<Id, Decimal> ThreeYearPriceSumMap = new Map<id, Decimal>();
        Map<Id, Decimal> ThiYearMonthMap = new Map<id, Decimal>();
        // List<AggregateResult> ThreeyearList = [
        //     select
        //     sum(Repair_List_Price_formula__c) SumPrice,
        //     sum(Repair_Quotation_Id__r.sales_discount__c) sales_discount,
        //     sum(Repair_Quotation_Id__r.Contract_target__c) contract_target,
        //     sum(Repair_Quotation_Id__r.Loaner_repair__c) loaner_repair,
        //     sum(Repair_Quotation_Id__r.long_term_insurance__c) long_term_insurance,
        //     sum(Repair_Quotation_Id__r.Set_discount__c) set_discount,
        //     sum(Repair_Quotation_Id__r.Servince_contract_discount_amount__c) sercince,
        //     sum(Repair_Quotation_Id__r.long_term_insurance_MD__c) long_term_insuranceMD,
        //     sum(Repair_Quotation_Id__r.Delivery_compensation__c) delivery,
        //     sum(Repair_Quotation_Id__r.Other_discount__c) other,
        //     AVG(Delivered_Product__r.Last_Years_Repair_Month__c) threeYearM,
        //     Delivered_Product__c
        //     from
        //     Repair__c
        //     where
        //     Delivered_Product__c in:mids
        //     and Agreed_Date__c != null
        //     and Agreed_Date__c <= :eTime
        //     and Agreed_Date__c >= :sTime
        //     and Repair_List_Price_formula__c!=0
        //     and Repair_List_Price_formula__c!=null
        //     and Status1__c!='0.删除'
        //     and Status1__c!='0.取消'
        //     and Status2__c!='00.删除'
        //     and Status2__c!='00.取消'
        //     group by Delivered_Product__c
        // ];
        // Map<Id, Decimal> ThreeYearPriceSumMap = new Map<id, Decimal>();
        // Map<Id, Decimal> ThiYearMonthMap = new Map<id, Decimal>();
        for (AggregateResult Rpc : ThreeyearList) {
            id idf        = String.valueOf(Rpc.get('Delivered_Product__c'));
            //Decimal Defir = decimal.valueOf(Rpc.get('SumPrice')+'');
            Decimal threeYearM = decimal.valueOf(Rpc.get('threeYearM') + '');
            Decimal Defir = sumPrice1(Rpc);
            ThreeYearPriceSumMap.put(idf, Defir);
            ThiYearMonthMap.put(idf, threeYearM);
        }
        // System.debug(LoggingLevel.INFO, '*** ThreeyearList: ' + ThreeyearList);
        // for (AggregateResult Rpc : ThreeyearList) {
        //     id idf        = String.valueOf(Rpc.get('Delivered_Product__c'));
        //     //Decimal Defir = decimal.valueOf(Rpc.get('SumPrice')+'');
        //     Decimal threeYearM = decimal.valueOf(Rpc.get('threeYearM') + '');
        //     Decimal Defir = sumPrice1(Rpc);
        //     ThreeYearPriceSumMap.put(idf, Defir);
        //     ThiYearMonthMap.put(idf, threeYearM);
        // }
        //以医院为对象存储医院所有保有设备List
        Map<Id,List<Asset>> aMapLists =  new Map<Id,List<Asset>>();  
@@ -182,7 +225,7 @@
                }         
            }
        }
        // update resultList;
        update resultList;
        System.debug(LoggingLevel.INFO, '*** updated resultList: ' + resultList);
        for (Id mapId : aMapLists.keySet()) {
@@ -209,6 +252,11 @@
            for (Asset asset : aMapLists.get(mapId) ) {
                sumThreePrice += asset.Three_Years_Repair_Cost_Text__c;
                System.debug(LoggingLevel.INFO, '*** sumThreePrice: ' + sumThreePrice);
                System.debug(LoggingLevel.INFO, '*** asset.Product2.ServiceCategory__c: ' + asset.Product2.ServiceCategory__c);
                System.debug(LoggingLevel.INFO, '*** asset.Is_Has_Contract_History__c: ' + asset.Is_Has_Contract_History__c);
                //分别统计软、硬、周边 1.定价总计  2.(未参保)过去三年平均维修实绩 3.未参保数量
                if(asset.Product2.ServiceCategory__c!=null){
                    if(asset.Product2.ServiceCategory__c == '软性镜'){
@@ -235,6 +283,10 @@
                    }
                }      
            }
            System.debug(LoggingLevel.INFO, '*** 周边未参保金额: ' + periE);
            System.debug(LoggingLevel.INFO, '*** 硬 未参保金额: ' + hardE);
            System.debug(LoggingLevel.INFO, '*** 软 未参保金额: ' + softE);
            Account_Service_Of_Target__c astItem = new Account_Service_Of_Target__c();
            if(targetMap.containsKey(mapId)){
                astItem = targetMap.get(mapId);  
@@ -255,10 +307,19 @@
            astItem.Uninsured_Quantity_Lightsource__c = periCount;
            asslist.add(astItem);
            System.debug(LoggingLevel.INFO, '*** 软性镜总个数: ' + softCountall);
            System.debug(LoggingLevel.INFO, '*** 软性镜未参保个数: ' + astItem.Uninsured_Quantity_Soft_Mirror__c);
            System.debug(LoggingLevel.INFO, '*** :astItem.Three_Years_Repair_Cost_Soft_Mirror__c ' + astItem.Three_Years_Repair_Cost_Soft_Mirror__c);
        }
        update resultList;
        upsert asslist;
        // System.debug(LoggingLevel.INFO, '*** asslist: ' + asslist);
        // update resultList;
        upsert asslist;
        // update asslist;
        System.debug(LoggingLevel.INFO, '***更新后 asslist: ' + asslist);
    }
    global void finish(Database.BatchableContext BC) {
@@ -273,22 +334,22 @@
    }
    private static Decimal sumPrice1(AggregateResult rpc) {
        Decimal SumPrice = Decimal.valueOf(rpc.get('SumPrice') + '');
        Decimal sales_discount = Decimal.valueOf((rpc.get('sales_discount') == null ? 0 : rpc.get('sales_discount')) + '') * -1;
        Decimal contract_target = Decimal.valueOf((rpc.get('contract_target') == null ? 0 : rpc.get('contract_target')) + '') * -1;
        Decimal loaner_repair = Decimal.valueOf((rpc.get('loaner_repair') == null ? 0 : rpc.get('loaner_repair')) + '') * -1;
        Decimal long_term_insurance = Decimal.valueOf((rpc.get('long_term_insurance') == null ? 0 : rpc.get('long_term_insurance')) + '') * -1;
        Decimal set_discount = Decimal.valueOf((rpc.get('set_discount') == null ? 0 : rpc.get('set_discount')) + '') * -1;
        Decimal sercince = Decimal.valueOf((rpc.get('sercince') == null ? 0 : rpc.get('sercince')) + '') * -1;
        Decimal long_term_insuranceMD = Decimal.valueOf((rpc.get('long_term_insuranceMD') == null ? 0 : rpc.get('long_term_insuranceMD')) + '') * -1;
        Decimal delivery = Decimal.valueOf((rpc.get('delivery') == null ? 0 : rpc.get('delivery')) + '') * -1;
        Decimal other = Decimal.valueOf((rpc.get('other') == null ? 0 : rpc.get('other')) + '') * -1;
        system.debug(rpc.get('SumPrice') + '--' + rpc.get('sales_discount') + '--' + rpc.get('contract_target') + '--' +
                     rpc.get('loaner_repair') + '--' + rpc.get('long_term_insurance') + '--' + rpc.get('set_discount') + '--' + rpc.get('long_term_insuranceMD')
                     + '--' + rpc.get('delivery') + '--' + rpc.get('other') + '--');
        return SumPrice + sales_discount + contract_target + loaner_repair + long_term_insurance + sercince + set_discount + long_term_insuranceMD + delivery + other;
    }
    // private static Decimal sumPrice1(AggregateResult rpc) {
    //     Decimal SumPrice = Decimal.valueOf(rpc.get('SumPrice') + '');
    //     Decimal sales_discount = Decimal.valueOf((rpc.get('sales_discount') == null ? 0 : rpc.get('sales_discount')) + '') * -1;
    //     Decimal contract_target = Decimal.valueOf((rpc.get('contract_target') == null ? 0 : rpc.get('contract_target')) + '') * -1;
    //     Decimal loaner_repair = Decimal.valueOf((rpc.get('loaner_repair') == null ? 0 : rpc.get('loaner_repair')) + '') * -1;
    //     Decimal long_term_insurance = Decimal.valueOf((rpc.get('long_term_insurance') == null ? 0 : rpc.get('long_term_insurance')) + '') * -1;
    //     Decimal set_discount = Decimal.valueOf((rpc.get('set_discount') == null ? 0 : rpc.get('set_discount')) + '') * -1;
    //     Decimal sercince = Decimal.valueOf((rpc.get('sercince') == null ? 0 : rpc.get('sercince')) + '') * -1;
    //     Decimal long_term_insuranceMD = Decimal.valueOf((rpc.get('long_term_insuranceMD') == null ? 0 : rpc.get('long_term_insuranceMD')) + '') * -1;
    //     Decimal delivery = Decimal.valueOf((rpc.get('delivery') == null ? 0 : rpc.get('delivery')) + '') * -1;
    //     Decimal other = Decimal.valueOf((rpc.get('other') == null ? 0 : rpc.get('other')) + '') * -1;
    //     system.debug(rpc.get('SumPrice') + '--' + rpc.get('sales_discount') + '--' + rpc.get('contract_target') + '--' +
    //                  rpc.get('loaner_repair') + '--' + rpc.get('long_term_insurance') + '--' + rpc.get('set_discount') + '--' + rpc.get('long_term_insuranceMD')
    //                  + '--' + rpc.get('delivery') + '--' + rpc.get('other') + '--');
    //     return SumPrice + sales_discount + contract_target + loaner_repair + long_term_insurance + sercince + set_discount + long_term_insuranceMD + delivery + other;
    // }
}