@isTest
private class updateESignBatchTest {
    //测试经销商收货
    static testMethod void testMethod1() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;
        attach.ContentType = 'application/pdf';

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;
        attach1.ContentType = 'application/pdf';

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }

    //测试经销商确认
    static testMethod void testMethod2() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商确认';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商确认';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;
        attach.ContentType = 'image/jpeg';

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;
        attach1.ContentType = 'image/jpeg';

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }

    //测试医院收货
    static testMethod void testMethod3() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '医院收货';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '医院收货';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();
        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }

    //测试医院确认
    static testMethod void testMethod4() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '医院确认';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '医院确认';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }

    static testMethod void testMethod5() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Date d = Date.today();
        Database.executeBatch(new updateESignBatch(d), 20);
        Test.stopTest();
    }

    static testMethod void testMethod6() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;
        Test.startTest();
        Date startDate = Date.today();
        Date enDdate = Date.today().addDays(-1);
        Database.executeBatch(new updateESignBatch(startDate, enDdate), 20);
        Test.stopTest();
    }

    static testMethod void testMethod7() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        List<String> ids = new List<String>();
        ids.add(eSignForm.Id);
        Database.executeBatch(new updateESignBatch(ids), 20);
        Test.stopTest();
    }

    static testMethod void testMethod8() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        String type = '经销商收货';
        Database.executeBatch(new updateESignBatch(type), 20);
        Test.stopTest();
    }

    static testMethod void testMethod9() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        List<String> ids = new List<String>();
        ids.add(eSignForm.Id);
        Database.executeBatch(new updateESignBatch(ids, true), 20);
        Test.stopTest();
    }

    static testMethod void testMethod10() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = 'OCM直接販売',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;
        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单7
        eSignFormEntry__c eSignFormEntry = new eSignFormEntry__c();
        eSignFormEntry.Name = '::电子签收单录入表';
        eSignFormEntry.eSignForm__c = eSignForm.Id;
        eSignFormEntry.entryType__c = '经销商收货';
        // eSignFormEntry.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        // eSignFormEntry1.createdDate = Date.today().addDays(-3);
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '经销商确认';
        // eSignFormEntry3.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '经销商确认';
        // eSignFormEntry4.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        eSignFormEntry__c eSignFormEntry5 = new eSignFormEntry__c();
        eSignFormEntry5.Name = '::电子签收单录入表';
        eSignFormEntry5.eSignForm__c = eSignForm.Id;
        eSignFormEntry5.entryType__c = '医院收货';
        // eSignFormEntry5.createdDate = Date.today().addDays(-7);
        insert eSignFormEntry5;

        eSignFormEntry__c eSignFormEntry6 = new eSignFormEntry__c();
        eSignFormEntry6.Name = '::电子签收单录入表';
        eSignFormEntry6.eSignForm__c = eSignForm.Id;
        eSignFormEntry6.entryType__c = '医院收货';
        // eSignFormEntry6.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry6;

        eSignFormEntry__c eSignFormEntry8 = new eSignFormEntry__c();
        eSignFormEntry8.Name = '::电子签收单录入表';
        eSignFormEntry8.eSignForm__c = eSignForm.Id;
        eSignFormEntry8.entryType__c = '医院确认';

        insert eSignFormEntry8;

        eSignFormEntry__c eSignFormEntry7 = new eSignFormEntry__c();
        eSignFormEntry7.Name = '::电子签收单录入表';
        eSignFormEntry7.eSignForm__c = eSignForm.Id;
        eSignFormEntry7.entryType__c = '医院确认';

        insert eSignFormEntry7;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表
        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        String type = '经销商收货';
        Date startDate = Date.today();
        Date enDdate = Date.today().addDays(-1);
        Database.executeBatch(new updateESignBatch(type, true), 20);
        Test.stopTest();
    }

    //测试经销商收货
    static testMethod void testMethod11() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        eSignFormEntry__c eSignFormEntry3 = new eSignFormEntry__c();
        eSignFormEntry3.Name = '::电子签收单录入表1';
        eSignFormEntry3.eSignForm__c = eSignForm.Id;
        eSignFormEntry3.entryType__c = '医院收货';

        insert eSignFormEntry3;

        eSignFormEntry__c eSignFormEntry4 = new eSignFormEntry__c();
        eSignFormEntry4.Name = '::电子签收单录入表2';
        eSignFormEntry4.eSignForm__c = eSignForm.Id;
        eSignFormEntry4.entryType__c = '医院收货';
        eSignFormEntry4.IsSubmit__c = true;
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry4;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        eSignFormLineItemEntry__c eSignFormLineItemEntry3 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry3.Name = '::电子签收单明细录入3';
        eSignFormLineItemEntry3.eSignFormEntry__c = eSignFormEntry3.Id;
        eSignFormLineItemEntry3.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry3;

        eSignFormLineItemEntry__c eSignFormLineItemEntry4 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry4.Name = '::电子签收单明细录入4';
        eSignFormLineItemEntry4.eSignFormEntry__c = eSignFormEntry4.Id;
        eSignFormLineItemEntry4.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry4;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }
    //测试医院确认
    static testMethod void testMethod12() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '医院确认';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '医院确认';
        // eSignFormEntry2.IsSubmit__c = true;
        // eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.agencySignUpDateBack__c =Date.today().addDays(-2);
        // eSignFormEntry2.agencyConfirmDateBack__c =Date.today().addDays(-2);
        // eSignFormEntry2.HPScanDayBack__c =Date.today().addDays(-2);
        // eSignFormEntry2.HPSignUpDateBack__c =Date.today().addDays(-2);
        // eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }

    //测试经销商收货
    static testMethod void testMethod13() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';
        eSignForm.RC_Manager__c = UserInfo.getUserId();
        // eSignForm.RC_Manager2__c = UserInfo.getUserId();
        // eSignForm.RC_Manager3__c = UserInfo.getUserId();
        eSignForm.agencyRejectDate__c = Date.today().addDays(2);
        eSignForm.HPRejectDate__c = Date.today().addDays(2);

        insert eSignForm;

        /*        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';
        
        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c =Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c =Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c =Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c =Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;*/

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        /*eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c =eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c =eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;*/

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignForm.id;
        attach.ContentType = 'application/pdf';

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'Unit Test Attachment';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;
        attach1.ContentType = 'application/pdf';

        attachmentList.add(attach1);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }
    //跑单独方法
    @isTest
    private static void test_upsertESignLineItems() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';

        insert eSignForm;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        /*list<Attachment> attachmentList = new list<Attachment>();
        Attachment attach=new Attachment();     
        attach.Name='Unit Test Attachment';
        Blob bodyBlob=Blob.valueOf('Unit Test Attachment Body');
        attach.body=bodyBlob;
        attach.parentId=eSignFormEntry2.id;

        attachmentList.add(attach);*/

        // insert attach;
        /*Attachment attach1=new Attachment();     
        attach1.Name='Unit Test Attachment';
        Blob bodyBlob1=Blob.valueOf('Unit Test Attachment Body');
        attach1.body=bodyBlob1;
        attach1.parentId=eSignForm.id;
        
        attachmentList.add(attach1);

        insert attachmentList;*/
        // Profile p = [select id from Profile where id =:System.Label.ProfileId_SystemAdmin];
        // String loginId = UserInfo.getUserId();
        // User sys = [select id from User where Id = :loginId];

        // User u1 = new User(Test_staff__c = true);
        // u1.LastName = '_サンブリッジ';
        // u1.FirstName = 'あ';
        // u1.Batch_User__c = true;
        // u1.Alias = 'あ';
        // u1.Email = 'olympusTest01@sunbridge.com';
        // u1.Username = 'olympusTest10@sunbridge.com';
        // u1.CommunityNickname = 'あ1';
        // u1.IsActive = true;
        // u1.EmailEncodingKey = 'ISO-2022-JP';
        // u1.TimeZoneSidKey = 'Asia/Tokyo';
        // u1.LocaleSidKey = 'ja_JP';
        // u1.LanguageLocaleKey = 'ja';
        // u1.ProfileId = p.id;
        // u1.Job_Category__c = '销售服务';
        // u1.Province__c = '東京';

        // User u2 = new User(Test_staff__c = true);
        // u2.LastName = '_サンブリッジ';
        // u2.FirstName = 'い';
        // u2.Batch_User__c = true;
        // u2.Alias = 'い';
        // u2.Email = 'olympusTest02@sunbridge.com';
        // u2.Username = 'olympusTest02@sunbridge.com';
        // u2.CommunityNickname = 'い';
        // u2.IsActive = true;
        // u2.EmailEncodingKey = 'ISO-2022-JP';
        // u2.TimeZoneSidKey = 'Asia/Tokyo';
        // u2.LocaleSidKey = 'ja_JP';
        // u2.LanguageLocaleKey = 'ja';
        // u2.ProfileId = p.id;
        // u2.Job_Category__c = '销售推广';
        // u2.Province__c = '東京';

        // User u3 = new User(Test_staff__c = true);
        // u3.LastName = '_サンブリッジ';
        // u3.Batch_User__c = true;
        // u3.FirstName = 'う';
        // u3.Alias = 'う';
        // u3.Email = 'olympusTest03@sunbridge.com';
        // u3.Username = 'olympusTest03@sunbridge.com';
        // u3.CommunityNickname = 'う';
        // u3.IsActive = true;
        // u3.EmailEncodingKey = 'ISO-2022-JP';
        // u3.TimeZoneSidKey = 'Asia/Tokyo';
        // u3.LocaleSidKey = 'ja_JP';
        // u3.LanguageLocaleKey = 'ja';
        // u3.ProfileId = p.id;
        // u3.Job_Category__c = '支援';
        // u3.Province__c = '東京';
        // u3.Dept__c = '能量事业本部';

        // insert new User[] {u1, u2, u3};

        // System.runAs(sys) {
        // OCM_Management_Province__c mp1 = new OCM_Management_Province__c();
        // mp1.Name = '江西';
        // mp1.GI_assistant__c = u1.Id;
        // mp1.SP_assistant__c = u1.Id;
        // mp1.Energy_assistant__c = u1.Id;

        // OCM_Management_Province__c mp2 = new OCM_Management_Province__c();
        // mp2.Name = '上海';
        // mp2.GI_assistant__c = u2.Id;
        // mp2.SP_assistant__c = u2.Id;
        // mp2.Energy_assistant__c = u2.Id;

        // OCM_Management_Province__c mp3 = new OCM_Management_Province__c();
        // mp3.Name = '深圳';
        // mp3.GI_assistant__c = u3.Id;
        // mp3.SP_assistant__c = u3.Id;
        // mp3.Energy_assistant__c = u3.Id;

        // OCM_Management_Province__c mp4 = new OCM_Management_Province__c();
        // mp4.Name = '特约经销商管理支援本部';
        // mp4.GI_assistant__c = loginId;
        // mp4.SP_assistant__c = loginId;
        // mp4.Energy_assistant__c = loginId;

        // insert new OCM_Management_Province__c[] {mp1, mp2, mp3, mp4};

        // }

        OCM_Management_Province__c mp1 = new OCM_Management_Province__c();
        mp1.Name = '江西';
        mp1.GI_assistant__c = UserInfo.getUserId();
        mp1.SP_assistant__c = UserInfo.getUserId();
        mp1.Energy_assistant__c = UserInfo.getUserId();
        mp1.SalesManage__c = UserInfo.getUserId();

        insert mp1;

        List<String> provinceList = new List<String>{ '江西' };
        Map<Id, String> provinceMap = new Map<Id, String>();
        Id i = eSignForm.id;
        // provinceMap.put(i,'北京市');
        // provinceMap.put(i,'山西省');
        provinceMap.put(i, '江西');

        List<eSignForm__c> eSignFormList = new List<eSignForm__c>();
        eSignFormList.add(eSignForm);

        updateESignBatch.updateOwner(provinceList, provinceMap, eSignFormList, true);
    }

    //测试经销商收货
    static testMethod void testMethod14() {
        List<RecordType> rectCo = [SELECT Id FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [
            SELECT Id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '戦略科室分類 呼吸科'
        ];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [
            SELECT Id, Name
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name IN ('診療科 消化科', '診療科 呼吸科')
            ORDER BY Name DESC
        ];
        if (rectDpt.size() == 0) {
            return;
        }
        List<RecordType> rectAs = [SELECT Id, Name FROM RecordType WHERE IsActive = TRUE AND SobjectType = 'Asset' AND Name = '备品'];
        if (rectAs.size() == 0) {
            return;
        }

        // insert hospital
        Account company1 = new Account();
        company1.RecordTypeId = rectCo[0].Id;
        company1.Name = '病院テスト1';
        company1.OCM_man_province_txt__c = '江西';
        List<Account> hps = new List<Account>{ company1 };
        insert hps;

        List<Account> dc1s = [
            SELECT Id, Name, Department_Class_Label__c, Sys_Dept_Name_Change_Chk__c
            FROM Account
            WHERE Parent.Id = :company1.Id
            ORDER BY Department_Class_Label__c
        ];

        Account depart1 = new Account();
        depart1.RecordTypeId = rectDpt[0].Id;
        depart1.Name = '*';
        depart1.Department_Name__c = '診療科1';
        depart1.ParentId = dc1s[0].Id;
        depart1.Department_Class__c = dc1s[0].Id;
        depart1.Hospital__c = company1.Id;
        depart1.OCM_man_province_txt__c = '江西';

        insert new List<Account>{ depart1 };

        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c = 'HistoryPrd1';
        prd1.ProductCode = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name = 'HistoryPrd1';
        prd1.Manual_Entry__c = false;
        prd1.Extend_new_product_gurantee__c = true;
        prd1.Extend_Gurantee_Start__c = Date.today().addDays(-60);
        prd1.Extend_Gurantee_End__c = Date.today().addDays(60);
        prdList.add(prd1);
        insert prdList;

        Asset ast = new Asset();

        ast.RecordTypeId = rectAs[0].Id;
        ast.SerialNumber = 'abcdefg';
        ast.Name = '测试资产1';
        ast.AccountId = depart1.Id;
        ast.Department_Class__c = dc1s[0].Id;
        ast.Hospital__c = company1.Id;
        ast.Product2Id = prd1.Id;
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate = Date.today();
        ast.Manage_type__c = '个体管理';
        ast.FirstApproveDate_old__c = Date.today().addDays(-30);

        Oly_TriggerHandler.bypass('AssetHandler');

        insert ast;

        Asset ast1 = [SELECT RecordTypeID__c FROM Asset WHERE Id = :ast.Id];

        String RecordTypeID = ast1.RecordTypeID__c;

        System.assertEquals(RecordTypeID, ast.RecordTypeId);

        RecordType rectOpp = [
            SELECT id
            FROM RecordType
            WHERE IsActive = TRUE AND SobjectType = 'Opportunity' AND DeveloperName = 'Opportunity'
        ];
        Opportunity opp = new Opportunity(
            Name = 'testOpp1',
            StageName = '引合',
            CloseDate = Date.today(),
            AccountId = depart1.Id,
            Sales_Root__c = '販売店',
            Competitor__c = 'A',
            Click_Close_Date__c = null,
            RecordType = rectOpp,
            Trade__c = '内貿'
        );
        insert opp;

        //注残
        Statu_Achievements__c Sac = new Statu_Achievements__c(
            name = 'zhucan_one',
            Opportunity__c = opp.id,
            DeliveryDate__c = Date.today(),
            ContractNO__c = 'ContractNO1',
            ContractAmount__c = 1000
        );
        insert Sac;

        //新建电子签收单
        eSignForm__c eSignForm = new eSignForm__c();
        eSignForm.Statu_Achievements__c = Sac.Id;
        eSignForm.Name = '::测试电子签收单';
        eSignForm.agencyRejectDate__c = Date.today().addDays(2);
        eSignForm.HPRejectDate__c = Date.today().addDays(2);

        insert eSignForm;

        eSignFormEntry__c eSignFormEntry1 = new eSignFormEntry__c();
        eSignFormEntry1.Name = '::电子签收单录入表1';
        eSignFormEntry1.eSignForm__c = eSignForm.Id;
        eSignFormEntry1.entryType__c = '经销商收货';

        insert eSignFormEntry1;

        eSignFormEntry__c eSignFormEntry2 = new eSignFormEntry__c();
        eSignFormEntry2.Name = '::电子签收单录入表2';
        eSignFormEntry2.eSignForm__c = eSignForm.Id;
        eSignFormEntry2.entryType__c = '经销商收货';
        eSignFormEntry2.IsSubmit__c = true;
        eSignFormEntry2.agencyScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencySignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.agencyConfirmDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPScanDayBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPSignUpDateBack__c = Date.today().addDays(-2);
        eSignFormEntry2.HPConfirmDateBack__c = Date.today().addDays(-2);
        // eSignFormEntry2.createdDate = Date.today().addDays(-2);
        insert eSignFormEntry2;

        //新建电子签收单明细
        eSignFormLineItem__c eSignFormLineItem = new eSignFormLineItem__c();
        eSignFormLineItem.Name = '::电子签收单明细';
        eSignFormLineItem.eSignForm__c = eSignForm.Id;

        insert eSignFormLineItem;

        //新建电子签收单明细录入表

        eSignFormLineItemEntry__c eSignFormLineItemEntry1 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry1.Name = '::电子签收单明细录入1';
        eSignFormLineItemEntry1.eSignFormEntry__c = eSignFormEntry1.Id;
        eSignFormLineItemEntry1.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry1;

        eSignFormLineItemEntry__c eSignFormLineItemEntry2 = new eSignFormLineItemEntry__c();
        eSignFormLineItemEntry2.Name = '::电子签收单明细录入2';
        eSignFormLineItemEntry2.eSignFormEntry__c = eSignFormEntry2.Id;
        eSignFormLineItemEntry2.eSignFormLineItem__c = eSignFormLineItem.Id;

        insert eSignFormLineItemEntry2;

        list<Attachment> attachmentList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name = 'Unit Test Attachment';
        Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.parentId = eSignFormEntry2.id;
        attach.ContentType = 'application/pdf';

        attachmentList.add(attach);

        // insert attach;
        Attachment attach1 = new Attachment();
        attach1.Name = 'H-65224941-20200923--10.jpg';
        Blob bodyBlob1 = Blob.valueOf('Unit Test Attachment Body');
        attach1.body = bodyBlob1;
        attach1.parentId = eSignForm.id;
        attach1.ContentType = 'application/pdf';

        attachmentList.add(attach1);

        Attachment attach2 = new Attachment();
        attach2.Name = 'A-65224945-20200928--8.jpg';
        Blob bodyBlob2 = Blob.valueOf('Unit Test Attachment Body');
        attach2.body = bodyBlob2;
        attach2.parentId = eSignForm.id;
        attach2.ContentType = 'application/pdf';

        attachmentList.add(attach2);

        insert attachmentList;

        Test.startTest();

        Database.executeBatch(new updateESignBatch(), 20);
        Test.stopTest();
    }
}
