李金换
2022-03-23 9f7e84a5c0d70154ddd89d70d2b15e37f7e3fd24
Merge branch 'master' of http://47.92.229.245:8089/r/OlyMEBGProduct into CHAN-CC53A4
3个文件已添加
185 ■■■■■ 已修改文件
force-app/main/default/classes/LastbuyProductHandler.cls 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LastbuyProductHandlerTest.cls 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/LastbuyProductTrigger.trigger 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LastbuyProductHandler.cls
New file
@@ -0,0 +1,134 @@
/**
 * 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;
    private Map<Id, LastbuyProduct__c> oldMap;
    private List<LastbuyProduct__c> newList;
    private List<LastbuyProduct__c> oldList;
    public LastbuyProductHandler() {
        this.newMap = (Map<Id, LastbuyProduct__c>) Trigger.newMap;
        this.oldMap = (Map<Id, LastbuyProduct__c>) Trigger.oldMap;
        this.newList = (List<LastbuyProduct__c>) Trigger.new;
        this.oldList = (List<LastbuyProduct__c>) Trigger.old;
    }
    protected override void beforeInsert(){
    }
    protected override void afterInsert(){
        ReservedPro();
    }
    protected override void afterUpdate(){
        ReservedPro();
    }
    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 && lbp.effectiveFLG__c == true){
                    pList.add(lbp.ProductName__c);
                }
            }
            List<Product2> proList = [select id, LastbuyProductFLG__c from Product2 where Id in :pList];
            List<Product2> pflgList = new List<Product2>();
            for(Product2 pro : proList){
                if(pro.LastbuyProductFLG__c == false){
                    pro.LastbuyProductFLG__c = true;
                    pflgList.add(pro);
                }
            }
            if(pflgList.size() > 0){
                update pflgList;
            }
        }
        //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){
                    if(lbp1.effectiveFLG__c == false){
                        pfList.add(lbp1.ProductName__c);
                    }
                }
                //产品发生变化时,检索两个产品的标识
                if(oldLbp1.ProductName__c != lbp1.ProductName__c){
                    pfList.add(oldLbp1.ProductName__c);
                }
            }
            System.debug('lt123需检索所有预留产品的产品ID-pfList'+pfList);
            //检索产品下的所有预留产品,全无效将产品主数据下的标识置为false
            if(pfList.size() > 0){
                //Map<产品Id,预留产品>
                Map<String,LastbuyProduct__c> lbpMap = new Map<String,LastbuyProduct__c>();
                //发生变化的产品Id下的所有预留产品
                List<LastbuyProduct__c> lbpList = [select id, effectiveFLG__c,ProductName__c from LastbuyProduct__c where ProductName__c in :pfList];
                //p1List effectiveFLG__c为true 的产品Id
                List<Id> p1List = new List<Id>();
                //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){
                            p1List.add(lbm.ProductName__c);
                        }
                    }
                    if(p1List.size() > 0){
                        for(Id p1 : p1List){
                            if(!lbpMap.containsKey(p1)){
                                p2List.add(p1);
                            }
                        }
                    }else{
                        for(LastbuyProduct__c lbm : lbpList){
                            p2List.add(lbm.ProductName__c);
                        }
                    }
                }
                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){
                    pro1.LastbuyProductFLG__c = false;
                    prflgList.add(pro1);
                }
                if(prflgList.size() > 0){
                    update prflgList;
                }
            }
        }
    }
}
force-app/main/default/classes/LastbuyProductHandlerTest.cls
New file
@@ -0,0 +1,47 @@
@isTest
private class LastbuyProductHandlerTest {
    @isTest
    static void TestMethod1() {
        Product2 pro = new Product2();
        pro.Name = 'Testname0215';
        pro.LastbuyProductFLG__c = false;
        insert pro;
        Product2 pro1 = new Product2();
        pro1.Name = 'Testname0216';
        pro1.LastbuyProductFLG__c = false;
        insert pro1;
        LastbuyProduct__c lbp = new LastbuyProduct__c();
        lbp.Name = 'Test0215';
        lbp.ProductName__c = pro.Id;
        lbp.effectiveFLG__c = true;
        insert lbp;
        lbp.effectiveFLG__c = false;
        update lbp;
        lbp.effectiveFLG__c = true;
        update lbp;
        LastbuyProduct__c lbp1 = new LastbuyProduct__c();
        lbp1.Name = 'Test0216';
        lbp1.ProductName__c = pro1.Id;
        lbp1.effectiveFLG__c = true;
        insert lbp1;
        LastbuyProduct__c lbp2 = new LastbuyProduct__c();
        lbp2.Name = 'Test0217';
        lbp2.ProductName__c = pro1.Id;
        lbp2.effectiveFLG__c = true;
        insert lbp2;
        lbp1.effectiveFLG__c = false;
        update lbp1;
        lbp2.ProductName__c = pro.Id;
        update lbp2;
    }
}
force-app/main/default/triggers/LastbuyProductTrigger.trigger
New file
@@ -0,0 +1,4 @@
trigger LastbuyProductTrigger on LastbuyProduct__c (before insert, after insert, after update) {
    LastbuyProductHandler handler = new LastbuyProductHandler();
    handler.run();
}