高章伟
2022-03-10 1312ba82d4c880bdb5357d28e0d4af5b285f610f
force-app/main/default/classes/LastbuyProductHandler.cls
@@ -1,7 +1,12 @@
/**
 * 20220210 lt UpdateIdentification()--更新产品上的“预留产品”标识
 * 预留产品对象会关联一个产品主数据
 * 创建预留产品时,将产品主数据上的“预留产品”标识 更新为 true
 * 20220210 lt 更新产品上的“预留产品”标识
 * 产品 有 有效预留产品  “预留产品”标识 true
 * 产品 没有 有效预留产品(无预留产品 或 预留产品 无效)  “预留产品”标识 false
 * (1) 新建 有效预留产品                                            --true
 * (2) 更新  “是否有效” false 变为 true                             --true
 * (3) 更新 “产品” 后                                               --true
 * (4) 更新  “是否有效” true 变为 false 的产品下无有效预留产品        --false
 * (5) 更新 “产品” 前的产品 无预留产品 或 无有效预留产品               --false
 */
public without sharing class LastbuyProductHandler extends Oly_TriggerHandler {
    private Map<Id, LastbuyProduct__c> newMap;
@@ -21,20 +26,21 @@
    }
    protected override void afterInsert(){
        UpdateIdentification();
        ReservedPro();
    }
    protected override void afterUpdate(){
        Invalid();
        ReservedPro();
    }
    //更新标识
    private void UpdateIdentification(){
    private void ReservedPro(){
        //1.新建或者更新产品后,若预留产品有效,“预留产品”标识为true
        if(trigger.isInsert || trigger.isUpdate){
    
        //存产品的ID 
        List<Id> pList = new List<Id>();
        for(LastbuyProduct__c lbp : newList){
            if(lbp.ProductName__c != null){
                if(lbp.ProductName__c != null && lbp.effectiveFLG__c == true){
                pList.add(lbp.ProductName__c);
            }
        }
@@ -52,28 +58,33 @@
        if(pflgList.size() > 0){
            update pflgList;
        }
    }
    //当"是否有效"发生变化且变成"否"时,检索同一产品的所有预留产品,
    //如果这个产品所有的预留产品都无效了,把产品主数据上的预留产品标签设置成false。
    //当"是否有效"发生变化且变成"是"时,产品主数据上的预留产品标签设置成true。
    private void Invalid(){
        List<Id> pfList = new List<Id>();  //"是否有效" 变为 "否" 时 所对应的产品主数据Id
        List<Id> ptList = new List<Id>();  //"是否有效" 变为 "是" 时 所对应的产品主数据Id
        //2.(1)"是否有效" 变为 false  检索产品主数据下的所有预留产品,全无效则把产品主数据的"预留产品"标识 变为 false
        //  (2)"产品"    预留产品 更改 产品主数据之前的产品 -- 检索产品主数据下的所有预留产品(没有/全无效)
        //                                                  "预留产品"标识 变为 false
        if(trigger.isUpdate){
            //"是否有效" 变为 "否" 时 所对应的产品主数据Id &&预留产品 更改 产品主数据之前的产品
            List<Id> pfList = new List<Id>();
        for(LastbuyProduct__c lbp1 : newList){
            LastbuyProduct__c oldLbp1 = oldMap.get(lbp1.Id);
            if(oldLbp1.effectiveFLG__c != lbp1.effectiveFLG__c){
                    System.debug('lt123无效?'+lbp1.effectiveFLG__c);
                if(lbp1.effectiveFLG__c == false){
                        System.debug('lt123无效'+lbp1.effectiveFLG__c);
                    pfList.add(lbp1.ProductName__c);
                }else{  //lbp1.effectiveFLG__c == true
                    ptList.add(lbp1.ProductName__c);
                    }
                }
                //产品发生变化时,检索两个产品的标识
                if(oldLbp1.ProductName__c != lbp1.ProductName__c){
                    pfList.add(oldLbp1.ProductName__c);
                }
                }
            }
        }
        //"预留产品"标识 变"false"
            System.debug('lt123需检索所有预留产品的产品ID-pfList'+pfList);
            //检索产品下的所有预留产品,全无效将产品主数据下的标识置为false
        if(pfList.size() > 0){
            //Map<产品Id,预留产品>
            Map<String,LastbuyProduct__c> lbpMap = new Map<String,LastbuyProduct__c>();
@@ -85,6 +96,7 @@
            //p2List 这个产品所有的预留产品都无效 的产品Id
            List<Id> p2List = new List<Id>();
                if(lbpList.size() > 0){   //产品有预留产品 检查预留产品的"是否有效"
            for(LastbuyProduct__c lbm : lbpList){
                lbpMap.put(lbm.ProductName__c,lbm);
                if(lbm.effectiveFLG__c == true){
@@ -104,6 +116,11 @@
                }
            }
            
                }
                else{   //产品 没有预留产品  标识false
                    p2List = pfList;
                }
            List<Product2> pro1List = [select Id, LastbuyProductFLG__c from Product2 where Id in :p2List];
            List<Product2> prflgList = new List<Product2>();
            for(Product2 pro1 : pro1List){
@@ -115,20 +132,7 @@
                update prflgList;
            }
        }
        //"预留产品"标识 变"true"
        if(ptList.size() > 0){
            List<Product2> protList = [select Id, LastbuyProductFLG__c from Product2 where Id in :ptList];
            List<Product2> ptflgList = new List<Product2>();
            for(Product2 prot : protList){
                prot.LastbuyProductFLG__c = true;
                ptflgList.add(prot);
            }
            if(ptflgList.size() > 0){
                update ptflgList;
            }
        }
    }
}