public without sharing class LostReportHandler extends Oly_TriggerHandler {
    private Map<Id, LostReport__c> newMap;
    private Map<Id, LostReport__c> oldMap;
    private List<LostReport__c> newList;
    private List<LostReport__c> oldList;

    private static Set<String> checkedSet = new Set<String>();
    private static Map<Id, LostReport__c> needCheckLRMap = new Map<Id, LostReport__c>();

    private static Set<String> checkedRAESDSet = new Set<String>();

    private static Set<String> checkedIDSet = new Set<String>();
    // 需要追加共享的共享Object
    private static List<SObject> shareList = new List<SObject>();
    // 已经放在追加共享List的Key
    private static Set<String> shareSet = new Set<String>();

    private static User planning_DivisionB;
    
    public LostReportHandler() {
        this.newMap = (Map<Id, LostReport__c>) Trigger.newMap;
        this.oldMap = (Map<Id, LostReport__c>) Trigger.oldMap;
        this.newList = (List<LostReport__c>) Trigger.new;
        this.oldList = (List<LostReport__c>) Trigger.old;
    }

    protected override void beforeInsert() {
        beforeExecute();
    }

    protected override void beforeUpdate() {
        needCheckLRMap = new Map<Id, LostReport__c>();
        beforeExecute();
        setEmail_Detail();
    }

    protected override void afterUpdate() {
        // updateNeedAutoGiveup();
        setShare();
        if (shareList.size() > 0) {
            insert shareList;
        }
        //add by rentx 20210604 1635 start  
        setBeiPinWindowAndTOwner();
        //add by rentx 20210609 1635 end

        //遗失报告批准更新备品配套一览明细
        setRentalDetailFlag();
    }

    protected override void afterDelete() {
        deleteCheck();
    }

    //add by rentx 20210604 start 
    private void setBeiPinWindowAndTOwner(){
        List<LostReport__c> updateList = new List<LostReport__c>();
        //需要进行查询,因为有公式字段
        List<Id> ids = new List<Id>();
        for (LostReport__c nObj : newList) {
            //add by rentx 1650 start  盘点时也给备品总窗口赋值
            if (nObj.TransferApply__c != null || nObj.Inventory_Header__c != null) {
                ids.add(nObj.Id);
            }
        }

        if (ids.size() > 0) {
            List<LostReport__c> lrList = [select id,BeiPinWindow_F__c,TransferApply__r.OwnerId,TransferApply__r.Contact_Person__c,TransferApplyDeveloperName__c from LostReport__c where id in :ids];
            for (LostReport__c lost : lrList) {
                //给备品总窗口赋值
                lost.BeiPinWindow__c = lost.BeiPinWindow_F__c;
                //给联络人赋值 办事处到备品中心取联络人,备品中心到办事处取申请人
                if (lost.TransferApplyDeveloperName__c == '备品中心调拨至办事处') {
                    lost.TApplyOwner__c = lost.TransferApply__r.OwnerId;
                }else if (lost.TransferApplyDeveloperName__c == '办事处调拨至备品中心') {
                    lost.TApplyOwner__c = lost.TransferApply__r.Contact_Person__c;
                }

            }

            //add by rentx 20210604 1635 start 给备品总窗口赋值
            if (lrList.size() > 0) {
                Oly_TriggerHandler.bypass('LostReportHandler');
                update lrList;
            }
            //add by rentx 20210604 
        }

    }
    //add by rentx 20210604 end

    private void deleteCheck() {
        for (LostReport__c oObj : oldList) {
            if (oObj.Status__c == '草案中' && oObj.LostReport_Detail_Count__c > 0) {
                oObj.addError('不可以删除有遗失报告明细的草案中遗失报告。');
            }
        }
    }

    private void setEmail_Detail() {
        Set<Id> needSetEmailRaesdSet = new Set<Id>();
        Set<Id> needSetEmailLHSet = new Set<Id>();
        Set<Id> needSetEmailDBSet = new Set<Id>();
        List<LostReport__c> needSetEmailAssetList = new List<LostReport__c>();
        for (LostReport__c nObj : newList) {
            LostReport__c oObj;
            if (Trigger.isUpdate) {
                oObj = oldMap.get(nObj.Id);
            }
            System.debug('nObj::'+nObj);
            if (oObj != null
                    && oObj.Status__c != nObj.Status__c
                    && (nObj.Status__c == '已批准'
                            || nObj.Status__c == '填写完毕')) {
                if (String.isNotBlank(nObj.Rental_Apply__c)) {
                    needSetEmailRaesdSet.add(nObj.Id);
                }
                if (String.isNotBlank(nObj.Inventory_Header__c)) {
                    needSetEmailLHSet.add(nObj.Id);
                }
                if (String.isNotBlank(nObj.Asset__c)) {
                    needSetEmailAssetList.add(nObj);
                }
                //add by rentx 20210609 1635 start
                if (String.isNotBlank(nObj.TransferApply__c)) {
                    needSetEmailDBSet.add(nObj.Id);
                }
                //add by rentx 20210609 end
            }
        }
        //update by rentx 20210609 start
        // if (needSetEmailRaesdSet.size() > 0 || needSetEmailLHSet.size() > 0) {
        //     setEmail_DetailRaesd(needSetEmailRaesdSet, needSetEmailLHSet);
        // }
        System.debug('115::::::'+needSetEmailDBSet);
        if (needSetEmailRaesdSet.size() > 0 || needSetEmailLHSet.size() > 0 || needSetEmailDBSet.size() > 0) {
            setEmail_DetailRaesd(needSetEmailRaesdSet, needSetEmailLHSet, needSetEmailDBSet);
        }
        //update by rentx 20210609 1635 end
        setPlanning_DivisionB(needSetEmailAssetList);
    }

    private void setPlanning_DivisionB(List<LostReport__c> needSetEmailAssetList) {
        if (needSetEmailAssetList.size() > 0) {
            if (planning_DivisionB == null) {
                List<User> us = [SELECT Id
                                      , JingliEquipmentManager__c
                                   FROM User
                                  WHERE Id = :System.Label.Planning_DivisionAId];
                if (us.size() > 0) {
                    planning_DivisionB = us[0];
                }
            }
            for (LostReport__c nObj : needSetEmailAssetList) {
                nObj.Planning_DivisionB__c = planning_DivisionB.JingliEquipmentManager__c;
                nObj.Planning_DivisionA__c = System.Label.Planning_DivisionAId;
            }
        }
    }

    private void setEmail_DetailRaesd(Set<Id> needSetEmaiRAESDSet, Set<Id> needSetEmailLDSet, Set<Id> needSetEmailDBSet) {
        System.debug(needSetEmaiRAESDSet);
        System.debug(needSetEmailLDSet);
        System.debug(needSetEmailDBSet);
        Map<Id, String> lrMap = new Map<Id, String>();
        List<LostReport_Detail__c> lrdList = [SELECT Id,
                                                         LostReport__c,
                                                         Rental_Apply_Equipment_Set_Detail__r.Fixture_Model_No_F__c,
                                                         Inventory_Detail__r.Inventory_Deviation__c,
                                                         Inventory_Detail__r.Asset__r.Fixture_Model_No_F__c,
                                                         Inventory_Detail__r.Asset__r.Internal_asset_location__c,
                                                         Inventory_Detail__r.Asset__r.SerialNumber,
                                                         Inventory_Detail__r.Asset__r.CompanyOfEquipment__c,
                                                         Inventory_Detail__r.Asset__r.Internal_Asset_number__c,
                                                         Inventory_Detail__r.Asset__r.Salesdepartment__c,
                                                         TransferApplyDetail__r.Fixture_Model_No_F__c 
                                                    FROM LostReport_Detail__c
                                                   WHERE (      (LostReport__c = :needSetEmailLDSet
                                                                    AND Inventory_Detail__c != null
                                                                )
                                                             OR (LostReport__c = :needSetEmaiRAESDSet
                                                                     AND Rental_Apply_Equipment_Set_Detail__c != null
                                                                )
                                                             //add by rentx  1635 20210609 
                                                             OR (LostReport__c = :needSetEmailDBSet 
                                                                    AND TransferApplyDetail__c != null
                                                                )
                                                             //add by rentx  1635 20210609
                                                          )
                                                     AND CancelLostReport__c = false
                                                   ORDER BY LostReport__c];
        Integer i = 0;
        LostReport_Detail__c lrd1 = new LostReport_Detail__c();
        for (LostReport_Detail__c lrd : lrdList) {
            if (lrMap.containsKey(lrd.LostReport__c) == false) {
                String htmlStr = '备品明细:<BR>';
                if (needSetEmaiRAESDSet.contains(lrd.LostReport__c)) {
                     // htmlStr += Asset.Fixture_Model_No_F__c.getDescribe().getLabel() + '</td>';
                    //add by rentx 20210609 1635 start
                }else if (needSetEmailDBSet.contains(lrd.LostReport__c)) {
                    //add by rentx 20210609 1635 end
                }
                else {
                    htmlStr += '<table border="2">';
                    htmlStr += '<tr>';
                    htmlStr += '<td>' + Asset.Salesdepartment__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Asset.Internal_asset_location__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Asset.Fixture_Model_No_F__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Asset.SerialNumber.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Asset.CompanyOfEquipment__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Asset.Internal_Asset_number__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '<td>' + Inventory_Detail__c.Inventory_Deviation__c.getDescribe().getLabel() + '</td>';
                    htmlStr += '</tr>';
                }
                lrMap.put(lrd.LostReport__c, htmlStr);
            }
            if (lrd.LostReport__c != lrd1.LostReport__c) {
                i = 0;
                lrd1 = lrd;
            }
            String str = lrMap.get(lrd.LostReport__c);
            String modelNo = '';
            
            if (needSetEmaiRAESDSet.contains(lrd.LostReport__c)) {
                modelNo += lrd.Rental_Apply_Equipment_Set_Detail__r.Fixture_Model_No_F__c;
                lrMap.put(lrd.LostReport__c,str
                    // + '<a href="'
                    // + baseUrl + '/' + raes.Id
                    // +'">'
                    + '型号:' + modelNo
                    // + '</a>'
                    + '<BR>');
            }
            else if (needSetEmailLDSet.contains(lrd.LostReport__c)) {
                modelNo += '<tr>';
                // 本部  备品存放地  备品配套明细型号 机身号 分公司 固定资产号 盘亏数量
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.Salesdepartment__c) + '</td>';
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.Internal_asset_location__c) + '</td>';
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.Fixture_Model_No_F__c) + '</td>';
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.SerialNumber) + '</td>';
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.CompanyOfEquipment__c) + '</td>';
                modelNo += '<td>' + checkBlank(lrd.Inventory_Detail__r.Asset__r.Internal_Asset_number__c) + '</td>';
                modelNo += '<td>' + (lrd.Inventory_Detail__r.Inventory_Deviation__c * -1) + '</td>';
                modelNo += '</tr>';
                lrMap.put(lrd.LostReport__c,str + modelNo);
                //add by rentx 20210609 1635 start 调拨的不要 前面这个和型号
            }else if (needSetEmailDBSet.contains(lrd.LostReport__c)) {
                modelNo += lrd.TransferApplyDetail__r.Fixture_Model_No_F__c;
                lrMap.put(lrd.LostReport__c,str.replace('备品明细:<BR>', '')
                    + modelNo
                    + '<BR>');
            }
                //add by rentx 20210609 end
            i ++;
        }
        System.debug(lrMap);
        for (Id lrId : lrMap.keySet()) {
            String emailD = lrMap.get(lrId);
            if (needSetEmailLDSet.contains(lrId)) {
                emailD += '</table>';
            }
            //add by rentx 1635 20210609 start
            if (needSetEmailDBSet.contains(lrId)) {
                emailD += '</table>';
            }
            //add by rentx 20210609 end
            newMap.get(lrId).Email_Detail__c = emailD;
        }
    }

    private String checkBlank(String str) {
        if (String.isBlank(str)) {
            return '';
        }
        return str;
    }

    // private void updateNeedAutoGiveup() {
    //     if (needCheckLRMap.isEmpty() == false) {
    //         List<LostReport_Detail__c> ldList = [SELECT Id,
    //                                                     Rental_Apply_Equipment_Set_Detail__c,
    //                                                     Inventory_Detail__c
    //                                                FROM LostReport_Detail__c
    //                                               WHERE LostReport__c = :needCheckLRMap.keySet()
    //                                                 AND Auto_Lost_item_giveup_F__c = false
    //                                                 AND CancelLostReport__c = false];

    //         List<Rental_Apply_Equipment_Set_Detail__c> raesdList = new List<Rental_Apply_Equipment_Set_Detail__c>();
    //         List<Inventory_Detail__c> idList = new List<Inventory_Detail__c>();
    //         for (LostReport_Detail__c ldObj : ldList) {
    //             if (String.isNotBlank(ldObj.Rental_Apply_Equipment_Set_Detail__c)
    //                     && !checkedRAESDSet.contains(ldObj.Rental_Apply_Equipment_Set_Detail__c)) {
    //                 checkedRAESDSet.add(ldObj.Rental_Apply_Equipment_Set_Detail__c);
    //                 raesdList.add(new Rental_Apply_Equipment_Set_Detail__c(Id = ldObj.Rental_Apply_Equipment_Set_Detail__c));
    //             }
    //             else if (String.isNotBlank(ldObj.Inventory_Detail__c)
    //                     && checkedIDSet.contains(ldObj.Inventory_Detail__c)) {
    //                 checkedIDSet.add(ldObj.Inventory_Detail__c);
    //                 idList.add(new Inventory_Detail__c(Id = ldObj.Inventory_Detail__c));
    //             }
    //         }
    //         if (raesdList.size() > 0 || idList.size() > 0) {
    //             Loaner_AutoGiveup(raesdList, null,idList);
    //         }
    //     }
    // }

    private void beforeExecute() {
        Set<String> clearIsPunishObjSet = new Set<String>();// 20211216 ljh SFDC-C933NJ add start
        for (LostReport__c nObj : newList) {
            LostReport__c oObj;
            // OCSM_BP3-126 遗失报告提交申请书的时候需要重新设置user,看申请书owner
            if (Trigger.isUpdate) {
                oObj = oldMap.get(nObj.Id);
            }
            if (Trigger.isInsert
                || (oObj != null
                        && nObj.Status__c=='填写完毕'
                        && nObj.Status__c != oObj.Status__c)) {
                nObj.RA_BuchangApprovalManagerSales__c = nObj.RA_BuchangApprovalManagerSales_F__c;
                nObj.RA_Person_In_Charge__c = nObj.RA_Person_In_Charge_F__c;
                nObj.RA_ZongjianApprovalManager__c = nObj.RA_ZongjianApprovalManager_F__c;
                nObj.RA_SalesManager__c = nObj.RA_SalesManager_F__c;
                nObj.RA_TongkuoZongjian__c = nObj.RA_TongkuoZongjian_F__c;
                nObj.Rental_Apply_SplitUser__c = nObj.Rental_Apply_SplitUser_F__c;//20210427 you 1653
                bp3_Setting__c conf = bp3_Setting__c.getOrgDefaults();
                nObj.BeiPin_ZhongJian__c = conf.BeiPin_ZhongJian__c;
                if (nObj.Rental_Apply__c != null) {
                    if(nObj.Salesdept_F__c == '医疗华东营业本部') {
                        nObj.FuZongJian__c = conf.FuZongJian__c;
                    }
                    else {
                        nObj.FuZongJian__c = null;
                    }   
                }
                //add by rentx 202109011 1635 start   or 1650 you
                if (nObj.TransferApply__c != null || nObj.Inventory_Header__c != null) {
                    if(nObj.benbu__c  == '医疗华东营业本部') {
                        nObj.FuZongJian__c = conf.FuZongJian__c;
                    }
                    else {
                        nObj.FuZongJian__c = null;
                    } 
                }
                //add by rentx 20210911 1635 end 
                
                if (String.isBlank(nObj.Asset__c)) {
                    nObj.YunYingBuZhang__c = conf.YunYingBuZhang__c;
                }
                nObj.Assign_Person__c = nObj.Assign_Person_F__c;
            }
            if (oObj != null
                    && oObj.Status__c != '已批准'
                    && nObj.Status__c == '已批准'
                    && checkedSet.contains(nObj.Id)) {
                needCheckLRMap.put(nObj.Id, nObj);
                checkedSet.add(nObj.Id);
            }
            if (nObj.LostReport_Detail_Count__c == 0
                && oObj != null
                && ((oObj.LostReport_approval_time__c != nObj.LostReport_approval_time__c && nObj.LostReport_approval_time__c != null)
                        || (oObj.BuchangManager_approval_time__c != nObj.BuchangManager_approval_time__c && nObj.BuchangManager_approval_time__c != null)
                        || (oObj.Assign_Person_approval_time__c != nObj.Assign_Person_approval_time__c && nObj.Assign_Person_approval_time__c != null)
                        || (oObj.BeiPin_ZhongJian_approval_time__c != nObj.BeiPin_ZhongJian_approval_time__c && nObj.BeiPin_ZhongJian_approval_time__c != null)
                        || (oObj.ZongjianManager_approval_time__c != nObj.ZongjianManager_approval_time__c && nObj.ZongjianManager_approval_time__c != null)
                        || (oObj.SalesManager_approval_time__c != nObj.SalesManager_approval_time__c && nObj.SalesManager_approval_time__c != null)
                        || (oObj.TongkuoZongjian_approval_time__c != nObj.TongkuoZongjian_approval_time__c && nObj.TongkuoZongjian_approval_time__c != null)
                        || (oObj.Planning_DivisionA_approval_time__c != nObj.Planning_DivisionA_approval_time__c && nObj.Planning_DivisionA_approval_time__c != null)
                        || (oObj.Planning_DivisionB_approval_time__c != nObj.Planning_DivisionB_approval_time__c && nObj.Planning_DivisionB_approval_time__c != null)
                    )) {
                nObj.addError('没有遗失报告明细，不能批准');
            }
            if(oObj != null && oObj.Status__c == '申请中' && nObj.Status__c == '草案中') {
                // 各级批准时间共8个
                nObj.SalesManager_approval_time__c = null;
                nObj.BuchangManager_approval_time__c = null;
                nObj.FuZongJian_approval_time__c = null;
                nObj.ZongjianManager_approval_time__c = null;
                nObj.TongkuoZongjian_approval_time__c = null;
                nObj.Assign_Person_approval_time__c = null;
                nObj.YunYingBuZhang_approval_time__c = null;
                nObj.BeiPin_ZhongJian_approval_time__c = null;
                nObj.Planning_DivisionA_approval_time__c = null;
                nObj.Planning_DivisionB_approval_time__c = null;
                nObj.Rental_Apply_SplitUser_approval_time__c = null;//20210427 you 1653
                // 清空遗失报告批准时间
                nObj.LostReport_approval_time__c = null;
                // 20211216 ljh SFDC-C933NJ add start
                // 2.驳回的时候清空明细&&是否罚则对象
                nObj.IsFinishPunishObj__c = false;
                clearIsPunishObjSet.add(nObj.Id);
                // 20211216 ljh SFDC-C933NJ add end
            }
            // 20211216 ljh SFDC-C933NJ add start
            // 1.备品中心提交 部长审批的时候 必须填写 【是否罚则对象】 部长批准时间 \运营部长批准时间
            String uId = UserInfo.getUserId();
            System.debug('zheli398:'+nObj.YunYingBuZhang__c+nObj.YunYingBuZhang_approval_time__c);
            if(oObj != null && uId.substring(0,15) == System.Label.PersonalId
                && (
                    (String.isNotBlank(nObj.RA_BuchangApprovalManagerSales__c) && nObj.RA_BuchangApprovalManagerSales__c == UserInfo.getUserId() && oObj.BuchangManager_approval_time__c == null && nObj.BuchangManager_approval_time__c != null)
                    || 
                    (String.isNotBlank(nObj.YunYingBuZhang__c) && nObj.YunYingBuZhang__c == UserInfo.getUserId() && oObj.YunYingBuZhang_approval_time__c == null && nObj.YunYingBuZhang_approval_time__c != null)
                    )
                && nObj.IsFinishPunishObj__c == false){
                nObj.addError('【是否罚则对象】 必须填写保存后才能审批');
            }
            // 20211216 ljh SFDC-C933NJ add end
        }
        if (System.Trigger.isInsert) {
            setPlanning_DivisionB(newList);
        }
        // 20211216 ljh SFDC-C933NJ add start
        // 2.驳回的时候清空明细
        if(clearIsPunishObjSet.size() > 0){
            List<LostReport_Detail__c> lrdList = [SELECT Id,IsPunishObj__c FROM LostReport_Detail__c WHERE LostReport__c IN :clearIsPunishObjSet AND IsPunishObj__c != null];
            if(lrdList.size() > 0){
                for(LostReport_Detail__c lrd:lrdList){
                    lrd.IsPunishObj__c = null;
                }
                update lrdList;
            }
        }
        // 20211216 ljh SFDC-C933NJ add end
    }

    private void setShare() {
        for (LostReport__c nObj: newList) {
            LostReport__c oObj = oldMap.get(nObj.Id);
            if (oObj.Status__c != nObj.Status__c
                    && nObj.Status__c == '填写完毕') {
                List<String> userList = new List<String>();
                userList.add(nObj.RA_SalesManager_F__c + '_Read');
                userList.add(nObj.RA_BuchangApprovalManagerSales__c + '_Read');
                userList.add(nObj.RA_ZongjianApprovalManager_F__c + '_Read');
                userList.add(nObj.RA_TongkuoZongjian_F__c + '_Read');
                setSObjectShare('LostReport__Share', 'Manual', nObj.Id, userList, nObj.OwnerId, shareSet, shareList);
            }
        }
    }

    //update by rentx 20210514 start 1635
    // public static void Loaner_AutoGiveup(List<Rental_Apply_Equipment_Set_Detail__c> raesds, List<LostReport_Detail__c> lrds, List<Inventory_Detail__c> ids) {
    public static void Loaner_AutoGiveup(List<Rental_Apply_Equipment_Set_Detail__c> raesds, List<LostReport_Detail__c> lrds, List<Inventory_Detail__c> ids, List<TransferApplyDetail__c> tadList) {
        if (tadList != null && tadList.size() > 0) {
            List<TransferApplyDetail__c> updateTList = new List<TransferApplyDetail__c>();
            for (TransferApplyDetail__c tad: tadList ) {
                //如果是非固定资产 状态丢失
                // if (tad.Internal_Asset_number_key__c == null || tad.Internal_Asset_number_key__c == '') {                
                tad.Lost_item_giveup__c = true;
                // }
                tad.Loaner_Giveup_Time__c = Datetime.now();
                updateTList.add(tad);
            }
            System.debug('LostReportHandler::::::::::::::::::::'+updateTList);
            update updateTList;
        }
        //update by rentx 2021-05-14 end 1635
        if (raesds != null && raesds.size() > 0) {
            List<Sobject> raesdList = new List<Sobject>();
            for (Rental_Apply_Equipment_Set_Detail__c raesd : raesds) {
                raesd.Lost_item_giveup__c = true;
                raesd.Loaner_Giveup_Time__c = Datetime.now();
                raesdList.add(raesd);
            }
            update raesdList;
        }

        if (ids != null && ids.size() > 0) {
             List<Inventory_Detail__c> idList = new List<Inventory_Detail__c>();
            for (Inventory_Detail__c id1 : ids) {
                id1.Auto_Lost_item_giveup__c = true;
                idList.add(id1);
            }
            update idList;
        }

        if (lrds != null && lrds.size() > 0) {
            List<LostReport_Detail__c> irdsList = new List<LostReport_Detail__c>();
            Set<Id> reportIds = new Set<Id>();
            for (LostReport_Detail__c idr : lrds) {
                idr.CancelLostReport__c = true;
                idr.DeleteLostReport_Detail_Reason__c = '自动断念删除';
                irdsList.add(idr);
                if(idr.LostReport__c != null) {
                    reportIds.add(idr.LostReport__c);
                }
            }
            update irdsList;

            if(reportIds.size() > 0) {
                List<LostReport__c> reportList = [SELECT Id, Status__c FROM LostReport__c WHERE Id IN:reportIds AND LostReport_Detail_Count__c = 0];
                Set<Id> cancelIdSet = new Set<Id>();

                if(reportList.size() > 0) {
                    Datetime now = System.now();
                    for(LostReport__c report : reportList) {
                        if(report.Status__c == '申请中'){
                            cancelIdSet.add(report.Id);
                        }
                        report.Status__c = '取消';
                        report.Cancel_Time__c = now;
                    }
                    if (cancelIdSet.size() > 0) {
                        List<Approval.ProcessWorkitemRequest> requests = new List<Approval.ProcessWorkitemRequest> ();
                        Map<ID,ProcessInstance> piMap = New Map<ID,ProcessInstance>([Select Id from ProcessInstance where TargetObjectId IN :cancelIdSet]);
                        for(ProcessInstanceWorkItem wi : [Select Id from ProcessInstanceWorkItem where ProcessInstanceId IN :piMap.keySet()]){
                            Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
                            req2.setAction('Removed');
                            req2.setWorkitemId(wi.Id);
                            requests.add(req2);
                        }
                        if (requests.size() > 0) {
                            Approval.ProcessResult[] processResults = null;
                            processResults = Approval.process(requests, true);
                        }
                    }
                    update reportList;
                }
            }
        }
    }

    public static void setSObjectShare(String sobjectName, String rowCause, String parentId, List<String> userAccess, String ownerId, Set<String> shareSet1, List<SObject> shareList1) {
        // オブジェクトの共有権限が公開の場合__Shareオブジェクトが存在しませんので個々で判断します
        if (Schema.getGlobalDescribe().containsKey(sobjectName)) {
            for (String ua : userAccess) {
                String userid = ua.split('_')[0];
                String access = ua.split('_')[1];
                SObject sObj = Schema.getGlobalDescribe().get(sobjectName).newSObject();
                String key = parentId + ':' + userid;
                if (String.isBlank(userid) == false
                        && userid.substring(0, 15) != ownerId.substring(0, 15)
                        && !shareSet.contains(key)) {
                    sObj.put('RowCause', rowCause);
                    sObj.put('ParentId', parentId);
                    sObj.put('UserOrGroupId', userid);
                    sObj.put('AccessLevel', access);
                    shareList1.add(sObj);
                    shareSet1.add(parentId + ':' + userid);
                }
            }
        }
    }

    public void setRentalDetailFlag(){
        Set<String> LostReprotSet = new Set<String>();
        for (LostReport__c nObj : newList) {
            LostReport__c  oObj = oldMap.get(nObj.Id);
            if(oObj.Status__c != nObj.Status__c && '已批准'.equals(nObj.Status__c)){
                LostReprotSet.add(nObj.Id);
            }
        }
        //根据遗失报告查询遗失报告明细
        if(LostReprotSet.size()>0){
            List<LostReport_Detail__c> LostReprotDetailList = [SELECT Id,Rental_Apply_Equipment_Set_Detail__c FROM LostReport_Detail__c WHERE Rental_Apply_Equipment_Set_Detail__c != null AND LostReport__c in :LostReprotSet];
            Date today = Date.today();
            if(LostReprotDetailList.size()>0){
                //存放借出备品配套一览明细
                List<Rental_Apply_Equipment_Set_Detail__c> needUpdateRentalDetail = new List<Rental_Apply_Equipment_Set_Detail__c>();
                for(LostReport_Detail__c ld :LostReprotDetailList){
                    Rental_Apply_Equipment_Set_Detail__c tempDetail = new Rental_Apply_Equipment_Set_Detail__c();
                    tempDetail.Id = ld.Rental_Apply_Equipment_Set_Detail__c;
                    //add by lc 20220601 start 已借用自然日、借出状态（明细）字段逻辑调整
                    // 遗失报告批准时，关联一览明细的遗失报告批准时间设值
                    tempDetail.LostReportApprovalDate__c = today;
                    //add by lc 20220601 end 已借用自然日、借出状态（明细）字段逻辑调整
                    needUpdateRentalDetail.add(tempDetail);
                }  
                
                if(needUpdateRentalDetail.size()>0){
                    update needUpdateRentalDetail;
                }
            }
        }   
    }

    public void addFGL(){
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
                i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
                i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }

}