buli
2023-04-11 e3984fbbf370bf5925250a75bfb6154b4a16685c
bakcup
13个文件已修改
73个文件已添加
1个文件已删除
9897 ■■■■■ 已修改文件
.prettierrc 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/config.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ConsumableController.cls 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/InventoryController.cls 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryController.cls 1159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatController.cls 2400 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NFMUtil.cls 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/PaginatedListControllerLwc.cls 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/PaginatedListControllerLwc.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SaleOrderController.cls 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SampleLookupController.cls 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SampleLookupController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TestClassByLiJun.cls 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TestClassByLiJun.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customUnitComp/customUnitComp.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customUnitComp/customUnitComp.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customUnitComp/customUnitComp.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentAmount.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentNumber.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customShippingUnitPrice.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customUnit.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.html 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.js 502 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.js-meta.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.css 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.html 564 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js 1109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js-meta.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js-meta.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lookup/lookup.css 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lookup/lookup.html 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lookup/lookup.js 468 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lookup/lookup.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.css 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.html 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js-meta.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/templates/customShipmentNumber.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/templates/customShippingUnitPrice.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lwcDatatableUtility/templates/customUnit.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/customName.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/customNumber.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/customShipmentNumber.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/customShippingUnitPrice.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/customUnit.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginatedList/paginatedList.html 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginatedList/paginatedList.js 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginatedList/paginatedList.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.css 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.html 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/customShipmentAmount.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/customShipmentNumber.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/customShippingUnitPrice.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/customUnit.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/pocFileUpload.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/testPaginated/__tests__/testPaginated.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/testPaginated/testPaginated.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/testPaginated/testPaginated.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/testPaginated/testPaginated.js-meta.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/package.xml 478 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/Inventory.page 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/InventoryView.page 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/LexCustomDataTable.css 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/LexCustomDataTable.resource-meta.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/package.xml 479 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/packageForPIPL.xml 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.prettierrc
@@ -1,27 +1,26 @@
{
  "trailingComma": "none",
  "overrides": [
    {
      "files": "**/lwc/**/*.html",
      "options": {
        "tabWidth": 4,
        "parser": "lwc"
      }
    },
    {
      "files": "**/*.{cls,trigger,apex}",
      "options": {
        "apexInsertFinalNewline": true,
        "printWidth": 140,
        "tabWidth": 4
      }
    },
    {
      "files": "*.{cmp,page,component}",
      "options": {
        "parser": "html",
        "tabWidth": 4
      }
    }
  ]
    "trailingComma": "none",
    "singleQuote": true,
    "tabWidth": 4,
    "overrides": [
        {
            "files": "**/lwc/**/*.html",
            "options": {
                "parser": "lwc"
            }
        },
        {
            "files": "**/*.{cls,trigger,apex}",
            "options": {
                "apexInsertFinalNewline": true,
                "printWidth": 140
            }
        },
        {
            "files": "*.{cmp,page,component}",
            "options": {
                "parser": "html"
            }
        }
    ]
}
.sf/config.json
@@ -1,3 +1,3 @@
{
  "target-org": "OlympusPIPLDev"
}
  "target-org": "LEXOlympusDev"
}
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
@@ -567,7 +567,7 @@
                    <br/>
                    <div class="save_button_area">
                        <lightning:button class="slds-m-top_small" type="button" label="取消" onclick="{!c.createCancel}"/>
                        <lightning:button class="slds-m-top_small" type="submit" label="新建" />
                        <lightning:button class="slds-m-top_small" type="submit" label="保存" />
                    </div>
                </lightning:recordEditForm>
            </div>
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
@@ -1,5 +1,6 @@
({
    doInit : function(component, event, helper) {
        console.log('zhj 新方案');
        if (window.location.href.endsWith("weekly-report")) {
            helper.doinit(component, event, helper);
        } else {
@@ -101,16 +102,62 @@
            */
            var agencyHospitalid = component.get('v.hospitalLinkId');
            var arr = new Array();
            arr.push(agencyReport);
            var data = JSON.stringify(arr);
            // helper.set_aws_url(component,data,agencyHospitalid);
            //zhj MEBG新方案改造 2022-11-29 start
            debugger
            let hospitalName = '';
            //调用后端searchAgencyDataId方法查询出医院下面所有客户人员dataid
            helper.CallBackAction(component,'searchAgencyDataId',{
                hospitalId : agencyHospitalid
            },function(data){
                if(data.getState() == "SUCCESS"){
                    var data = data.getReturnValue();
                    if(data.IsSuccess == true){
                        let agencyContactIds = ''
                        if(data.Message == '' && data.Data && data.Data.length > 0){
                            hospitalName = data.Data[0].Agency_Hospital__r.Name;
                            for(var i=0;i<data.Data.length;i++){
                                if(data.Data[i].AWS_Data_Id__c)
                                    agencyContactIds += ','+data.Data[i].AWS_Data_Id__c;
                            }
                            agencyContactIds = agencyContactIds.substring(1);
                            agencyReport['agencyContactIds'] = agencyContactIds;
                        }else{
                            agencyReport['agencyContactIds'] = agencyContactIds;
                        }
                        var arr = new Array();
                        arr.push(agencyReport);
                        var requestData = JSON.stringify(arr);
                        // helper.set_aws_url(component,data,agencyHospitalid);
            var token = component.get('v.AWStoken');
            var newUrl = component.get('v.AWSinsert');
                        var token = component.get('v.AWStoken');
                        var newUrl = component.get('v.AWSinsert') + 'V2';
                        component.set('v.login',true);
                        helper.insert_agencycontact(component,token,newUrl,requestData,agencyHospitalid,helper,hospitalName);
                    }else{
                        helper.ShowToast({
                            "message" : data.message,
                            "type" : "error"
                        });
                    }
                }else{
                    helper.ShowToast({
                        "message" : 'searchAgency失败',
                        "type" : "error"
                    });
                }
            })
            //zhj MEBG新方案改造 2022-11-29 end
            // var arr = new Array();
            // arr.push(agencyReport);
            // var data = JSON.stringify(arr);
            // // helper.set_aws_url(component,data,agencyHospitalid);
            // var token = component.get('v.AWStoken');
            // var newUrl = component.get('v.AWSinsert');
            
            component.set('v.login',true);
            helper.insert_agencycontact(component,token,newUrl,data,agencyHospitalid,helper);
            // component.set('v.login',true);
            // helper.insert_agencycontact(component,token,newUrl,data,agencyHospitalid,helper);
            // PIPL update Yin Mingjie 21/02/2022 end
        }else{
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
@@ -63,7 +63,7 @@
                        component.set('v.login',false);
                    }
                }else{
                    this.error('AWS search status : ' + result.status);
                    this.error('AWS search status1 : ' + result.status);
                    component.set('v.login',false);
                }
            },component);
@@ -221,7 +221,7 @@
                            b = true;
                            Foo();
                        }else{
                            this.error('AWS search status : ' + result.status);
                            this.error('请重新刷新一下页面。');
                        }
                    },component);
                }else{
@@ -243,7 +243,7 @@
                            b1 = true;
                            Foo();
                        }else{
                            this.error('AWS search status : ' + result.status);
                            this.error('AWS search status3 : ' + result.status);
                        }
                    },component);
                }else{
@@ -345,7 +345,7 @@
                var reports = component.get('v.reports');
                var Agency_Hospital_text = '';
                var Agency_Hospital_parent_id = '';
                debugger
                // 医院名
                if (select_data['Agency_Hospital__c'] != '') {
                    for (var i = 0; i < reports.length; i++) {
@@ -1171,7 +1171,6 @@
                component.set('v.hospitalLinkId', hospital_data[i].Id);
                component.set('v.data.Agency_Hospital__c', hospital_data[i].Id);
                component.find('new_con').set('v.disabled', false);
                //break;
            }
        }
        component.set("v.hospital", accname);
@@ -1231,7 +1230,7 @@
        $A.enqueueAction(action);
    },
    insert_agencycontact : function(component,token,newUrl,payload,agencyHospitalid,helper) {
    insert_agencycontact : function(component,token,newUrl,payload,agencyHospitalid,helper,hospitalName) {
        // AWSService.insert(newUrl,payload,function(result){
        //     if(result.status == '0'){
@@ -1263,7 +1262,11 @@
            }else{
                console.log('AWS status error:' + result)
                component.set('v.login',false);
                component.find('OppMessage').setError('AWS insert error.');
                if(result.status == '129'){
                    component.find('OppMessage').setError('该客户人员名字已存在,在'+hospitalName+'医院,请修改');
                }else{
                    component.find('OppMessage').setError('AWS insert error.');
                }
            }
        }).catch(error => {
            console.log('AWS insert error:' + error)
@@ -1277,11 +1280,11 @@
        var action = component.get('c.saveAgencyContact');
        action.setParams({
            "name" : result.object[0].name,
            "nameEncrypt" : result.object[0].nameEncrypt,
            //"nameEncrypt" : result.object[0].nameEncrypt,
            "type" : result.object[0].type,
            "typeEncrypt" : result.object[0].typeEncrypt,
            //"typeEncrypt" : result.object[0].typeEncrypt,
            "doctorDivision1" : result.object[0].doctorDivision1,
            "doctorDivision1Encrypt" : result.object[0].doctorDivision1Encrypt,
            //"doctorDivision1Encrypt" : result.object[0].doctorDivision1Encrypt,
            "agencyHospitalid" : agencyHospitalid,
            "awsid" : result.object[0].dataId,
        });
@@ -1422,7 +1425,7 @@
            if(result.status == '0'){
                this.to_doctor_list(result,retMap,component);
            }else{
                this.error('AWS search status : ' + result.status);
                this.error('AWS search status4 : ' + result.status);
                component.set('v.login',false);
            }
        },component);
@@ -1443,6 +1446,9 @@
        // });
    },
    search_core : function(token,searchUrl,payload,callback,component) {
        console.log('token = ' + token);
        console.log('searchUrl = ' + searchUrl);
        console.log('payload = ' + payload);
        fetch(searchUrl, {
            method: 'POST',
            body: payload,
@@ -1456,6 +1462,7 @@
            component.set('v.login',false);
            if(callback)callback(result);
        }).catch(error => {
            console.log('error = ' + JSON.stringify(error));
            this.error('AWS search error.');
            component.set('v.login',false);
        });
@@ -1519,6 +1526,7 @@
    // },
    
    opportunityChange : function(component, event, helper) {
        debugger
        var opp_id = component.get('v.data.Opportunity__c');
        if (opp_id == '') {
            $A.util.addClass(component.find('input-opportunity-stage'), 'disp_none');
@@ -1582,24 +1590,28 @@
                        // }
                        component.set('v.login',false);
                        return false;
                    } else if (res[0]['StageName2__c'] != '3.询价' && !component.get('v.loadOpp')){
                        this.warning('请选择询价中的项目');
                        // ToDo需要测试手机上能运行不
                        component.set('v.data.Opportunity__c', '');
                        $A.util.addClass(component.find('input-opportunity-stage'), 'disp_none');
                        $A.util.addClass(component.find('input-opportunity-amount1'), 'disp_none');
                        $A.util.addClass(component.find('input-opportunity-amount2'), 'disp_none');
                        $A.util.addClass(component.find('input-opportunity-date'), 'disp_none');
                        $A.util.removeClass(component.find('input-opportunity-blank'), 'disp_none');
                        // if ($A.get("$Browser.formFactor") == 'DESKTOP') {
                        //     var values = [];
                        //     component.find('input-opportunity').get("v.body")[0].set('v.values', values);
                        // } else {
                        //     component.find('input-opportunity').get("v.body")[0].set('v.selectedLabel', '');
                        // }
                        component.set('v.login',false);
                        return false;
                    } else {
                    }
                    //SWAG-CKH5M8  【委托】周报关联询价,可选择询价范围调整 fy start
                    //  else if (res[0]['StageName2__c'] != '3.询价' && !component.get('v.loadOpp')){
                    //     this.warning('请选择询价中的项目');
                    //     // ToDo需要测试手机上能运行不
                    //     component.set('v.data.Opportunity__c', '');
                    //     $A.util.addClass(component.find('input-opportunity-stage'), 'disp_none');
                    //     $A.util.addClass(component.find('input-opportunity-amount1'), 'disp_none');
                    //     $A.util.addClass(component.find('input-opportunity-amount2'), 'disp_none');
                    //     $A.util.addClass(component.find('input-opportunity-date'), 'disp_none');
                    //     $A.util.removeClass(component.find('input-opportunity-blank'), 'disp_none');
                    //     // if ($A.get("$Browser.formFactor") == 'DESKTOP') {
                    //     //     var values = [];
                    //     //     component.find('input-opportunity').get("v.body")[0].set('v.values', values);
                    //     // } else {
                    //     //     component.find('input-opportunity').get("v.body")[0].set('v.selectedLabel', '');
                    //     // }
                    //     component.set('v.login',false);
                    //     return false;
                    // }
                    //SWAG-CKH5M8  【委托】周报关联询价,可选择询价范围调整 fy end
                     else {
                        component.set('v.loadOpp', false);
                        component.set('v.oppdata',res[0]);
                        this.set_selected(component, 'select_stageName', res[0].StageName__c);
@@ -1784,6 +1796,7 @@
        $A.util.addClass(modal_newAC, 'disp_none');
    },
    setOpportunity_cfilter : function(component) {
        debugger
        var hosId = component.get('v.hospitalId');
        var Department_Cateogy__c = component.find('select_department').get('v.value');
        var opportunity_cfilter = '';
@@ -1896,19 +1909,23 @@
            fileData : component.get("v.fileContentData"),
        }); 
        action1.setCallback(this, function(response) {
            console.log('response = '  + JSON.stringify(response));
            var state = response.getState();
            if (state === "SUCCESS") {
                var ress = response.getReturnValue();
                console.log('ress = '  + JSON.stringify(ress));
                if(ress){
                    var valur =ress.split('error1');
                    if(valur.length<=1){
                        var res = JSON.parse(response.getReturnValue());
                        console.log('res = '  + JSON.stringify(res));
                        var dataArr = new Array();
                        var dataMap = new Map();
                        res.forEach(item => {
                            if(item.AWS_Data_Id__c){
                                dataArr.push(item.AWS_Data_Id__c);
                                dataMap.set(item.AWS_Data_Id__c,item.Name_Encrypted__c);
                                //dataMap.set(item.AWS_Data_Id__c,item.Name_Encrypted__c);
                                dataMap.set(item.AWS_Data_Id__c,item.AWS_Data_Id__c);       //zhj 新方案改造 2022-12-21
                            }
                        });
                        debugger
@@ -1931,11 +1948,11 @@
                                        component.set('v.login',true);
                                        this.saveRecordsEditFile(component,dataMap,result.object,helper);
                                    }else{
                                        this.error('AWS search status ' );
                                        this.error('AWS search status5 ' );
                                        component.set('v.login',false);
                                    }
                                }else{
                                    this.error('AWS search status : ' + result.status);
                                    this.error('AWS search status6 : ' + result.status);
                                    component.set('v.login',false);
                                }
                            },component);
@@ -2087,7 +2104,7 @@
         if (searchDataMap.get(fileName.replace(' ',''))) {
                 var nameDataId = searchDataMap.get(fileName.replace(' ',''));
                if (dataMap.get(nameDataId)) {
                     filelist[4] = dataMap.get(nameDataId);
                     filelist[4] = dataMap.get(nameDataId);     //zhj 新方案改造 filelist[4]不再存的nameEncrpt 2022-12-21
                }else {
                     error += 'error1 第'+i+'行数据拜访人SF不存在';
                     error += '=';
@@ -2317,8 +2334,24 @@
        var modalimportbg = component.find('modal_exportbg');
        $A.util.addClass(modalimport, 'disp_none');
        $A.util.addClass(modalimportbg,'disp_none');
    }
    },
    //zhj MEBG新方案改造 2022-11-29 start
    CallBackAction  : function(component,action_name,para,callback) {
        var action = component.get("c." + action_name.trimStart().replace("c.",""));
        if(para){
            action.setParams(para);
        }
        if(callback){
            action.setCallback(this,function(data){
                callback(data);
            });
        }
        $A.enqueueAction(action);
    },
    //zhj MEBG新方案改造 2022-11-29 end
    // searchAgencyContact : function(res) {
    //     var agencyContacts = [];
    //     for (let idx = 0; idx < res.length; idx++) {
force-app/main/default/classes/ConsumableController.cls
@@ -1,4 +1,4 @@
public without sharing class ConsumableController {
public without sharing class  {
    /*****************検索用******************/
    public Consumable_order__c coc { get; set; }            // FIMXE Consumable_order__c のインスタンス、sql多すぎ
force-app/main/default/classes/InventoryController.cls
@@ -114,10 +114,10 @@
        this.sortOrder = new String[]{' ',' ','↓'};
        String userId = UserInfo.getUserId();
        // String userId = '00510000006xHnrAAE';
        //String userId = '00510000006k82X';
        //String userId = '00510000005QO75';
        user Useracc = [select Accountid, Work_Location__c,UserPro_Type__c from user where id =:userId];
        accountid = Useracc.Accountid;
        accountid = Useracc.accountid;
        userWorkLocation = Useracc.Work_Location__c;
        agencyProType = Useracc.UserPro_Type__c;
        if(String.isBlank(Useracc.UserPro_Type__c)){
@@ -131,19 +131,17 @@
        List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
        Map<String,ConsumableorderdetailsInfo> newMidBoxMap = new Map<String,ConsumableorderdetailsInfo>();
        Map<String,ConsumableorderdetailsInfo> newMidPieceMap = new Map<String,ConsumableorderdetailsInfo>();
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
        //开始制作表头数据
        // List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
        //                                                     SFDA_Status__c,Packing_list_manual__c,
        //                                                     Asset_Model_No__c
        //                                                 from Product2__c
        //                                                 //where Estimation_Entry_Possibility__c = '○'
        //                                                  where Product_Type__c like : sqlagencyProType
        //                                                 ];
        // for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
        //     midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        // }
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy end
        List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
                                                            SFDA_Status__c,Packing_list_manual__c,
                                                            Asset_Model_No__c
                                                        from Product2__c
                                                        //where Estimation_Entry_Possibility__c = '○'
                                                         where Product_Type__c like : sqlagencyProType
                                                        ];
        for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
            midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        }
        //查询库存 追加返品库存
        List<Consumable_order_details2__c> ProductCount_Res = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,
@@ -159,28 +157,7 @@
                            AND Product_Type__c like : sqlagencyProType
                            AND Arrive_Owner_Work_Location__c =: userWorkLocation
                            AND  Dealer_Info_text__c = :accountName];
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
        //开始制作表头数据
        Set<Id> Product2cIdSet = new Set<Id>();
        for(Consumable_order_details2__c con_or_d2item: ProductCount_Res){
            Product2cIdSet.add(con_or_d2item.Consumable_Product__c);
        }
        List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
                                                            SFDA_Status__c,Packing_list_manual__c,
                                                            Asset_Model_No__c
                                                        from Product2__c
                                                        //where Estimation_Entry_Possibility__c = '○'
                                                         where Id in:Product2cIdSet
                                                         and Product_Type__c like : sqlagencyProType
                                                        ];
        for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
            midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        }
        system.debug('productCount_Unfull_bak'+productCount_Unfull_bak.size());
        // String erro='productCount_Unfull_bak:'+productCount_Unfull_bak.size();
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, erro));
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy end
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ProductCount_Res  ' + ProductCount_Res.size()));
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ProductCount_Res  ' + ProductCount_Res.size()));
        for(Integer i = 0 ; i< ProductCount_Res.size();i++){
            //然后循环CountDel做Box和piece2个map
            if(MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) && ProductCount_Res[i].Box_Piece__c == '盒'){
@@ -1028,7 +1005,9 @@
    }
    //CSV出力
    public PageReference doClick() {
        system.debug('Click');
        Pagereference pr = page.InventoryCSV;
        system.debug('data:'+JSON.serialize(consumableorderdetailsRecordserrordummy));
        return pr;
    }
force-app/main/default/classes/LexInventoryController.cls
New file
@@ -0,0 +1,1159 @@
public without sharing class LexInventoryController {
    //分页使用数据
    public static String fileName { get; set; }
    public static  Integer size{get;set;}
    public static  Integer noOfRecords{get; set;}
    public static  List<ConsumableorderdetailsInfo> codPageRecords { get; set; } // 丢失和巡回的,画面显示用
    public static  ApexPages.StandardSetController setCon { get; set; }
    @AuraEnabled
    public static  List<Consumable_order_details2__c> setConDetails2 { get; set; }
    public static  Map<Id,String> pandiandetailsMap = new Map<Id,String>();
    /*****************検索用******************/
    public static  String barcode { get; set; }
    public static  Boolean done { get; set; }
    /*****************画面表示Bean******************/
    //页面主数据显示用
    private static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
    //盘点到的产品
    public static  List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
    public static  List<Consumable_order_details2__c> showcod2nid = new List<Consumable_order_details2__c>();
    //public List<Consumable_order_details2__c> pandiandetailsList { get; set; }
    public static  List<List<Consumable_order_details2__c>> pandiandetailsListShow { get; set; }
    //寻回明细
    public static  List<ConsumableorderdetailsInfo> consumableorderdetailsRecordserrordummy;  // 丢失和巡回的,实际炒作用
    @AuraEnabled
    public static  List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview { get; set; }       // 产品单位的List
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsviewRecords;
    public static  Integer consumableorderdetailsCount  {
        get {
            return consumableorderdetailsRecords == null ? 0 : consumableorderdetailsRecords.size();
        }
    }
    //list<String> notexitlist = new list<String>();
    public static  Map<String,String> reFindProduct = new Map<String,String>();
    //排序用
    public static  String sortKey;
    public static  String preSortKey;
    public static  Boolean sortOrderAsc;
    public static  String[] sortOrder;
    //private Set<String> carCodeListLose = new Set<String>();              //ProductCount_Res 有,BarCodeListP 没有
    /*****************经销商ID******************/
    private static String accountid = null;
    private static String accountName = null;
    // 盘点 ID
    private static String eSetId = '';
    // 登录者工作地
    private static String userWorkLocation;
    //经销商用户产品分类(ET、ENG)
    public static String agencyProType {get;set;}
    public static String sqlagencyProType;
    //判断操作人员是否盘点
    public static Boolean iSinventory = false;
    public LexInventoryController(){
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        done = false;
        consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
        consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        //codPageRecordsShow = new List<ConsumableorderdetailsInfo>();
    }
    private static void initStandardController(){
        // init standard controller
        List<Consumable_order_details2__c> showcod2 = [select Id,  Name,Consumable_Product__c,
                            Bar_Code__c,Consumable_Product__r.Name__c,
                            Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                            Bar_Code_search__c
                        FROM Consumable_order_details2__c
                        WHERE Id in :pandiandetailsMap.keySet()
                        order by Name desc];
        setConDetails2 = showcod2;
        System.debug('setConDetails2===>'+setConDetails2);
        // setCon = new ApexPages.StandardSetController(showcod2);
        // // sets the number of records in each page set
        // setCon.setPageSize(size);
        // noOfRecords = setCon.getResultSize();
    }
    public static  List<Consumable_order_details2__c> cod2s() {
         return setConDetails2;
    }
    //Changes the size of pagination
    public static  PageReference refreshPageSize() {
        setCon.setPageSize(size);
        //showcod2nid = cod2s();
        makepagerecords();
        return null;
    }
    public static  List<ConsumableorderdetailsInfo> makepagerecords() {
        showcod2nid = cod2s();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        for (Consumable_order_details2__c cod2 : showcod2nid) {
            codPageRecords.add(new ConsumableorderdetailsInfo(cod2,pandiandetailsMap.get(cod2.Id)));
        }
        System.debug('===>codPageRecords1'+codPageRecords);
         return codPageRecords;
    }
    // 画面初始化
    @AuraEnabled
    public static ResponseBodyLWC init() {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        res.entity = data;
        consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
        setConDetails2 = new List<Consumable_order_details2__c>();
        String url = '在库调整一览';
        fileName = EncodingUtil.urlEncode(url, 'UTF-8');
        List<Consumable_order_details2__c> showcod2 = [select Id,  Name,Consumable_Product__c,
                            Bar_Code__c,Consumable_Product__r.Name__c,
                            Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                            Bar_Code_search__c
                        FROM Consumable_order_details2__c
                        WHERE Id in :pandiandetailsMap.keySet()
                        order by Name];
                        System.debug('pandiandetailsMap====>'+pandiandetailsMap);
        initStandardController();
        makepagerecords();
        sortKey = '1';
        preSortKey = '1';
        sortOrderAsc = false;
        sortOrder = new String[1];
        sortOrder = new String[]{' ',' ','↓'};
        String userId = UserInfo.getUserId();
        //String userId = '00510000006k82X';
        //String userId = '00510000005QO75';
        user Useracc = [select Accountid, Work_Location__c,UserPro_Type__c from user where id =:userId];
        accountid = Useracc.accountid;
        userWorkLocation = Useracc.Work_Location__c;
        agencyProType = Useracc.UserPro_Type__c;
        if(String.isBlank(Useracc.UserPro_Type__c)){
            agencyProType = 'ET';
        }
        sqlagencyProType = '%' + agencyProType + '%';
        Account accountInfo = [SELECT Name,Dealer_discount__c FROM account WHERE id =:accountid];
        accountName = accountInfo.Name;
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        Map<String,Product2__c> midMap = new Map<String,Product2__c>();
        List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
        Map<String,ConsumableorderdetailsInfo> newMidBoxMap = new Map<String,ConsumableorderdetailsInfo>();
        Map<String,ConsumableorderdetailsInfo> newMidPieceMap = new Map<String,ConsumableorderdetailsInfo>();
        //开始制作表头数据
        List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
                                                            SFDA_Status__c,Packing_list_manual__c,
                                                            Asset_Model_No__c
                                                        from Product2__c
                                                        //where Estimation_Entry_Possibility__c = '○'
                                                         where Product_Type__c like : sqlagencyProType
                                                        ];
        for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
            midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        }
        //查询库存 追加返品库存
        List<Consumable_order_details2__c> ProductCount_Res = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,
                                Asset_Model_No__c,Isoverdue__c,Box_Piece__c
                            FROM Consumable_order_details2__c
                            WHERE Dealer_Arrive__c = true
                            AND Dealer_Shipment__c = false
                            AND Dealer_Saled__c = false
                            AND Dealer_Returned__c = false
                            AND Lose_Flag__c = false
                            AND Cancellation_Flag__c = false
                            AND Bar_Code__c !=null
                            AND Product_Type__c like : sqlagencyProType
                            AND Arrive_Owner_Work_Location__c =: userWorkLocation
                            AND  Dealer_Info_text__c = :accountName];
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ProductCount_Res  ' + ProductCount_Res.size()));
        for(Integer i = 0 ; i< ProductCount_Res.size();i++){
            //然后循环CountDel做Box和piece2个map
            if(MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) && ProductCount_Res[i].Box_Piece__c == '盒'){
                if(newMidBoxMap.containsKey(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c)){
                    ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c).clone();
                    Jstage.countid = Jstage.countid+1 ;
                    if(ProductCount_Res[i].Isoverdue__c == 1){
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidBoxMap.put(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c, Jstage);
                }else{
                    ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(ProductCount_Res[i].Consumable_Product__c));
                    Jstage.countid = Jstage.countid+1 ;
                    if(ProductCount_Res[i].Isoverdue__c == 1){
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidBoxMap.put(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c, Jstage);
                }
            }else if(MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) && ProductCount_Res[i].Box_Piece__c == '个'){
                if(newMidPieceMap.containsKey(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c)){
                    ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c).clone();
                    Jstage.countid = Jstage.countid+1 ;
                    if(ProductCount_Res[i].Isoverdue__c == 1){
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidPieceMap.put(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c, Jstage);
                }else{
                    ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(ProductCount_Res[i].Consumable_Product__c));
                    Jstage.countid = Jstage.countid+1 ;
                    if(ProductCount_Res[i].Isoverdue__c == 1){
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidPieceMap.put(ProductCount_Res[i].Consumable_Product__c+ProductCount_Res[i].Box_Piece__c, Jstage);
                }
            }
        }
        for(ConsumableorderdetailsInfo bss : newMidBoxMap.values()){
            bss.overlimitCount = bss.countid - bss.limitCount;
            boxRecords.add(bss);
        }
        boxRecords.sort();
        for(ConsumableorderdetailsInfo bss : newMidPieceMap.values()){
            bss.overlimitCount = bss.countid - bss.limitCount;
        }
        for(ConsumableorderdetailsInfo bss : boxRecords){
            consumableorderdetailsRecords.add(bss);
            if(newMidPieceMap.containsKey(bss.Prod.Id + '个')){
                consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
                //newMidPieceMap移除已经添加的Piece
                newMidPieceMap.remove(bss.Prod.Id + '个');
            }
        }
        for(ConsumableorderdetailsInfo bss : newMidPieceMap.values()){
            consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
        }
        //consumableorderdetailsCount = consumableorderdetailsRecords.size();
        listCut();
        system.debug('ConsumableorderdetailsRecordsview'+ConsumableorderdetailsRecordsview);
        System.debug('ConsumableorderdetailsRecordsview==>'+ConsumableorderdetailsRecordsview);
        // data.put('ConsumableorderdetailsRecordsview',ConsumableorderdetailsRecordsview);
        // for(ConsumableorderdetailsInfo con: ConsumableorderdetailsRecordsview){
        //     consumableorderdetailsviewRecords.add(con);
        // }
        System.debug('consumableorderdetailsviewRecords===>'+consumableorderdetailsviewRecords);
        System.debug('consumableorderdetailsRecords===>'+consumableorderdetailsRecords);
        data.put('ConsumableorderdetailsRecordsview',JSON.serialize(ConsumableorderdetailsRecordsview));
        data.put('userWorkLocation',userWorkLocation);
        data.put('agencyProType',agencyProType);
        data.put('accountName',accountName);
        data.put('consumableorderdetailsRecords',JSON.serialize(consumableorderdetailsRecords));
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    private static void listCut(){
        //拆分暂用list
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsInfo c = null;
        ConsumableorderdetailsRecordsbreak.clear();
        ConsumableorderdetailsRecordsbreakover.clear();
        consumableorderdetailsRecordsview.clear();
        //选择产品view
        ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
        if(consumableorderdetailsRecords.size() > 1000){
            for(Integer i = 0; i < consumableorderdetailsRecords.size(); i++){
                if(i < 1000){
                    c = consumableorderdetailsRecords.get(i);
                    ConsumableorderdetailsRecordsbreak.add(c);
                }else{
                    c = consumableorderdetailsRecords.get(i);
                    ConsumableorderdetailsRecordsbreakover.add(c);
                }
            }
            consumableorderdetailsRecordsview.add(ConsumableorderdetailsRecordsbreak);
            consumableorderdetailsRecordsview.add(ConsumableorderdetailsRecordsbreakover);
        }else{
            consumableorderdetailsRecordsview.add(consumableorderdetailsRecords);
        }
    }
    //========20160311======ADD_Start================================
    // 将页面或取得BarCode去掉重复的,转换成List
    //========20160311======ADD_Start================================
    public static  List<String> ParseBarCode(String Code){
        Map<String,Integer> barcodeCountMap = new Map<String,Integer>();
        String[] Cache = new String[]{};
        Cache = Code.split('\n');
        List <String> Buff = new List<String>();
        for(String A : Cache){
            A = A.trim().toUpperCase();
            if(barcodeCountMap.containsKey(A)){
                barcodeCountMap.put(A,barcodeCountMap.get(A) + 1);
            }else{
                barcodeCountMap.put(A,1);
            }
            Buff.add(A + barcodeCountMap.get(A));
        }
        return Buff;
    }
    //test
    // @AuraEnabled
    // public static ResponseBodyLWC searchConsumableorderdetails(String sqlagencyProType,String userWorkLocation,String accountName,String barcode,List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsLWC){
    //     return new ResponseBodyLWC('Error',500, 'test', '');
    // }
    //========20160311======ADD_End==================================
    // BarCode录入
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(String agencyProType,String userWorkLocation,String accountName,String barcode,String consumableorderdetailsRecordsLWC){
        System.debug('===>consumableorderdetailsRecordsLWC'+consumableorderdetailsRecordsLWC);
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>)JSON.deserialize(consumableorderdetailsRecordsLWC,List<ConsumableorderdetailsInfo>.class);
        // ConsumableorderdetailsInfo[] consumableorderdetailsRecords=(List<ConsumableorderdetailsInfo>)JSON.deserialize(consumableorderdetailsRecordsLWC,List<ConsumableorderdetailsInfo>.class);
       system.debug('=====>consumableorderdetailsRecordsLWC'+consumableorderdetailsRecordsLWC);
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        res.entity = data;
        sqlagencyProType = '%' + agencyProType + '%';
        // consumableorderdetailsRecords = consumableorderdetailsRecordsLWC;
         System.debug('consumableorderdetailsRecords===>'+consumableorderdetailsRecords);
        System.debug('agencyProType===>'+sqlagencyProType);
        System.debug('accountName===>'+accountName);
        /* BarCodelist做成 */
        //FIXME barcodeSet 做成,ProductCount_ResSet 做成
        List<Consumable_order_details2__c> pandiandetailsList = new List<Consumable_order_details2__c>();
        pandiandetailsListShow = new List<List<Consumable_order_details2__c>>();
        done = false;
        List<String> BarCodeListP = ParseBarCode( barcode );
        //查询库存 追加返品库存
        List<Consumable_order_details2__c> ProductCount_Res = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,Dealer_Info_text__c,
                                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                                Bar_Code_search__c
                            FROM Consumable_order_details2__c
                            WHERE Dealer_Arrive__c = true
                            AND Dealer_Shipment__c = false
                            AND Dealer_Saled__c = false
                            AND Dealer_Returned__c = false
                            AND Lose_Flag__c = false
                            AND Cancellation_Flag__c = false
                            AND Bar_Code__c !=null
                            AND Product_Type__c like : sqlagencyProType
                            AND Arrive_Owner_Work_Location__c =: userWorkLocation
                            AND  Dealer_Info_text__c = :accountName ];
        reFindProduct.clear();
        Map<String,ConsumableorderdetailsInfo> barCodeListAdjustMap = new  Map<String,ConsumableorderdetailsInfo>();
        //barCodeListLoseMap.clear();
        Set<String> carCodeListLose = new Set<String>();
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsAdjust = new List<ConsumableorderdetailsInfo>();
        Map<String,String> proIdNotinpage = new Map<String,String>();
        List<Consumable_order_details2__c> reFindProductList = new List<Consumable_order_details2__c>();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
        List<ConsumableorderdetailsInfo> reFindProductaddtopage = new List<ConsumableorderdetailsInfo>();
        pandiandetailsMap.clear();
        reSet = new List<Consumable_order_details2__c>();
        /* 判断BarCode是否为空 */
        if (barcode == null || barcode == ''){
            //先取出所有丢失产品
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                // 20200509 gzw add 盘点数量初始化
                ass.Pandian = 0;
                // 20200509 gzw add 盘点数量初始化
                if(ass.check==true){
                    //ass.Diff = ass.countid - ass.Pandian;
                    for(integer i = 0 ; i < ProductCount_Res.size();i++){
                        if(ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c){
                            if(carCodeListLose.contains(ProductCount_Res[i].Bar_Code__c)){
                                continue;
                            }else{
                                //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                                //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                                ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
                                carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
                            }
                        }
                    }
                }
            }
            //已经出库的产品
            List<Consumable_order_details2__c>  reSet1 = [SELECT Id,  Name,Consumable_Product__c,
                            Bar_Code__c,Consumable_Product__r.Name__c,
                            Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                            Bar_Code_search__c,Dealer_Info_text__c
                        FROM Consumable_order_details2__c
                        WHERE Dealer_Arrive__c = TRUE
                        AND  (Dealer_Shipment__c= TRUE
                        or  Dealer_Saled__c = TRUE)
                        AND  Dealer_Returned__c = FALSE
                        AND  Cancellation_Flag__c = FALSE
                        AND  Bar_Code__c in :carCodeListLose
                        AND Dealer_Info_text__c = :accountName
                        ORDER BY Name ];
            Map<String,Consumable_order_details2__c> needreturnMap = new Map<String,Consumable_order_details2__c>();
            for(Consumable_order_details2__c cod2 :reSet1){
                needreturnMap.put(cod2.Bar_Code__c,cod2);
            }
            // 经销商之间或者同一经销商不同工作地调货
            reSet1 = [SELECT Id,  Name,Consumable_Product__c,
                            Bar_Code__c,Consumable_Product__r.Name__c,
                            Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                            Bar_Code_search__c,Dealer_Info_text__c
                        FROM Consumable_order_details2__c
                        WHERE Dealer_Arrive__c = TRUE
                        AND  Dealer_Shipment__c= FALSE
                        AND  Dealer_Saled__c = FALSE
                        AND  Dealer_Returned__c = FALSE
                        AND  Cancellation_Flag__c = FALSE
                        AND  Bar_Code__c in :carCodeListLose
                        AND (Dealer_Info_text__c != :accountName
                            OR (Dealer_Info_text__c = :accountName
                                AND Arrive_Owner_Work_Location__c != :userWorkLocation)
                        )
                        ORDER BY Name ];
            Map<String,Consumable_order_details2__c> otherAgProMap = new Map<String,Consumable_order_details2__c>();
            for(Consumable_order_details2__c cod2 :reSet1){
                otherAgProMap.put(cod2.Bar_Code__c,cod2);
            }
            carCodeListLose.clear();
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(ass.check==true){
                    ass.Diff = ass.countid - ass.Pandian;
                    for(integer i = 0 ; i < ProductCount_Res.size();i++){
                        if(ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c){
                            if(carCodeListLose.contains(ProductCount_Res[i].Bar_Code_search__c)){
                                continue;
                            }else{
                                if(needreturnMap.containsKey(ProductCount_Res[i].Bar_Code__c)){
                                    consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'该产品未返品'));
                                    pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品未返品');
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    continue;
                                }
                                if(otherAgProMap.containsKey(ProductCount_Res[i].Bar_Code__c)){
                                    consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'该产品归属于' + otherAgProMap.get(ProductCount_Res[i].Bar_Code__c).Dealer_Info_text__c + '的库存。'));
                                    pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品归属于' + otherAgProMap.get(ProductCount_Res[i].Bar_Code__c).Dealer_Info_text__c + '的库存。');
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    continue;
                                }
                                if (ProductCount_Res[i].Isoverdue__c == 0) {
                                    consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'该产品已经过有效期,请销存。'));
                                    pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品已经过有效期,请销存。');
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    ass.Diff--;
                                    continue;
                                }
                                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                                pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                                carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                            }
                        }
                    }
                }else{
                    ass.Pandian = 0;
                    ass.Diff = 0;
                }
            }
            List<Consumable_order_details2__c> showcod2 = new List<Consumable_order_details2__c>();
            if (pandiandetailsMap.keySet().size() > 0) {
                showcod2 = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,
                                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                                Bar_Code_search__c
                            FROM Consumable_order_details2__c
                            WHERE Id in :pandiandetailsMap.keySet()
                            order by Name];
            }
            initStandardController();
            showcod2nid = cod2s();
            for (Consumable_order_details2__c cod2 : showcod2nid) {
                codPageRecords.add(new ConsumableorderdetailsInfo(cod2,pandiandetailsMap.get(cod2.Id)));
            }
            iSinventory = true;
            if(codPageRecords.size() > 0) done = true;
            consumableorderdetailsRecordserrordummy.clear();
            //pandiandetailsList = new list<Consumable_order_details2__c>();
            pandiandetailsList = [select Id, Bar_Code__c,Consumable_Product__r.Name__c,
                                    Box_Piece__c,Lose_reason__c
                                FROM Consumable_order_details2__c
                                WHERE Id in :pandiandetailsMap.keySet()
                                order by Name];
            for(Consumable_order_details2__c codDet : pandiandetailsList){
                codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
            }
            List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
            for(Consumable_order_details2__c cod2 : pandiandetailsList){
                pandiandetailsListMid.add(cod2);
                if(pandiandetailsListMid.size() == 1000){
                    pandiandetailsListShow.add(pandiandetailsListMid);
                    pandiandetailsListMid = new List<Consumable_order_details2__c>();
                }
            }
                if(pandiandetailsListMid.size() > 0){
                    pandiandetailsListShow.add(pandiandetailsListMid);
                }
                res.code = 400;
                res.status = 'fail';
                res.msg = 'barcode为空';
                return res;
                // return;
        }
        //CHAN-B7J4NB 只有一个时,盘点不到
        //init();
        //CHAN-B7J4NB
        Map<String,String> showproductIdMap = new Map<String,String>();
        for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
            showproductIdMap.put(ass.prod.Id + ass.boxPiece, ass.prod.Id + ass.boxPiece);
        }
// ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCodeListP' + BarCodeListP));
        /***************************************************************************/
        // BarCode的检索  所有在库
        reSet = [select Id,Consumable_Product__c,Consumable_Product__r.Name__c,
                        Box_Piece__c,Bar_Code_search__c,Isoverdue__c
                    from Consumable_order_details2__c
                    where Bar_Code_search__c in :BarCodeListP
                    AND Dealer_Arrive__c = true
                    AND Dealer_Shipment__c = false
                    AND Dealer_Saled__c = false
                    AND Dealer_Returned__c = false
                    AND Lose_Flag__c = false
                    AND Cancellation_Date__c = null
                    and Bar_Code__c !=null
                    AND Product_Type__c like : sqlagencyProType
                    AND Arrive_Owner_Work_Location__c =: userWorkLocation
                    AND  Dealer_Info_text__c = :accountName
                    order by Name];
        Map<String, Integer> pandianProdIdCountMap = new Map<String, Integer>();        // ProdId 単位
        // 20200509 add gzw 记录需要销存数量
        Map<String, Integer> pandianoverdueCountMap = new Map<String, Integer>();        // ProdId 単位
        // 20200509 add gzw 记录需要销存数量
        Map<String,ConsumableorderdetailsInfo> barCodeListPandianMap = new Map<String,ConsumableorderdetailsInfo>();   // 明細バーコード 単位
        //盘点到的明细
        for(Consumable_order_details2__c rs : reSet){
            //BarCodeListPandian.add(rs.Bar_Code_search__c);
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(rs.Consumable_Product__c == ass.Prod.Id && rs.Box_Piece__c == ass.boxPiece){
                    ass.check = true;
                }
            }
            barCodeListPandianMap.put(rs.Bar_Code_search__c, new ConsumableorderdetailsInfo(rs));
            if (rs.Isoverdue__c == 0) {
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs,'该产品已经过有效期,请销存。'));
                pandiandetailsMap.put(rs.Id, '该产品已经过有效期,请销存。');
                if (pandianoverdueCountMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c) == false) {
                    pandianoverdueCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, 1);
                } else {
                    pandianoverdueCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, pandianoverdueCountMap.get(rs.Consumable_Product__c + rs.Box_Piece__c) + 1);
                }
                continue;
            }
            if (pandianProdIdCountMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c) == false) {
                pandianProdIdCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, 1);
            } else {
                pandianProdIdCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, pandianProdIdCountMap.get(rs.Consumable_Product__c + rs.Box_Piece__c) + 1);
            }
        }
        // 经销商之间或者同一经销商不同工作地调货
        List<Consumable_order_details2__c> reSet1 = [SELECT Id,  Name,Consumable_Product__c,
                        Bar_Code__c,Consumable_Product__r.Name__c,Dealer_Shipment__c,Dealer_Saled__c,
                        Asset_Model_No__c,Isoverdue__c,Box_Piece__c,Dealer_Arrive__c,
                        Bar_Code_search__c,Dealer_Info_text__c
                    FROM Consumable_order_details2__c
                    WHERE (Dealer_Arrive__c = TRUE
                    or  Dealer_Shipment__c= TRUE
                    or  Dealer_Saled__c = TRUE)
                    AND  Dealer_Returned__c = FALSE
                    AND  Cancellation_Flag__c = FALSE
                    AND  Bar_Code_search__c in :BarCodeListP
                    AND (Dealer_Info_text__c != :accountName
                        OR (Dealer_Info_text__c = :accountName
                            AND Arrive_Owner_Work_Location__c != :userWorkLocation)
                    )
                    ORDER BY Name ];
        Map<String,Consumable_order_details2__c> otherAgProMap = new Map<String,Consumable_order_details2__c>();
        for(Consumable_order_details2__c cod2 :reSet1){
            otherAgProMap.put(cod2.Bar_Code__c,cod2);
        }
        // 需要入库的产品
        for(Consumable_order_details2__c cod2 : reSet1){
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(cod2.Consumable_Product__c == ass.Prod.Id && cod2.Box_Piece__c == ass.boxPiece){
                    ass.check = true;
                }
            }
            if(!showproductIdMap.containsKey(cod2.Consumable_product__c + cod2.Box_Piece__c)){
                reFindProductList.add(cod2);
                proIdNotinpage.put(cod2.Consumable_Product__c, cod2.Box_Piece__c);
            }
            if(!barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c)
                && otherAgProMap.containsKey(cod2.Bar_Code__c)
                && (otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == true
                || otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == true) ){
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(cod2,'无此产品的库存,请入库。'));
                pandiandetailsMap.put(cod2.Id, '无此产品的库存,请入库。');
            }
        }
        //寻回明细
        List<Consumable_order_details2__c> productAdjust = new List<Consumable_order_details2__c>();
        productAdjust = [select Id,  Name,Consumable_Product__c,
                            Bar_Code__c,Consumable_Product__r.Name__c,Lose_reason__c,
                            Asset_Model_No__c,Box_Piece__c,Bar_Code_search__c,Isoverdue__c
                        from Consumable_order_details2__c
                        where Bar_Code_search__c in :BarCodeListP
                          and Bar_Code__c !=null
                          and Lose_Flag__c = true
                          AND Product_Type__c like : sqlagencyProType
                          AND  Dealer_Info_text__c = :accountName
                          AND Arrive_Owner_Work_Location__c =: userWorkLocation
                        order by Name];
        for (Consumable_order_details2__c rs : productAdjust){
            // 过期库存销存 20200427 gzw add srart
            if (rs.Isoverdue__c == 0 || rs.Lose_reason__c == '过期库存销存' ) {
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs,'过期或者销存产品,无法寻回入库'));
                pandiandetailsMap.put(rs.Id, '过期或者销存产品,无法寻回入库');
                carCodeListLose.add(rs.Bar_Code_search__c);
                continue;
            }
            // 过期库存销存 20200427 gzw add end
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(rs.Consumable_Product__c == ass.Prod.Id && rs.Box_Piece__c == ass.boxPiece){
                    ass.check = true;
                }
            }
            if(!showproductIdMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c)){
                reFindProductList.add(rs);
                proIdNotinpage.put(rs.Consumable_Product__c, rs.Box_Piece__c);
            }
            if(barCodeListAdjustMap.containsKey(rs.Bar_Code_search__c)){
                continue;
            }else{
                barCodeListAdjustMap.put(rs.Bar_Code_search__c, new ConsumableorderdetailsInfo(rs));
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs,'寻回'));
                pandiandetailsMap.put(rs.Id, '寻回');
                consumableorderdetailsRecordsAdjust.add(new ConsumableorderdetailsInfo(rs));
            }
        }
        if(reFindProductList.size() > 0){
            Map<String,Product2__c> midMap = new Map<String,Product2__c>();
            List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
            Map<String,ConsumableorderdetailsInfo> newMidBoxMap = new Map<String,ConsumableorderdetailsInfo>();
            Map<String,ConsumableorderdetailsInfo> newMidPieceMap = new Map<String,ConsumableorderdetailsInfo>();
            List<Product2__c> product_Refind = [select Id, Name,Name__c,SFDA_Status__c,Packing_list_manual__c,Asset_Model_No__c
                                    from Product2__c
                                    WHERE Id in :proIdNotinpage.keySet()];
            for(Product2__c pro : product_Refind){
                midMap.put(pro.Id, pro);
            }
            for(Integer i = 0 ; i< reFindProductList.size();i++){
                //然后循环CountDel做Box和piece2个map
                if(MidMap.containsKey(reFindProductList[i].Consumable_Product__c) && reFindProductList[i].Box_Piece__c == '盒'){
                    if(newMidBoxMap.containsKey(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c)){
                        ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c).clone();
                        Jstage.countid = 0 ;
                        if(reFindProductList[i].Isoverdue__c == 1){
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidBoxMap.put(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c, Jstage);
}else{
                                            ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(reFindProductList[i].Consumable_Product__c));
                        Jstage.countid = 0 ;
                        if(reFindProductList[i].Isoverdue__c == 1){
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidBoxMap.put(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c, Jstage);
                    }
                }else if(MidMap.containsKey(reFindProductList[i].Consumable_Product__c) && reFindProductList[i].Box_Piece__c == '个'){
                    if(newMidPieceMap.containsKey(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c)){
                        ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(reFindProductList[i].Consumable_product__c+reFindProductList[i].Box_Piece__c).clone();
                        Jstage.countid = 0 ;
                        if(reFindProductList[i].Isoverdue__c == 1){
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidPieceMap.put(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c, Jstage);
                    }else{
                        ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(reFindProductList[i].Consumable_Product__c));
                        Jstage.countid = 0 ;
                        if(reFindProductList[i].Isoverdue__c == 1){
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidPieceMap.put(reFindProductList[i].Consumable_Product__c+reFindProductList[i].Box_Piece__c, Jstage);
                    }
                }
            }
            for(ConsumableorderdetailsInfo bss : newMidBoxMap.values()){
                bss.check = true;
                bss.overlimitCount = bss.countid - bss.limitCount;
                boxRecords.add(bss);
            }
            boxRecords.sort();
            for(ConsumableorderdetailsInfo bss : newMidPieceMap.values()){
                bss.check = true;
                bss.overlimitCount = bss.countid - bss.limitCount;
            }
            for(ConsumableorderdetailsInfo bss : boxRecords){
                consumableorderdetailsRecords.add(bss);
                if(newMidPieceMap.containsKey(bss.Prod.Id + '个')){
                    consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
                    //newMidPieceMap移除已经添加的Piece
                    newMidPieceMap.remove(bss.Prod.Id + '个');
                }
            }
            for(ConsumableorderdetailsInfo bss : newMidPieceMap.values()){
                consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
            }
        }
        //先取出未盘点到的产品
        for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
            if(ass.check == true){
                for(integer i = 0 ; i<ProductCount_Res.size();i++){
                    if(ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c){
                        if(barCodeListPandianMap.get(ProductCount_Res[i].Bar_Code_search__c) != null){
                            continue;
                        }else{
                            carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
                            ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
                            //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                            //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                        }
                    }
                }
            }
        }
        //已经出库的产品
        List<Consumable_order_details2__c>  reSet2 = [SELECT Id,  Name,Consumable_Product__c,
                        Bar_Code__c,Consumable_Product__r.Name__c,
                        Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                        Bar_Code_search__c,Dealer_Info_text__c
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Arrive__c = TRUE
                    AND  (Dealer_Shipment__c= TRUE
                    or  Dealer_Saled__c = TRUE)
                    AND  Dealer_Returned__c = FALSE
                    AND  Cancellation_Flag__c = FALSE
                    AND  Bar_Code_search__c in :BarCodeListP
                    AND Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        Map<String,Consumable_order_details2__c> needreturnMap = new Map<String,Consumable_order_details2__c>();
        for(Consumable_order_details2__c cod2 :reSet2){
            needreturnMap.put(cod2.Bar_Code__c,cod2);
        }
        //// 经销商之间或者同一经销商不同工作地调货
        //List<Consumable_order_details2__c> reSet1 = [SELECT Id,  Name,Consumable_Product__c,
        //                Bar_Code__c,Consumable_Product__r.Name__c,Dealer_Shipment__c,Dealer_Saled__c,
        //                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,Dealer_Arrive__c,
        //                Bar_Code_search__c,Dealer_Info_text__c
        //            FROM Consumable_order_details2__c
        //            WHERE (Dealer_Arrive__c = TRUE
        //            or  Dealer_Shipment__c= TRUE
        //            or  Dealer_Saled__c = TRUE)
        //            AND  Dealer_Returned__c = FALSE
        //            AND  Cancellation_Flag__c = FALSE
        //            AND  Bar_Code_search__c in :BarCodeListP
        //            AND (Dealer_Info_text__c != :accountName
        //                OR (Dealer_Info_text__c = :accountName
        //                    AND Arrive_Owner_Work_Location__c != :userWorkLocation)
        //            )
        //            ORDER BY Name ];
        //Map<String,Consumable_order_details2__c> otherAgProMap = new Map<String,Consumable_order_details2__c>();
        //for(Consumable_order_details2__c cod2 :reSet1){
        //    otherAgProMap.put(cod2.Bar_Code__c,cod2);
        //}
        carCodeListLose.clear();
        //未盘点到的产品
        for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
            if(ass.check == true){
                for(integer i = 0 ; i<ProductCount_Res.size();i++){
                    if(ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c){
                        if(barCodeListPandianMap.containsKey(ProductCount_Res[i].Bar_Code_search__c)){
                            continue;
                        }
                        if (ProductCount_Res[i].Isoverdue__c == 0) {
                            consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'该产品已经过有效期,请销存。'));
                            pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品已经过有效期,请销存。');
                            if (pandianoverdueCountMap.containsKey(ProductCount_Res[i].Consumable_product__c + ProductCount_Res[i].Box_Piece__c) == false) {
                                pandianoverdueCountMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, 1);
                            } else {
                                pandianoverdueCountMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, pandianoverdueCountMap.get(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c) + 1);
                            }
                            continue;
                        }
                        consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                        pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                    }
                }
                // 同时存在其他经销商库存产品
                for(Consumable_order_details2__c cod2 : reSet1){
                    if(cod2.Consumable_Product__c == ass.Prod.Id && ass.boxPiece == cod2.Box_Piece__c){
                        if(barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c)
                            && otherAgProMap.containsKey(cod2.Bar_Code__c)
                            && otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == false
                            && otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == false ){
                            consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(cod2,'该产品归属于' + otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c + '的库存。'));
                            pandiandetailsMap.put(cod2.Id, '该产品归属于' + otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c + '的库存。');
                            continue;
                        }
                    }
                }
                // 需要返品的产品
                for(Consumable_order_details2__c cod2 : reSet2){
                    if(cod2.Consumable_Product__c == ass.Prod.Id && ass.boxPiece == cod2.Box_Piece__c){
                        if(needreturnMap.containsKey(cod2.Bar_Code__c)){
                            consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(cod2,'该产品目前出库状态,请返品。'));
                            pandiandetailsMap.put(cod2.Id, '该产品目前出库状态,请返品。');
                            continue;
                        }
                    }
                }
            }
        }
        //更新主明细单
        if(barCodeListPandianMap.size() > 0){
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(ass.check == true){
                    integer countSum = 0;
                    if (pandianProdIdCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        countSum = pandianProdIdCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    integer overdueSum = 0;
                    if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    ass.Pandian = countSum;
                    ass.Diff = ass.countid - countSum - overdueSum;
                    ass.refind = 0;
                }
            }
        }else{
            for(ConsumableorderdetailsInfo ass : consumableorderdetailsRecords){
                if(ass.check == true){
                    integer overdueSum = 0;
                    if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    ass.Diff = ass.countid - ass.Pandian - overdueSum;
                }
            }
        }
        //寻回做成
        for(ConsumableorderdetailsInfo ass :consumableorderdetailsRecords){
            for(ConsumableorderdetailsInfo adjust :consumableorderdetailsRecordsAdjust){
                if(ass.Prod.Name__c == adjust.Prod.Name__c && ass.boxPiece == adjust.orderdetails2.Box_Piece__c){
                    if(reFindProduct.containsKey(adjust.orderdetails2.Bar_Code_search__c)){
                        continue;
                    }else {
                        ass.Pandian ++;
                        ass.refind ++;
                        reFindProduct.put(adjust.orderdetails2.Bar_Code_search__c,adjust.orderdetails2.Bar_Code_search__c);
                    }
                }
            }
        }
        if (pandiandetailsMap.keySet().size() > 0) {
            List<Consumable_order_details2__c> showcod2 = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,
                                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                                Bar_Code_search__c
                            FROM Consumable_order_details2__c
                            WHERE Id in :pandiandetailsMap.keySet()
                            order by Name];
            initStandardController();
            showcod2nid = cod2s();
        }
        for (Consumable_order_details2__c cod2 : showcod2nid) {
            codPageRecords.add(new ConsumableorderdetailsInfo(cod2,pandiandetailsMap.get(cod2.Id)));
        }
        if(codPageRecords.size() > 0) done = true;
        iSinventory = true;
        consumableorderdetailsRecordserrordummy.clear();
        pandiandetailsList = [select Id, Bar_Code__c,Consumable_Product__r.Name__c,
                                Box_Piece__c,Lose_reason__c
                            FROM Consumable_order_details2__c
                            WHERE Id in :pandiandetailsMap.keySet()
                            order by Name];
        for(Consumable_order_details2__c codDet : pandiandetailsList){
            codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
        }
        List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
        for(Consumable_order_details2__c cod2 : pandiandetailsList){
            pandiandetailsListMid.add(cod2);
            if(pandiandetailsListMid.size() == 1000){
                pandiandetailsListShow.add(pandiandetailsListMid);
                pandiandetailsListMid = new List<Consumable_order_details2__c>();
            }
        }
            if(pandiandetailsListMid.size() > 0){
                pandiandetailsListShow.add(pandiandetailsListMid);
            }
            System.debug('=====>codPageRecords2'+codPageRecords);
            System.debug('=====>consumableorderdetailsRecords'+consumableorderdetailsRecords);
            data.put('codPageRecords',JSON.serialize(codPageRecords));
            data.put('consumableorderdetailsRecords',JSON.serialize(consumableorderdetailsRecords));
            System.debug('iSinventory===>'+iSinventory);
            data.put('iSinventory',JSON.serialize(iSinventory));
            System.debug('pandiandetailsMap===>'+pandiandetailsMap);
            data.put('pandiandetailsMap',JSON.serialize(pandiandetailsMap));
            res.code = 200;
            res.status = 'Sucess';
            return res;
    }
    public static ResponseBodyLWC saveConfirm(Boolean iSinventory,String consumableorderdetailsRecordsLWC) {
        save(iSinventory,consumableorderdetailsRecordsLWC);
        // LexInventoryController.oinoi
        return null;
    }
    // 保存按钮
    @AuraEnabled
    public static ResponseBodyLWC save(Boolean iSinventory,String consumableorderdetailsRecordsLWC) {
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>)JSON.deserialize(consumableorderdetailsRecordsLWC,List<ConsumableorderdetailsInfo>.class);
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        // 跳过明细2不必要更新
        StaticParameter.EscapeConsumableOrderDetail2Trigger = true;
        if(!iSinventory){
            return new ResponseBodyLWC('Error',500, '请先点【BarCode录入】', '');
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请先点【BarCode录入】'));
            // return null;
        }
        integer Lo = 0;
        for(ConsumableorderdetailsInfo header : consumableorderdetailsRecords){
            if(header.check==true){
                Lo++;
            }
        }
        if(Lo == 0){
            iSinventory = false;
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请选择要盘点的明细'));
            // return null;
            return new ResponseBodyLWC('Error',500, '请选择要盘点的明细', '');
        }
        for(ConsumableorderdetailsInfo header : consumableorderdetailsRecords){
            if(header.check==true){
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '  '+header.prod.Name__c));
                //return null;
                if((header.DiffReason == ''||header.DiffReason ==null)&&header.Diff>0){
                    return new ResponseBodyLWC('Error',500, header.prod.Name__c + '请输入差异原因', '');
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '请输入差异原因'));
                    // return null;
                }else if ((header.DiffReason != ''&&header.DiffReason !=null)&&header.Diff==0){
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '无丢失产品,不需要填写差异原因'));
                    // return null;
                    return new ResponseBodyLWC('Error',500, header.prod.Name__c + '无丢失产品,不需要填写差异原因', '');
                }
            }
        }
        Integer orderDetNo = 1;
        Savepoint sp = Database.setSavepoint();
        Consumable_order__c Po = new Consumable_order__c();
        Po.Name ='*';
        Po.Order_status__c = '批准';
        Po.Inventory_date__c = Date.today();
        Po.Order_type__c = '盘点';
        Po.Dealer_Info__c = accountid;
        Po.Order_ProType__c = agencyProType;
        Po.RecordTypeid = System.Label.RT_ConOrder_Inventory;
        try{
            insert  Po;
            eSetId = Po.id;
            List<Consumable_order__c> Consumable_order = [SELECT Name FROM Consumable_order__c WHERE id =:Po.id];
            List<Consumable_orderdetails__c> InsList = New List<Consumable_orderdetails__c>();
            List<Consumable_order_details2__c> InsListUp = New List<Consumable_order_details2__c>();
            List<Consumable_order_details2__c> updListAdjust = New List<Consumable_order_details2__c>();
            Map<String,String> ErrorName = new Map<String,String>();
            Map<String,Boolean> CheckTF = new Map<String,Boolean>();
            for(ConsumableorderdetailsInfo header : consumableorderdetailsRecords){
                if(header.check==true){
                    Consumable_orderdetails__c insPan = new Consumable_orderdetails__c();
                    insPan = new Consumable_orderdetails__c();
                    String str = string.valueOf(orderDetNo);
                    if(str.length() == 1){
                    str = '0' + str;
                    }
                    insPan.Name = Consumable_order[0].Name + '-'+ str;
                    insPan.Consumable_Product__c = header.ProdId;
                    ErrorName.put(insPan.Consumable_Product__c,header.DiffReason);
                    CheckTF.put(insPan.Consumable_product__c,true);
                    insPan.Consumable_order__c = Po.Id;
                    insPan.Lose_reason__c = header.DiffReason;
                    insPan.Diff__c = header.Diff;
                    insPan.Product_Refind__c = header.refind;
                    insPan.inventory_sum__c = header.Pandian;
                    insPan.Count_Sum__c = header.countid;
                    insPan.RecordTypeId = System.Label.RT_ConOrderDetail1_Inventory;
                    orderDetNo ++;
                    InsList.add(insPan);
                }
            }
            if(InsList.size()>0){
                insert InsList;
            }
            List<Consumable_order_details2__c> showcod2 = [select Id,  Name,Consumable_Product__c,
                                Bar_Code__c,Consumable_Product__r.Name__c,
                                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,
                                Bar_Code_search__c
                            FROM Consumable_order_details2__c
                            WHERE Id in :pandiandetailsMap.keySet()
                            order by Name];
            for(Consumable_order_details2__c cod : showcod2){
                Consumable_order_details2__c InsDetail = new Consumable_order_details2__c();
                InsDetail.Id =cod.Id;
                InsDetail.Consumable_Inventory_order__c = po.Id;
                InsDetail.Inventory_date__c = Date.today();
                // 20210224 gzw CHAN-BXF3PG start
                // if(pandiandetailsMap.get(cod.Id) == '丢失' ){
                if(pandiandetailsMap.get(cod.Id) == '丢失' && CheckTF.containsKey(cod.Consumable_product__c)){
                // 20210224 gzw CHAN-BXF3PG end
                    InsDetail.Lose_reason__c = ErrorName.get(cod.Consumable_product__c);
                    InsDetail.Lose_Flag__c = true;
                }else if(pandiandetailsMap.get(cod.Id) == '寻回' ){
                    InsDetail.Lose_reason__c = '';
                    InsDetail.Lose_Flag__c = false;
                }else{
                    continue;
                }
                InsListUp.add(InsDetail);
            }
            for(Consumable_order_details2__c rs : reSet){
                rs.Inventory_date__c = Date.today();
            }
            if(reSet.size() > 0){
                update reSet;
            }
            if(InsListUp.size()>0){
                ControllerUtil.updateOrderDetailsSatus(InsListUp);// Commented By DTT - Li Jun for testing 20230407
            }
        }catch (Exception ex) {
            Database.rollback(sp);
            ApexPages.addMessages(ex);
            return null;
        }
        // FIXME impliment BarCodeListAdjust
        /************************************************************************************************/
        // return ProS();
        data.put('eSetId',eSetId);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    //盘点一览
    public PageReference ProS() {
        // 返回盘点一览
        PageReference ref = new Pagereference('/apex/InventoryList?eSetId=' + eSetId);
        ref.setRedirect(true);
        return ref;
    }
    //CSV出力
    public PageReference doClick() {
        Pagereference pr = page.InventoryCSV;
        return pr;
    }
    // Data Bean
    class ConsumableorderdetailsInfo implements Comparable {
        public Boolean check { get; set; }
        public Consumable_orderdetails__c orderdetails1 { get; set; }
        public Consumable_order_details2__c orderdetails2 { get; set; }
        public Product2__c Prod { get; set; }
        public Decimal countid { get; set; }
        public String ProdId{get;set;}
        public Decimal Pandian { get; set; }
        public Decimal Diff { get; set; }
        public Decimal refind { get; set; }
        public String DiffReason { get; set; }
        public Boolean canSelect { get; set; }
        public Boolean sortBy { get; set; }
        public Decimal limitCount { get; set; }
        public Decimal overlimitCount { get; set; }
        public String boxPiece { get; set; }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e,string str) {
            orderdetails2 = e;
            Prod = e.Consumable_Product__r;
            //e.Lose_reason__c = str;
            DiffReason = str;
        }
        // 已存在消耗品明细用
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            check = false;
            orderdetails2 = e;
            Prod = e.Consumable_Product__r;
            canSelect = true;
        }
        public ConsumableorderdetailsInfo(Product2__c e) {
            check = false;
            //orderdetails1 = new Consumable_orderdetails__c();
            Prod = e;
            canSelect = true;
            ProdId = string.valueOf(e.id);
            countid =0;
            Pandian = 0;
            refind = 0;
            Diff = 0;
            limitCount = 0;
            overlimitCount = 0;
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            ConsumableorderdetailsInfo compareToesd =(ConsumableorderdetailsInfo)compareTo;
            Integer returnValue = 0;
            if (countid  > compareToesd.countid ) {
                returnValue = -1;
            } else if (countid  < compareToesd.countid ) {
                returnValue = 1;
            }
            return returnValue;
        }
    }
}
force-app/main/default/classes/LexInventoryController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexSummonsCreatController.cls
New file
@@ -0,0 +1,2400 @@
public without sharing class LexSummonsCreatController {
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    /*****************検索用******************/
    //经销商用户产品分类(ET、ENG)
    @AuraEnabled
    public static String agencyProType { get; set; }
    public static Consumable_order__c coc { get; set; } // 画view用, 可能是 出库指示单, 也有可能是到货单, 也有可能 空instance
    public static User localuser { get; set; }
    public static String category1 { get; set; }
    public static Integer noOfRecords { get; set; }
    //public String category_Goods {get ; set;}
    public static Boolean cansee { get; set; }
    public static Integer size { get; set; }
    //经销商定价查看权限
    //public static ApexPages.StandardSetController setCon { get; set; }
    public static Boolean dealerPricesee { get; set; }
    /*****************画面初始化用********************************/
    /******20160313_add**************/
    public static String IdCheck { get; set; }
    public static Boolean editAble { get; set; }
    public static String statusEdit { get; set; }
    public static String alertMessage { get; set; }
    public static String SearchDone { get; set; }
    public static List<String> zaikuId = new List<String>();
    public static List<String> orderzaikuId = new List<String>();
    //附件
    public static List<ConsumableorderdetailsInfo> attachmentRecoeds { get; set; }
    public static Boolean getExistarrive() {
        return (coc.Arrive_Order__c != null);
    }
    //总价格计算结果
    @AuraEnabled
    public static Decimal sumPrice { get; set; }
    /******20160317_add**************/
    public static String SummonsFlag { get; set; } // 新規: hidden, 更新: visible
    public static String category5 { get; set; }
    public static String category4 { get; set; }
    public static String category3 { get; set; }
    public static List<SelectOption> categoryOptionList { get; set; }
    public static List<SelectOption> category4OptionList { get; set; }
    public static List<SelectOption> category5OptionList { get; set; }
    @AuraEnabled
    public static Map<String,String> categoryOptionMap { get; set; }
    @AuraEnabled
    public static Map<String,String> category4OptionMap { get; set; }
    @AuraEnabled
    public static Map<String,String> category5OptionMap { get; set; }
    /*****************画面表示Bean******************/
    private static List<ConsumableorderdetailsInfo> consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
    @AuraEnabled
    public static List<ConsumableorderdetailsInfo> pageRecords { get; set; }
    public static List<ConsumableorderdetailsInfoLwc> pageRecordsLwc { get; set; }
    //public List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview { get; set; }
    public static List<ConsumableorderdetailsInfo> consumableorderdetails2Records { get; set; }
    public static List<Consumable_order__c> consumableInvoiceRecords { get; set; }
    private static List<ConsumableorderdetailsInfo> consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
    private static List<Attachment> attachmentinfo = new List<Attachment>();
    public static List<Product2__c> product2Selected = new List<Product2__c>();
    //选择产品size
    public static Integer consumableorderdetailsCount {
        get {
            return pageRecords == null ? 0 : pageRecords.size();
        }
    }
    //消耗品明细2数量
    public static Integer consumableorderdetails2Count {
        get {
            return consumableorderdetails2Records == null ? 0 : consumableorderdetails2Records.size();
        }
    }
    //订货单号
    public static String consumableorderId {
        get {
            return (coc.Arrive_Order__c);
        }
    }
    //选择框
    public static List<SelectOption> provinceOpts { get; set; }
    @AuraEnabled
    public static Map<String, String> provinceOptsMap { get; set; }
    public static String SecondDealer { get; set; }
    //public List<SelectOption> orderForHospitalOpts { get; set; }
    public static String HospitalInfo { get; set; }
    public static String HospitalName { get; set; }
    public static Boolean EditDelCommitBtnDisabled { get; private set; }
    public static Boolean saveBtnDisabled { get; private set; }
    public static Boolean SorderBtnDisabled { get; private set; }
    // 保存后动作: 1.检索 2.排序
    public static String sortKey { get; set; }
    public static String preSortKey { get; private set; }
    public static Boolean sortOrderAsc { get; private set; }
    public static String[] sortOrder { get; private set; }
    private static String[] columus = new List<String>{
        'Consumable_Product__r.Name',
        'Consumable_Product__r.Asset_Model_No__c',
        'Consumable_Product__r.Intra_Trade_List_RMB__c',
        '',
        '',
        'Consumable_Product__r.Category3__c',
        'Consumable_Product__r.Category4__c',
        'Consumable_Product__r.Category5__c'
    };
    private static String[] columus_no = new List<String>{
        'Product2__c.Name',
        'Product2__c.Asset_Model_No__c',
        'Product2__c.Intra_Trade_List_RMB__c',
        '',
        '',
        'Category3__c',
        'Category4__c',
        'Category5__c'
    };
    //到货单明细1
    private static List<Consumable_Orderdetails__c> consumableorderdetailsSelected = new List<Consumable_Orderdetails__c>();
    //到货单明细2
    private static List<Consumable_order_details2__c> consumablearriveproductdetailsSelected = new List<Consumable_order_details2__c>();
    //出库单明细2
    private static List<Consumable_order_details2__c> consumableorderdetails2RecordsList = new List<Consumable_order_details2__c>();
    /*****************ソート時再検索条件(画面からの入力条件を無視するため)******************/
    //private String cate1ForSort = null;
    private static String accountid = null;
    @AuraEnabled
    public static String accountName { get; set; }
    // 产品 ID
    private static String ESetId = '';
    @AuraEnabled
    public static String arriveorder { get; set; }
    private static String userId = '';
    //private String[] ProidListAll = new String[]{};
    // 登录者工作地
    @AuraEnabled
    public static String userWorkLocation { get; set; }
    //add by rentx 2021-01-29
    public static List<SelectOption> outOutPatternOptionList { get; set; }
    @AuraEnabled
    public static Map<String, String> outOutPatternOptionMap { get; set; }
    public static String outOutPattern { get; set; }
    public static Boolean hasHos { get; set; }
    @AuraEnabled
    public static Boolean hasHosPro { get; set; }
    private static Map<String, String> HosProMap = new Map<String, String>();
    //add by rentx 2021-01-29
    public LexSummonsCreatController() {
        System.debug('LexSummonsCreatController');
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        // ESetId = ApexPages.currentPage().getParameters().get('esetId');
        // arriveorder = ApexPages.currentPage().getParameters().get('arriveorder');
        // statusEdit = ApexPages.currentPage().getParameters().get('KeyWords');
        provinceOpts = new List<SelectOption>();
        provinceOptsMap = new Map<String, String>();
        pageRecords = new List<ConsumableorderdetailsInfo>();
        consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
        attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
        consumableorderdetails2Records = new List<ConsumableorderdetailsInfo>();
        consumableInvoiceRecords = new List<Consumable_order__c>();
        categoryOptionList = new List<SelectOption>();
        category4OptionList = new List<SelectOption>();
        category5OptionList = new List<SelectOption>();
        categoryOptionMap = new Map<String,String>();
        category4OptionMap = new Map<String,String>();
        category5OptionMap = new Map<String,String>();
        outOutPatternOptionMap = new Map<String, String>();
        outOutPatternOptionMap.put('', '-无-');
        outOutPatternOptionMap.put('ishos', '医院特价产品');
        outOutPatternOptionMap.put('nothos', '非医院特价产品');
        outOutPatternOptionList.add(new SelectOption('', '-无-'));
        outOutPatternOptionList.add(new SelectOption('ishos', '医院特价产品'));
        outOutPatternOptionList.add(new SelectOption('nothos', '非医院特价产品'));
        HospitalName = '';
    }
    public static void firstInit(String ESetidJs){
        System.debug('enter firstInit');
        ESetid = ESetidJs;
        System.debug('ESetid = ' + ESetid);
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        provinceOpts = new List<SelectOption>();
        provinceOptsMap = new Map<String, String>();
        pageRecords = new List<ConsumableorderdetailsInfo>();
        consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
        attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
        consumableorderdetails2Records = new List<ConsumableorderdetailsInfo>();
        consumableInvoiceRecords = new List<Consumable_order__c>();
        categoryOptionList = new List<SelectOption>();
        category4OptionList = new List<SelectOption>();
        category5OptionList = new List<SelectOption>();
        categoryOptionMap = new Map<String,String>();
        category4OptionMap = new Map<String,String>();
        category5OptionMap = new Map<String,String>();
        outOutPatternOptionMap = new Map<String, String>();
        outOutPatternOptionMap.put('', '-无-');
        outOutPatternOptionMap.put('ishos', '医院特价产品');
        outOutPatternOptionMap.put('nothos', '非医院特价产品');
        // outOutPatternOptionList.add(new SelectOption('', '-无-'));
        // outOutPatternOptionList.add(new SelectOption('ishos', '医院特价产品'));
        // outOutPatternOptionList.add(new SelectOption('nothos', '非医院特价产品'));
        HospitalName = '';
    }
    // 画面初始化
    @AuraEnabled
    public static ResponseBodyLWC init(String ESetidJs) {
        // try {
        firstInit(ESetidJs);
        arriveorder = '';
        HospitalName = '';
        provinceOpts = new List<SelectOption>();
        provinceOptsMap = new Map<String, String>();
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        sortKey = '1';
        preSortKey = '1';
        sortOrderAsc = false;
        sortOrder = new String[8];
        sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
        //cate1ForSort = '';
        sumPrice = 0;
        IdCheck = EsetId;
        if (ESetId != null && ESetId != '' && (statusEdit == '' || statusEdit == null)) {
            editAble = false;
        } else if ((ESetId == null || ESetId == '') && (statusEdit == '' || statusEdit == null)) {
            editAble = true;
        } else if (ESetId != null && ESetId != '' && statusEdit != '' && statusEdit != null) {
            editAble = true;
        }
        userId = UserInfo.getUserId();
        localuser = [SELECT id, State_Hospital__c FROM User WHERE id = :UserInfo.getUserId()];
        //userId = '00510000005QO75';
        user Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :userId];
        accountid = Useracc.accountid;
        userWorkLocation = Useracc.Work_Location__c;
        agencyProType = Useracc.UserPro_Type__c;
        if (String.isBlank(Useracc.UserPro_Type__c)) {
            agencyProType = 'ET';
        }
        Account accountInfo = [SELECT Name FROM account WHERE id = :accountid];
        accountName = accountInfo.Name;
        //coc.Order_date__c = Date.today();
        list<Dealer_elationship__c> Dealerelationship = new List<Dealer_elationship__c>();
        Dealerelationship = [
            SELECT Dealer_subordinate__c, Dealer_subordinate__r.Name
            FROM Dealer_elationship__c
            WHERE Dealer_principal__c = :accountid
        ];
        List<Agency_Hospital_Link__c> AgencyHospitalLink = new List<Agency_Hospital_Link__c>();
        AgencyHospitalLink = [SELECT Id, Hospital__c, Hospital__r.Name FROM Agency_Hospital_Link__c WHERE Agency__c = :accountid];
        //add by rentx 2021-3-1 start
        //判断当前经销商下是否有特价医院
        List<hospitalprice__c> hlist = [SELECT id, product__c FROM hospitalprice__c WHERE account__c = :accountid];
        if (hlist == null || hlist.size() == 0) {
            hasHos = false;
        } else {
            for (hospitalprice__c hp : hlist) {
                HosProMap.put(hp.product__c, '');
            }
            hasHos = true;
        }
        //add by rentx 2021-3-1 end
        saveBtnDisabled = false;
        SorderBtnDisabled = false;
        String sqlagencyProType = '%' + agencyProType + '%';
        coc = new Consumable_order__c();
        consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
        Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
        //add by rentx 2021-01-29
        Map<String, ConsumableorderdetailsInfo> MidMap2 = new Map<String, ConsumableorderdetailsInfo>();
        //add by rentx 2021-01-29
        List<AggregateResult> orderdetailCount = [
            SELECT count(id), Consumable_Product__c cpc, Box_Piece__c
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Cancellation_Flag__c = FALSE
                AND Bar_Code__c != NULL
                AND Isoverdue__c = 1
                AND Product_Type__c LIKE :sqlagencyProType
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
            GROUP BY Consumable_Product__c, Box_Piece__c
        ];
        for (AggregateResult orderdetail : orderdetailCount) {
            zaikuId.add(String.valueOf(orderdetail.get('cpc')));
        }
        List<Consumable_order_details2__c> CountDel = [
            SELECT
                Id,
                Bar_Code__c,
                Name,
                Inventory_date__c,
                Consumable_Product__c,
                Consumable_Product__r.Asset_Model_No__c,
                Recordtypeid,
                Box_Piece__c,
                ProductPacking_list_manual__c,
                //add by rentx 2020-11-27 start
                hospitalSpecialOffer__c
            //add by rentx 2020-11-27 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Cancellation_Flag__c = FALSE
                AND Bar_Code__c != NULL
                AND Isoverdue__c = 1
                AND Product_Type__c LIKE :sqlagencyProType
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND Dealer_Info_text__c = :accountName
        ];
        // 新規
        if (ESetId == null || ESetId == '') {
            SummonsFlag = 'hidden';
            String msoql = makeSoqlinventory();
            initStandardController(msoql);
            product2Selected = Database.query(msoql);
            //product2Selected = product2s();
            if (String.isBlank(arriveorder)) {
                EditDelCommitBtnDisabled = true;
                for (Integer i = 0; i < product2Selected.size(); i++) {
                    MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
                }
                for (Integer i = 0; i < CountDel.size(); i++) {
                    String str = '';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        str = 'isHos';
                    } else {
                        str = 'notHos';
                    }
                    //明细2对应的产品存在于MidMap中
                    if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
                        //设置map中key的后缀 用于区分医院特价和非医院特价
                        if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
                            ConsumableorderdetailsInfo Jstage = MidMap2.get(CountDel[i].Consumable_Product__c + str);
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        } else {
                            //midmap2中没有对应的产品
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c).clone();
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        }
                    }
                    /*//然后循环CountDel去修改map里的allnumber
                        if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c);
                            Jstage.allnumber = Jstage.allnumber+1 ;
                            if(CountDel[i].Box_Piece__c == '盒'){
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            }else if(CountDel[i].Box_Piece__c == '个'){
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            }else{
                                Jstage.hospitalSpecialOffer = false;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap.put(CountDel[i].Consumable_Product__c+str, Jstage);
                        }*/
                }
                //update by rentx 2021-01-29 end
                //再把map里的值从新赋给ConsumableorderdetailsRecords
                //update by rentx 2021-01-29
                // for(ConsumableorderdetailsInfo bss : MidMap.values()){
                for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
                    //update by rentx 2021-01-29
                    //if(bss.allnumber>0){
                    bss.packinglist = Integer.valueOf(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    consumableorderdetailsSelectRecords.add(bss);
                    //}
                }
                Integer ishosnum = 0;
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords) {
                    ass.sortBy = sortOrderAsc;
                    //add by rentx 2021-3-10
                    if (ass.hospitalSpecialOffer) {
                        ishosnum = ishosnum + 1;
                    }
                }
                if (ishosnum > 0) {
                    hasHosPro = true;
                } else {
                    hasHosPro = false;
                }
                consumableorderdetailsSelectRecords.sort();
                //add by rentx
                noOfRecords = consumableorderdetailsSelectRecords.size();
                //add by rentx
                System.debug('makepagerecords1');
                makepagerecords();
                //listCut();
            } else {
                if (statusEdit == '' || statusEdit == null) {
                    editAble = false;
                } else if (statusEdit != '' && statusEdit != null) {
                    editAble = true;
                }
                // upadte start by vivek 2019-7-15
                // coc = [SELECT Id,Name,Summons_Order_type__c,SummonsStatus_c__c,Order_ForDealerText__c,
                //             Dealer_Info__c,Order_ForDealer__c,Order_ForDealer__r.Name,Order_ForDealerTextID__c,
                //             Order_ForHospital__c,SummonsForDirction__c,Order_date__c,Arrive_Order__c,
                //             Order_status__c,Shipment_total_amount__c,Offers_Price__c,
                //             Billed_Status__c,ShipmentAccount__c,Order_Dealer_Info__c,Order_ForCustomerText__c,ConInvoice_Code__c,Onchange_order__c
                //         FROM Consumable_order__c
                //         WHERE Id =:arriveorder AND Order_Owner_WorkLocal__c =: userWorkLocation
                //         AND recordtypeid = :System.Label.RT_ConOrder_Arrive];
                coc = [
                    SELECT
                        Id,
                        Name,
                        Summons_Order_type__c,
                        NoConfirmedPrice__c,
                        SummonsStatus_c__c,
                        Order_ForDealerText__c,
                        Dealer_Info__c,
                        Order_ForDealer__c,
                        Order_ForDealer__r.Name,
                        Order_ForDealerTextID__c,
                        Order_ForHospital__c,
                        SummonsForDirction__c,
                        Order_date__c,
                        Arrive_Order__c,
                        Order_status__c,
                        Shipment_total_amount__c,
                        Offers_Price__c,
                        Billed_Status__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        Order_ForCustomerText__c,
                        ConInvoice_Code__c,
                        Onchange_order__c,
                        OutPattern__c
                    FROM Consumable_order__c
                    WHERE
                        Id = :arriveorder
                        AND Order_Owner_WorkLocal__c = :userWorkLocation
                        AND recordtypeid = :System.Label.RT_ConOrder_Arrive
                ];
                // update end by vivek 2019-7-15
                //明细1获取
                consumableorderdetailsSelected = [
                    SELECT
                        Id,
                        Dealer_Custom_Price__c,
                        Delivery_List_RMB__c,
                        Consumable_Product__r.Name__c,
                        Name,
                        Consumable_order__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Shipment_Count__c,
                        Consumable_Product__r.Intra_Trade_List_RMB__c,
                        Consumable_Product__r.Asset_Model_No__c,
                        Sum_of_money__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        Consumable_Product__r.SFDA_Status__c,
                        Consumable_count__c,
                        Invoiced_Procount__c,
                        RrturnPro_count__c,
                        InvoiceProNot_count__c,
                        //Unitprice_To_agency__c,
                        Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                        Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
                    FROM Consumable_Orderdetails__c
                    WHERE Consumable_order__c = :coc.Arrive_Order__c
                    ORDER BY Name
                ];
                for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                    orderzaikuId.add(cdc1.Consumable_Product__c);
                }
                msoql = makeSoqlorderdet();
                product2Selected = Database.query(msoql);
                size = product2Selected.size();
                initStandardController(msoql);
                for (Integer i = 0; i < product2Selected.size(); i++) {
                    MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
                }
                //update by rentx 2021-01-29
                /*for(Integer i = 0 ; i< CountDel.size();i++){
                        //然后循环CountDel去修改map里的allnumber
                        if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c);
                            Jstage.allnumber = Jstage.allnumber+1 ;
                            if(CountDel[i].Box_Piece__c == '盒'){
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            }else if(CountDel[i].Box_Piece__c == '个'){
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap.put(CountDel[i].Consumable_Product__c, Jstage);
                        }
                    }*/
                for (Integer i = 0; i < CountDel.size(); i++) {
                    String str = '';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        str = 'isHos';
                    } else {
                        str = 'notHos';
                    }
                    //明细2对应的产品存在于MidMap中
                    if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
                        //设置map中key的后缀 用于区分医院特价和非医院特价
                        if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
                            ConsumableorderdetailsInfo Jstage = MidMap2.get(CountDel[i].Consumable_Product__c + str);
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        } else {
                            //midmap2中没有对应的产品
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c).clone();
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        }
                    }
                }
                //再把map里的值从新赋给ConsumableorderdetailsRecords
                //update by rentx 2021-01-29
                // for(ConsumableorderdetailsInfo bss : MidMap.values()){
                for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
                    //update by rentx 2021-01-29
                    bss.packinglist = Integer.valueOf(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    consumableorderdetailsSelectRecords.add(bss);
                }
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'test11111' + consumableorderdetailsSelected.size()));
                //return;
                Integer ishosnum = 0;
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords) {
                    ass.sortBy = sortOrderAsc;
                    for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                        cdc1.Shipment_Count__c = cdc1.Consumable_count__c;
                        if (ass.prod.Id == cdc1.Consumable_Product__c) {
                            ass.check = true;
                            ass.orderdetails1 = cdc1;
                        }
                    }
                    if (ass.hospitalSpecialOffer == true) {
                        ishosnum = ishosnum + 1;
                    }
                }
                if (ishosnum > 0) {
                    hasHosPro = true;
                } else {
                    hasHosPro = false;
                }
                consumableorderdetailsSelectRecords.sort();
                //add by rentx
                noOfRecords = consumableorderdetailsSelectRecords.size();
                //add by rentx
                System.debug('makepagerecords2');
                makepagerecords();
                consumablearriveproductdetailsSelected = [
                    SELECT
                        Id,
                        Name,
                        Intra_Trade_List_RMB__c,
                        Asset_Model_No__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Product__r.Name__c,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Sterilization_limit__c,
                        Deliver_date__c,
                        Bar_Code__c,
                        Arrive_date__c,
                        Send_Date__c,
                        Consumable_order_minor__r.Name,
                        Consumable_order_minor__c,
                        Dealer_Arrive__c,
                        Delivery_List_RMB__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        //add by rentx start
                        hospitalSpecialOffer__c
                    //add by rentx end
                    FROM Consumable_order_details2__c
                    WHERE
                        Consumable_order_minor__c = :coc.Arrive_Order__c
                        AND recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                        AND Dealer_Arrive__c = TRUE
                    ORDER BY Name
                ];
                for (Integer i = 0; i < consumablearriveproductdetailsSelected.size(); i++) {
                    if (
                        consumablearriveproductdetailsSelected[i].hospitalSpecialOffer__c &&
                        HosProMap.containsKey(consumablearriveproductdetailsSelected[i].Consumable_product__c)
                    ) {
                        coc.OutPattern__c = true;
                    }
                    consumableproductdetailsRecords.add(new ConsumableorderdetailsInfo(consumablearriveproductdetailsSelected[i]));
                }
            }
        }
        // 更新、
        else {
            SummonsFlag = 'visible';
            // update start by vivek 2019-7-15 add “NoConfirmedPrice__c” in select
            consumableInvoiceRecords = [
                SELECT Id, Name, Invoice_Date__c, NoConfirmedPrice__c, Invoice_total_amount__c, Invoice_status__c
                FROM Consumable_order__c
                WHERE
                    Id IN (SELECT Invoice_Code_link__c FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c = :ESetId)
                    AND Invoice_status__c != '草案中'
            ];
            coc = [
                SELECT
                    Id,
                    Name,
                    Summons_Order_type__c,
                    NoConfirmedPrice__c,
                    SummonsStatus_c__c,
                    Order_ForDealerText__c,
                    Dealer_Info__c,
                    Order_ForDealer__c,
                    Order_ForDealer__r.Name,
                    Order_ForDealerTextID__c,
                    Order_ForHospital__c,
                    SummonsForDirction__c,
                    Order_date__c,
                    Arrive_Order__c,
                    Order_status__c,
                    Shipment_total_amount__c,
                    Offers_Price__c,
                    Billed_Status__c,
                    ShipmentAccount__c,
                    Order_Dealer_Info__c,
                    Order_ForCustomerText__c,
                    ConInvoice_Code__c,
                    Onchange_order__c,
                    OutPattern__c
                FROM Consumable_order__c
                WHERE Id = :ESetId AND Order_Owner_WorkLocal__c = :userWorkLocation AND Order_type__c = '传票'
            ];
            // update start by vivek 2019-7-15
            if (getExistarrive()) {
                arriveorder = coc.Arrive_Order__c;
            }
            // 到货订单来的时候
            if (getExistarrive()) {
                if (editAble) {
                    alertMessage = '到货订单直接出库,出库单明细不可编辑。';
                }
                if (coc.SummonsStatus_c__c == '已提交' || coc.SummonsStatus_c__c == '批准') {
                    system.debug('coc.SummonsStatus_c__c : ' + coc.SummonsStatus_c__c);
                    saveBtnDisabled = true;
                    SorderBtnDisabled = true;
                    EditDelCommitBtnDisabled = false;
                }
                //医院二级经销商分类
                Integer io = 0;
                while (io < Dealerelationship.size()) {
                    if (coc.Order_ForDealer__c == Dealerelationship[io].Dealer_subordinate__c) {
                        SecondDealer = Dealerelationship[io].Dealer_subordinate__c;
                        coc.Order_ForDealer__c = null;
                        io = io + Dealerelationship.size();
                    }
                    io++;
                }
                Integer ik = 0;
                while (ik < AgencyHospitalLink.size()) {
                    if (coc.Order_ForHospital__c == AgencyHospitalLink[ik].Hospital__c) {
                        HospitalInfo = AgencyHospitalLink[ik].Hospital__c;
                        HospitalName = AgencyHospitalLink[ik].Hospital__r.Name;
                        coc.Order_ForHospital__c = null;
                        ik = ik + AgencyHospitalLink.size();
                    }
                    ik++;
                }
                //出库单明细1取得
                consumableorderdetailsSelected = [
                    SELECT
                        Id,
                        Dealer_Custom_Price__c,
                        Delivery_List_RMB__c,
                        Consumable_Product__r.Name__c,
                        Consumable_Product__r.SFDA_Status__c,
                        Name,
                        Consumable_order__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Shipment_Count__c,
                        Consumable_Product__r.Intra_Trade_List_RMB__c,
                        Consumable_Product__r.Asset_Model_No__c,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Shipment_amount__c,
                        //Unitprice_To_agency__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        Invoiced_Procount__c,
                        RrturnPro_count__c,
                        InvoiceProNot_count__c,
                        Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                        Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c,
                        isOutPattern__c
                    FROM Consumable_orderdetails__c
                    WHERE Consumable_order__c = :ESetId AND Consumable_order__r.Order_Owner_WorkLocal__c = :userWorkLocation
                    ORDER BY Name
                ];
                Map<String, Consumable_Orderdetails__c> cocMap = new Map<String, Consumable_Orderdetails__c>();
                for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                    sumPrice += cdc1.Shipment_amount__c;
                    orderzaikuId.add(cdc1.Consumable_Product__c);
                    //add by rentx 2021-2-26
                    String tempId = cdc1.Consumable_product__c;
                    if (cdc1.isOutPattern__c) {
                        cocMap.put(tempId + 'ishos', cdc1);
                    } else {
                        cocMap.put(tempId + 'nothos', cdc1);
                    }
                    //add by rentx 2021-2-26
                }
                String msoql = makeSoqlorderdet();
                product2Selected = Database.query(msoql);
                size = product2Selected.size();
                initStandardController(msoql);
                for (Integer i = 0; i < product2Selected.size(); i++) {
                    MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
                }
                //update by rentx 2021-01-29
                /*for(Integer i = 0 ; i< CountDel.size();i++){
                        //然后循环CountDel去修改map里的allnumber
                        if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                            ConsumableorderdetailsInfo Jstage =  MidMap.get(CountDel[i].Consumable_Product__c);
                            Jstage.allnumber = Jstage.allnumber+1 ;
                            if(CountDel[i].Box_Piece__c == '盒'){
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            }else if(CountDel[i].Box_Piece__c == '个'){
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap.put(CountDel[i].Consumable_Product__c, Jstage);
                        }
                    }*/
                for (Integer i = 0; i < CountDel.size(); i++) {
                    String str = '';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        str = 'isHos';
                    } else {
                        str = 'notHos';
                    }
                    //明细2对应的产品存在于MidMap中
                    if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
                        //设置map中key的后缀 用于区分医院特价和非医院特价
                        if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
                            ConsumableorderdetailsInfo Jstage = MidMap2.get(CountDel[i].Consumable_Product__c + str);
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        } else {
                            //midmap2中没有对应的产品
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c).clone();
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        }
                    }
                }
                //update by rentx 2021-01-29
                consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
                //再把map里的值从新赋给ConsumableorderdetailsRecords
                //update by rentx 2021-01-29
                // for(ConsumableorderdetailsInfo bss : MidMap.values()){
                for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
                    //update by rentx 2021-01-29
                    //if(bss.allnumber > 0){
                    //bss.UnitpriceToagency = bss.orderdetails1.Unitprice_To_agency__c == null  || bss.orderdetails1.Unitprice_To_agency__c == 0 ? '' :bss.orderdetails1.Unitprice_To_agency__c.format();
                    bss.packinglist = Integer.valueOf(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    //update by rentx 2021-2-26 start
                    if (cocMap.containsKey(bss.Prod.Id + 'ishos') && bss.hospitalSpecialOffer == true) {
                        consumableorderdetailsSelectRecords.add(bss);
                    } else if (cocMap.containsKey(bss.Prod.Id + 'nothos') && bss.hospitalSpecialOffer == false) {
                        consumableorderdetailsSelectRecords.add(bss);
                    }
                    //update by rentx 2021-2-26 end
                    // consumableorderdetailsSelectRecords.add(bss);
                    //}
                }
                Integer ishosnum = 0;
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords) {
                    for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                        //update by rentx 2012-3-1 start
                        // if(ass.prod.Id == cdc1.Consumable_Product__c){
                        //     ass.check = true;
                        //     ass.orderdetails1 = cdc1;
                        // }
                        if (ass.Prod.Id == cdc1.Consumable_Product__c && ass.hospitalSpecialOffer == cdc1.isOutPattern__c) {
                            ass.check = true;
                            ass.orderdetails1 = cdc1;
                        }
                        //update by rentx 2012-3-1 end
                    }
                    if (ass.hospitalSpecialOffer == true) {
                        ishosnum = ishosnum + 1;
                    }
                }
                if (ishosnum > 0) {
                    hasHosPro = true;
                } else {
                    hasHosPro = false;
                }
                //add by rentx
                noOfRecords = consumableorderdetailsSelectRecords.size();
                //add by rentx
                System.debug('makepagerecords3');
                makepagerecords();
                //listCut();
                // 消耗品明细2を取得
                consumableorderdetails2RecordsList = [
                    SELECT
                        Id,
                        Name,
                        SerialLotNo__c,
                        Consumable_Product__r.Name__c,
                        TracingCode__c,
                        Sterilization_limit__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Return_date__c,
                        Invoice_Date__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        //add by rentx start
                        hospitalSpecialOffer__c
                    //add by rentx end
                    FROM Consumable_order_details2__c
                    WHERE Consumable_ZS_order__c = :ESetId
                    ORDER BY Name
                ];
                for (Integer i = 0; i < consumableorderdetails2RecordsList.size(); i++) {
                    consumableorderdetails2Records.add(new ConsumableorderdetailsInfo(consumableorderdetails2RecordsList[i]));
                }
                //产品明细取得
                consumablearriveproductdetailsSelected = [
                    SELECT
                        Id,
                        Delivery_List_RMB__c,
                        Consumable_Product__r.Name__c,
                        Name,
                        Consumable_Product__r.SFDA_Status__c,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Sterilization_limit__c,
                        Consumable_Product__r.Intra_Trade_List_RMB__c,
                        Consumable_Product__r.Asset_Model_No__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        //add by rentx start
                        hospitalSpecialOffer__c
                    //add by rentx end
                    FROM Consumable_order_details2__c
                    WHERE Consumable_ZS_order__c = :ESetId
                    ORDER BY Name
                ];
                for (Integer i = 0; i < consumablearriveproductdetailsSelected.size(); i++) {
                    consumableproductdetailsRecords.add(new ConsumableorderdetailsInfo(consumablearriveproductdetailsSelected[i]));
                }
            }
            // 不是到货订单来的时候
            else {
                if (coc.SummonsStatus_c__c == '已提交' || coc.SummonsStatus_c__c == '批准') {
                    system.debug('coc.SummonsStatus_c__c : ' + coc.SummonsStatus_c__c);
                    saveBtnDisabled = true;
                    SorderBtnDisabled = true;
                    EditDelCommitBtnDisabled = false;
                }
                //医院二级经销商分类
                Integer io = 0;
                while (io < Dealerelationship.size()) {
                    if (coc.Order_ForDealer__c == Dealerelationship[io].Dealer_subordinate__c) {
                        SecondDealer = Dealerelationship[io].Dealer_subordinate__c;
                        coc.Order_ForDealer__c = null;
                        io = io + Dealerelationship.size();
                    }
                    io++;
                }
                Integer ik = 0;
                while (ik < AgencyHospitalLink.size()) {
                    if (coc.Order_ForHospital__c == AgencyHospitalLink[ik].Hospital__c) {
                        HospitalInfo = AgencyHospitalLink[ik].Hospital__c;
                        HospitalName = AgencyHospitalLink[ik].Hospital__r.Name;
                        coc.Order_ForHospital__c = null;
                        ik = ik + AgencyHospitalLink.size();
                    }
                    ik++;
                }
                // 消耗品明细1を取得
                consumableorderdetailsSelected = [
                    SELECT
                        Id,
                        Dealer_Custom_Price__c,
                        Delivery_List_RMB__c,
                        Consumable_Product__r.Name__c,
                        Consumable_Product__r.SFDA_Status__c,
                        Name,
                        Consumable_order__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Shipment_Count__c,
                        Consumable_Product__r.Intra_Trade_List_RMB__c,
                        Consumable_Product__r.Asset_Model_No__c,
                        Shipment_amount__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        Invoiced_Procount__c,
                        RrturnPro_count__c,
                        //Unitprice_To_agency__c,
                        InvoiceProNot_count__c,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                        Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c,
                        isOutPattern__c
                    FROM Consumable_orderdetails__c
                    WHERE Consumable_order__c = :ESetId AND Consumable_order__r.Order_Owner_WorkLocal__c = :userWorkLocation
                    ORDER BY Name
                ];
                //add by rentx 202-2-26
                Map<String, Consumable_Orderdetails__c> cocMap = new Map<String, Consumable_Orderdetails__c>();
                for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                    sumPrice += cdc1.Shipment_amount__c;
                    orderzaikuId.add(cdc1.Consumable_Product__c);
                    //add by rentx 2021-2-26
                    String tempId = cdc1.Consumable_product__c;
                    if (cdc1.isOutPattern__c) {
                        cocMap.put(tempId + 'ishos', cdc1);
                    } else {
                        cocMap.put(tempId + 'nothos', cdc1);
                    }
                    //add by rentx 2021-2-26
                }
                String msoql = makeSoqlorderdet();
                product2Selected = Database.query(msoql);
                size = product2Selected.size();
                initStandardController(msoql);
                for (Integer i = 0; i < product2Selected.size(); i++) {
                    MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
                }
                for (Integer i = 0; i < CountDel.size(); i++) {
                    String str = '';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        str = 'isHos';
                    } else {
                        str = 'notHos';
                    }
                    //明细2对应的产品存在于MidMap中
                    if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
                        //设置map中key的后缀 用于区分医院特价和非医院特价
                        if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
                            ConsumableorderdetailsInfo Jstage = MidMap2.get(CountDel[i].Consumable_Product__c + str);
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        } else {
                            //midmap2中没有对应的产品
                            ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c).clone();
                            Jstage.allnumber = Jstage.allnumber + 1;
                            if (CountDel[i].Box_Piece__c == '盒') {
                                Jstage.Boxnumber = Jstage.Boxnumber + 1;
                            } else if (CountDel[i].Box_Piece__c == '个') {
                                Jstage.Piecenumber = Jstage.Piecenumber + 1;
                            }
                            if (CountDel[i].hospitalSpecialOffer__c) {
                                Jstage.hospitalSpecialOffer = true;
                            } else {
                                Jstage.hospitalSpecialOffer = false;
                            }
                            if (HosProMap.containsKey(Jstage.Prod.Id)) {
                                Jstage.hosPro = true;
                            }
                            Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
                        }
                    }
                }
                //再把map里的值从新赋给ConsumableorderdetailsRecords
                //update by rentx 2021-01-29
                // for(ConsumableorderdetailsInfo bss : MidMap.values()){
                for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
                    //update by rentx 2021-01-29
                    //if(bss.allnumber>0){
                    bss.packinglist = Integer.valueOf(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    //update by rentx 2021-2-26 start
                    if (cocMap.containsKey(bss.Prod.Id + 'ishos') && bss.hospitalSpecialOffer == true) {
                        consumableorderdetailsSelectRecords.add(bss);
                    } else if (cocMap.containsKey(bss.Prod.Id + 'nothos') && bss.hospitalSpecialOffer == false) {
                        consumableorderdetailsSelectRecords.add(bss);
                    }
                    // consumableorderdetailsSelectRecords.add(bss);
                    //}
                }
                // return null;
                Integer ishosnum = 0;
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords) {
                    ass.sortBy = sortOrderAsc;
                    for (Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected) {
                        //update by rentx 2012-3-1 start
                        // if(ass.prod.Id == cdc1.Consumable_Product__c){
                        //     ass.check = true;
                        //     ass.orderdetails1 = cdc1;
                        // }
                        if (ass.Prod.Id == cdc1.Consumable_Product__c && ass.hospitalSpecialOffer == cdc1.isOutPattern__c) {
                            ass.check = true;
                            ass.orderdetails1 = cdc1;
                        }
                        //update by rentx 2012-3-1 end
                    }
                    if (ass.hospitalSpecialOffer == true) {
                        ishosnum = ishosnum + 1;
                    }
                }
                if (ishosnum > 0) {
                    hasHosPro = true;
                } else {
                    hasHosPro = false;
                }
                consumableorderdetailsSelectRecords.sort();
                //add by rentx
                noOfRecords = consumableorderdetailsSelectRecords.size();
                //add by rentx
                System.debug('makepagerecords4');
                makepagerecords();
                // 消耗品明细2を取得
                consumableorderdetails2RecordsList = [
                    SELECT
                        Id,
                        Name,
                        SerialLotNo__c,
                        Consumable_Product__r.Name__c,
                        TracingCode__c,
                        Sterilization_limit__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Return_date__c,
                        Invoice_Date__c,
                        Box_Piece__c,
                        ProductPacking_list_manual__c,
                        //add by rentx start
                        hospitalSpecialOffer__c
                    //add by rentx end
                    FROM Consumable_order_details2__c
                    WHERE Consumable_ZS_order__c = :ESetId
                    ORDER BY Name
                ];
                for (Integer i = 0; i < consumableorderdetails2RecordsList.size(); i++) {
                    consumableorderdetails2Records.add(new ConsumableorderdetailsInfo(consumableorderdetails2RecordsList[i]));
                }
            }
        }
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'test++++++' + SecondDealer));
        if (SecondDealer == null || SecondDealer == '') {
            provinceOpts.add(new SelectOption('', '-无-'));
            provinceOptsMap.put('', '-无-');
            for (Integer i = 0; i < Dealerelationship.size(); i++) {
                provinceOpts.add(
                    new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name)
                );
                provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name);
            }
        } else {
            provinceOpts.add(new SelectOption('', '-无-'));
            provinceOptsMap.put('', '-无-');
            for (Integer i = 0; i < Dealerelationship.size(); i++) {
                if (Dealerelationship[i].Dealer_subordinate__c == SecondDealer) {
                    provinceOpts.add(
                        new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name)
                    );
                    provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name);
                }
            }
            for (Integer i = 0; i < Dealerelationship.size(); i++) {
                if (Dealerelationship[i].Dealer_subordinate__c != SecondDealer) {
                    provinceOpts.add(
                        new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name)
                    );
                    provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name);
                }
            }
        }
        Schema.DescribeFieldResult dfr = Product2__c.Intra_Trade_List_RMB__c.getDescribe();
        cansee = dfr.isAccessible();
        Schema.DescribeFieldResult dealerPrice = Consumable_orderdetails__c.Dealer_Custom_Price__c.getDescribe();
        dealerPricesee = dealerPrice.isAccessible();
        // 显示数据条数信息
        //    makeMessage();
        //附件
        attachmentinfo = [SELECT Id, Name, OwnerId FROM Attachment WHERE parentid = :ESetId];
        if (attachmentinfo.size() > 0) {
            for (Integer i = 0; i < attachmentinfo.size(); i++) {
                attachmentRecoeds.add(new ConsumableorderdetailsInfo(attachmentinfo[i]));
            }
        }
        AggregateResult[] categoryList = [
            SELECT Count(id), Category3_text__c c3c
            FROM Product2__c
            WHERE Category3_text__c != NULL
            GROUP BY Category3_text__c
        ];
        categoryOptionList = new List<SelectOption>();
        categoryOptionList.add(new SelectOption('', '-无-'));
        categoryOptionMap = new Map<String,String>();
        categoryOptionMap.put('', '-无-');
        for (AggregateResult category3Search : categoryList) {
            String deliverycnt = String.valueOf(category3Search.get('c3c'));
            categoryOptionList.add(new SelectOption(deliverycnt, deliverycnt));
            categoryOptionMap.put(deliverycnt, deliverycnt);
        }
        category4OptionList = new List<SelectOption>();
        category4OptionList.add(new SelectOption('', '-无-'));
        category4OptionMap = new Map<String,String>();
        category4OptionMap.put('', '-无-');
        /*for(AggregateResult category4Search : category4List) {
                String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
                category4OptionList.add(new SelectOption(deliverycnt4,deliverycnt4));
            }*/
        category5OptionList = new List<SelectOption>();
        category5OptionList.add(new SelectOption('', '-无-'));
        category5OptionMap = new Map<String,String>();
        category5OptionMap.put('', '-无-');
        Boolean Existarrive = (coc.Arrive_Order__c != null);
        String ConsumableOut_report = System.Label.ConsumableOut_report;
        System.debug('consumableproductdetailsRecords = ' + consumableproductdetailsRecords);
        data.put('ConsumableOut_report','ConsumableOut_report');
        data.put('accountid',accountid);
        data.put('consumableproductdetailsRecords',consumableproductdetailsRecords);
        data.put('agencyProType',agencyProType);
        data.put('accountName',accountName);
        data.put('userWorkLocation',userWorkLocation);
        data.put('categoryOptionMap',categoryOptionMap);
        data.put('category4OptionMap',category4OptionMap);
        data.put('category5OptionMap',category5OptionMap);
        data.put('outOutPatternOptionMap',outOutPatternOptionMap);
        data.put('hasHosPro',hasHosPro);
        data.put('Existarrive',Existarrive);
        data.put('sumPrice',sumPrice);
        data.put('HospitalName', HospitalName);
        data.put('provinceOptsMap', provinceOptsMap);
        data.put('SummonsFlag', SummonsFlag);
        data.put('EditDelCommitBtnDisabled', EditDelCommitBtnDisabled);
        data.put('EditAble', EditAble);
        data.put('coc', coc);
        data.put('pageRecords', pageRecords);
        data.put('arriveorder',arriveorder);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
        // } catch (Exception e) {
        //     return new ResponseBodyLWC('Error',500, e.getMessage(), '');
        // }
    }
    // 检索
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(String agencyProTypeLwc,String accountNameLwc,String userWorkLocationLwc,String outOutPattern,String category1,String category3,String category4,String category5,Boolean editAbleLwc,List<ConsumableorderdetailsInfoLwc> pageRecordsLwcLwc,List<ConsumableorderdetailsInfo> consumableproductdetailsRecordsLwc,String arriveorderLwc) {
        consumableproductdetailsRecords = consumableproductdetailsRecordsLwc;
        pageRecordsLwc = pageRecordsLwcLwc;
        System.debug('pageRecordsLwc = ' + pageRecordsLwc);
        arriveorder = arriveorderLwc;
        accountName = accountNameLwc;
        userWorkLocation = userWorkLocationLwc;
        agencyProType = agencyProTypeLwc;
        String sqlagencyProType = '%' + agencyProTypeLwc + '%';
        List<AggregateResult> orderdetailCount = [
            SELECT count(id), Consumable_Product__c cpc, Box_Piece__c
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Cancellation_Flag__c = FALSE
                AND Bar_Code__c != NULL
                AND Isoverdue__c = 1
                AND Product_Type__c LIKE :sqlagencyProType
                AND Dealer_Info_text__c = :accountNameLwc
                AND Arrive_Owner_Work_Location__c = :userWorkLocationLwc
            GROUP BY Consumable_Product__c, Box_Piece__c
        ];
        for (AggregateResult orderdetail : orderdetailCount) {
            zaikuId.add(String.valueOf(orderdetail.get('cpc')));
        }
        editAble = editAbleLwc;
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        SearchDone = 'SearchDone';
        Map<String, String> selectedIdMap = new Map<String, String>();
        List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
        Map<String,ConsumableorderdetailsInfo> MidMap = new Map<String,ConsumableorderdetailsInfo>();
        //update by rentx 2021-01-29
        Map<String,ConsumableorderdetailsInfo> MidMap2 = new Map<String,ConsumableorderdetailsInfo>();
        String countdelSoql = 'SELECT Id,Bar_Code__c,Name,Inventory_date__c,Consumable_Product__c,Consumable_Product__r.Asset_Model_No__c,Recordtypeid,Box_Piece__c,ProductPacking_list_manual__c,hospitalSpecialOffer__c FROM Consumable_order_details2__c WHERE  Dealer_Arrive__c = true AND Dealer_Shipment__c = false AND Dealer_Saled__c = false AND Dealer_Returned__c = false AND Lose_Flag__c = false AND Bar_Code__c != null AND Isoverdue__c = 1 AND Arrive_Owner_Work_Location__c =  :userWorkLocation AND Dealer_Info_text__c = :accountName ';
        if (String.isNotBlank(outOutPattern) && outOutPattern.equals('ishos')) {
            countdelSoql += ' AND hospitalSpecialOffer__c = true';
        }else if (String.isNotBlank(outOutPattern) && outOutPattern.equals('nothos')) {
            countdelSoql += ' AND hospitalSpecialOffer__c = false';
        }
        System.debug('countdelSoql = ' + countdelSoql);
        List<Consumable_order_details2__c> CountDel = Database.query(countdelSoql);
        System.debug('CountDel = ' + CountDel);
        //update by rentx 2021-01-29
        consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
        //consumableorderdetailsSelectRecords = reSet;
        String soql = makeSoql(category1,category3,category4,category5);
        System.debug('soql = ' + soql);
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        initStandardController(soql);
        product2Selected = Database.query(soql);
        for (Integer i = 0; i < product2Selected.size(); i++) {
            MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
        }
        for (Integer i = 0; i < CountDel.size() ;i++ ) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
                str = 'isHos';
            }else{
                str = 'notHos';
            }
            System.debug('MidMap = ' + MidMap);
            //明细2对应的产品存在于MidMap中
            if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
                //设置map中key的后缀 用于区分医院特价和非医院特价
                if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
                    ConsumableorderdetailsInfo Jstage = MidMap2.get(CountDel[i].Consumable_Product__c+str);
                    Jstage.allnumber = Jstage.allnumber+1 ;
                    if(CountDel[i].Box_Piece__c == '盒'){
                        Jstage.Boxnumber = Jstage.Boxnumber + 1;
                    }else if(CountDel[i].Box_Piece__c == '个'){
                        Jstage.Piecenumber = Jstage.Piecenumber + 1;
                    }
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        Jstage.hospitalSpecialOffer = true;
                    }else{
                        Jstage.hospitalSpecialOffer = false;
                    }
                    if (HosProMap.containsKey(Jstage.Prod.Id)) {
                        Jstage.hosPro = true;
                    }
                    MidMap2.put(CountDel[i].Consumable_Product__c+str, Jstage);
                }else{
                    //midmap2中没有对应的产品
                    ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c).clone();
                    Jstage.allnumber = Jstage.allnumber+1 ;
                    if(CountDel[i].Box_Piece__c == '盒'){
                        Jstage.Boxnumber = Jstage.Boxnumber + 1;
                    }else if(CountDel[i].Box_Piece__c == '个'){
                        Jstage.Piecenumber = Jstage.Piecenumber + 1;
                    }
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        Jstage.hospitalSpecialOffer = true;
                    }else{
                        Jstage.hospitalSpecialOffer = false;
                    }
                    if (HosProMap.containsKey(Jstage.Prod.Id)) {
                        Jstage.hosPro = true;
                    }
                    //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                    MidMap2.put(CountDel[i].Consumable_Product__c+str, Jstage);
                }
            }
        }
        Integer ishosnum = 0;
        System.debug('MidMap2 = ' + MidMap2);
        for(ConsumableorderdetailsInfo bss : MidMap2.values()){
            if(selectedIdMap.containsKey(bss.Prod.id)){
                continue;
            }else{
                bss.sortBy = false;
                bss.packinglist = Integer.valueOf(bss.Prod.Product2__r.Packing_list_manual__c);
                bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                consumableorderdetailsSelectRecords.add(bss);
                if (bss.hospitalSpecialOffer == true) {
                    ishosnum = ishosnum + 1;
                }
            }
        }
         if (ishosnum > 0) {
            hasHosPro = true;
        }else{
            hasHosPro = false;
        }
        consumableorderdetailsSelectRecords.sort();
        //add by rentx
        //noOfRecords = consumableorderdetailsSelectRecords.size();
        //add by rentx
        //makepagerecords();
        makepagerecordsLwc();
        // this.sortKey = '1';
        // this.preSortKey = '1';
        // this.sortOrderAsc = false;
        // this.sortOrder = new String[8];
        // this.sortOrder = new String[]{' ',' ',' ',' ','↓','','',''};
        data.put('pageRecords', pageRecords);
        data.put('test','test');
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    private static String makeSoql(String CateName,String Category3,String Category4,String Category5){
        String sqlTail1 = '(\'';
        for(Integer i = 0 ; i< zaikuId.size();i++){
            if(i<zaikuId.size()-1){
                sqlTail1 += zaikuId[i]+'\',\'';
            }else{
                sqlTail1 += zaikuId[i];
            }
        }
        sqlTail1 += '\')';
        String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
        soql += ' WHERE Id in' + sqlTail1;
        if(!String.isBlank(CateName)){
            soql += ' AND (Name__c like \'%' + String.escapeSingleQuotes(CateName.replaceAll('%', '\\%')) + '%\' or Asset_Model_No__c like \'%' + String.escapeSingleQuotes(CateName.replaceAll('%', '\\%')) + '%\')';
        }if(!String.isBlank(Category3)){
            soql += ' AND Category3__c = \'' +  Category3 + '\'';
        }if(!String.isBlank(Category4)){
            soql += ' AND Category4__c = \'' +  Category4 + '\'';
        }if(!String.isBlank(Category5)){
            soql += ' AND Category5__c = \'' +  Category5 + '\'';
        }
        return soql;
    }
    public static String makeSoqlorderdet() {
        String sqlTail = '(\'';
        for (Integer i = 0; i < orderzaikuId.size(); i++) {
            if (i < orderzaikuId.size() - 1) {
                sqlTail += orderzaikuId[i] + '\',\'';
            } else {
                sqlTail += orderzaikuId[i];
            }
        }
        sqlTail += '\')';
        String msoql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
        msoql += ' WHERE Id in' + sqlTail;
        return msoql;
    }
    public static String makeSoqlinventory() {
        String sqlTail = '(\'';
        for (Integer i = 0; i < zaikuId.size(); i++) {
            if (i < zaikuId.size() - 1) {
                sqlTail += zaikuId[i] + '\',\'';
            } else {
                sqlTail += zaikuId[i];
            }
        }
        sqlTail += '\')';
        String msoql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
        msoql += ' WHERE Id in' + sqlTail;
        return msoql;
    }
    public static void initStandardController(String soql) {
        // init standard controller
        System.debug('soql =' + soql);
        System.debug('initStandardController star');
        //setCon = new ApexPages.StandardSetController(Database.getQueryLocator(soql));
        // sets the number of records in each page set
        //setCon.setPageSize(size);
        System.debug('initStandardController end');
    }
    public static List<ConsumableorderdetailsInfo> makepagerecords() {
        List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
        Map<String, String> selectedIdMap = new Map<String, String>();
        System.debug('zhj1');
        //取出选择的产品
        if (pageRecords != null) {
            System.debug('zhj2');
            for (ConsumableorderdetailsInfo ass : pageRecords) {
                if (ass.check == true) {
                    if (ass.hospitalSpecialOffer == true) {
                        selectedIdMap.put(ass.Prod.Id + 'ishos', ass.Prod.Id);
                    } else {
                        selectedIdMap.put(ass.Prod.Id + 'nothos', ass.Prod.Id);
                    }
                    reSet.add(ass);
                }
            }
        }
        System.debug('zhj3');
        pageRecords = new List<ConsumableorderdetailsInfo>();
        if (editAble && String.isBlank(arriveorder)) {
            pageRecords = reSet;
        }
        //Integer pagestartNo = (setCon.getPageNumber() * size)-size;
        //Integer pageendNo = (setCon.getPageNumber() * size)>noOfRecords ? noOfRecords :(setCon.getPageNumber() * size-1);
        Integer addNo = 0;
        //update by rentx 2021-2-26 start
        System.debug('consumableorderdetailsSelectRecords = ' + consumableorderdetailsSelectRecords);
        for (ConsumableorderdetailsInfo info : consumableorderdetailsSelectRecords) {
            Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
            if (
                (info.hospitalSpecialOffer && selectedIdMap.containsKey(info.Prod.Id + 'ishos')) ||
                (info.hospitalSpecialOffer == false && selectedIdMap.containsKey(info.Prod.Id + 'nothos'))
            ) {
                addNo++;
            } else {
                if (info.check == false) {
                    info.orderdetails1 = orderdetails1;
                }
                pageRecords.add(info);
                addNo++;
            }
        }
        System.debug('pageRecords 2 = ' + pageRecords);
        System.debug('zhj5');
        System.debug('pageRecords = ' + pageRecords);
        return pageRecords;
    }
    public static List<ConsumableorderdetailsInfo> makepagerecordsLwc() {
        List<ConsumableorderdetailsInfoLwc> reSetLwc = new List<ConsumableorderdetailsInfoLwc>();
        Map<String, String> selectedIdMap = new Map<String, String>();
        System.debug('makepagerecordsLwc pageRecordsLwc = ' + pageRecordsLwc);
        //取出选择的产品
        if (pageRecordsLwc != null) {
            for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
                System.debug('ass.check = ' + ass.check);
                if (ass.check == true) {
                    if (ass.hospitalSpecialOffer == true) {
                        selectedIdMap.put(ass.Prod.Id + 'ishos', ass.Prod.Id);
                    } else {
                        selectedIdMap.put(ass.Prod.Id + 'nothos', ass.Prod.Id);
                    }
                    reSetLwc.add(ass);
                }
            }
        }
        System.debug('reSetLwc = ' + reSetLwc);
        System.debug('selectedIdMap = ' + selectedIdMap);
        pageRecords = new List<ConsumableorderdetailsInfo>();
        if (editAble && String.isBlank(arriveorder)) {
            List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
            for(ConsumableorderdetailsInfoLwc assLwc : reSetLwc){
                ConsumableorderdetailsInfo ci = new ConsumableorderdetailsInfo();
                ci.check = assLwc.check;
                ci.oldCheck = assLwc.oldCheck;
                ci.orderdetails1 = assLwc.orderdetails1;
                ci.orderdetails2 = assLwc.orderdetails2;
                ci.Prod = assLwc.Prod;
                ci.Boxnumber = assLwc.Boxnumber;
                ci.Piecenumber = assLwc.Piecenumber;
                ci.allnumber = assLwc.allnumber;
                ci.oldConsumableCount = assLwc.oldConsumableCount;
                ci.canSelect = assLwc.canSelect;
                ci.sortBy = assLwc.sortBy;
                ci.packinglist = assLwc.packinglist;
                ci.approbation_No = assLwc.approbation_No;
                ci.expiration_Date = assLwc.expiration_Date;
                ci.boxorpiecein = assLwc.boxorpiecein;
                ci.boxorpiece = assLwc.boxorpiece;
                ci.boxorpieceMap = assLwc.boxorpieceMap;
                ci.concc = assLwc.concc;
                ci.BoxPiece = assLwc.BoxPiece;
                ci.hospitalSpecialOffer = assLwc.hospitalSpecialOffer;
                ci.hosPro = assLwc.hosPro;
                reSet.add(ci);
            }
            pageRecords = reSet;
        }
        //Integer pagestartNo = (setCon.getPageNumber() * size)-size;
        //Integer pageendNo = (setCon.getPageNumber() * size)>noOfRecords ? noOfRecords :(setCon.getPageNumber() * size-1);
        Integer addNo = 0;
        //update by rentx 2021-2-26 start
        System.debug('consumableorderdetailsSelectRecords = ' + consumableorderdetailsSelectRecords);
        for (ConsumableorderdetailsInfo info : consumableorderdetailsSelectRecords) {
            Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
            if (
                (info.hospitalSpecialOffer && selectedIdMap.containsKey(info.Prod.Id + 'ishos')) ||
                (info.hospitalSpecialOffer == false && selectedIdMap.containsKey(info.Prod.Id + 'nothos'))
            ) {
                addNo++;
            } else {
                if (info.check == false) {
                    info.orderdetails1 = orderdetails1;
                }
                pageRecords.add(info);
                addNo++;
            }
        }
        System.debug('pageRecords = ' + pageRecords);
        return pageRecords;
    }
    // 保存按钮
    @AuraEnabled
    public static ResponseBodyLWC save(Consumable_order__c cocLwc,String hospitalInfoLwc,String hospitalNameLwc,String secondaryDistributor,List<ConsumableorderdetailsInfoLwc> pageRecordsLwc,String accountid,String ESetId,List<ConsumableorderdetailsInfo> consumableproductdetailsRecordsLwc) {
        System.debug('cocLwc = ' + cocLwc);
        coc = cocLwc;
        HospitalInfo = hospitalInfoLwc;
        HospitalName = hospitalNameLwc;
        SecondDealer = secondaryDistributor;
        pageRecordsLwc = pageRecordsLwc;
        consumableproductdetailsRecords = consumableproductdetailsRecordsLwc;
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        //订单信息确认
        if(coc.SummonsForDirction__c  ==''||coc.SummonsForDirction__c  == null){
            // coc.SummonsForDirction__c.addError('请输入指示单目的。');
            // return null;
            return new ResponseBodyLWC('Error',500, '请输入指示单目的。', '');
        }
        else if(coc.SummonsForDirction__c =='直接销售给医院'){
            if(String.isBlank(HospitalInfo) || String.isBlank(HospitalName)){
                // coc.addError('请输入医院。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入医院。', '');
            }
            if(String.isBlank(coc.Order_ForCustomerText__c)){
                // coc.Order_ForCustomerText__c.addError('请输入科室。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入科室。', '');
            }
            else if(String.isNotBlank(SecondDealer) || String.isNotBlank(coc.Order_ForDealerText__c)){
                // coc.addError('不需要二级经销商和经销商(录入)信息。' );
                // return null;
                return new ResponseBodyLWC('Error',500, '不需要二级经销商和经销商(录入)信息。', '');
            }
        }else if(coc.SummonsForDirction__c =='医院试用'){
            if(String.isBlank(HospitalInfo) || String.isBlank(HospitalName)){
                // coc.addError('请输入医院。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入医院。', '');
            }
            if(String.isBlank(coc.Order_ForCustomerText__c)){
                // coc.Order_ForCustomerText__c.addError('请输入科室。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入科室。', '');
            }
        }
        else if(coc.SummonsForDirction__c =='销售给二级经销商'){
            if(String.isBlank(SecondDealer) && String.isBlank(coc.Order_ForDealerText__c)){
                // coc.addError('必须输入二级经销商或经销商(录入)。');
                // return null;
                return new ResponseBodyLWC('Error',500, '必须输入二级经销商或经销商(录入)。', '');
            }
            if(String.isBlank(HospitalInfo) || String.isBlank(HospitalName)){
                // coc.addError('请输入医院。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入医院。', '');
            }
            if(String.isBlank(coc.Order_ForCustomerText__c)){
                // coc.Order_ForCustomerText__c.addError('请输入科室。');
                // return null;
                return new ResponseBodyLWC('Error',500, '请输入科室。', '');
            }
        }
        else if(coc.SummonsForDirction__c =='互相调货'){
            if(String.isNotBlank(HospitalInfo) || String.isNotBlank(HospitalName)){
                // coc.addError('不需要输入医院。');
                // return null;
                return new ResponseBodyLWC('Error',500, '不需要输入医院。', '');
            }
            if(String.isNotBlank(coc.Order_ForCustomerText__c)){
                // coc.Order_ForCustomerText__c.addError('不需要输入科室。');
                // return null;
                return new ResponseBodyLWC('Error',500, '不需要输入科室。', '');
            }
            if(String.isBlank(SecondDealer) && String.isBlank(coc.Order_ForDealerText__c)){
                // coc.addError('必须输入二级经销商或经销商(录入)。');
                // return null;
                return new ResponseBodyLWC('Error',500, '必须输入二级经销商或经销商(录入)。', '');
            }
        }
        Integer isHos = 0;
        Integer FLG = 0;
        Integer Count = 0;
        for(ConsumableorderdetailsInfoLwc CheckCount : pageRecordsLwc) {
            FLG = FLG + 1;
            if(CheckCount.check == false){
                Count = Count + 1;
            }else{
                //add by rentx
                if (CheckCount.hospitalSpecialOffer) {
                    isHos = isHos+1;
                }
                //add by rentx
            }
        }
        if(Count == FLG){
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择所需消耗品'));
            // return null;
            return new ResponseBodyLWC('Error',500, '请选择所需消耗品', '');
        }
        // gzw 注释 判断提前 20210308
        //checkOutPattern();
        //根据用户选中的产品给 出库单上的是否医院特价出库字段赋值
        Integer isHosCheckOutPattern = 0;
        for(ConsumableorderdetailsInfoLwc CheckCount : pageRecordsLwc) {
            if (CheckCount.check == true && CheckCount.hospitalSpecialOffer == true) {
                isHosCheckOutPattern = isHosCheckOutPattern +1;
            }
        }
        if (isHosCheckOutPattern > 0) {
            coc.OutPattern__c = true;
        }else{
            coc.OutPattern__c = false;
        }
        // add by rentx 2021-3-10 start
        //特价医院出库非本医院维护的特价商品时,报错 非特价医院出库维护在医院特价关系表的产品时 报错
        if(coc.SummonsForDirction__c !='互相调货'){
            //非特价医院出库特价产品时 报错(当前经销商下没有特价医院除外)
            List<hospitalprice__c> hopList = [select id,hospital__c,product__c from hospitalprice__c where account__c = :accountid];
            //经销商对应医院下的所有特价产品
            Map<String,String> proMap = new Map<String,String>();
            //经销商下的所有特价产品
            Map<String,String> allProMap = new Map<String,String>();
            if (hopList != null && hopList.size() > 0) {
                Boolean flag = false;
                if (HospitalInfo != null && HospitalInfo != '') {
                    for (hospitalprice__c hp : hopList) {
                        allProMap.put(hp.product__c, '');
                        //如果当前 医院特价关系中的医院对应出库单上出库的医院,则放产品id到map
                        if (hp.hospital__c == HospitalInfo) {
                            flag = true;
                            proMap.put(hp.product__c, '');
                        }
                    }
                }
                for(ConsumableorderdetailsInfoLwc ass : pageRecordsLwc){
                    if (ass.check == true) {
                        //判断选中的医院特价产品
                        if (ass.hospitalSpecialOffer == true) {
                            //用户选中了当前医院下的特价产品
                            if (proMap.containsKey(ass.Prod.Id)) {
                                continue;
                            //用户选中了没有维护特价医院的特价产品
                            }else if (!allProMap.containsKey(ass.Prod.Id)) {
                                continue;
                            }else{
                                //用户选中非当前医院维护的特价产品
                                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '当前医院没有维护 消耗品:'+ ass.Prod.Name__c +' 的特价'));
                                // return null;
                                return new ResponseBodyLWC('Error',500, '当前医院没有维护 消耗品:' + ass.Prod.Name__c + '的特价', '');
                            }
                        }//非医院特价产品可以出库给任意医院,所以不需要判断
                    }
                }
            }
        }else{
            //如果是互相调货,判断 经销商(录入) 是否维护了 当前选中的特价产品
            List<hospitalprice__c> hopList = [select id,hospital__c,product__c from hospitalprice__c where account__c = :coc.Order_ForDealerTextID__c];
            Map<Id,String> proMap = new Map<Id,String>();
            if (hopList != null && hopList.size() > 0) {
                for (hospitalprice__c hpc : hopList) {
                    proMap.put(hpc.product__c, '');
                }
                String proStr = '';
                for(ConsumableorderdetailsInfoLwc ass : pageRecordsLwc){
                    if (ass.check == true) {
                        if (ass.hospitalSpecialOffer == true) {
                            if (!proMap.containsKey(ass.Prod.Id)) {
                                proStr += ass.Prod.Name__c+',';
                            }
                        }
                    }
                }
                if (proStr != '') {
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '经销商:'+coc.Order_ForDealerText__c +' 没有消耗品:'+proStr.substring(0,proStr.length()-1) + ' 的特价'));
                    // return null;
                    return new ResponseBodyLWC('Error',500, '经销商:' + coc.Order_ForDealerText__c + ' 没有消耗品:' + proStr.substring(0,proStr.length()-1) + ' 的特价', '');
                }
            }
        }
        // checkOutPattern();
        Consumable_order__c p = new Consumable_order__c();
        List<Consumable_orderdetails__c> Ins = New List<Consumable_orderdetails__c>();
        List<Consumable_order_details2__c> InsProduct = New List<Consumable_order_details2__c>();
        Savepoint sp = Database.setSavepoint();
        // try {
            //新建订单时
            if(String.isEmpty(ESetId)){
                p.Name = '*';
                p.Order_type__c = '传票';
                p.Order_ProType__c = agencyProType;
                if(coc.SummonsStatus_c__c ==null||String.isBlank(coc.SummonsStatus_c__c))coc.SummonsStatus_c__c ='草案中';
                // update strat by vivek 2019-7-12
                p.NoConfirmedPrice__c = coc.NoConfirmedPrice__c;
                // update end by vivek 2019-7-12
                p.SummonsStatus_c__c = coc.SummonsStatus_c__c;
                if(coc.Arrive_Order__c != null){
                    p.Arrive_Order__c = coc.Arrive_Order__c;
                }
                p.Offers_Price__c = coc.Offers_Price__c;
                p.Dealer_Info__c = accountid;
                if(String.isBlank(SecondDealer)){
                    p.Order_ForHospital__c =String.isNotBlank(HospitalInfo) ? HospitalInfo : null;
                    p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                }else {
                    p.Order_ForHospital__c = String.isNotBlank(HospitalInfo) ? HospitalInfo : null;
                    p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                    p.Order_ForDealer__c = SecondDealer;
                }
                P.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                P.Order_ForDealerTextID__c = coc.Order_ForDealerTextID__c;
                p.Order_date__c = coc.Order_date__c;
                p.SummonsForDirction__c = coc.SummonsForDirction__c;
                p.RecordTypeid = System.Label.RT_ConOrder_Outboundorder;
                // update start by vivek 2019-7-15
                p.NoConfirmedPrice__c = coc.NoConfirmedPrice__c;
                // update end by vivek 2019-7-15
                //add by rentx
                p.OutPattern__c = coc.OutPattern__c;
                //add by rentx
                //Map<String,String> ProductNewMap = new Map<String, String>();
                for(ConsumableorderdetailsInfoLwc ass : pageRecordsLwc){
                    if(ass.check == true){
                        if(ass.orderdetails1.Delivery_List_RMB__c < 0){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入正确的出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入正确的出货单价 (元)。', '');
                        }
                        if(ass.orderdetails1.Delivery_List_RMB__c == null && coc.SummonsForDirction__c !='医院试用'){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入正确的出货单价 (元)。', '');
                        }
                        if(ass.orderdetails1.Delivery_List_RMB__c == 0 && (coc.SummonsForDirction__c =='销售给二级经销商' || coc.SummonsForDirction__c =='直接销售给医院')){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入出货单价 (元)。', '');
                        }
                        if(ass.orderdetails1.Shipment_Count__c == null ||ass.orderdetails1.Shipment_Count__c ==0){
                            // ass.orderdetails1.Shipment_Count__c.addError('请输入出货数量。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入出货数量。', '');
                        }
                        if(ass.orderdetails1.Box_Piece__c == null ||ass.orderdetails1.Box_Piece__c ==''){
                            // ass.orderdetails1.Box_Piece__c.addError('请输入单位。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入单位。', '');
                        }
                        if(ass.orderdetails1.Box_Piece__c == '盒'){
                            if(ass.orderdetails1.Shipment_Count__c > ass.Boxnumber){
                                //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
                                if(ass.oldCheck == false){
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.Prod.Name__c + '库存不足', '');
                                }else{
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足', '');
                                }
                            }
                        }else if(ass.orderdetails1.Box_Piece__c == '个'){
                            if(ass.orderdetails1.Shipment_Count__c > ass.Piecenumber){
                                //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
                                if(ass.oldCheck == false){
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.Prod.Name__c + '库存不足', '');
                                }else{
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足', '');
                                }
                            }
                        }
                    }
                }
                insert p;
                ESetId = p.id;
                List<Consumable_order__c> detailName = new List<Consumable_order__c>();
                detailName = [SELECT id,Name FROM Consumable_order__c WHERE id =:ESetId];
                Integer i = 1;
                for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc)  {
                    if(ass.check == true){
                        Consumable_orderdetails__c InsAfterDel = new Consumable_orderdetails__c();
                        String str = string.valueOf(i);
                        if(str.length() == 1){
                            str = '0' + str;
                        }
                        InsAfterDel.Name = detailName[0].name + '-'+ str;
                        InsAfterDel.Shipment_Count__c = ass.orderdetails1.Shipment_Count__c;
                        InsAfterDel.Consumable_order__c = p.id;
                        InsAfterDel.Consumable_Product__c = ass.Prod.id;
                        InsAfterDel.Intra_Trade_List_RMB__c =ass.Prod.Intra_Trade_List_RMB__c;
                        InsAfterDel.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
                        // TODO 默认 盒 ,需要修正
                        InsAfterDel.Box_Piece__c = ass.orderdetails1.Box_Piece__c;
                        InsAfterDel.Out_unit__c = ass.orderdetails1.Box_Piece__c;
                        //InsAfterDel.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
                        InsAfterDel.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
                        InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
                        //add by rentx 2021-2-26 start
                        InsAfterDel.isOutPattern__c = ass.hospitalSpecialOffer;
                        //add by rentx 2021-2-26 end
                        i++;
                        Ins.add(InsAfterDel);
                    }
                }
                // 如果 出库单 和 OCM发货Header连 的话,发货的Detail2 Copy到 出库单的Detail2里
                if (getExistarrive()) {
                    for (ConsumableorderdetailsInfo ass : consumableproductdetailsRecords)  {
                        //BlockForP;
                        Consumable_order_details2__c InsProductDet = new Consumable_order_details2__c();
                        InsProductDet.Id = ass.orderdetails2.Id;
                        InsProductDet.Consumable_ZS_order__c = p.id;
                        i++;
                        InsProduct.add(InsProductDet);
                    }
                }
                if(Ins.size()>0){
                    insert Ins;
                }
                if(InsProduct.size() >0){
                    ControllerUtil.updateOrderDetailsSatus(InsProduct);
                }
            }
            //修改之后 保存订单
            else if(ESetId != null || ESetId.length() >0 ){
                List<Consumable_order__c> cocinfo = New List<Consumable_order__c>();
                // update start by vivek 2019-7-15 add "NoConfirmedPrice__c" in select
                cocinfo = [SELECT Id,
                                Name,
                                SummonsStatus_c__c,
                                NoConfirmedPrice__c,
                                Dealer_Info__c,
                                Order_ForHospital__c,
                                SummonsForDirction__c
                            FROM Consumable_order__c
                            WHERE Id =:ESetId];
                // update end by vivek 2019-7-15
                if (cocinfo.size()>0){
                    p = cocinfo[0];
                }
                p.Name = coc.Name;
                p.Dealer_Info__c = accountid;
                p.Order_ProType__c = agencyProType;
                if(SecondDealer == null){
                    p.Order_ForHospital__c = String.isNotBlank(HospitalInfo) ? HospitalInfo : null;
                    p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                    p.Order_ForDealer__c = SecondDealer;
                }else {
                    p.Order_ForHospital__c = String.isNotBlank(HospitalInfo) ? HospitalInfo : null;
                    p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                    p.Order_ForDealer__c = SecondDealer;
                }
                P.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                P.Order_ForDealerTextID__c = coc.Order_ForDealerTextID__c;
                p.Order_date__c = coc.Order_date__c;
                p.SummonsForDirction__c = coc.SummonsForDirction__c;
                //add by rentx
                p.OutPattern__c = coc.OutPattern__c;
                // update start by vivek 2019-7-15
                if(p.SummonsStatus_c__c== '价格未定'){
                    p.NoConfirmedPrice__c = false;
                    p.SummonsStatus_c__c= '已完成';
                }else{
                    p.SummonsStatus_c__c = '草案中';
                }
                // p.SummonsStatus_c__c = '草案中';
                // update end by vivek 2019-7-15
                Integer i = 1;
                //Map<String,String> ProductOldMap = new Map<String, String>();
                for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc)  {
                    if(ass.check == true){
                        if(ass.orderdetails1.Delivery_List_RMB__c < 0){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入正确的出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入正确的出货单价 (元)。', '');
                        }
                        Consumable_orderdetails__c InsAfterDel = new Consumable_orderdetails__c();
                        if(ass.orderdetails1.Delivery_List_RMB__c == null && coc.SummonsForDirction__c !='医院试用'){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入出货单价 (元)。', '');
                        }
                        if(ass.orderdetails1.Delivery_List_RMB__c == 0 && (coc.SummonsForDirction__c =='销售给二级经销商' || coc.SummonsForDirction__c =='直接销售给医院')){
                            // ass.orderdetails1.Delivery_List_RMB__c.addError('请输入出货单价 (元)。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入出货单价 (元)。', '');
                        }
                        if(ass.orderdetails1.Box_Piece__c == null ||ass.orderdetails1.Box_Piece__c ==''){
                            // ass.orderdetails1.Box_Piece__c.addError('请输入单位。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入单位。', '');
                        }
                        if(ass.orderdetails1.Box_Piece__c == '盒'){
                            if(ass.orderdetails1.Shipment_Count__c > ass.Boxnumber){
                                //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
                                if(ass.oldCheck == false){
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.Prod.Name__c + '库存不足', '');
                                }else{
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足', '');
                                }
                            }
                        }else if(ass.orderdetails1.Box_Piece__c == '个'){
                            if(ass.orderdetails1.Shipment_Count__c > ass.Piecenumber){
                                if(ass.oldCheck == false){
                                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.Prod.Name__c + '库存不足', '');
                                }else{
                                    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                                    return new ResponseBodyLWC('Error',500, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足', '');
                                }
                            }
                        }
                        if(ass.orderdetails1.Shipment_Count__c == null||ass.orderdetails1.Shipment_Count__c==0){
                            // ass.orderdetails1.Shipment_Count__c.addError('请输入出货数量。');
                            // return null;
                            return new ResponseBodyLWC('Error',500, '请输入出货数量。', '');
                        }else{
                            String str = string.valueOf(i);
                            if(str.length() == 1){
                                str = '0' + str;
                            }
                            InsAfterDel.Name = p.name + '-'+ str;
                            InsAfterDel.Shipment_Count__c = ass.orderdetails1.Shipment_Count__c;
                            InsAfterDel.Consumable_order__c = ESetId;
                            InsAfterDel.Consumable_Product__c = ass.Prod.id;
                            InsAfterDel.Intra_Trade_List_RMB__c =ass.Prod.Intra_Trade_List_RMB__c;
                            InsAfterDel.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
                            InsAfterDel.Box_Piece__c = ass.orderdetails1.Box_Piece__c;
                            InsAfterDel.Out_unit__c = ass.orderdetails1.Box_Piece__c;
                            //InsAfterDel.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
                            InsAfterDel.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
                            InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
                            //add by rentx 2021-2-26 start
                            InsAfterDel.isOutPattern__c = ass.hospitalSpecialOffer;
                            //add by rentx 2021-2-26 end
                            i++;
                            Ins.add(InsAfterDel);
                        }
                    }
                }
                update p;
                List<Consumable_orderdetails__c> qs = New List<Consumable_orderdetails__c>();
                qs = [SELECT Id FROM Consumable_orderdetails__c WHERE Consumable_order__c =:ESetId];
                if (qs.size()>0){
                    delete qs;
                }
                if(Ins.size()>0){
                    insert Ins;
                }
            }
        // }catch (Exception ex) {
        //     Database.rollback(sp);
        //     // ApexPages.addMessages(ex);
        //     // return null;
        //     //return new ResponseBodyLWC('Error',500, ex.getMessage(), '');
        //     return new ResponseBodyLWC('Error',500, JSON.serialize(ex), '');
        // }
        data.put('ESetId',ESetId);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    public static void checkOutPattern(){
        //根据用户选中的产品给 出库单上的是否医院特价出库字段赋值
        Integer isHos = 0;
        for(ConsumableorderdetailsInfo CheckCount : pageRecords) {
            if (CheckCount.check == true && CheckCount.hospitalSpecialOffer == true) {
                ishos = ishos +1;
            }
        }
        if (isHos > 0) {
            coc.OutPattern__c = true;
        }else{
            coc.OutPattern__c = false;
        }
    }
    //打印PDF
    @AuraEnabled
    public static ResponseBodyLWC PraseToPDF(Consumable_order__c cocLwc,String ESetId){
        System.debug('cocLwc = ' + cocLwc);
        System.debug('ESetId = ' + ESetId);
        coc = cocLwc;
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        if(coc.SummonsStatus_c__c =='批准'){
            Consumable_order__c P = new Consumable_order__c();
            List<Consumable_order__c> cocinfo = New List<Consumable_order__c>();
            // update start by vivek 2019-7-15 add “NoConfirmedPrice__c” in select
            cocinfo = [SELECT Id,Name,SummonsStatus_c__c,NoConfirmedPrice__c,Dealer_Info__c,Order_ForHospital__c,SummonsForDirction__c,Billed_Status__c FROM Consumable_order__c WHERE Id =:ESetId];
            // update end by vivek 2019-7-15
                if (cocinfo.size()>0){
                    p = cocinfo[0];
                }
            p.SummonsStatus_c__c = '出库单已打印';
            update p;
        }
        data.put('ESetId',ESetId);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    // Data Bean
    class ConsumableorderdetailsInfo implements Comparable {
        @AuraEnabled
        public Boolean check { get; set; }
        @AuraEnabled
        public Boolean oldCheck { get; set; }
        @AuraEnabled
        public Consumable_Orderdetails__c orderdetails1 { get; set; }
        @AuraEnabled
        public Consumable_order_details2__c orderdetails2 { get; set; }
        @AuraEnabled
        public Product2__c Prod { get; set; }
        @AuraEnabled
        public Decimal Boxnumber { get; set; }
        @AuraEnabled
        public Decimal Piecenumber { get; set; }
        @AuraEnabled
        public Decimal allnumber { get; set; }
        @AuraEnabled
        public Decimal oldConsumableCount { get; set; }
        @AuraEnabled
        public Boolean canSelect { get; set; }
        @AuraEnabled
        public Boolean sortBy { get; set; }
        @AuraEnabled
        public Integer packinglist { get; set; }
        @AuraEnabled
        public String approbation_No { get; set; }
        @AuraEnabled
        public Date expiration_Date { get; set; }
        @AuraEnabled
        public String boxorpiecein { get; set; }
        public List<SelectOption> boxorpiece { get; set; }
        @AuraEnabled
        public Map<String, String> boxorpieceMap { get; set; }
        @AuraEnabled
        public Attachment concc { get; set; }
        @AuraEnabled
        public String BoxPiece { get; set; }
        @AuraEnabled
        public Boolean hospitalSpecialOffer { get; set; }
        @AuraEnabled
        public Boolean hosPro { get; set; }
        public ConsumableorderdetailsInfo(){}
        public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) {
            check = true;
            oldCheck = true;
            orderdetails1 = e;
            orderdetails2 = new Consumable_order_details2__c();
            Prod = e.Consumable_Product__r;
            oldConsumableCount = e.Shipment_Count__c;
            canSelect = true;
            allnumber = 0;
            Boxnumber = 0;
            Piecenumber = 0;
            BoxPiece = e.Box_Piece__c;
            boxorpiece = new List<SelectOption>();
            boxorpiece.add(new SelectOption('盒', '盒'));
            boxorpiece.add(new SelectOption('个', '个'));
            boxorpieceMap = new Map<String, String>();
            boxorpieceMap.put('盒', '盒');
            boxorpieceMap.put('个', '个');
            hospitalSpecialOffer = false;
            hosPro = false;
        }
        // 消耗品发货明细
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            check = true;
            oldCheck = true;
            orderdetails1 = new Consumable_Orderdetails__c();
            orderdetails2 = e;
            Prod = e.Consumable_Product__r;
            canSelect = true;
            allnumber = 0;
            Boxnumber = 0;
            Piecenumber = 0;
            //boxorpiece = new List<SelectOption>();
            //boxorpiece.add(new SelectOption('盒', '盒'));
            //boxorpiece.add(new SelectOption('个', '个'));
            hospitalSpecialOffer = false;
            hosPro = false;
        }
        //附件
        public ConsumableorderdetailsInfo(Attachment e) {
            concc = e;
            hospitalSpecialOffer = false;
            hosPro = false;
        }
        public ConsumableorderdetailsInfo(Product2__c e) {
            check = false;
            oldCheck = false;
            orderdetails1 = new Consumable_Orderdetails__c();
            orderdetails2 = new Consumable_order_details2__c();
            Prod = e;
            //oldConsumableCount = null;
            canSelect = true;
            allnumber = 0;
            Boxnumber = 0;
            Piecenumber = 0;
            orderdetails1.Box_Piece__c = '盒';
            boxorpiece = new List<SelectOption>();
            boxorpiece.add(new SelectOption('盒', '盒'));
            boxorpiece.add(new SelectOption('个', '个'));
            boxorpieceMap = new Map<String, String>();
            boxorpieceMap.put('盒', '盒');
            boxorpieceMap.put('个', '个');
            hospitalSpecialOffer = false;
            hosPro = false;
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            ConsumableorderdetailsInfo compareToorderdetails1 = (ConsumableorderdetailsInfo) compareTo;
            Integer returnValue = 0;
            if (sortBy == false) {
                if (Boxnumber > compareToorderdetails1.Boxnumber) {
                    returnValue = -1;
                } else if (Boxnumber < compareToorderdetails1.Boxnumber) {
                    returnValue = 1;
                }
                return returnValue;
            } else {
                if (Boxnumber > compareToorderdetails1.Boxnumber) {
                    returnValue = 1;
                } else if (Boxnumber < compareToorderdetails1.Boxnumber) {
                    returnValue = -1;
                }
                return returnValue;
            }
        }
    }
    class ConsumableorderdetailsInfoLwc{
        @AuraEnabled
        public Boolean check { get; set; }
        @AuraEnabled
        public Boolean oldCheck { get; set; }
        @AuraEnabled
        public Consumable_Orderdetails__c orderdetails1 { get; set; }
        @AuraEnabled
        public Consumable_order_details2__c orderdetails2 { get; set; }
        @AuraEnabled
        public Product2__c Prod { get; set; }
        @AuraEnabled
        public Decimal Boxnumber { get; set; }
        @AuraEnabled
        public Decimal Piecenumber { get; set; }
        @AuraEnabled
        public Decimal allnumber { get; set; }
        @AuraEnabled
        public Decimal oldConsumableCount { get; set; }
        @AuraEnabled
        public Boolean canSelect { get; set; }
        @AuraEnabled
        public Boolean sortBy { get; set; }
        @AuraEnabled
        public Integer packinglist { get; set; }
        @AuraEnabled
        public String approbation_No { get; set; }
        @AuraEnabled
        public Date expiration_Date { get; set; }
        @AuraEnabled
        public String boxorpiecein { get; set; }
        public List<SelectOption> boxorpiece { get; set; }
        @AuraEnabled
        public Map<String, String> boxorpieceMap { get; set; }
        @AuraEnabled
        public Attachment concc { get; set; }
        @AuraEnabled
        public String BoxPiece { get; set; }
        @AuraEnabled
        public Boolean hospitalSpecialOffer { get; set; }
        @AuraEnabled
        public Boolean hosPro { get; set; }
        @AuraEnabled
        public List<Map<String,String>> unitOptions{ get; set; }
        @AuraEnabled
        public String unitValue{ get; set; }
        @AuraEnabled
        public Integer shipmentNumber{ get; set; }
        @AuraEnabled
        public Decimal shippingUnitPrice{ get; set; }
        @AuraEnabled
        public String recordId{ get; set; }
        @AuraEnabled
        public String Id{ get; set; }
        @AuraEnabled
        public String Name{ get; set; }
        @AuraEnabled
        public String Category3{ get; set; }
        @AuraEnabled
        public String Category4{ get; set; }
        @AuraEnabled
        public String Category5{ get; set; }
    }
}
force-app/main/default/classes/LexSummonsCreatController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/NFMUtil.cls
@@ -1321,9 +1321,7 @@
        request.setEndpoint(hostUrl + '/api/nfm/reCallNFM624Batch?nfm624RequestId=' + GeDataList[0].nfm624RequestId + '&rowDataId=' + rowDataId);
        request.setMethod('GET');
        request.setHeader('pi-token',documentPI.token);
        request.setTimeout(60000);
        HttpResponse response = http.send(request);
        System.debug('response = ' + response);
        System.debug('send batchSendToAWS624');
    }
    //zhj batch 调用624接口的时候 需要调用AWS 2023-01-08 end
@@ -1344,7 +1342,7 @@
            System.debug('documentPI.token = ' + documentPI.token);
            request.setEndpoint(hostUrl + '/api/nfm/reCallNFM624?reCallNfm624RequestId=' + GeDataList[0].reCallNfm624RequestId + '&rowDataId=' + rowDataId);
            request.setMethod('GET');
            request.setHeader('pi-token',documentPI.token);
            request.setHeader('pi-token',documentPI.token);
            HttpResponse response = http.send(request);
            System.debug('send againSendToAWS624');
        }
@@ -1377,74 +1375,6 @@
    public static Integer ControllerUtil() {
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
force-app/main/default/classes/PaginatedListControllerLwc.cls
New file
@@ -0,0 +1,42 @@
public with sharing class PaginatedListControllerLwc {
    @AuraEnabled
    public static PaginatedAccounts getAccountsPaginated(Integer pageSize, Integer pageToken, String sortField, String sortOrder) {
        system.debug('init soql'+ String.valueOf(pageSize)  + String.valueof(pageToken));
        PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
        String paginatedQuery = 'SELECT Name, Type, Phone, NumberOfEmployees, Owner.Name'
                 + ' FROM Account'
                 + ' WITH SECURITY_ENFORCED';
        system.debug('sort field:'+sortField + '--'+sortOrder);
        if(sortField != null && sortOrder !=null) {
            paginatedQuery += ' ORDER BY '+ sortField +' '+ sortOrder;
        }
        paginatedQuery += ' LIMIT ' + pageSize;
        paginatedQuery += ' OFFSET ' + pageToken;
        system.debug('SOQL:' + paginatedQuery);
        paginatedAccounts.records = Database.query(paginatedQuery);
        Integer totalCount = [SELECT COUNT() FROM Account];
        paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount) ? pageToken + pageSize : null;
        paginatedAccounts.recordStart = pageToken + 1;
        paginatedAccounts.pageNumber = pageToken/pageSize + 1;
        Integer recordEnd = pageSize * paginatedAccounts.pageNumber;
        paginatedAccounts.recordEnd = totalCount >= recordEnd ? recordEnd : totalCount;
        paginatedAccounts.totalRecords = totalCount;
        return paginatedAccounts;
    }
    public class PaginatedAccounts {
        @AuraEnabled
        public List<Account> records;
        @AuraEnabled
        public Integer nextPageToken;
        @AuraEnabled
        public Integer pageNumber {get;set;}
        @AuraEnabled
        public Integer totalRecords {get;set;}
        @AuraEnabled
        public Integer recordStart {get;set;}
        @AuraEnabled
        public Integer recordEnd {get;set;}
    }
}
force-app/main/default/classes/PaginatedListControllerLwc.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/SaleOrderController.cls
@@ -222,10 +222,12 @@
        List<hospitalprice__c> hpList = [select id,hospital__c,product__c from hospitalprice__c where account__c = :accountid];
        if (hpList!= null && hpList.size() > 0) {
            for (hospitalprice__c hp : hpList) {
                proIdMap.put((''+hp.product__c).subString(0,15)+'是', '');
                if (hp.hospital__c ==coc.Order_ForHospital__c) {
                    proHosMap.put((''+hp.product__c).subString(0,15)+'是', '');
                }
                if(hp.product__c!=null && String.valueof(hp.product__c).length()>=15){//Add by Li Jun for issue fix 20230403
                    proIdMap.put((''+hp.product__c).subString(0,15)+'是', '');
                    if (hp.hospital__c ==coc.Order_ForHospital__c) {
                        proHosMap.put((''+hp.product__c).subString(0,15)+'是', '');
                    }
                }
            }
        }
force-app/main/default/classes/SampleLookupController.cls
New file
@@ -0,0 +1,89 @@
public with sharing class SampleLookupController {
    private final static Integer MAX_RESULTS = 5;
    @AuraEnabled(cacheable=true scope='global')
    public static List<LookupSearchResult> search(String searchTerm, List<String> selectedIds) {
        // Prepare query parameters
        searchTerm += '*';
        // Execute search query
        // List<List<SObject>> searchResults = [
        //     FIND :searchTerm
        //     IN ALL FIELDS
        //     RETURNING
        //         Account(Id, Name, BillingCity WHERE id NOT IN :selectedIds),
        //         Opportunity(Id, Name, StageName WHERE id NOT IN :selectedIds)
        //     LIMIT :MAX_RESULTS
        // ];
        // Prepare results
        List<LookupSearchResult> results = new List<LookupSearchResult>();
        // Extract Accounts & convert them into LookupSearchResult
        String accountIcon = 'standard:account';
        //Account[] accounts = (List<Account>) searchResults[0];
        Account[] accounts = [select id,Name,CreatedDate,BillingCity from Account limit 5];
        for (Account account : accounts) {
            String subtitle = account.BillingCity == null ? 'Account' : 'Account • ' + account.BillingCity;
            results.add(new LookupSearchResult(account.Id, 'Account', accountIcon, account.Name, subtitle));
        }
        // Extract Opportunities & convert them into LookupSearchResult
        // String opptyIcon = 'standard:opportunity';
        // Opportunity[] opptys = (List<Opportunity>) searchResults[1];
        // for (Opportunity oppty : opptys) {
        //     results.add(
        //         new LookupSearchResult(
        //             oppty.Id,
        //             'Opportunity',
        //             opptyIcon,
        //             oppty.Name,
        //             'Opportunity • ' + oppty.StageName
        //         )
        //     );
        // }
        // Optionnaly sort all results on title
        results.sort();
        System.debug('results = ' + results);
        return results;
    }
    @AuraEnabled(cacheable=true scope='global')
    public static List<LookupSearchResult> getRecentlyViewed() {
        List<LookupSearchResult> results = new List<LookupSearchResult>();
        // Get recently viewed records of type Account or Opportunity
        List<RecentlyViewed> recentRecords = [
            SELECT Id, Name, Type
            FROM RecentlyViewed
            WHERE Type = 'Account' OR Type = 'Opportunity'
            ORDER BY LastViewedDate DESC
            LIMIT 5
        ];
        // Convert recent records into LookupSearchResult
        for (RecentlyViewed recentRecord : recentRecords) {
            if (recentRecord.Type == 'Account') {
                results.add(
                    new LookupSearchResult(
                        recentRecord.Id,
                        'Account',
                        'standard:account',
                        recentRecord.Name,
                        'Account • ' + recentRecord.Name
                    )
                );
            } else {
                results.add(
                    new LookupSearchResult(
                        recentRecord.Id,
                        'Opportunity',
                        'standard:opportunity',
                        recentRecord.Name,
                        'Opportunity • ' + recentRecord.Name
                    )
                );
            }
        }
        return results;
    }
}
force-app/main/default/classes/SampleLookupController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/TestClassByLiJun.cls
New file
@@ -0,0 +1,5 @@
public without sharing class TestClassByLiJun {
    public TestClassByLiJun() {
        system.debug(Test.isRunningTest());
    }
}
force-app/main/default/classes/TestClassByLiJun.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.html
New file
@@ -0,0 +1,12 @@
<template>
    <lightning-input
        step="0.01"
        type="number"
        name="shipmentUnitPrice"
        label="deliveryOrderNo"
        variant="label-hidden"
        data-field="shipmentUnitPrice"
        value={shipmentUnitPrice}
        onblur={shipmentUnitPriceBlur}
    ></lightning-input>
</template>
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js
New file
@@ -0,0 +1,24 @@
import { LightningElement,api,track } from 'lwc';
export default class CustomShippingUnitPriceComp extends LightningElement {
    @api recordId;
    @track shipmentUnitPrice = 0.00;
    connectedCallback(){
        console.log('CustomShippingUnitPriceComp recordId = ' + this.recordId);
    }
    shipmentUnitPriceBlur(event){
        console.log('shipmentUnitPriceBlur')
        this.shipmentUnitPrice = event.target.value;
        this.dispatchEvent(new CustomEvent('shipmentunitprice', {
            composed: true,
            bubbles: true,
            cancelable: true,
            detail: {
                data: { shipmentunitprice: this.shipmentUnitPrice, recordId: this.recordId }
            }
        }));
    }
}
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/customUnitComp/customUnitComp.html
New file
@@ -0,0 +1,13 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <!-- <select id="citySel" class="selectUnit" onchange={handleDataChange} data-field="selectUnit">
        <template for:each={unitOptions} for:item="uo">
            <option value={uo.value} key={uo.value}>{uo.label}</option>
        </template>
    </select> -->
    <div class="picklist-container">
        <lightning-combobox name="selectUnit" label="unit" value={unitValue} variant="label-hidden"
            onchange={handleDataChange} data-field="selectUnit" options={unitOptions}></lightning-combobox>
    </div>
</template>
force-app/main/default/lwc/customUnitComp/customUnitComp.js
New file
@@ -0,0 +1,26 @@
import { LightningElement,api } from 'lwc';
export default class CustomUnitComp extends LightningElement {
    @api unitValue;
    @api unitOptions;
    @api recordId;
    connectedCallback(){
        console.log('unitValue = ' + this.unitValue);
        console.log('unitOptions = ' + JSON.stringify(this.unitOptions));
        console.log('recordId = ' + this.recordId);
    }
    handleDataChange(event){
        console.log('dataChange' + event.target.value);
        this.dispatchEvent(new CustomEvent('unitchange', {
            composed: true,
            bubbles: true,
            cancelable: true,
            detail: {
                data: { unitValue: this.unitValue, recordId: this.recordId }
            }
        }));
    }
}
force-app/main/default/lwc/customUnitComp/customUnitComp.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentAmount.html
New file
@@ -0,0 +1,7 @@
<template>
    <c-custom-shipment-Amount-comp
    shipment-amount={typeAttributes.shipmentAmount}
    record-id={typeAttributes.recordId}>
    </c-custom-shipment-Amount-comp>
</template>
force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentNumber.html
New file
@@ -0,0 +1,6 @@
<template>
    <c-custom-shipment-number-comp
    record-id={typeAttributes.recordId}>
    </c-custom-shipment-number-comp>
</template>
force-app/main/default/lwc/lexCustomLightningDatatable/customShippingUnitPrice.html
New file
@@ -0,0 +1,6 @@
<template>
    <c-custom-shipping-unit-price-comp
    record-id={typeAttributes.recordId}>
    </c-custom-shipping-unit-price-comp>
</template>
force-app/main/default/lwc/lexCustomLightningDatatable/customUnit.html
New file
@@ -0,0 +1,11 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <c-custom-unit-comp
        unit-value={typeAttributes.unitValue}
        unit-options={typeAttributes.unitOptions}
        record-id={typeAttributes.recordId}
        onunitchange={handleDataChange}
    >
    </c-custom-unit-comp>
</template>
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.html
New file
@@ -0,0 +1,3 @@
<template>
</template>
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js
New file
@@ -0,0 +1,33 @@
import LightningDatatable from 'lightning/datatable';
import customUnitTemplate from './customUnit.html';
import customShipmentNumberTemplate from './customShipmentNumber.html';
import customShippingUnitPriceTemplate from './customShippingUnitPrice.html';
import customShipmentAmountTemplate from './customShipmentAmount.html';
import { loadStyle } from 'lightning/platformResourceLoader';
import LexCustomDataTable from '@salesforce/resourceUrl/LexCustomDataTable';
export default class LexCustomLightningDatatable extends LightningDatatable {
    static customTypes = {
        customUnit: {
            template: customUnitTemplate,
            typeAttributes: ['unitValue', 'unitOptions', 'recordId']
        },
        customShipment: {
            template: customShipmentNumberTemplate,
            typeAttributes: ['recordId']
        },
        customShipmentUnitPrice: {
            template: customShippingUnitPriceTemplate,
            typeAttributes: ['recordId']
        },
        customShipmentAmount: {
            template: customShipmentAmountTemplate,
            typeAttributes: ['shipmentAmount', 'recordId']
        }
    };
    constructor() {
        super();
        Promise.all([loadStyle(this, LexCustomDataTable)]).then(() => {});
    }
}
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.html
New file
@@ -0,0 +1,196 @@
<template>
    <template if:true={showcount}>
        <div style="border: 1px solid #D4D4D4;border-radius:5px;">
            <div style="border-top: 3px solid #51606E;;border-bottom: 1px solid #D4D4D4;padding:3px;">
                <div>
                    <p style="font-size: 19px;float:left"><strong>库存盘点</strong></p>
                </div>
                <div style="margin-left:400px;">
                    <lightning-button label="盘点确认" title="盘点确认" onclick={saveConfirm}></lightning-button></td>
                </div>
            </div>
            <div style="padding:10px;">
                <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;">
                    <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                        <table>
                            <colgroup>
                                <col width="160px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="70px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="90px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="85px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="70px" />
                                <col width="100px" />
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td></td>
                                    <td align="right">Barcode</td>
                                    <td style="width:600px"><lightning-textarea name="Barcode" label=""
                                            onchange={handleChange}></lightning-textarea></td>
                                    <td align="right"></td>
                                    <td></td>
                                    <td><lightning-button label="Barcode" title="Barcode录入" onclick={barcodeEntrys}
                                            style="width: 150px;"></lightning-button>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
                <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;">
                    <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                        <p style="font-size: 16px;"><strong>在库商品库存一览</strong></p>
                    </div>
                    <div style="padding:10px;">
                        <div style="height: 300px;">
                            <template if:true={showTable}>
                                <c-lex-custom-lightning-datatable key-field="ProdId" data={data} columns={columns}
                                    ondiffreasons={diffreasons} onrowselection={getSelectedRows}
                                    selected-rows={selectedRows}>
                                </c-lex-custom-lightning-datatable>
                            </template>
                            <!-- 加载框 -->
                            <div if:true={casesSpinner} class="slds-spinner_inline spinner-padding"
                                style="margin-top:10px;">
                                <lightning-spinner variant="brand" alternative-text="Loading Cases" size="medium">
                                </lightning-spinner>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;margin-top:50px">
                <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                    <table>
                        <tr>
                            <td>
                                <p style="font-size: 16px;"><strong>调整明细</strong></p>
                            </td>
                            <template if:true={showbutton}>
                                <td align="center"> <lightning-button label="下载本次盘点库存变化明细" title="下载本次盘点库存变化明细"
                                        onclick={exportData} style="width: 150px;"></lightning-button></td>
                            </template>
                        </tr>
                    </table>
                </div>
                <div style="padding:10px;">
                    <template if:true={showTable}>
                        <c-lwc-datatable-utility records={codPageRecords} total-records={codPageRecords.length}
                            columns={column} key-field="Id" show-search-box="true"
                            max-row-selection={codPageRecords.length} onpaginatorchange={handlePaginatorChange}>
                        </c-lwc-datatable-utility>
                    </template>
                </div>
            </div>
        </div>
    </template>
    <template if:true={EditAble}>
        <div style="border: 1px solid #D4D4D4;border-radius:5px;">
            <div style="border-top: 3px solid #51606E;;border-bottom: 1px solid #D4D4D4;padding:3px;">
                <div style="border: 1px solid #D4D4D4;border-radius:5px;">
                    <div style="border-top: 3px solid #51606E;;border-bottom: 1px solid #D4D4D4;padding:6px;">
                        <p style="font-size: 19px;"><strong>盘点情况一览</strong></p>
                    </div>
                    <div class="acc-container">
                        <lightning-record-edit-form object-api-name="Consumable_order__c" record-id={conId}>
                            <lightning-layout multiple-rows="true">
                                <!-- <template if:true={isSummonsFlag}> -->
                                <lightning-layout-item class="hehe-layoutItem" size="4">
                                    <lightning-output-field field-name="Name"></lightning-output-field>
                                </lightning-layout-item>
                                <lightning-layout-item class="hehe-layoutItem" size="4">
                                    <lightning-output-field field-name="Inventory_date__c"></lightning-output-field>
                                </lightning-layout-item>
                                <lightning-layout-item class="hehe-layoutItem" size="4">
                                </lightning-layout-item>
                                <!-- </template> -->
                            </lightning-layout>
                        </lightning-record-edit-form>
                    </div>
                </div>
            </div>
            <lightning-accordion allow-multiple-sections-open class="slds-m-around_medium"
                active-section-name={activeSections}>
                <lightning-accordion-section name="dataExpand" label="盘点明细">
                    <table class="list" border="0" cellpadding="0" cellspacing="0" id="example">
                        <thead>
                            <tr class="headerRow">
                                <th>消耗品名称</th>
                                <th>库存</th>
                                <th>盘点</th>
                                <th>丢失</th>
                                <th>寻回</th>
                                <th>差异原因</th>
                            </tr>
                        </thead>
                        <tbody>
                            <template for:each={detailData} for:item="m">
                                <tr key={m.Prod.Name__c}>
                                    <td>{m.Prod.Name__c}</td>
                                    <td>{m.orderdetails1.Count_Sum__c}</td>
                                    <td>{m.orderdetails1.inventory_sum__c}</td>
                                    <td>{m.orderdetails1.Diff__c}</td>
                                    <td>{m.orderdetails1.Product_Refind__c}</td>
                                    <td>{m.orderdetails1.Lose_reason__c}</td>
                                </tr>
                            </template>
                        </tbody>
                    </table>
                </lightning-accordion-section>
            </lightning-accordion>
            <lightning-accordion allow-multiple-sections-open class="slds-m-around_medium"
                active-section-name={activeSections}>
                <lightning-accordion-section name="dataExpand" label="在库调整明细">
                    <table class="list" border="0" cellpadding="0" cellspacing="0" id="examples">
                        <thead>
                            <tr class="headerRow">
                                <th>消耗品名称</th>
                                <th>产品型号</th>
                                <th>差异原因</th>
                                <th>是否丢失</th>
                            </tr>
                        </thead>
                        <tbody>
                            <template for:each={adjustdata} for:item="m">
                                <tr key={m.Prod.Name__c}>
                                    <td>{m.Prod.Name__c}</td>
                                    <td>{m.Prod.Asset_Model_No__c}</td>
                                    <td>{m.orderdetails2.Lose_reason__c}</td>
                                    <td>{m.orderdetails1.Diff__c}</td>
                                    <td>{m.orderdetails1.Product_Refind__c}</td>
                                    <td>{m.orderdetails2.Lose_Flag__c}</td>
                                </tr>
                            </template>
                        </tbody>
                    </table>
                </lightning-accordion-section>
            </lightning-accordion>
        </div>
    </template>
</template>
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.js
New file
@@ -0,0 +1,502 @@
import { LightningElement, wire, api, track } from 'lwc';
import oninit from '@salesforce/apex/LexInventoryController.init';
import barcodeEntry from '@salesforce/apex/LexInventoryController.searchConsumableorderdetails';
import saveConfirm from '@salesforce/apex/LexInventoryController.save';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { NavigationMixin } from 'lightning/navigation';
//库存盘点主页面数据
const columns = [
    {
        label: '是否盘点',
        fieldName: 'iscount',
        type: 'checkbox',
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '消耗品名称',
        fieldName: 'Name__c',
        type: 'Name',
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '规格',
        fieldName: 'Packing_list_manual__c',
        hideDefaultActions: true
    },
    {
        label: '单位',
        fieldName: 'boxPiece',
        hideDefaultActions: true
    },
    {
        label: '有效期内库存',
        fieldName: 'limitCount',
        hideDefaultActions: true
    },
    {
        label: '过期库存',
        fieldName: 'overlimitCount',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '盘点',
        fieldName: 'Pandian',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '丢失',
        fieldName: 'Diff',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '寻回    ',
        fieldName: 'refind',
        hideDefaultActions: true,
        initialWidth: 150
    },
    {
        label: '差异原因',
        // fieldName: "DiffReason",
        hideDefaultActions: true,
        type: 'customDiffReason',
        typeAttributes: {
            DiffReason: { fieldName: 'DiffReason' },
            ProdId: { fieldName: 'ProdId' }
        }
    }
];
//调整明细
const column = [
    {
        label: '消耗品名称',
        fieldName: 'Name__c',
        type: 'Name',
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '单位',
        fieldName: 'Box_Piece__c',
        hideDefaultActions: true
    },
    {
        label: 'barcode',
        fieldName: 'Bar_Code__c',
        hideDefaultActions: true,
        initialWidth: 150
    },
    {
        label: '调整原因',
        fieldName: 'DiffReason',
        hideDefaultActions: true
    }
];
//盘点明细
const dcolumns = [
    {
        label: '消耗品名称',
        fieldName: 'Name__c',
        type: 'Name',
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '库存',
        fieldName: 'Box_Piece__c',
        hideDefaultActions: true
    },
    {
        label: '盘点',
        fieldName: 'Bar_Code__c',
        hideDefaultActions: true,
        initialWidth: 150
    },
    {
        label: '丢失',
        fieldName: 'DiffReason',
        hideDefaultActions: true
    },
    {
        label: '寻回',
        fieldName: 'DiffReason',
        hideDefaultActions: true
    },
    ,
    {
        label: '差异原因',
        fieldName: 'DiffReason',
        hideDefaultActions: true
    }
];
//在库调整明细
const stockadjustcolumns = [
    {
        label: '消耗品名称',
        fieldName: 'Name__c',
        type: 'Name',
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '产品型号',
        fieldName: 'Box_Piece__c',
        hideDefaultActions: true
    },
    {
        label: '差异原因',
        fieldName: 'Bar_Code__c',
        hideDefaultActions: true,
        initialWidth: 150
    },
    {
        label: '是否丢失',
        fieldName: 'DiffReason',
        hideDefaultActions: true
    }
];
export default class LexInventoryCount extends NavigationMixin(
    LightningElement
) {
    columns = columns;
    column = column;
    stockadjustcolumns = stockadjustcolumns;
    dcolumns = dcolumns;
    @track data = [];
    @track codPageRecords = [];
    @track accountName;
    @track agencyProType;
    @track userWorkLocation;
    @track showTable = false;
    @track showbutton = false;
    @track barCode;
    @track ConsumableorderdetailsRecordsview = [];
    @track consumableorderdetailsRecords = [];
    @track showTable = false;
    @track barcode;
    @track showcount = true;
    @track iSinventory;
    @track numberDetail;
    //加载框
    @track casesSpinner = true;
    //row
    @track selectedRows = [];
    //inventoryList
    @track isSummonsFlag;
    //展开栏
    activeSections = ['dataExpand'];
    columnHeader = ['消耗品名称', '单位', 'barCode', '调整原因'];
    //确认一览
    @track eSetId = '';
    @track EditAble = false;
    @track selectedData;
    @track conId;
    @track detailData = [];
    @track adjustdata = [];
    //获取链接参数
    getQueryString(name) {
        console.log('getQueryString name ' + name);
        let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
        let r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return decodeURIComponent(r[2]);
        }
        return null;
    }
    connectedCallback() {
        console.log('===>初始化');
        //获取ESetid
        this.eSetId = this.getQueryString('eSetId');
        this.eSetId = this.eSetId == null ? '' : this.eSetId;
        console.log(' this.eSetId' + this.eSetId);
        this.EditAble = false;
        this.showcount = true;
        oninit()
            .then((result) => {
                console.log('1112' + JSON.stringify(result));
                result = JSON.parse(JSON.stringify(result));
                console.log('result.status = ' + result.status);
                console.log(
                    ' ConsumableorderdetailsRecordsview= ' +
                        result.entity.ConsumableorderdetailsRecordsview
                );
                this.ConsumableorderdetailsRecordsview = JSON.parse(
                    result.entity.ConsumableorderdetailsRecordsview
                );
                this.consumableorderdetailsRecords =
                    result.entity.consumableorderdetailsRecords;
                console.log(
                    ' consumableorderdetailsRecords= ' +
                        result.entity.consumableorderdetailsRecords
                );
                console.log(
                    '传参类型',
                    typeof this.consumableorderdetailsRecords
                );
                if (result.status == 'Success') {
                    console.log(
                        'this.ConsumableorderdetailsRecordsview[0] = ' +
                            JSON.stringify(
                                this.ConsumableorderdetailsRecordsview[0]
                            )
                    );
                    console.log(
                        'this.ConsumableorderdetailsRecordsview[0].length = ' +
                            this.ConsumableorderdetailsRecordsview[0].length
                    );
                    // let cloneData = [];
                    // for (let i in this.ConsumableorderdetailsRecordsview[0]) {
                    //   cloneData.push(JSON.parse(this.ConsumableorderdetailsRecordsview[0][i]));
                    // }
                    // console.log('cloneData = ' + typeof cloneData);
                    // console.log('cloneData = ' + cloneData);
                    // this.data = cloneData;
                    this.data = [];
                    this.data = this.ConsumableorderdetailsRecordsview[0];
                    console.log('this.data ==>' + JSON.stringify(this.data));
                    for (let i in this.data) {
                        this.data[i]['Name__c'] = this.data[i].Prod.Name__c;
                        this.data[i]['Packing_list_manual__c'] =
                            this.data[i].Prod.Packing_list_manual__c;
                    }
                    this.accountName = result.entity.accountName;
                    this.agencyProType = result.entity.agencyProType;
                    this.userWorkLocation = result.entity.userWorkLocation;
                    this.casesSpinner = false;
                    this.showTable = true;
                } else {
                    console.log('Error:' + result.errorMsg);
                    const evt = new ShowToastEvent({
                        title: '解析失败',
                        message: result.errorMsg,
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                }
            })
            .catch((error) => {
                console.log('error = ' + JSON.stringify(error));
            });
        //默认展开栏
        this.activeSections = ['dataExpand'];
        this.showTable = false;
        this.showbutton = false;
        //init
    }
    //录入barcode
    barcodeEntrys() {
        this.showTable = false;
        this.showbutton = false;
        console.log('进入录入');
        console.log(
            'this.consumableorderdetailsRecords===>' +
                this.consumableorderdetailsRecords
        );
        if (
            this.barcode == '' ||
            this.barcode == null ||
            this.barcode == 'undefined'
        ) {
            this.connectedCallback();
        }
        barcodeEntry({
            accountName: this.accountName,
            agencyProType: this.agencyProType,
            userWorkLocation: this.userWorkLocation,
            barcode: this.barcode,
            consumableorderdetailsRecordsLWC: this.consumableorderdetailsRecords
        })
            .then((result) => {
                // result = JSON.parse(JSON.stringify(result));
                this.codPageRecords = JSON.parse(result.entity.codPageRecords);
                for (var i in this.codPageRecords) {
                    this.codPageRecords[i]['Name__c'] =
                        this.codPageRecords[i].Prod.Name__c;
                    this.codPageRecords[i]['Box_Piece__c'] =
                        this.codPageRecords[i].orderdetails2.Box_Piece__c;
                    this.codPageRecords[i]['Bar_Code__c'] =
                        this.codPageRecords[i].orderdetails2.Bar_Code__c;
                }
                this.data = JSON.parse(
                    result.entity.consumableorderdetailsRecords
                );
                for (var i in this.data) {
                    this.data[i]['Name__c'] = this.data[i].Prod.Name__c;
                    this.data[i]['Packing_list_manual__c'] =
                        this.data[i].Prod.Packing_list_manual__c;
                }
                for (var i in this.data) {
                    if (this.data[i]['check']) {
                        this.selectedRows.push(this.data[i].ProdId);
                        console.log('selectedRows:' + this.selectedRows);
                    }
                }
                this.iSinventory = result.entity.iSinventory;
                console.log('iSinventory:' + this.iSinventory);
                this.showTable = true;
                this.showbutton = true;
                console.log(
                    ' this.codPageRecords=11111 ' + result.entity.codPageRecords
                );
                console.log('result录入= ' + JSON.stringify(result));
                console.log(
                    'result主页数据= ' +
                        result.entity.consumableorderdetailsRecords
                );
            })
            .catch((error) => {
                console.log('error = ' + JSON.stringify(error));
            });
    }
    //获取当前输入值
    handleChange(event) {
        let value = event.detail.value;
        console.log('value' + value);
        this.barcode = value;
    }
    getSelectedRows(event) {
        const selectedRows = event.detail.selectedRows;
        console.log('this.selectedRows = ' + this.selectedRows);
        for (var i in this.data) {
            this.data[i]['check'] = false;
        }
        for (var i in this.data) {
            for (var j in selectedRows) {
                if (this.data[i].Id == selectedRows[j].Id) {
                    this.data[i]['check'] = true;
                }
            }
        }
    }
    //导出为csv
    exportData() {
        console.log('导出');
        // Prepare a html table
        let doc = '<table>';
        // Add styles for the table
        doc += '<style>';
        doc += 'table, th, td {';
        doc += '    border: 1px solid black;';
        doc += '    border-collapse: collapse;';
        doc += '}';
        doc += '</style>';
        // Add all the Table Headers
        doc += '<tr>';
        this.columnHeader.forEach((element) => {
            doc += '<th>' + element + '</th>';
        });
        doc += '</tr>';
        // Add the data rows
        this.codPageRecords.forEach((record) => {
            doc += '<tr>';
            doc += '<th>' + record.Name__c + '</th>';
            doc += '<th>' + record.Box_Piece__c + '</th>';
            doc += '<th>' + record.Bar_Code__c + '</th>';
            doc += '<th>' + record.DiffReason + '</th>';
            doc += '</tr>';
        });
        doc += '</table>';
        var element =
            'data:application/vnd.ms-excel,' + encodeURIComponent(doc);
        let downloadElement = document.createElement('a');
        downloadElement.href = element;
        downloadElement.target = '_self';
        // use .csv as extension on below line if you want to export data as csv
        downloadElement.download = '库存变化明细.xls';
        document.body.appendChild(downloadElement);
        downloadElement.click();
    }
    //自定义dataType
    diffreasons(event) {
        const numberDetail = event.detail;
        // this.numberDetail = numberDetail;
        console.log('numberDetail' + JSON.stringify(numberDetail));
        for (var i in this.data) {
            if (this.data[i]['ProId'] == numberDetail.data.ProId) {
                this.data[i]['DiffReason'] = numberDetail.data.DiffReason;
            }
        }
        console.log(' this.data==>' + JSON.stringify(this.data));
    }
    saveConfirm() {
        console.log('进入盘点确认');
        var el = this.template.querySelector(
            'c-lex-custom-lightning-datatable'
        );
        var selected = el.getSelectedRows();
        this.selectedData = selected;
        console.log('选中数据' + JSON.stringify(this.selectedData));
        saveConfirm({
            iSinventory: this.iSinventory,
            consumableorderdetailsRecordsLWC: JSON.stringify(this.selectedData)
        })
            .then((result) => {
                console.log('result = ' + JSON.stringify(result));
                this.EditAble = true;
                this.showcount = false;
                // result = JSON.parse(JSON.stringify(result));
                // console.log('result = ' + JSON.stringify(result));
                // if (result.status == 'Success') {
                //   // let url = '/lexInventoryCount?eSetId=' + result.entity.eSetId;
                //   // this[NavigationMixin.Navigate]({
                //   //   type: 'standard__webPage',
                //   //   attributes: {
                //   //     url: url
                //   //   }
                //   // });
                //   this.EditAble = true;
                //   this.showcount = false;
                // } else {
                //   console.log('result.msg = ' + result.msg);
                //   const evt = new ShowToastEvent({
                //     title: '失败',
                //     message: result.msg,
                //     variant: 'error'
                //   });
                //   this.dispatchEvent(evt);
                // }
            })
            .catch((error) => {
                console.log('error = ' + JSON.stringify(error));
            });
    }
    // inits(){
    //   init({
    //     eSetId:this.eSetId
    //   }).then((result) => {
    //     result = JSON.parse(JSON.stringify(result));
    //     for(var i in result.entity.qs){
    //       this.conId = result.entity.qs[i].Id;
    //     }
    //     console.log('this.conId'+typeof( this.conId));
    //     this.detailData = JSON.parse(result.entity.consumableorderdetailsRecords);
    //     console.log('result盘点Id'+JSON.stringify(this.conId));
    //   })
    //   .catch((error) => {
    //     console.log("error = " + JSON.stringify(error));
    //   });
    // }
}
force-app/main/default/lwc/lexInventoryCount/lexInventoryCount.js-meta.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
        <isExposed>true</isExposed>
    <targets>
        <target>lightningCommunity__Page</target>
        <target>lightningCommunity__Default</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.css
New file
@@ -0,0 +1,29 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}
.datatable {
    max-height: 400px !important;
}
.tableColumn {
    margin-top: 5px !important;
    overflow-x: auto;
}
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.html
New file
@@ -0,0 +1,564 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <template if:true={isShowSpinner}>
        <lightning-spinner alternative-text="Loading" size="large"></lightning-spinner>
    </template>
    <!-- 搜索客户名 -->
    <template if:true={isModalOpen}>
        <!-- Modal/Popup Box LWC starts here -->
        <section role="dialog" tabindex="-1" aria-labelledby="modal-heading-01" aria-modal="true"
            aria-describedby="modal-content-id-1" class="slds-modal slds-fade-in-open">
            <div class="slds-modal__container">
                <!-- Modal/Popup Box LWC header here -->
                <header class="slds-modal__header">
                    <button class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse"
                        title="Close" onclick={closeModal}>
                        <lightning-icon icon-name="utility:close" alternative-text="close" variant="inverse"
                            size="small"></lightning-icon>
                        <span class="slds-assistive-text">Close</span>
                    </button>
                    <h2 id="modal-heading-01" class="slds-text-heading_medium slds-hyphenate">
                        经销商医院检索
                    </h2>
                </header>
                <!-- Modal/Popup Box LWC body starts here -->
                <div class="slds-modal__content slds-p-around_medium" id="modal-content-id-1">
                    <lightning-layout>
                        <lightning-layout-item flexibility="auto" padding="around-small">
                            <lightning-input type="text" label="医院名称" onchange={dataChange}
                                data-field="searchHospitalName" value={searchHospitalName}
                                variant="label-inline"></lightning-input>
                        </lightning-layout-item>
                        <lightning-layout-item flexibility="auto" padding="around-small">
                            <lightning-button label="检索" onclick={searchHospital}></lightning-button>
                        </lightning-layout-item>
                    </lightning-layout>
                    <div class="tableColumn">
                        <lightning-layout class="datatable">
                            <lightning-datatable class="datatabel slds-border_top" key-field="id" data={hospitalList}
                                columns={hospitalColumns} hide-checkbox-column="true"
                                onrowaction={searchHandleRowAction}>
                            </lightning-datatable>
                        </lightning-layout>
                    </div>
                </div>
                <!-- Modal/Popup Box LWC footer starts here -->
                <footer class="slds-modal__footer">
                    <button class="slds-button slds-button_neutral" onclick={closeModal} title="Cancel">
                        关闭
                    </button>
                </footer>
            </div>
        </section>
        <div class="slds-backdrop slds-backdrop_open"></div>
    </template>
    <div class="outerBorderCss">
        <div style="padding: 5px">
            <!-- 按钮 -->
            <div class="borderCss">
                <div style="padding: 10px">
                    <div lwc:dom="manual" class="resultDiv"></div>
                    <div draggable="false">
                        <!-- <lightning-button label="保存" onclick={neworderhead}
                            style="margin-left: 100px;"></lightning-button> -->
                        <table>
                            <colgroup>
                                <col width="150px" />
                                <col width="200px" />
                                <col width="200px" />
                                <col width="200px" />
                                <col width="200px" />
                                <col width="200px" />
                                <col width="90px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="85px" />
                                <col width="100px" />
                                <col width="10px" />
                                <col width="70px" />
                                <col width="100px" />
                            </colgroup>
                            <tr>
                                <td></td>
                                <!-- <td  colspan="4"><apex:commandButton onclick="saveConfirmJs('{!coc.SummonsStatus_c__c}');" value="保存" style="width:150px" rerender="dummy" rendered="{!(EditDelCommitBtnDisabled||EditAble)}"/></td> -->
                                <td colspan="4">
                                    <template if:true={isSaveShow}>
                                        <lightning-button label="保存" onclick={saveConfirmJs}
                                            style="width: 150px"></lightning-button>
                                    </template>
                                </td>
                            </tr>
                            <tr>
                                <td></td>
                                <td>
                                    <!-- <apex:commandButton onclick="EditConsumable();"   value="编辑出库单" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.SummonsStatus_c__c='已完成',true,false)}"/> -->
                                    <template if:true={isEditShow}>
                                        <lightning-button label="编辑出库单" onclick={EditConsumable} style="width: 150px"
                                            disabled={isEditDisabled}></lightning-button>
                                    </template>
                                </td>
                                <!--CHAN-B65CAZ 20181105 UpdateStart-->
                                <!-- <td ><apex:commandButton onclick="CommitConsumable();" value="提交出库单" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.SummonsStatus_c__c='批准'||coc.SummonsStatus_c__c='已销售待上传纳品书'||coc.SummonsStatus_c__c='出库单已打印'||coc.SummonsStatus_c__c='已完成',true,false)}"/></td> -->
                                <td>
                                    <!-- <apex:commandButton onclick="GoodsDeliveryJs();"  value="出货/销售"     style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.SummonsStatus_c__c='已销售待上传纳品书'||coc.SummonsStatus_c__c='已完成'||coc.SummonsStatus_c__c='价格未定',true,false)}"/> -->
                                    <template if:true={isDeliveryShow}>
                                        <lightning-button label="出货/销售" onclick={GoodsDeliveryJs} style="width: 150px"
                                            disabled={isDeliveryDisabled}></lightning-button>
                                    </template>
                                </td>
                                <!-- CHAN-B65CAZ 20181105 UpdateEnd-->
                                <td>
                                    <!-- <apex:commandButton onclick="openToInvoiceJs();return false;" value="开票" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(((coc.Billed_Status__c !='全部开票' &&coc.SummonsStatus_c__c='已完成') || coc.Onchange_order__c = true) && coc.SummonsForDirction__c!='互相调货',false,true)}"/> -->
                                    <template if:true={isOpenToInvoiceShow}>
                                        <lightning-button label="开票" onclick={openToInvoiceJs} style="width: 150px"
                                            disabled={isOpenToInvoiceDisabled}></lightning-button>
                                    </template>
                                </td>
                            </tr>
                            <tr>
                                <td></td>
                                <!--CHAN-B65CAZ 20181105 UpdateStart-->
                                <td>
                                    <!-- <apex:commandButton onclick="PraseToPDFJs();" value="打印指示单" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.SummonsStatus_c__c='已销售待上传纳品书'||coc.SummonsStatus_c__c='批准'||coc.SummonsStatus_c__c='出库单已打印'||coc.SummonsStatus_c__c='草案中',false,true)}"/> -->
                                    <template if:true={isPraseToPDFShow}>
                                        <lightning-button label="打印指示单" onclick={PraseToPDFJs} style="width: 150px"
                                            disabled={isPraseToPDFDisabled}></lightning-button>
                                    </template>
                                </td>
                                <!-- CHAN-B65CAZ 20181105 UpdateEnd-->
                                <td>
                                    <!-- <apex:commandButton onclick="openReportJs(); return false;" value="显示明细" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.Billed_Status__c !='还没开票' || coc.SummonsStatus_c__c='已完成',false,true)}"/> -->
                                    <template if:true={isOpenReportShow}>
                                        <lightning-button label="显示明细" onclick={openReportJs} style="width: 150px"
                                            disabled={isOpenReportDisabled}></lightning-button>
                                    </template>
                                </td>
                                <td>
                                    <!-- <apex:commandButton onclick="DeleteConsumable();" value="删除" style="width:150px" rerender="dummy" rendered="{!!(EditDelCommitBtnDisabled||EditAble)}" disabled="{!IF(coc.SummonsStatus_c__c='已销售待上传纳品书'||coc.SummonsStatus_c__c='价格未定'||coc.SummonsStatus_c__c='批准'||coc.SummonsStatus_c__c='出库单已打印'||coc.SummonsStatus_c__c='已完成',true,false)}"/> -->
                                    <template if:true={isDeleteShow}>
                                        <lightning-button label="删除" onclick={DeleteConsumable} style="width: 150px"
                                            disabled={isDeleteDisabled}></lightning-button>
                                    </template>
                                </td>
                                <td></td>
                            </tr>
                        </table>
                    </div>
                </div>
            </div>
            <!-- 出库单信息 EditAble = true -->
            <template if:true={EditAble}>
                <div class="borderCss">
                    <div class="headerDorderCss">
                        <p style="font-size: 16px">
                            <strong>出库单信息</strong>
                        </p>
                    </div>
                    <div style="padding: 10px">
                        <div lwc:dom="manual" class="resultDiv"></div>
                        <div draggable="false">
                            <!-- SummonsStatus_c__c == '价格未定' -->
                            <template if:true={summonsStatusPriceNotDetermined}>
                                <lightning-record-edit-form object-api-name="Consumable_order__c" record-id={cocId}>
                                    <!-- 出库单号 出库单状态 -->
                                    <lightning-layout multiple-rows="true">
                                        <template if:true={isSummonsFlag}>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                                <lightning-output-field field-name="Name"></lightning-output-field>
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                                <lightning-output-field
                                                    field-name="SummonsStatus_c__c"></lightning-output-field>
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                            </lightning-layout-item>
                                        </template>
                                    </lightning-layout>
                                    <!-- 目的   开票状态 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="SummonsForDirction__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="Billed_Status__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 二级经销商 -->
                                    <template if:true={isSummonsForDirctionTwoShow}>
                                        <lightning-layout multiple-rows="true">
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                                <lightning-output-field
                                                    field-name="Order_Dealer_Info__c"></lightning-output-field>
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                            </lightning-layout-item>
                                        </lightning-layout>
                                    </template>
                                    <!-- 客户名 发票-->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="ShipmentAccount__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            发票 还需进行开发1
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 科室 出库金额 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="Order_ForCustomerText__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="Shipment_total_amount__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 没有确定价格 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="NoConfirmedPrice__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                </lightning-record-edit-form>
                            </template>
                            <!-- SummonsStatus_c__c != '价格未定' -->
                            <template if:false={summonsStatusPriceNotDetermined}>
                                <lightning-record-edit-form object-api-name="Consumable_order__c" record-id={cocId}
                                    onsubmit={handleSubmit}>
                                    <!-- 出库单号 出库单状态 -->
                                    <lightning-layout multiple-rows="true">
                                        <template if:true={isSummonsFlag}>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                                <lightning-output-field field-name="Name"></lightning-output-field>
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                                <lightning-output-field
                                                    field-name="SummonsStatus_c__c"></lightning-output-field>
                                            </lightning-layout-item>
                                            <lightning-layout-item class="hehe-layoutItem" size="4">
                                            </lightning-layout-item>
                                        </template>
                                    </lightning-layout>
                                    <!-- 目的   二级经销商 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-input-field data-field="summonsForDirction"
                                                value={summonsForDirction} field-name="SummonsForDirction__c"
                                                required="true" onchange={ChangeDirction}></lightning-input-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-combobox data-field="secondaryDistributor"
                                                name="secondaryDistributor" label="二级经销商" value={secondaryDistributor}
                                                placeholder="请选择..." options={secondaryDistributorOptions}
                                                variant="label-inline" onchange={dataChange}
                                                disabled={isDisabledSecondaryDistributor}></lightning-combobox>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 客户名   经销商录入 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <div
                                                class="slds-form-element__control slds-input-has-icon slds-input-has-icon_right">
                                                <lightning-icon size="x-small"
                                                    class="iconMargin slds-icon slds-input__icon slds-input__icon_right slds-icon-text-default"
                                                    icon-name="utility:search"></lightning-icon>
                                                <lightning-input type="text" name="HospitalName" label="客户名"
                                                    value={HospitalName} variant="label-inline"
                                                    onclick={searchHospitalNameModal} data-field="HospitalName"
                                                    disabled={isDisabledHospitalName}
                                                    onchange={clearAgencyI}></lightning-input>
                                            </div>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <!-- <lightning-input-field onfocus={setVisitorPlace} onblur={vpClear2Delay} data-field="ForDealerText"
                                                value={ForDealerText} field-name="Order_ForDealerText__c"
                                                disabled={isDisabledForDealerText}></lightning-input-field> -->
                                            <!-- <lightning-input type="text"
                                                    name="Order_ForDealerText__c"
                                                    label="经销商(录入)"
                                                    value={ForDealerText}
                                                    onfocus={setVisitorPlace}
                                                    onblur={vpClear2Delay}
                                                    data-field="Order_ForDealerText__c"
                                                    disabled={isDisabledForDealerText}
                                                    variant="label-inline">
                                                </lightning-input> -->
                                            <c-lookup onsearch={handleSearch} onselectionchange={handleSelectionChange}
                                                label="经销商(录入)" variant="label-inline" placeholder="搜索经销商">
                                            </c-lookup>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 科室   总金额 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-input-field onchange={dataChange} data-field="ForCustomerText"
                                                value={ForCustomerText} field-name="Order_ForCustomerText__c"
                                                disabled={isDisabledForCustomerText}></lightning-input-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-input type="text" name="sumPrice" label="总金额" value={sumPrice}
                                                variant="label-inline" onchange={dataChange} data-field="sumPrice"
                                                readonly></lightning-input>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                    <!-- 没有确定价格 -->
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-input-field value={NoConfirmedPrice}
                                                field-name="NoConfirmedPrice__c" data-field="NoConfirmedPrice"
                                                onchange={dataChange}></lightning-input-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                </lightning-record-edit-form>
                            </template>
                        </div>
                    </div>
                </div>
            </template>
            <!-- 出库单信息 EditAble = false -->
            <template if:false={EditAble}>
                <div class="borderCss">
                    <div class="headerDorderCss">
                        <p style="font-size: 16px">
                            <strong>出库单信息</strong>
                        </p>
                    </div>
                    <div style="padding: 10px">
                        <div lwc:dom="manual" class="resultDiv"></div>
                        <div draggable="false">
                            <lightning-record-edit-form object-api-name="Consumable_order__c" record-id={cocId}>
                                <!-- 出库单号 出库单状态 -->
                                <lightning-layout multiple-rows="true">
                                    <template if:true={isSummonsFlag}>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field field-name="Name"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="SummonsStatus_c__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </template>
                                </lightning-layout>
                                <!-- 目的   开票状态 -->
                                <lightning-layout multiple-rows="true">
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field
                                            field-name="SummonsForDirction__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field field-name="Billed_Status__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                    </lightning-layout-item>
                                </lightning-layout>
                                <!-- 二级经销商 -->
                                <template if:true={isSummonsForDirctionTwoShow}>
                                    <lightning-layout multiple-rows="true">
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-output-field
                                                field-name="Order_Dealer_Info__c"></lightning-output-field>
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                        </lightning-layout-item>
                                    </lightning-layout>
                                </template>
                                <!-- 客户名 发票-->
                                <lightning-layout multiple-rows="true">
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field
                                            field-name="ShipmentAccount__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <template if:true={isConInvoiceShow}>
                                        <lightning-layout-item class="hehe-layoutItem" size="4">
                                            <lightning-input-field
                                                field-name="ConInvoice_Code__c"></lightning-input-field>
                                        </lightning-layout-item>
                                    </template>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                    </lightning-layout-item>
                                </lightning-layout>
                                <!-- 科室 出库金额 -->
                                <lightning-layout multiple-rows="true">
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field
                                            field-name="Order_ForCustomerText__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field
                                            field-name="Shipment_total_amount__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                    </lightning-layout-item>
                                </lightning-layout>
                                <!-- 没有确定价格 -->
                                <lightning-layout multiple-rows="true">
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                        <lightning-output-field
                                            field-name="NoConfirmedPrice__c"></lightning-output-field>
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                    </lightning-layout-item>
                                    <lightning-layout-item class="hehe-layoutItem" size="4">
                                    </lightning-layout-item>
                                </lightning-layout>
                            </lightning-record-edit-form>
                        </div>
                    </div>
                </div>
            </template>
            <!-- 检索 -->
            <template if:true={isSearchShow}>
                <div class="borderCss">
                    <div style="padding: 10px">
                        <div lwc:dom="manual" class="resultDiv"></div>
                        <div draggable="false">
                            <lightning-layout>
                                <lightning-layout-item flexibility="auto" padding="around-small">
                                    <lightning-input type="text" name="consumableName" label="消耗品名称"
                                        value={consumableName} variant="label-inline" onchange={dataChange}
                                        data-field="consumableName"></lightning-input>
                                </lightning-layout-item>
                                <lightning-layout-item flexibility="auto" padding="around-small">
                                    <lightning-combobox name="progress" label="第3分类" value={Category3}
                                        variant="label-inline" options={category3Options} onchange={dataChange}
                                        data-field="Category3"></lightning-combobox>
                                </lightning-layout-item>
                                <lightning-layout-item flexibility="auto" padding="around-small">
                                    <lightning-combobox name="progress" label="第4分类" value={Category4}
                                        variant="label-inline" options={category4Options} onchange={dataChange}
                                        data-field="Category4"></lightning-combobox>
                                </lightning-layout-item>
                                <lightning-layout-item flexibility="auto" padding="around-small">
                                    <lightning-combobox name="progress" label="第5分类" value={Category5}
                                        variant="label-inline" onchange={dataChange} data-field="Category5"
                                        options={category5Options}></lightning-combobox>
                                </lightning-layout-item>
                                <template if:true={hasHosPro}>
                                    <lightning-layout-item flexibility="auto" padding="around-small">
                                        <lightning-combobox name="progress" label="医院特价" value={outOutPattern}
                                            variant="label-inline" options={outOutPatternOptionList}
                                            onchange={handleChange}></lightning-combobox>
                                    </lightning-layout-item>
                                </template>
                                <lightning-layout-item flexibility="auto, no-grow" padding="around-small">
                                    <lightning-button label="检索" onclick={searchProductJs}></lightning-button>
                                </lightning-layout-item>
                                <lightning-layout-item flexibility="auto, no-grow" padding="around-small">
                                    <lightning-button label="清空" onclick={neworderhead}></lightning-button>
                                </lightning-layout-item>
                            </lightning-layout>
                        </div>
                    </div>
                </div>
            </template>
            <!-- 出库单明细 -->
            <div class="borderCss">
                <div class="headerDorderCss">
                    <p style="font-size: 16px">
                        <strong>出库单明细</strong>
                    </p>
                </div>
                <div style="padding: 10px">
                    <template if:true={EditAble}>
                        <template if:true={showTable}>
                            <!-- <c-poc-lightning-datatable key-field="Id" data={data} columns={columns}
                                onunitchange={handleUnitChange} onshipmentnumber={handleShipmentNumber}
                                onshipmentunitprice={handleShipmentUnitPrice} onrowselection={getSelectedRows}
                                selected-rows={selectedRows}>
                            </c-poc-lightning-datatable> -->
                            <c-lex-custom-lightning-datatable key-field="Id" data={data} columns={columns}
                                onunitchange={handleUnitChange} onshipmentnumber={handleShipmentNumber}
                                onshipmentunitprice={handleShipmentUnitPrice} onrowselection={getSelectedRows}
                                selected-rows={selectedRows}>
                            </c-lex-custom-lightning-datatable>
                        </template>
                    </template>
                    <template if:false={EditAble}>
                        <template if:true={showTable}>
                            <!-- <c-poc-lightning-datatable hide-checkbox-column key-field="Id" data={data}
                                columns={editColumns} onunitchange={handleUnitChange}
                                onshipmentnumber={handleShipmentNumber} onshipmentunitprice={handleShipmentUnitPrice}
                                onrowselection={getSelectedRows} selected-rows={selectedRows}>
                            </c-poc-lightning-datatable> -->
                            <c-lex-custom-lightning-datatable hide-checkbox-column key-field="Id" data={data}
                                columns={editColumns} onunitchange={handleUnitChange}
                                onshipmentnumber={handleShipmentNumber} onshipmentunitprice={handleShipmentUnitPrice}
                                onrowselection={getSelectedRows} selected-rows={selectedRows}>
                            </c-lex-custom-lightning-datatable>
                        </template>
                    </template>
                </div>
            </div>
            <!-- 上传附件 -->
            <template if:true={EditAble}>
                <div class="borderCss">
                    <div class="headerDorderCss">
                        <p style="font-size: 16px">
                            <strong>出库单信息</strong>
                        </p>
                    </div>
                    <div style="padding: 10px">
                        <div lwc:dom="manual" class="resultDiv"></div>
                        <div draggable="false"></div>
                    </div>
                </div>
            </template>
        </div>
    </div>
</template>
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js
New file
@@ -0,0 +1,1109 @@
import { LightningElement, wire, api, track } from 'lwc';
import init from '@salesforce/apex/LexSummonsCreatController.init';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import searchConsumableorderdetails from '@salesforce/apex/LexSummonsCreatController.searchConsumableorderdetails';
import PraseToPDF from '@salesforce/apex/LexSummonsCreatController.PraseToPDF';
import apexSearch from '@salesforce/apex/SampleLookupController.search';
import save from '@salesforce/apex/LexSummonsCreatController.save';
import OPPORTUNITY_OBJECT from '@salesforce/schema/Consumable_Orderdetails__c';
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import hospitalInit from '@salesforce/apex/lexSearchAgencyHospitalController.init';
import serContact from '@salesforce/apex/lexSearchAgencyHospitalController.serContact';
import { NavigationMixin } from 'lightning/navigation';
export default class LexSummonsCreat extends NavigationMixin(LightningElement) {
    @track isShowSpinner = true;
    @track showResults = true;
    @track results = [
        {
            Id:'1',
            Name : 'z'
        },
        {
            Id:'2',
            Name : 'h'
        },
        {
            Id:'3',
            Name : 'j'
        }
    ];
    @track COLS = [
        {
            label: 'Account Name',
            type: 'customName',
            typeAttributes: {
            accountName: { fieldName: 'Name' }
        }
    }];
    @track columns = [
        {
            label: '消耗品名称',
            fieldName: 'Name__c',
            hideDefaultActions: true ,
            wrapText:true,
            //initialWidth : 100,
        },
        {
            label: '规格',
            fieldName: 'packinglist',
            //initialWidth : 50,
            wrapText:true,
            hideDefaultActions: true
        },
        {
            label: 'CFDA状态',
            fieldName: 'SFDA_Status__c',
            //initialWidth : 100,
            wrapText:true,
            hideDefaultActions: true
        },
        {
            label: '注册证编码号',
            fieldName: 'approbation_No',
            //initialWidth : 150,
            wrapText:true,
            hideDefaultActions: true
        },
        {
            label: '注册证效期',
            //initialWidth : 100,
            wrapText:true,
            fieldName: 'expiration_Date',
            hideDefaultActions: true ,
        },
        {
            label: '第3分类',
            fieldName: 'Category3__c',
            //initialWidth : 100,
            wrapText:true,
            hideDefaultActions: true,
            sortable: true,
        },
        {
            label: '第4分类',
            fieldName: 'Category4__c',
            //initialWidth : 100,
            wrapText:true,
            hideDefaultActions: true,
            sortable: true
        },
        {
            label: '第5分类',
            fieldName: 'Category5__c',
            //initialWidth : 100,
            wrapText:true,
            hideDefaultActions: true,
            sortable: true
        },
        {
            label: '单位',
            type:'customUnit',
            //initialWidth : 100,
            hideDefaultActions: true,
            typeAttributes: {
                unitValue: { fieldName: 'unitValue' },
                unitOptions: { fieldName: 'unitOptions' },
                recordId: { fieldName: 'recordId' }
            },
        },
        {
            label: '出货数量',
            type: 'customShipment',
            //initialWidth : 150,
            hideDefaultActions: true,
            typeAttributes: {
                recordId: { fieldName: 'recordId' },
                shipmentNumber: { fieldName: 'shipmentNumber' },
            },
        },
        {
            label: '出货单价(元)',
            type: 'customShipmentUnitPrice',
            //initialWidth : 150,
            hideDefaultActions: true,
            typeAttributes: {
                recordId: { fieldName: 'recordId' },
                shippingUnitPrice: { fieldName: 'shippingUnitPrice' }
            },
        },
        {
            label: '出货金额(元)',
            type: 'customShipmentAmount',
            //initialWidth : 120,
            hideDefaultActions: true,
            typeAttributes: {
                shipmentAmount: { fieldName: 'shipmentAmount' }
            },
        },
        {
            label: '有效期内库存(盒)',
            fieldName: 'Boxnumber',
            //initialWidth : 120,
            wrapText:true,
            hideDefaultActions: true,
        },
        {
            label: '有效期内库存(个)',
            fieldName: 'Piecenumber',
            //initialWidth : 120,
            wrapText:true,
            hideDefaultActions: true,
        }
    ];
    @track editColumns = [
        {
            label: '消耗品名称',
            fieldName: 'Name__c',
            hideDefaultActions: true ,
            initialWidth : 250,
        },
        {
            label: '规格',
            fieldName: 'packinglist',
            initialWidth : 50,
            hideDefaultActions: true
        },
        {
            label: 'CFDA状态',
            fieldName: 'SFDA_Status__c',
            initialWidth : 100,
            hideDefaultActions: true
        },
        {
            label: '注册证编码号',
            fieldName: 'approbation_No',
            initialWidth : 150,
            hideDefaultActions: true
        },
        {
            label: '注册证效期',
            initialWidth : 100,
            fieldName: 'expiration_Date',
            hideDefaultActions: true ,
        },
        {
            label: '第3分类',
            fieldName: 'Category3__c',
            initialWidth : 100,
            hideDefaultActions: true,
            sortable: true,
        },
        {
            label: '第4分类',
            fieldName: 'Category4__c',
            initialWidth : 100,
            hideDefaultActions: true,
            sortable: true
        },
        {
            label: '第5分类',
            fieldName: 'Category5__c',
            initialWidth : 100,
            hideDefaultActions: true,
            sortable: true
        },
        {
            label: '单位',
            fieldName: 'Box_Piece__c',
            initialWidth : 100,
            hideDefaultActions: true,
        },
        {
            label: '出货数量',
            fieldName: 'Shipment_Count__c',
            initialWidth : 150,
            hideDefaultActions: true,
        },
        {
            label: '出货单价(元)',
            fieldName: 'Shipment_amount__c',
            initialWidth : 150,
            hideDefaultActions: true,
        }
    ];
    @track hospitalList=[];
    @track hospitalColumns = [
        {
            label: '医院名称',
            fieldName: 'Name',
            initialWidth : 400,
            hideDefaultActions: true ,
        },
        {
            label: '省份',
            fieldName: 'stateMasterName',
            hideDefaultActions: true ,
        },
        {
            label: '选择',
            fieldName : 'Id1',
            type : 'button',
            hideDefaultActions: true ,
            typeAttributes: {
                label: '选择',
                name: 'Id2',
                size: 1
            }
        }
    ];
    @track accountid = '';
    @track consumableproductdetailsRecords = [];
    @track SummonsStatus = '';
    @track ESetid = '';
    @track cocLwc = {};
    @track selectedRows = [];
    @track ConsumableOut_report = '';
    //显示按钮
    @track isSaveShow = false;
    @track isEditShow = false;
    @track isDeliveryShow = false;
    @track isOpenToInvoiceShow = false;
    @track isPraseToPDFShow = false;
    @track isOpenReportShow = false;
    @track isDeleteShow = false;
    @track isFileShow = false;
    //disable按钮
    @track isEditDisabled = false;
    @track isDeliveryDisabled = false;
    @track isOpenToInvoiceDisabled = true;
    @track isPraseToPDFDisabled = true;
    @track isOpenReportDisabled = true;
    @track isDeleteDisabled = false;
    //出库单信息
    @track cocId = ''
    @track EditAble = false;
    @track summonsStatusPriceNotDetermined = false;
    @track isSummonsForDirctionTwoShow = false;
    @track isSummonsFlag = false;
    @track isConInvoiceShow = false;
    @track sumPrice = '';
    @track isSearchShow = false;
    @track Existarrive = false;
    @track Category3 = '';
    @track category3Options=[];
    @track Category4 = '';
    @track category4Options=[];
    @track Category5 = '';
    @track category5Options=[];
    //二级经销商
    @track secondaryDistributor = '';
    @track secondaryDistributorOptions = [];
    @track isDisabledSecondaryDistributor = false;
    //经销商录入
    @track ForDealerText = '';
    @track isDisabledForDealerText = false;
    //客户名
    @track isModalOpen = false;
    @track HospitalName = '';
    @track searchHospitalName = '';
    @track OECId = '';
    @track isDisabledHospitalName = false;
    //科室
    @track ForCustomerText = '';
    @track isDisabledForCustomerText = false;
    //没有确定价格
    @track NoConfirmedPrice = false;
    //消耗品名称
    @track consumableName = '';
    @track agencyProType = '';
    @track accountName = '';
    @track userWorkLocation = '';
    @track OutPattern__c = false;
    @track outOutPattern = '';
    //出库单明细
    @track showTable = false;
    @track data = [];
    @track isSelectShow = false;
    @track hidecheckboxcolumn = false;
    @track is345Show = false;
    @track arriveorder = '';
    @track hasHosPro = false;
    @track InvoiceProNotLabel = '';
    @track RrturnProLabel = '';
    @track InvoicedLabel = '';
    @track outOutPatternOptionList = [];
    //InvoiceProNotLabel    RrturnProLabel  InvoicedLabel
    @wire(getObjectInfo, { objectApiName: OPPORTUNITY_OBJECT })
    oppInfo({ data, error }) {
        if (data) {
            this.InvoiceProNotLabel = data.fields.InvoiceProNot_count__c.label
            this.RrturnProLabel = data.fields.RrturnPro_count__c.label
            this.InvoicedLabel = data.fields.Invoiced_Procount__c.label
            console.log('this.InvoiceProNotLabel = ' + this.InvoiceProNotLabel);
            console.log('this.RrturnProLabel = ' + this.RrturnProLabel);
            console.log('this.InvoicedLabel = ' + this.InvoicedLabel);
        }
    }
    // get secondaryDistributorOptions() {
    //     return this.secondaryDistributorOptions;
    // }
    // get outOutPatternOptionList() {
    //     return this.outOutPatternOptionList;
    // }
    // // get category3Options() {
    // //     return this.category3Options;
    // // }
    // get category4Options() {
    //     return this.category4Options;
    // }
    // get category5Options() {
    //     return this.category5Options;
    // }
    //获取链接参数
    getQueryString(name) {
        console.log('getQueryString name ' + name)
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return decodeURIComponent(r[2]);
        };
        return null;
     }
    connectedCallback(){
        this.ESetid = this.getQueryString('ESetid');
        this.ESetid = this.ESetid == null ? '' : this.ESetid;
        init({
            ESetidJs : this.ESetid
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            console.log('r = ' + JSON.stringify(r));
            if (r.status == 'Success') {
                this.ConsumableOut_report = r.entity.ConsumableOut_report;
                console.log('this.ConsumableOut_report = ' + this.ConsumableOut_report)
                this.accountid = r.entity.accountid;
                this.consumableproductdetailsRecords = r.entity.consumableproductdetailsRecords;
                this.accountName = r.entity.accountName;
                this.agencyProType = r.entity.agencyProType;
                this.accountName = r.entity.accountName;
                this.userWorkLocation = r.entity.userWorkLocation;
                this.EditAble = r.entity.EditAble;
                console.log('this.agencyProType = ' + this.agencyProType);
                console.log('this.EditAble = ' + this.EditAble);
                //第3分类
                for(var key in r.entity.categoryOptionMap){
                    let object = {};
                    object['label'] = r.entity.categoryOptionMap[key];
                    object['value'] = key;
                    this.category3Options.push(object);
                }
                console.log('this.category3Options = ' + this.category3Options)
                //第4分类
                for(var key in r.entity.category4OptionMap){
                    let object = {};
                    object['label'] = r.entity.category4OptionMap[key];
                    object['value'] = key;
                    this.category4Options.push(object);
                }
                console.log('this.category4Options = ' + this.category4Options)
                //第5分类
                for(var key in r.entity.category5OptionMap){
                    let object = {};
                    object['label'] = r.entity.category5OptionMap[key];
                    object['value'] = key;
                    this.category5Options.push(object);
                }
                console.log('this.category5Options = ' + this.category5Options)
                this.data = r.entity.pageRecords;
                for(var i in this.data){
                    let unitOptions = [];
                    for(var key in this.data[i].boxorpieceMap){
                        let unitOption = {};
                        unitOption['label'] = this.data[i].boxorpieceMap[key];
                        unitOption['value'] = key;
                        unitOptions.push(unitOption);
                    }
                    this.data[i]['unitOptions'] = unitOptions;
                    this.data[i]['unitValue'] = unitOptions[0].value;
                    if(this.EditAble){
                        this.data[i].orderdetails1['Box_Piece__c'] = unitOptions[0].value;
                        this.data[i].orderdetails1['Shipment_Count__c'] = 0;
                        this.data[i].orderdetails1['Delivery_List_RMB__c'] = 0.00;
                    }else{
                        this.data[i]['InvoiceProNot_count__c'] = this.data[i].orderdetails1.InvoiceProNot_count__c;
                        this.data[i]['RrturnPro_count__c'] = this.data[i].orderdetails1.RrturnPro_count__c;
                        this.data[i]['Invoiced_Procount__c'] = this.data[i].orderdetails1.Invoiced_Procount__c;
                    }
                    this.data[i]['shipmentNumber'] = 0;
                    this.data[i]['shippingUnitPrice'] = 0.00;
                    this.data[i]['recordId'] = this.data[i].Prod.Id;
                    this.data[i]['Id'] = this.data[i].Prod.Id;
                    this.data[i]['Name__c'] = this.data[i].Prod.Name__c;
                    this.data[i]['SFDA_Status__c'] = this.data[i].Prod.SFDA_Status__c;
                    this.data[i]['Category3__c'] = this.data[i].Prod.Category3__c;
                    this.data[i]['Category4__c'] = this.data[i].Prod.Category4__c;
                    this.data[i]['Category5__c'] = this.data[i].Prod.Category5__c;
                    this.data[i]['Box_Piece__c'] = this.data[i].orderdetails1.Box_Piece__c;
                    this.data[i]['shipmentAmount'] = this.data[i].orderdetails1.Shipment_amount__c;
                    this.data[i]['Shipment_amount__c'] = this.data[i].orderdetails1.Shipment_amount__c;
                    this.data[i]['Shipment_Count__c'] = this.data[i].orderdetails1.Shipment_Count__c;
                }
                console.log('this.data = ' + JSON.stringify(this.data));
                //show
                if(r.entity.EditDelCommitBtnDisabled || r.entity.EditAble){
                    this.isSaveShow = true;
                }else{
                    this.isEditShow = true;
                    this.isDeliveryShow = true;
                    this.isOpenToInvoiceShow = true;
                    this.isPraseToPDFShow = true;
                    this.isOpenReportShow = true;
                    this.isDeleteShow = true;
                }
                this.Existarrive = r.entity.Existarrive;
                console.log('this.EditAble = ' + this.EditAble);
                this.hasHosPro = r.entity.hasHosPro;
                //disable
                if(Object.values(r.entity.coc).length > 0){
                    this.cocLwc = r.entity.coc;
                    console.log('this.cocLwc = ' + JSON.stringify(this.cocLwc));
                    var coc = r.entity.coc;
                    this.cocId = coc.Id;
                    coc.SummonsStatus = coc.SummonsStatus_c__c;
                    if(coc.SummonsStatus_c__c == '已完成'){
                        this.isEditDisabled = true;
                    }
                    if(coc.SummonsStatus_c__c == '批准' || coc.SummonsStatus_c__c == '已销售待上传纳品书' || coc.SummonsStatus_c__c == '出库单已打印' || coc.SummonsStatus_c__c == '已完成'){
                        this.isDeliveryDisabled = true;
                    }
                    if(((coc.Billed_Status__c != '全部开票' && coc.SummonsStatus_c__c == '已完成') || coc.Onchange_order__c == true) && coc.SummonsForDirction__c != '互相调货'){
                        this.isOpenToInvoiceDisabled = false;
                    }
                    if(coc.SummonsStatus_c__c == '已销售待上传纳品书' || coc.SummonsStatus_c__c == '批准' || coc.SummonsStatus_c__c == '出库单已打印' || coc.SummonsStatus_c__c == '草案中'){
                        this.isPraseToPDFDisabled = false;
                    }
                    if(coc.Billed_Status__c != '还没开票' || coc.SummonsStatus_c__c == '已完成'){
                        this.isOpenReportDisabled = false;
                    }
                    if(coc.SummonsStatus_c__c == '已销售待上传纳品书' || coc.SummonsStatus_c__c == '价格未定' || coc.SummonsStatus_c__c == '批准' || coc.SummonsStatus_c__c == '出库单已打印' || coc.SummonsStatus_c__c == '已完成'){
                        this.isDeleteDisabled = true;
                    }
                    this.isConInvoiceShow = (coc.SummonsStatus_c__c == '已完成' && coc.SummonsForDirction__c != '互相调货') ? true : false;
                    this.summonsStatusPriceNotDetermined = coc.SummonsStatus_c__c == '价格未定' ? true : false;
                    this.isSummonsForDirctionTwoShow = coc.SummonsForDirction__c == '销售给二级经销商' ? true : false;
                }
                this.isSearchShow = (!this.Existarrive && r.entity.coc.SummonsStatus_c__c != '价格未定' && r.entity.EditAble) ? true : false;
                this.hidecheckboxcolumn = !this.isSearchShow;
                this.arriveorder = r.entity.arriveorder;
                this.is345Show = (this.arriveorder == '' && this.Existarrive == false && this.EditAble) ? true : false;
                //如果不显示345分类,columns里面删除3,4,5分类
                if(!this.is345Show){
                    for(var i=0; i<this.columns.length; i++){
                        if(this.columns[i].label == '第3分类'){
                            this.columns.splice(i,1);
                        }
                    }
                    for(var i=0; i<this.columns.length; i++){
                        if(this.columns[i].label == '第4分类'){
                            this.columns.splice(i,1);
                        }
                    }
                    for(var i=0; i<this.columns.length; i++){
                        if(this.columns[i].label == '第5分类'){
                            this.columns.splice(i,1);
                        }
                    }
                    for(var i=0; i<this.editColumns.length; i++){
                        if(this.editColumns[i].label == '第3分类'){
                            this.editColumns.splice(i,1);
                        }
                    }
                    for(var i=0; i<this.editColumns.length; i++){
                        if(this.editColumns[i].label == '第4分类'){
                            this.editColumns.splice(i,1);
                        }
                    }
                    for(var i=0; i<this.editColumns.length; i++){
                        if(this.editColumns[i].label == '第5分类'){
                            this.editColumns.splice(i,1);
                        }
                    }
                }
                //如果EditAble==false,删除 出货金额(元) 有效期内库存(盒) 有效期内库存(个) 3列 展示 还没发票数量 返品数量 已发票数量
                if(!this.EditAble){
                    let object1 = {
                        label: this.InvoiceProNotLabel,
                        fieldName: 'InvoiceProNot_count__c',
                        hideDefaultActions: true
                    };
                    let object2 = {
                        label: this.RrturnProLabel,
                        fieldName: 'RrturnPro_count__c',
                        hideDefaultActions: true
                    };
                    let object3 = {
                        label: this.InvoicedLabel,
                        fieldName: 'Invoiced_Procount__c',
                        hideDefaultActions: true
                    };
                    this.editColumns.push(object1);
                    this.editColumns.push(object2);
                    this.editColumns.push(object3);
                }
                //如果hasHosPro = true 医院特价
                if(this.hasHosPro){
                    let object1 = {
                        label: '医院特价',
                        fieldName: 'InvoiceProNot_count__c',
                        hideDefaultActions: true
                    };
                    this.columns.push(object1);
                    this.editColumns.push(object1);
                }
                //出库单信息
                this.isSummonsFlag = r.entity.SummonsFlag == 'visible' ? true : false;
                console.log('r.entity.provinceOptsMap = ' + r.entity.provinceOptsMap);
                for(var key in r.entity.provinceOptsMap){
                    let object = {};
                    object['label'] = r.entity.provinceOptsMap[key];
                    object['value'] = key;
                    this.secondaryDistributorOptions.push(object);
                }
                for(var key in r.entity.outOutPatternOptionMap){
                    let object = {};
                    object['label'] = r.entity.outOutPatternOptionMap[key];
                    object['value'] = key;
                    this.outOutPatternOptionList.push(object);
                }
                console.log('this.secondaryDistributorOptions = '  + JSON.stringify(this.secondaryDistributorOptions));
                this.HospitalName = r.entity.HospitalName;
                this.sumPrice = r.entity.sumPrice + '元';
                this.isShowSpinner = false;
                this.showTable = true;
                console.log('ESetid = ' + this.ESetid)
            } else {
                console.log('r = ' + JSON.stringify(r))
                this.showToast('Error', r.msg);
            }
        })
    }
    ChangeDirction(event){
        let value = event.target.value;
        this.summonsForDirction = value;
        this.cocLwc['SummonsForDirction__c'] = value;
        console.log('选择了 = ' + value);
        switch(value){
            case '直接销售给医院':
                this.isDisabledHospitalName = false;
                this.isDisabledForCustomerText = false;
                this.secondaryDistributor = '';
                this.ForDealerText = '';
                this.isDisabledForDealerText = true;
                this.isDisabledSecondaryDistributor = true;
                break;
            case '医院试用':
                this.isDisabledHospitalName = false;
                this.isDisabledForCustomerText = false;
                this.isDisabledForDealerText = false;
                this.isDisabledSecondaryDistributor = false;
                break;
            case '销售给二级经销商':
                this.isDisabledHospitalName = false;
                this.isDisabledForCustomerText = false;
                this.isDisabledForDealerText = false;
                this.isDisabledSecondaryDistributor = false;
                break;
            case '互相调货':
                this.isDisabledHospitalName = true;
                this.HospitalName = '';
                this.OECId = '';
                this.isDisabledForCustomerText = true;
                this.ForCustomerText = '';
                this.isDisabledForDealerText = false;
                this.isDisabledSecondaryDistributor = false;
                break;
            default:
                this.isDisabledHospitalName = false;
                this.isDisabledForCustomerText = false;
                this.isDisabledForDealerText = false;
                this.isDisabledSecondaryDistributor = false;
        }
    }
    dataChange(event) {
        let fieldName = event.target.getAttribute("data-field");
        let value = event.detail.value;
        switch (fieldName) {
            case 'summonsForDirction':
                this.summonsForDirction = value;
                break
            case 'secondaryDistributor':
                this.secondaryDistributor = value;
                break
            case 'HospitalName':
                this.HospitalName = value;
                break
            case 'ForDealerText':
                this.ForDealerText = value;
                this.cocLwc['Order_ForDealerText__c'] = value;
                break
            case 'ForCustomerText':
                this.cocLwc['Order_ForCustomerText__c'] = value;
                this.ForCustomerText = value;
                break
            case 'sumPrice':
                this.sumPrice = value;
                break
            case 'NoConfirmedPrice':
                this.NoConfirmedPrice = !this.NoConfirmedPrice
                this.cocLwc['NoConfirmedPrice__c'] = this.NoConfirmedPrice;
                console.log('this.NoConfirmedPrice = ' + this.NoConfirmedPrice)
                break
            case 'consumableName':
                this.consumableName = value;
                break
            case 'Category3':
                this.Category3 = value;
                break
            case 'Category4':
                this.Category4 = value;
                break
            case 'Category5':
                this.Category5 = value;
                break
            case 'searchHospitalName':
                this.searchHospitalName = value;
                break
        }
    }
    showToast(type, msg) {
        this.isShowSpinner = false;
        const event = new ShowToastEvent({
            title: type,
            variant: type,
            message: msg
        });
        this.dispatchEvent(event);
    }
    searchProductJs(){
        this.isShowSpinner = true;
        //this.showTable = false;
        let cloneData = this.data;
        for(var i in cloneData){
            cloneData[i]['Name'] = cloneData[i].Name__c;
            cloneData[i]['Category3'] = cloneData[i].Category3__c;
            cloneData[i]['Category4'] = cloneData[i].Category4__c;
            cloneData[i]['Category5'] = cloneData[i].Category5__c;
            cloneData[i]['BoxPiece'] = cloneData[i].Box_Piece__c;
            delete cloneData[i].Name__c;
            delete cloneData[i].Category3__c;
            delete cloneData[i].Category4__c;
            delete cloneData[i].Category5__c;
            delete cloneData[i].Box_Piece__c;
        }
        console.log('cloneData = ' + JSON.stringify(cloneData));
        searchConsumableorderdetails({
            agencyProTypeLwc : this.agencyProType,
            accountNameLwc : this.accountName,
            userWorkLocationLwc : this.userWorkLocation,
            outOutPattern : this.outOutPattern,
            category1 : this.consumableName,
            category3 : this.Category3,
            category4 : this.Category4,
            category5 : this.Category5,
            editAbleLwc : this.EditAble,
            pageRecordsLwcLwc : cloneData,
            consumableproductdetailsRecordsLwc : this.consumableproductdetailsRecords,
            arriveorderLwc : this.arriveorder
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            console.log('r = ' + JSON.stringify(r));
            if (r.status == 'Success') {
                let tempData = [];
                //this.data = r.entity.pageRecords;
                tempData = r.entity.pageRecords;
                for(var i in tempData){
                    let unitOptions = [];
                    for(var key in tempData[i].boxorpieceMap){
                        let unitOption = {};
                        unitOption['label'] = tempData[i].boxorpieceMap[key];
                        unitOption['value'] = key;
                        unitOptions.push(unitOption);
                    }
                    tempData[i]['unitOptions'] = unitOptions;
                    tempData[i]['unitValue'] = unitOptions[0].value;
                    tempData[i]['recordId'] = tempData[i].Prod.Id;
                    tempData[i]['Id'] = tempData[i].Prod.Id;
                    tempData[i]['Name__c'] = tempData[i].Prod.Name__c;
                    tempData[i]['SFDA_Status__c'] = tempData[i].Prod.SFDA_Status__c;
                    tempData[i]['Category3__c'] = tempData[i].Prod.Category3__c;
                    tempData[i]['Category4__c'] = tempData[i].Prod.Category4__c;
                    tempData[i]['Category5__c'] = tempData[i].Prod.Category5__c;
                    tempData[i]['Box_Piece__c'] = tempData[i].orderdetails1.Box_Piece__c;
                    tempData[i]['shipmentNumber'] = tempData[i].orderdetails1.Shipment_Count__c;
                    tempData[i]['shippingUnitPrice'] = tempData[i].orderdetails1.Delivery_List_RMB__c;
                    console.log('shippingUnitPrice = ' + tempData[i]['shippingUnitPrice']);
                    if(tempData[i]['shippingUnitPrice'] && tempData[i]['shipmentNumber'])
                        tempData[i]['shipmentAmount'] = this.amend(tempData[i]['shipmentNumber'],tempData[i]['shippingUnitPrice'],'*')
                }
                this.data = tempData;
                console.log('this.data = ' + JSON.stringify(this.data));
                //this.showTable = true;
                this.isShowSpinner = false;
            }
        })
    }
    searchHospitalNameModal(){
        console.log('searchHospitalNameModal')
        hospitalInit({
            ctype : this.agencyProType
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            if (r.status == 'Success') {
                this.hospitalList = r.entity.at;
                for(var i in this.hospitalList){
                    this.hospitalList[i]['stateMasterName'] = this.hospitalList[i].State_Master__r.Name;
                }
                console.log('hospitalInit r = ' + JSON.stringify(this.hospitalList));
                this.isModalOpen = true;
            }
        });
    }
    searchHospital(){
        console.log('this.searchHospitalName = '  +  this.searchHospitalName);
        serContact({
            searchName : this.searchHospitalName,
            ctype : this.agencyProType
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            if (r.status == 'Success') {
                this.hospitalList = r.entity.at;
                for(var i in this.hospitalList){
                    this.hospitalList[i]['stateMasterName'] = this.hospitalList[i].State_Master__r.Name;
                }
                console.log('hospitalInit r = ' + JSON.stringify(this.hospitalList));
            }
        });
    }
    searchHandleRowAction(event) {
        console.log('searchHandleRowAction')
        let row = event.detail.row;
        this.OECId = row.Id;
        this.HospitalName = row.Name;
        console.log('this.OECId = ' + this.OECId + ' this.HospitalName = ' + this.HospitalName);
        this.isModalOpen = false;
        console.log('this.isModalOpen = ' + this.isModalOpen);
    }
    clearAgencyI(event){
        this.HospitalName = event.target.value;
        if(this.HospitalName == '' || this.HospitalName == null){
            this.OECId = '';
        }
        console.log('this.HospitalName = ' + this.HospitalName);
        console.log('this.OECId = ' + this.OECId);
        if (this.OECId != null && this.OECId != '') {
            this.checkOutPattern();
        }
    }
    checkOutPattern(){
        //根据用户选中的产品给 出库单上的是否医院特价出库字段赋值
        let ishos = 0;
        for(var i in this.data){
            if(this.data[i].check == true && this.data[i].hospitalSpecialOffer == true){
                ishos = ishos +1;
            }
        }
        if (ishos > 0) {
            this.cocLwc['OutPattern__c'] = true;
        }else{
            this.cocLwc['OutPattern__c'] = false;
        }
    }
    closeModal(){
        this.isModalOpen = false;
    }
    handleUnitChange(event){
        console.log('handleUnitChange')
        const unitDetail = event.detail;
        console.log('unitDetail = ' + JSON.stringify(unitDetail))
        for(var i in this.data){
            if(this.data[i].recordId == unitDetail.data.recordId){
                this.data[i].unitValue = unitDetail.data.unitValue;
                this.data[i].orderdetails1['Box_Piece__c'] = unitDetail.data.unitValue;
            }
        }
        console.log('this.data = ' + JSON.stringify(this.data))
    }
    handleShipmentNumber(event){
        console.log('handleShipmentNumber')
        const numberDetail = event.detail;
        console.log('numberDetail = ' + JSON.stringify(numberDetail))
        let index = 0;
        for(var i in this.data){
            if(this.data[i].recordId == numberDetail.data.recordId){
                index = i;
                this.data[i].shipmentNumber = Number(numberDetail.data.shipmentnumber);
                this.data[i].orderdetails1['Shipment_Count__c'] = Number(numberDetail.data.shipmentnumber);
                console.log('this.data[i].shipmentNumber = ' + this.data[i].shipmentNumber)
            }
        }
        this.ComputePrice(index,this.data[index].shipmentNumber,this.data[index].shippingUnitPrice);
    }
    handleShipmentUnitPrice(event){
        console.log('handleShipmentUnitPrice')
        const priceDetail = event.detail;
        let index = 0;
        for(var i in this.data){
            if(this.data[i].recordId == priceDetail.data.recordId){
                index = i;
                this.data[i].shippingUnitPrice = Number(priceDetail.data.shipmentunitprice);
                this.data[i].orderdetails1['Delivery_List_RMB__c'] = Number(priceDetail.data.shipmentunitprice);
                console.log('this.data[i].shippingUnitPrice = ' + this.data[i].shippingUnitPrice)
            }
        }
        this.ComputePrice(index,this.data[index].shipmentNumber,this.data[index].shippingUnitPrice);
    }
    ComputePrice(index,number,price){
        console.log('index = ' + index);
        console.log('number = ' + number);
        console.log('price = ' + price);
        let shipmentAmount = this.amend(number,price,'*');
        console.log('shipmentAmount = ' + shipmentAmount);
        let sumPrice = 0.00;
        this.data[index].shipmentAmount = shipmentAmount;
        for(var i in this.data){
            if(this.data[i].shipmentAmount)
                sumPrice += this.data[i].shipmentAmount;
        }
        this.sumPrice = sumPrice + '元';
        //存下选择行,不会被清空
        this.selectedRows = [];
        for(var i in this.data){
            if(this.data[i].check){
                this.selectedRows.push(this.data[i].Id);
            }
        }
        this.data = [...this.data];
        console.log('this.selectedRows = ' + JSON.stringify(this.selectedRows))
        console.log('this.data = ' + JSON.stringify(this.data))
    }
    //num1 num2传入两个值  symbol +-*/符号
    amend(num1,num2,symbol){
        var str1=num1.toString(),str2=num2.toString(),result,str1Length,str2Length
        //解决整数没有小数点方法
        try {str1Length= str1.split('.')[1].length} catch (error) {str1Length=0}
        try {str2Length= str2.split('.')[1].length} catch (error) {str2Length=0}
        var step=Math.pow(10,Math.max(str1Length,str2Length))
        //
        console.log(step);
        switch (symbol) {
            case "+":
                result= (num1*step+num2*step)/step
                break;
            case "-":
                result= (num1*step-num2*step)/step
                break;
            case "*":
                result= ((num1*step)*(num2*step)) / step/step
                break;
            case "/":
                result= (num1*step)/(num2*step)
                break;
            default:
                break;
        }
        return result
    }
    getSelectedRows(event) {
        const selectedRows = event.detail.selectedRows;
        console.log('this.selectedRows = ' + this.selectedRows);
        for(var i in this.data){
            this.data[i]['check'] = false;
        }
        for(var i in this.data){
            for(var j in selectedRows){
                if(this.data[i].Id == selectedRows[j].Id){
                    this.data[i]['check'] = true;
                }
            }
        }
    }
    saveConfirmJs(){
        let msg = "出库价格仅可操作一次变更,保存后将无法修改。\n\n请确认!";
        if(this.SummonsStatus == '价格未定'){
            if(confirm(msg)==true){
                this.saveConfirm()
            }
        }else{
            this.saveConfirm()
        }
    }
    saveConfirm(){
        this.isShowSpinner = true;
        let cloneData = this.data;
        for(var i in cloneData){
            cloneData[i]['Name'] = cloneData[i].Name__c;
            cloneData[i]['Category3'] = cloneData[i].Category3__c;
            cloneData[i]['Category4'] = cloneData[i].Category4__c;
            cloneData[i]['Category5'] = cloneData[i].Category5__c;
            cloneData[i]['BoxPiece'] = cloneData[i].Box_Piece__c;
            delete cloneData[i].Name__c;
            delete cloneData[i].Category3__c;
            delete cloneData[i].Category4__c;
            delete cloneData[i].Category5__c;
            delete cloneData[i].Box_Piece__c;
        }
        console.log('this.cocLwc = ' + JSON.stringify(this.cocLwc))
        console.log('this.OECId = ' + this.OECId)
        console.log('this.HospitalName = ' + this.HospitalName)
        console.log('this.secondaryDistributor = ' + this.secondaryDistributor)
        console.log('this.pageRecordsLwc = ' + JSON.stringify(cloneData))
        console.log('this.accountid = ' + this.accountid)
        console.log('this.ESetid = ' + this.ESetid)
        console.log('this.consumableproductdetailsRecords = ' + JSON.stringify(this.consumableproductdetailsRecords))
        save({
            cocLwc : this.cocLwc,
            hospitalInfoLwc : this.OECId,
            hospitalNameLwc : this.HospitalName,
            secondaryDistributor : this.secondaryDistributor,
            pageRecordsLwc : cloneData,
            accountid : this.accountid,
            ESetId  : this.ESetid,
            consumableproductdetailsRecordsLwc : this.consumableproductdetailsRecords
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            console.log('r = ' + JSON.stringify(r));
            if (r.status == 'Success') {
                let url = '/lexsummonscreat?ESetid=' + r.entity.ESetId;
                this[NavigationMixin.Navigate]({
                    type: 'standard__webPage',
                    attributes: {
                        url: url
                    }
                });
            }else{
                console.log('r.msg = ' + r.msg);
                this.showToast('Error', r.msg);
            }
        }).catch((error) => {
            console.log('error = ' + JSON.stringify(error))
        });
    }
    //打印指示单
    PraseToPDFJs(){
        console.log('this.cocLwc = ' + JSON.stringify(this.cocLwc))
        console.log('this.ESetId = ' + this.ESetid)
        PraseToPDF({
            cocLwc : this.cocLwc,
            ESetId  : this.ESetid
        }).then((r) => {
            r = JSON.parse(JSON.stringify(r));
            console.log('r = ' + JSON.stringify(r));
            if (r.status == 'Success') {
                window.open('/customer/summonsPDF?ESetid=' + r.entity.ESetId);
            }else{
                console.log('r.msg = ' + r.msg);
                this.showToast('Error', r.msg);
            }
        });
    }
    //显示明细
    openReportJs(){
        var reportId = this.ESetid;
        reportId = reportId.substring(0,15);
        window.open("/customer/" +this.ConsumableOut_report+ "?pv1="+ reportId);
    }
    setVisitorPlace(){
        console.log('setVisitorPlace')
        if(this.summonsForDirction == '互相调货'){
        }
    }
    vpClear2Delay(event){
        console.log('vpClear2Delay')
        if(this.summonsForDirction != '互相调货'){
            this.cocLwc['Order_ForDealerText__c'] = event.target.value;
        }else{
            console.log('Order_ForDealerTextID__c = ' + this.cocLwc['Order_ForDealerTextID__c'])
            this.cocLwc['Order_ForDealerText__c'] = (this.cocLwc['Order_ForDealerTextID__c'] == '' || this.cocLwc['Order_ForDealerTextID__c'] == null || this.cocLwc['Order_ForDealerTextID__c'] == undefined) ? '' : this.cocLwc['Order_ForDealerText__c'];
            console.log('this.cocLwc = ' + JSON.stringify(this.cocLwc));
            this.ForDealerText = this.cocLwc['Order_ForDealerText__c'];
            event.target.value = this.cocLwc['Order_ForDealerText__c'];
            console.log('this.ForDealerText = ' + this.ForDealerText);
        }
    }
    handleSearch(event) {
        debugger
        const lookupElement = event.target;
        console.log('event.detail = ' + JSON.stringify(event.detail))
        apexSearch({
            searchTerm : event.detail.searchTerm,
            selectedIds : event.detail.selectedIds
        })
            .then(results => {
                lookupElement.setSearchResults(results);
            })
            .catch(error => {
                // TODO: handle error
                console.log('error'+JSON.stringify(error));
            });
    }
    handleSelectionChange(event) {
        // Get the selected ids from the event (same interface as lightning-input-field)
        const selectedIds = event.detail;
        // Or, get the selection objects with ids, labels, icons...
        const selection = event.target.getSelection();
        // TODO: do something with the lookup selection
    }
}
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js-meta.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightningCommunity__Page</target>
        <target>lightningCommunity__Default</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html
New file
@@ -0,0 +1,176 @@
<template>
    <div style="border: 1px solid #D4D4D4;border-radius:5px;">
        <div style="border-top: 3px solid #51606E;;border-bottom: 1px solid #D4D4D4;padding:3px;">
            <p style="font-size: 19px;"><strong>库存管理</strong></p>
        </div>
        <div style="padding:10px;">
            <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;">
                <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                    <table>
                        <colgroup>
                            <col width="160px"/>
                            <col width="100px"/>
                            <col width="10px"/>
                            <col width="70px"/>
                            <col width="100px"/>
                            <col width="10px"/>
                            <col width="90px"/>
                            <col width="100px"/>
                            <col width="10px"/>
                            <col width="85px"/>
                            <col width="100px"/>
                            <col width="10px"/>
                            <col width="70px"/>
                            <col width="100px"/>
                        </colgroup>
                        <tbody>
                            <tr>
                                <td></td>
                                <td><lightning-button label="库存盘点" title="库存盘点" onclick={inventoryCount} ></lightning-button></td>
                                <td></td>
                                <td></td>
                                <td style="width:100px;"><lightning-button label="过期库存销存"  title="过期库存销存" onclick={handleClick} ></lightning-button></td>
                                <td></td>
                                <td></td>
                                <td style="width:100px;"><lightning-button label="拆盒" title="拆盒" onclick={handleClick} ></lightning-button></td>
                                <td></td>
                                <td></td>
                                <td style="width:100px;"><lightning-button label="取消拆盒" title="取消拆盒" onclick={handleClick}></lightning-button></td>
                            </tr>
                        </tbody>
                </table>
                </div>
            </div>
                <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;">
                    <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                        <table>
                            <colgroup>
                                <col width="160px"/>
                                <col width="100px"/>
                                <col width="10px"/>
                                <col width="70px"/>
                                <col width="100px"/>
                                <col width="10px"/>
                                <col width="70px"/>
                                <col width="100px"/>
                                <col width="10px"/>
                                <col width="90px"/>
                                <col width="100px"/>
                                <col width="85px"/>
                                <col width="100px"/>
                                <col width="10px"/>
                                <col width="70px"/>
                                <col width="100px"/>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td style="width: 21%;">
                                        <lightning-input type="text" name="Name" label="消耗品名称"  value={Name}  variant="label-inline" onchange={handleChange} data-field ="Name" ></lightning-input>
                                    </td>
                                    <td style="width: 21%;">
                                        <lightning-combobox   name="CategoryThree" label="第3分类" value={value} placeholder="请选择..." options={optionscatone} variant="label-inline" onchange={handleChange}></lightning-combobox>
                                    </td>
                                    <td style="width: 21%;">
                                        <lightning-combobox  name="CategoryFour" label="第4分类" value={value} placeholder="请选择..." options={options2} variant="label-inline" onchange={handleChange}></lightning-combobox>
                                    </td>
                                    <td style="width: 21%;">
                                        <lightning-combobox  name="CategoryFive" label="第5分类" value={value} placeholder="请选择..." options={options3} variant="label-inline" onchange={handleChange}></lightning-combobox>
                                    </td>
                                    <td style="width: 3%;"></td>
                                    <td style="width: 8%;">
                                        <lightning-button label="消耗品搜索" onclick={searchOrderDetail}></lightning-button>
                                    </td>
                                    <td style="width: 8%;">
                                        <lightning-button label="清空" onclick={clearAll}></lightning-button>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            <div style="border: 1px solid #D4D4D4;border-radius:5px;margin-bottom:7px;">
                <div style="border-top: 3px solid #51606E;border-bottom: 1px solid #D4D4D4;padding:3px;">
                    <p style="font-size: 16px;"><strong>库存详情</strong></p>
                </div>
                <div style="padding:10px;">
                    <template if:true={showTable}>
                        <c-lwc-datatable-utility
                            records={data}
                            total-records={data.length}
                            columns = {columns}
                            key-field="Id"
                            show-search-box="true"
                            max-row-selection={data.length}
                            onpaginatorchange={handlePaginatorChange}>
                        </c-lwc-datatable-utility>
                    </template>
                    <!-- <table class="list" border="0" cellpadding="0" cellspacing="0" id="example">
                        <thead>
                            <tr class="headerRow">
                                <th>消耗品名称</th>
                                <th>第3分类</th>
                                <th>第4分类</th>
                                <th>第5分类</th>
                                <th>规格</th>
                                <th>单位</th>
                                <th>注册证编码号</th>
                                <th>注册证效期</th>
                                <th>CFDA状态</th>
                                <th>使用期限</th>
                                <th>有效期内库存</th>
                                <th>过期库存</th>
                                <template if:true={hasHos}>
                                    <th>医院特价</th>
                                </template>
                            </tr>
                        </thead>
                        <tbody>
                            <template for:each={pageRecords} for:item="m">
                                <tr key={m.Prod.Name__c}>
                                    <td align="center">{m.Prod.Name__c}</td>
                                    <td align="center">{m.Prod.Category3__c}</td>
                                    <td align="center">{m.Prod.Category4__c}</td>
                                    <td align="center">{m.Prod.Category5__c}</td>
                                    <td align="center">{m.packing_list}</td>
                                    <td align="center">{m.BoxPiece}</td>
                                    <td align="center">{m.approbation_No}</td>
                                    <td align="center">{m.expiration_Date}</td>
                                    <td align="center">{m.Prod.SFDA_Status__c}</td>
                                    <td align="center">{m.guaranteeperiod}</td>
                                    <td align="center">{m.limitCount}</td>
                                    <td align="center">{m.overlimitCount}</td>
                                    <template if:true={hasHos}>
                                        <td>
                                            <template if:true={m.hospitalSpecialOffer}>
                                                √
                                            </template>
                                        </td>
                                    </template>
                                </tr>
                            </template>
                        </tbody>
                    </table> -->
                    <!-- <div style="height: 300px;">
                        <lightning-datatable
                                key-field="id"
                                data={data}
                                columns={columns}
                                hide-checkbox-column
                                default-sort-direction={defaultSortDirection}
                                sorted-direction={sortDirection}
                                sorted-by={sortedBy}
                                onsort={onHandleSort}>
                        </lightning-datatable>
                    </div> -->
                </div>
            </div>
        </div>
    </div>
</template>
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js
New file
@@ -0,0 +1,323 @@
import { LightningElement, wire, api, track } from 'lwc';
import oninit from '@salesforce/apex/LexInventoryViewController.init';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import searchOrder from '@salesforce/apex/LexInventoryViewController.searchConsumableorderdetails';
import { NavigationMixin } from 'lightning/navigation';
const columns = [
    {
        label: '消耗品名称',
        fieldName: 'Name__c',
        type: 'Name',
        sortable: true,
        cellAttributes: { alignment: 'left' }
    },
    {
        label: '第三分类',
        fieldName: 'Category3__c',
        hideDefaultActions: true,
        sortable: true
    },
    {
        label: '第四分类',
        fieldName: 'Category4__c',
        hideDefaultActions: true,
        sortable: true
    },
    {
        label: '第五分类',
        fieldName: 'Category5__c',
        hideDefaultActions: true
    },
    {
        label: '规格',
        fieldName: 'packing_list',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '单位',
        fieldName: 'BoxPiece',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '注册证编码号',
        fieldName: 'approbation_No',
        hideDefaultActions: true,
        initialWidth: 100
    },
    {
        label: '注册有效期',
        fieldName: 'expiration_Date',
        hideDefaultActions: true,
        initialWidth: 150
    },
    {
        label: 'CFDA状态',
        fieldName: 'SFDA_Status__c',
        hideDefaultActions: true
    },
    {
        label: '使用期限',
        fieldName: 'guaranteeperiod',
        hideDefaultActions: true
    },
    {
        label: '有效期内库存',
        fieldName: 'limitCount',
        hideDefaultActions: true,
        sortable: true
    },
    {
        label: '过期库存',
        fieldName: 'overlimitCount',
        hideDefaultActions: true
    }
];
export default class LexinventoryViewLWC extends LightningElement {
    @track pageRecords = [];
    @track data = [];
    @track message = '';
    @track Name;
    @track CategoryThree;
    @track CategoryFour;
    @track CategoryFive;
    @track orderDetZaikuList = [];
    @track accountName;
    @track agencyProType;
    @track userWorkLocation;
    @track value = '';
    @track showTable = false;
    @track optionscatone = [];
    @track options2 = [];
    @track options3 = [];
    columns = columns;
    defaultSortDirection = 'asc';
    sortDirection = 'asc';
    sortedBy;
    //   columns = columns;
    connectedCallback() {
        oninit()
            .then((result) => {
                result = JSON.parse(JSON.stringify(result));
                console.log('result.status = ' + result.status);
                console.log('result = ' + JSON.stringify(result));
                console.log('result 1= ' + JSON.stringify(result.entity));
                console.log(
                    'result 2= ' + JSON.stringify(result.entity.pageRecords)
                );
                console.log(
                    'result.entity.categoryOptionMap 2= ' +
                        JSON.stringify(result.entity.categoryOptionMap)
                );
                console.log(
                    'result.entity.categoryOptionMap 2= ' +
                        JSON.stringify(result.entity.category4OptionMap)
                );
                console.log(
                    'result.entity.categoryOptionMap 2= ' +
                        JSON.stringify(result.entity.category5OptionMap)
                );
                if (result.status == 'Success') {
                    //   this.pageRecords = result.entity.pageRecords;
                    this.data = result.entity.pageRecords;
                    for (var i in this.data) {
                        this.data[i]['Name__c'] = this.data[i].Prod.Name__c;
                        this.data[i]['Category3__c'] =
                            this.data[i].Prod.Category3__c;
                        this.data[i]['Category4__c'] =
                            this.data[i].Prod.Category3__c;
                        this.data[i]['Category5__c'] =
                            this.data[i].Prod.Category3__c;
                        this.data[i]['SFDA_Status__c'] =
                            this.data[i].Prod.SFDA_Status__c;
                    }
                    console.log();
                    this.showTable = true;
                    this.orderDetZaikuList = result.entity.orderDetZaikuList;
                    this.accountName = result.entity.accountName;
                    this.agencyProType = result.entity.agencyProType;
                    this.userWorkLocation = result.entity.userWorkLocation;
                    let option1ValueTemp = [];
                    for (var key in result.entity.categoryOptionMap) {
                        let object = {};
                        object['label'] = result.entity.categoryOptionMap[key];
                        object['value'] = key;
                        option1ValueTemp.push(object);
                    }
                    this.optionscatone = option1ValueTemp;
                    console.log(
                        ' this.optionscatone===>' +
                            JSON.stringify(this.optionscatone)
                    );
                    let option2ValueTemp = [];
                    for (var key in result.entity.category4OptionMap) {
                        let object = {};
                        object['label'] = result.entity.category4OptionMap[key];
                        object['value'] = key;
                        option2ValueTemp.push(object);
                    }
                    this.options2 = option2ValueTemp;
                    for (var key in result.entity.category5OptionMap) {
                        let object = {};
                        object['label'] = result.entity.category5OptionMap[key];
                        object['value'] = key;
                        this.options3.push(object);
                    }
                    console.log(' this.data=====>' + this.data);
                    console.log('this.accountName=====>' + this.accountName);
                    console.log(
                        'this.agencyProType=====>' + this.agencyProType
                    );
                    console.log(
                        'this.userWorkLocationt=====>' + this.userWorkLocation
                    );
                    console.log(
                        'orderDetZaikuList=====>' + this.orderDetZaikuList
                    );
                } else {
                    console.log('Error:' + result.errorMsg);
                    const evt = new ShowToastEvent({
                        title: '解析失败',
                        message: result.errorMsg,
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                }
            })
            .catch((error) => {
                console.log('error = ' + JSON.stringify(error));
            });
    }
    get options2() {
        return this.options2;
    }
    get options3() {
        return this.options3;
    }
    sortBy(field, reverse, primer) {
        const key = primer
            ? function (x) {
                  return primer(x[field]);
              }
            : function (x) {
                  return x[field];
              };
        return function (a, b) {
            a = key(a);
            b = key(b);
            return reverse * ((a > b) - (b > a));
        };
    }
    onHandleSort(event) {
        const { fieldName: sortedBy, sortDirection } = event.detail;
        const cloneData = [...this.data];
        cloneData.sort(this.sortBy(sortedBy, sortDirection === 'asc' ? 1 : -1));
        this.data = cloneData;
        this.sortDirection = sortDirection;
        this.sortedBy = sortedBy;
    }
    handlePaginatorChange(event) {
        this.recordsToDisplay = event.detail.recordsToDisplay;
        this.preSelected = event.detail.preSelected;
        if (this.recordsToDisplay && this.recordsToDisplay > 0) {
            this.rowNumberOffset = this.recordsToDisplay[0].rowNumber - 1;
        } else {
            this.rowNumberOffset = 0;
        }
    }
    handleChange(event) {
        let fieldName = event.target.getAttribute('data-field');
        let value = event.detail.value;
        console.log('======>fieldName' + fieldName);
        console.log('======>value' + value);
        switch (fieldName) {
            case 'Name':
                this.Name = value;
                break;
            case 'CategoryThree':
                this.CategoryThree = value;
                break;
            case 'CategoryFour':
                this.CategoryFour = value;
                break;
            case 'CategoryFive':
                this.CategoryFive = value;
                break;
            default:
                console.log('no data');
        }
    }
    searchOrderDetail() {
        this.showTable = false;
        console.log('进入搜索11111111111111');
        console.log('进入搜索');
        console.log('this.Name = ' + this.Name);
        searchOrder({
            category1: this.Name,
            Category3: this.CategoryThree,
            Category4: '',
            Category5: '',
            orderDetZaikuListLWC: JSON.stringify(this.orderDetZaikuList),
            accountName: this.accountName,
            agencyProType: this.agencyProType,
            userWorkLocation: this.userWorkLocation
        })
            .then((result) => {
                result = JSON.parse(JSON.stringify(result));
                console.log('result搜索 = ' + JSON.stringify(result));
                if (result.status == 'Success') {
                    const evt = new ShowToastEvent({
                        title: '搜索成功',
                        message: result.msg,
                        variant: 'Success'
                    });
                    this.dispatchEvent(evt);
                    this.pageRecords = result.entity.pageRecords;
                    this.showTable = true;
                } else {
                    const evt = new ShowToastEvent({
                        title: '',
                        message: result.msg,
                        variant: 'Success'
                    });
                    this.dispatchEvent(evt);
                    this.pageRecords = [];
                    console.log('  this.data===>= ' + this.pageRecords);
                }
            })
            .catch((error) => {
                console.log('error = ' + JSON.stringify(error));
            });
    }
    inventoryCount() {
        console.log('111库存盘点');
        this[NavigationMixin.Navigate]({
            type: 'standard__webPage',
            attributes: {
                url: '/lexInventoryCount'
            }
        });
    }
    clearAll() {
        this.Name = '';
        this.value = '无';
        this.template.querySelectorAll('lightning-combobox').forEach((each) => {
            each.value = null;
        });
    }
}
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js-meta.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightningCommunity__Page</target>
        <target>lightningCommunity__Default</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lookup/lookup.css
New file
@@ -0,0 +1,30 @@
.slds-combobox__input,
.slds-combobox_container {
    transition: border 0.1s linear, box-shadow 0.1 linear;
}
.slds-combobox__input {
    box-shadow: none;
}
.slds-combobox__input.has-custom-border {
    box-shadow: 0 0 0 2px #fff inset, 0 0 0 3px rgb(221, 219, 218) inset;
}
.slds-combobox__input.has-custom-error {
    border: 1px solid rgb(194, 57, 52);
    box-shadow: rgb(194, 57, 52) 0 0 0 1px inset;
}
.slds-combobox_container.has-custom-error {
    border: none !important;
}
.slds-combobox__input.has-custom-height {
    height: 32px !important;
}
.form-error {
    color: rgb(194, 57, 52);
    display: block;
}
force-app/main/default/lwc/lookup/lookup.html
New file
@@ -0,0 +1,139 @@
<template>
    <div class={getFormElementClass}>
        <label lwc:if={label} class={getLabelClass} for="combobox">
            <abbr lwc:if={required} title="required" class="slds-required">*</abbr>
            {label}
        </label>
        <div class="slds-form-element__control">
            <div class={getContainerClass}>
                <div class={getDropdownClass} aria-expanded={isListboxOpen} aria-haspopup="listbox" aria-owns="listbox"
                    role="combobox">
                    <!-- Search input start -->
                    <div class={getComboboxClass} role="none">
                        <template lwc:if={isSingleEntry}>
                            <lightning-icon icon-name={getSelectIconName} size="small"
                                alternative-text="Selected item icon" class={getSelectIconClass}>
                            </lightning-icon>
                        </template>
                        <!-- Text input -->
                        <input type="text" class={getInputClass} aria-autocomplete="list" aria-controls="listbox"
                            aria-activedescendant={_focusedResultIndex} autocomplete="off" role="textbox" id="combobox"
                            placeholder={placeholder} value={getInputValue} title={getInputTitle}
                            readonly={isInputReadonly} disabled={disabled} onfocus={handleFocus} onblur={handleBlur}
                            oninput={handleInput} onkeydown={handleKeyDown} />
                        <!-- Search icon -->
                        <lightning-icon icon-name="utility:search" size="x-small" alternative-text="Search icon"
                            class={getSearchIconClass}></lightning-icon>
                        <!-- Clear selection button icon for single entry lookups -->
                        <template lwc:if={isSingleEntry}>
                            <button title="Remove selected option" type="button" onclick={handleClearSelection}
                                class={getClearSelectionButtonClass} disabled={disabled}>
                                <lightning-icon icon-name="utility:close" size="x-small"
                                    alternative-text="Remove selected option"
                                    class="slds-button__icon"></lightning-icon>
                            </button>
                        </template>
                    </div>
                    <!-- Search input end -->
                    <!-- Result list box start -->
                    <div id="listbox" role="listbox" aria-label={label} onmousedown={handleComboboxMouseDown}
                        onmouseup={handleComboboxMouseUp} class={getListboxClass}>
                        <ul class="slds-listbox slds-listbox_vertical" role="presentation">
                            <!-- Spinner to display when waiting for results of search -->
                            <div lwc:if={loading}>
                                <lightning-spinner alternative-text="Loading" size="small"></lightning-spinner>
                            </div>
                            <!-- Result list start -->
                            <template for:each={searchResultsLocalState} for:item="item" for:index="index"
                                lwc:if={hasResults}>
                                <li key={item.result.id} role="presentation" class="slds-listbox__item">
                                    <div class={item.classes} role="option" id={index} aria-label={item.result.title}
                                        onclick={handleResultClick} data-recordid={item.result.id}>
                                        <span class="slds-media__figure slds-listbox__option-icon">
                                            <lightning-icon icon-name={item.result.icon} size="small"
                                                alternative-text="Result item icon"></lightning-icon>
                                        </span>
                                        <span class="slds-media__body">
                                            <span class="slds-listbox__option-text slds-listbox__option-text_entity">
                                                <lightning-formatted-rich-text value={item.result.titleFormatted}
                                                    disable-linkify>
                                                </lightning-formatted-rich-text>
                                            </span>
                                            <span lwc:if={item.result.subtitleFormatted}
                                                class="slds-listbox__option-meta slds-listbox__option-meta_entity">
                                                <lightning-formatted-rich-text value={item.result.subtitleFormatted}
                                                    disable-linkify>
                                                </lightning-formatted-rich-text>
                                            </span>
                                        </span>
                                    </div>
                                </li>
                            </template>
                            <!-- Result list end -->
                            <!-- No results start -->
                            <template lwc:else>
                                <li role="presentation">
                                    <span class="slds-media slds-listbox__option_entity" role="option">
                                        <span lwc:if={loading} class="slds-media__body">Loading...</span>
                                        <span lwc:else class="slds-media__body">No results.</span>
                                    </span>
                                </li>
                            </template>
                            <!-- No results end -->
                            <!-- Create new records -->
                            <template for:each={newRecordOptions} for:item="newRecord">
                                <li key={newRecord.value} role="presentation" class="slds-listbox__item">
                                    <div class="slds-media slds-media_center slds-listbox__option slds-listbox__option_entity"
                                        onclick={handleNewRecordClick} data-sobject={newRecord.value} role="option">
                                        <span class="slds-media__figure slds-listbox__option-icon">
                                            <lightning-icon icon-name="utility:add" size="small"
                                                alternative-text={newRecord.label}></lightning-icon>
                                        </span>
                                        <span class="slds-media__body">
                                            <span class="slds-listbox__option-text">{newRecord.label}</span>
                                        </span>
                                    </div>
                                </li>
                            </template>
                            <!-- Create new records end -->
                        </ul>
                    </div>
                    <!-- Result list box end -->
                </div>
            </div>
            <!-- Multi-selection start -->
            <template lwc:if={isMultiEntry}>
                <div id="selection" role="listbox" aria-label={label} aria-orientation="horizontal">
                    <ul class="slds-listbox slds-listbox_inline slds-var-p-top_xxx-small" role="group"
                        aria-label="Selected options">
                        <template for:each={selection} for:item="item">
                            <li key={item.id} role="presentation">
                                <lightning-pill label={item.title} title={item.title}
                                    onremove={handleRemoveSelectedItem} name={item.id}>
                                    <lightning-icon icon-name={item.icon}></lightning-icon>
                                </lightning-pill>
                            </li>
                        </template>
                    </ul>
                </div>
            </template>
            <!-- Multi-selection end -->
            <!-- Errors start -->
            <template for:each={_errors} for:item="error">
                <div key={error.id} role="alert" class="slds-form-element__label slds-var-m-top_xx-small form-error">
                    {error.message}
                </div>
            </template>
            <!-- Errors end -->
        </div>
    </div>
</template>
force-app/main/default/lwc/lookup/lookup.js
New file
@@ -0,0 +1,468 @@
import { LightningElement, api } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';
const SEARCH_DELAY = 300; // Wait 300 ms after user stops typing then, peform search
const KEY_ARROW_UP = 38;
const KEY_ARROW_DOWN = 40;
const KEY_ENTER = 13;
const VARIANT_LABEL_STACKED = 'label-stacked';
const VARIANT_LABEL_INLINE = 'label-inline';
const VARIANT_LABEL_HIDDEN = 'label-hidden';
const REGEX_SOSL_RESERVED = /(\?|&|\||!|\{|\}|\[|\]|\(|\)|\^|~|\*|:|"|\+|-|\\)/g;
const REGEX_EXTRA_TRAP = /(\$|\\)/g;
export default class Lookup extends NavigationMixin(LightningElement) {
    // Public properties
    @api variant = VARIANT_LABEL_STACKED;
    @api label = '';
    @api required = false;
    @api disabled = false;
    @api placeholder = '';
    @api isMultiEntry = false;
    @api scrollAfterNItems = null;
    @api newRecordOptions = [];
    @api minSearchTermLength = 2;
    // Template properties
    searchResultsLocalState = [];
    loading = false;
    // Private properties
    _errors = [];
    _hasFocus = false;
    _isDirty = false;
    _searchTerm = '';
    _cleanSearchTerm;
    _cancelBlur = false;
    _searchThrottlingTimeout;
    _searchResults = [];
    _defaultSearchResults = [];
    _curSelection = [];
    _focusedResultIndex = null;
    // PUBLIC FUNCTIONS AND GETTERS/SETTERS
    @api
    set selection(initialSelection) {
        if (initialSelection) {
            this._curSelection = Array.isArray(initialSelection) ? initialSelection : [initialSelection];
            this.processSelectionUpdate(false);
        }
    }
    get selection() {
        return this._curSelection;
    }
    @api
    set errors(errors) {
        this._errors = errors;
        // Blur component if errors are passed
        if (this._errors?.length > 0) {
            this.blur();
        }
    }
    get errors() {
        return this._errors;
    }
    @api
    get validity() {
        return { valid: !this._errors || this._errors.length === 0 };
    }
    @api
    get value() {
        return this.getSelection();
    }
    @api
    setSearchResults(results) {
        // Reset the spinner
        this.loading = false;
        // Clone results before modifying them to avoid Locker restriction
        let resultsLocal = JSON.parse(JSON.stringify(results));
        // Remove selected items from search results
        const selectedIds = this._curSelection.map((sel) => sel.id);
        resultsLocal = resultsLocal.filter((result) => selectedIds.indexOf(result.id) === -1);
        // Format results
        const cleanSearchTerm = this._searchTerm.replace(REGEX_SOSL_RESERVED, '.?').replace(REGEX_EXTRA_TRAP, '\\$1');
        const regex = new RegExp(`(${cleanSearchTerm})`, 'gi');
        this._searchResults = resultsLocal.map((result) => {
            // Format title and subtitle
            if (this._searchTerm.length > 0) {
                result.titleFormatted = result.title
                    ? result.title.replace(regex, '<strong>$1</strong>')
                    : result.title;
                result.subtitleFormatted = result.subtitle
                    ? result.subtitle.replace(regex, '<strong>$1</strong>')
                    : result.subtitle;
            } else {
                result.titleFormatted = result.title;
                result.subtitleFormatted = result.subtitle;
            }
            // Add icon if missing
            if (typeof result.icon === 'undefined') {
                result.icon = 'standard:default';
            }
            return result;
        });
        // Add local state and dynamic class to search results
        this._focusedResultIndex = null;
        const self = this;
        this.searchResultsLocalState = this._searchResults.map((result, i) => {
            return {
                result,
                state: {},
                get classes() {
                    let cls = 'slds-media slds-media_center slds-listbox__option slds-listbox__option_entity';
                    if (result.subtitleFormatted) {
                        cls += ' slds-listbox__option_has-meta';
                    }
                    if (self._focusedResultIndex === i) {
                        cls += ' slds-has-focus';
                    }
                    return cls;
                }
            };
        });
    }
    @api
    getSelection() {
        return this._curSelection;
    }
    @api
    setDefaultResults(results) {
        this._defaultSearchResults = [...results];
        if (this._searchResults.length === 0) {
            this.setSearchResults(this._defaultSearchResults);
        }
    }
    @api
    blur() {
        this.template.querySelector('input')?.blur();
    }
    // INTERNAL FUNCTIONS
    updateSearchTerm(newSearchTerm) {
        this._searchTerm = newSearchTerm;
        // Compare clean new search term with current one and abort if identical
        const newCleanSearchTerm = newSearchTerm.trim().replace(REGEX_SOSL_RESERVED, '?').toLowerCase();
        if (this._cleanSearchTerm === newCleanSearchTerm) {
            return;
        }
        // Save clean search term
        this._cleanSearchTerm = newCleanSearchTerm;
        // Ignore search terms that are too small after removing special characters
        if (newCleanSearchTerm.replace(/\?/g, '').length < this.minSearchTermLength) {
            this.setSearchResults(this._defaultSearchResults);
            return;
        }
        // Apply search throttling (prevents search if user is still typing)
        if (this._searchThrottlingTimeout) {
            clearTimeout(this._searchThrottlingTimeout);
        }
        // eslint-disable-next-line @lwc/lwc/no-async-operation
        this._searchThrottlingTimeout = setTimeout(() => {
            // Send search event if search term is long enougth
            if (this._cleanSearchTerm.length >= this.minSearchTermLength) {
                // Display spinner until results are returned
                this.loading = true;
                const searchEvent = new CustomEvent('search', {
                    detail: {
                        searchTerm: this._cleanSearchTerm,
                        rawSearchTerm: newSearchTerm,
                        selectedIds: this._curSelection.map((element) => element.id)
                    }
                });
                this.dispatchEvent(searchEvent);
            }
            this._searchThrottlingTimeout = null;
        }, SEARCH_DELAY);
    }
    isSelectionAllowed() {
        if (this.isMultiEntry) {
            return true;
        }
        return !this.hasSelection();
    }
    hasSelection() {
        return this._curSelection.length > 0;
    }
    processSelectionUpdate(isUserInteraction) {
        // Reset search
        this._cleanSearchTerm = '';
        this._searchTerm = '';
        this.setSearchResults([...this._defaultSearchResults]);
        // Indicate that component was interacted with
        this._isDirty = isUserInteraction;
        // Blur input after single select lookup selection
        if (!this.isMultiEntry && this.hasSelection()) {
            this._hasFocus = false;
        }
        // If selection was changed by user, notify parent components
        if (isUserInteraction) {
            const selectedIds = this._curSelection.map((sel) => sel.id);
            this.dispatchEvent(new CustomEvent('selectionchange', { detail: selectedIds }));
        }
    }
    // EVENT HANDLING
    handleInput(event) {
        // Prevent action if selection is not allowed
        if (!this.isSelectionAllowed()) {
            return;
        }
        this.updateSearchTerm(event.target.value);
    }
    handleKeyDown(event) {
        if (this._focusedResultIndex === null) {
            this._focusedResultIndex = -1;
        }
        if (event.keyCode === KEY_ARROW_DOWN) {
            // If we hit 'down', select the next item, or cycle over.
            this._focusedResultIndex++;
            if (this._focusedResultIndex >= this._searchResults.length) {
                this._focusedResultIndex = 0;
            }
            event.preventDefault();
        } else if (event.keyCode === KEY_ARROW_UP) {
            // If we hit 'up', select the previous item, or cycle over.
            this._focusedResultIndex--;
            if (this._focusedResultIndex < 0) {
                this._focusedResultIndex = this._searchResults.length - 1;
            }
            event.preventDefault();
        } else if (event.keyCode === KEY_ENTER && this._hasFocus && this._focusedResultIndex >= 0) {
            // If the user presses enter, and the box is open, and we have used arrows,
            // treat this just like a click on the listbox item
            const selectedId = this._searchResults[this._focusedResultIndex].id;
            this.template.querySelector(`[data-recordid="${selectedId}"]`).click();
            event.preventDefault();
        }
    }
    handleResultClick(event) {
        const recordId = event.currentTarget.dataset.recordid;
        // Save selection
        const selectedItem = this._searchResults.find((result) => result.id === recordId);
        if (!selectedItem) {
            return;
        }
        const newSelection = [...this._curSelection];
        newSelection.push(selectedItem);
        this._curSelection = newSelection;
        // Process selection update
        this.processSelectionUpdate(true);
    }
    handleComboboxMouseDown(event) {
        const mainButton = 0;
        if (event.button === mainButton) {
            this._cancelBlur = true;
        }
    }
    handleComboboxMouseUp() {
        this._cancelBlur = false;
        // Re-focus to text input for the next blur event
        this.template.querySelector('input').focus();
    }
    handleFocus() {
        // Prevent action if selection is not allowed
        if (!this.isSelectionAllowed()) {
            return;
        }
        this._hasFocus = true;
        this._focusedResultIndex = null;
    }
    handleBlur() {
        // Prevent action if selection is either not allowed or cancelled
        if (!this.isSelectionAllowed() || this._cancelBlur) {
            return;
        }
        this._hasFocus = false;
    }
    handleRemoveSelectedItem(event) {
        if (this.disabled) {
            return;
        }
        const recordId = event.currentTarget.name;
        this._curSelection = this._curSelection.filter((item) => item.id !== recordId);
        // Process selection update
        this.processSelectionUpdate(true);
    }
    handleClearSelection() {
        this._curSelection = [];
        this._hasFocus = false;
        // Process selection update
        this.processSelectionUpdate(true);
    }
    handleNewRecordClick(event) {
        const objectApiName = event.currentTarget.dataset.sobject;
        const selection = this.newRecordOptions.find((option) => option.value === objectApiName);
        const preNavigateCallback = selection.preNavigateCallback
            ? selection.preNavigateCallback
            : () => Promise.resolve();
        preNavigateCallback(selection).then(() => {
            this[NavigationMixin.Navigate]({
                type: 'standard__objectPage',
                attributes: {
                    objectApiName,
                    actionName: 'new'
                },
                state: {
                    defaultFieldValues: selection.defaults
                }
            });
        });
    }
    // STYLE EXPRESSIONS
    get isSingleEntry() {
        return !this.isMultiEntry;
    }
    get isListboxOpen() {
        const isSearchTermValid = this._cleanSearchTerm && this._cleanSearchTerm.length >= this.minSearchTermLength;
        return (
            this._hasFocus &&
            this.isSelectionAllowed() &&
            (isSearchTermValid || this.hasResults || this.newRecordOptions?.length > 0)
        );
    }
    get hasResults() {
        return this._searchResults.length > 0;
    }
    get getFormElementClass() {
        return this.variant === VARIANT_LABEL_INLINE
            ? 'slds-form-element slds-form-element_horizontal'
            : 'slds-form-element';
    }
    get getLabelClass() {
        return this.variant === VARIANT_LABEL_HIDDEN
            ? 'slds-form-element__label slds-assistive-text'
            : 'slds-form-element__label';
    }
    get getContainerClass() {
        let css = 'slds-combobox_container ';
        if (this._errors.length > 0) {
            css += 'has-custom-error';
        }
        return css;
    }
    get getDropdownClass() {
        let css = 'slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click ';
        if (this.isListboxOpen) {
            css += 'slds-is-open';
        }
        return css;
    }
    get getInputClass() {
        let css = 'slds-input slds-combobox__input has-custom-height ';
        if (this._hasFocus && this.hasResults) {
            css += 'slds-has-focus ';
        }
        if (this._errors.length > 0 || (this._isDirty && this.required && !this.hasSelection())) {
            css += 'has-custom-error ';
        }
        if (!this.isMultiEntry) {
            css += 'slds-combobox__input-value ' + (this.hasSelection() ? 'has-custom-border' : '');
        }
        return css;
    }
    get getComboboxClass() {
        let css = 'slds-combobox__form-element slds-input-has-icon ';
        if (this.isMultiEntry) {
            css += 'slds-input-has-icon_right';
        } else {
            css += this.hasSelection() ? 'slds-input-has-icon_left-right' : 'slds-input-has-icon_right';
        }
        return css;
    }
    get getSearchIconClass() {
        let css = 'slds-input__icon slds-input__icon_right ';
        if (!this.isMultiEntry) {
            css += this.hasSelection() ? 'slds-hide' : '';
        }
        return css;
    }
    get getClearSelectionButtonClass() {
        return (
            'slds-button slds-button_icon slds-input__icon slds-input__icon_right ' +
            (this.hasSelection() ? '' : 'slds-hide')
        );
    }
    get getSelectIconName() {
        return this.hasSelection() ? this._curSelection[0].icon : 'standard:default';
    }
    get getSelectIconClass() {
        return 'slds-combobox__input-entity-icon ' + (this.hasSelection() ? '' : 'slds-hide');
    }
    get getInputValue() {
        if (this.isMultiEntry) {
            return this._searchTerm;
        }
        return this.hasSelection() ? this._curSelection[0].title : this._searchTerm;
    }
    get getInputTitle() {
        if (this.isMultiEntry) {
            return '';
        }
        return this.hasSelection() ? this._curSelection[0].title : '';
    }
    get getListboxClass() {
        return (
            'slds-dropdown ' +
            (this.scrollAfterNItems ? `slds-dropdown_length-with-icon-${this.scrollAfterNItems} ` : '') +
            'slds-dropdown_fluid'
        );
    }
    get isInputReadonly() {
        if (this.isMultiEntry) {
            return false;
        }
        return this.hasSelection();
    }
}
force-app/main/default/lwc/lookup/lookup.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lookup">
    <apiVersion>57.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.css
New file
@@ -0,0 +1,25 @@
.customSelect select {
    padding-right: 1.25rem;
    min-height: inherit;
    line-height: normal;
    height: 1.4rem;
}
.customSelect label {
    margin-top: .1rem;
}
.customSelect .slds-select_container::before {
    border-bottom: 0;
}
.customInput {
    width: 3rem;
    height: 1.4rem;
    text-align: center;
    border: 1px solid #dddbda;
    border-radius: 3px;
    background-color:#fff;
}
.THIS .slds-table_header-fixed_container {
    min-height: 12em;
}
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.html
New file
@@ -0,0 +1,80 @@
<template>
    <template if:true={records}>
        <div class="slds-grid slds-grid_vertical-align-center slds-grid_align-spread">
            <div class="slds-col"><!--RECORDS PER PAGE-->
                <div style={paginationVisibility} class="slds-list_inline slds-p-bottom_xx-small customSelect">
                    <label class="slds-text-color_weak slds-p-horizontal_x-small" for="recordsPerPage">Page Size:</label>
                    <div class="slds-select_container">
                        <select class="slds-select" id="recordsPerPage" onchange={handleRecordsPerPage}>
                            <template for:each={pageSizeOptions} for:item="option">
                                <option key={option} value={option}>{option}</option>
                            </template>
                        </select>
                    </div>
                </div>
            </div>
            <!-- <div class="slds-col">
                <div if:true={showSearchBox}>
                    <div class="slds-p-horizontal_x-small slds-p-bottom_xx-small">
                        <lightning-input label="" type="search" placeholder="Search" variant="label-hidden" onchange={handleKeyChange}></lightning-input>
                    </div>
                </div>
            </div>         -->
        </div>
        <div class="slds-grid slds-grid_vertical-align-center slds-grid_align-spread">
            <div class="slds-col">
                <div class="slds-col slds-p-bottom_xx-small">
                    <span>
                        <label class="slds-text-color_weak slds-p-horizontal_x-small" >Total: {filtredNum}</label>
                    </span>
                    <span>
                        <label class="slds-text-color_weak slds-p-horizontal_x-small" >Selected: {totalSelected}</label>
                    </span>
                </div>
            </div>
        </div>
        <div class="slds-grid slds-grid_vertical-align-center slds-grid_align-spread" >
            <div class="slds-col" style={tableHeightStyle}>
                <lightning-datatable key-field={keyField}
                    hide-checkbox-column = {hidecheckboxcolumn}
                    data={recordsToDisplay}
                    columns={columns}
                    max-row-selection={maxRowSelection}
                    onrowselection={getSelectedRows}
                    selected-rows={preSelected}
                    default-sort-direction={defaultSortDirection}
                    sorted-direction={sortDirection}
                    sorted-by={sortedBy}
                    onsort={handelSort}
                    show-row-number-column = {showrownumber}>
                </lightning-datatable>
            </div>
        </div>
        <div class="slds-grid slds-grid_vertical-align-center slds-grid_align-spread" style="padding-top: 0.5em;">
            <div class="slds-col"></div>
            <div class="slds-col"></div>
            <!--PAGE NAVIGATION-->
            <div class="slds-col">
                <div style={paginationVisibility}>
                    <div class="slds-col slds-p-bottom_xx-small">
                        <span>
                            <lightning-button-icon icon-name="utility:chevronleft" variant="bare" size="medium" alternative-text="Previous Page" onclick={previousPage}></lightning-button-icon>
                        </span>
                        <label class="slds-text-color_weak slds-p-horizontal_x-small" for="pageNum">Page:</label>
                        <input type="number" id="pageNum" value={pageNumber} maxlength="4" onkeypress={handlePageNumberChange} class="customInput" title="Go to a Page"></input>
                        <span>&nbsp;of&nbsp;<b id="totalPages">{totalPages}</b></span>
                        <span>
                            <template if:true={pageNumber}></template>
                            <lightning-button-icon icon-name="utility:chevronright" variant="bare" size="medium" alternative-text="Next Page" onclick={nextPage} class="slds-p-horizontal_x-small"></lightning-button-icon>
                        </span>
                    </div>
                </div>
            </div>
        </div>
    </template>
</template>
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js
New file
@@ -0,0 +1,273 @@
import { LightningElement, api,track } from 'lwc';
import customUnitTemplate from './templates/customUnit.html';
import customShipmentNumberTemplate from './templates/customShipmentNumber.html';
import customShippingUnitPriceTemplate from './templates/customShippingUnitPrice.html';
const DELAY = 300;
const recordsPerPage = [5,10,25,50,75,100];
const pageNumber = 1;
const SHOWDIV = 'visibility:visible';
const HIDEDIV = 'visibility:hidden';
const DEFAULTHEIGHT = '300';
export default class LwcDatatableUtility extends LightningElement {
    static customTypes = {
        customUnit: {
            template: customUnitTemplate,
            standardCellLayout: true,
            typeAttributes: ['Id'],
        },
        customShipment: {
            template: customShipmentNumberTemplate,
            standardCellLayout: true,
            typeAttributes: ['Id'],
        },
        customShipmentUnitPrice: {
            template: customShippingUnitPriceTemplate,
            standardCellLayout: true,
            typeAttributes: ['Id'],
        }
        // Other types here
    }
    // Input Attributes from Parent Componant
    @api keyField = 'Id';
    @api showSearchBox = false; //Show/hide search box; valid values are true/false
    @api showPagination; //Show/hide pagination; valid values are true/false
    @api pageSizeOptions = recordsPerPage; //Page size options; valid values are array of integers
    @api totalRecords; //Total no.of records; valid type is Integer
    @api records; //All records available in the data table; valid type is Array
    @api maxRowSelection; //All records available in the data table; valid type is Array
    @api columns = []; //Records to be displayed on the page
    @api hidecheckboxcolumn = false;
    @api showrownumber = false;
    tableHeightStyle = 'height: '+ DEFAULTHEIGHT +'px;';    // Set Default Height as 300px
    @api
    get tableHeight() {
        return this.tableHeightStyle;
    }
    set tableHeight(value) {
       this.tableHeightStyle = 'height: '+ value +'px;';
    }
    pageSize; //No.of records to be displayed per page
    totalPages; //Total no.of pages
    pageNumber = pageNumber; //Page number
    searchKey; //Search Input
    paginationVisibility = SHOWDIV;
    rowNumberOffset; //Row number
    preSelected; //preSelectedOnDisplay
    recordsToDisplay = []; //Records to be displayed on the page
    filteredRecords = []; //Filtered records available in the data table; valid type is Array
    selectedRecords = []; //OverallSelected records  in the data table; valid type is Array
    pageSelectedRecords = []; //Page Selected rows  in the data table; valid type is Array
    filtredNum; // Total no.of Filtered records; valid type is Integer
    totalSelected = 0;
    refreshCurrentData;
    //SORT
    defaultSortDirection = 'asc';
    sortDirection = 'asc';
    sortedBy;
    //Called after the component finishes inserting to DOM
    connectedCallback() {
        console.log('进入 子组件 connectedCallback ');
        console.log('this.records = '  + JSON.stringify(this.records));
        console.log('keyField = ' + this.keyField);
        if(this.pageSizeOptions && this.pageSizeOptions.length > 0)
            this.pageSize = this.pageSizeOptions[0];
        else{
            this.pageSize = this.totalRecords;
            this.showPagination = false;
        }
        this.paginationVisibility = this.showPagination === false ? HIDEDIV : SHOWDIV;
        this.filteredRecords = this.records;
        this.filtredNum = this.totalRecords;
        this.setRecordsOnPage();
    }
    handleRecordsPerPage(event){
        this.pageSize = event.target.value;
        this.setRecordsOnPage();
    }
    handlePageNumberChange(event){
        if(event.keyCode === 13){
            this.pageNumber = event.target.value;
            this.setRecordsOnPage();
        }
    }
    previousPage(){
        this.pageNumber = this.pageNumber-1;
        this.setRecordsOnPage();
    }
    nextPage(){
        this.pageNumber = this.pageNumber+1;
        this.setRecordsOnPage();
    }
    @api
    setRecordsOnPage(){
        this.recordsToDisplay = [];
        if(!this.pageSize)
            this.pageSize = this.filtredNum;
        this.totalPages = Math.ceil(this.filtredNum/this.pageSize);
        this.setPaginationControls();
        for(let i=(this.pageNumber-1)*this.pageSize; i < this.pageNumber*this.pageSize; i++){
            if(i === this.filtredNum) break;
            this.recordsToDisplay.push(this.filteredRecords[i]);
        }
        this.preSelected = [];
        this.selectedRecords.forEach((item) => {
            if(item.selected)
                this.preSelected.push(item.Id);
        })
        let paginatedRecords = new Object();
        paginatedRecords.recordsToDisplay = this.recordsToDisplay;
        paginatedRecords.preSelected = this.preSelected;
        if(this.maxRowSelection === '1' ){
            this.totalSelected = 0;
        }
        if(this.selectedRecords && this.selectedRecords.length > 0){
            this.refreshCurrentData = true;
        }
    }
    setPaginationControls(){
        // Previous/Next buttons visibility by Total pages
        if(this.totalPages === 1){
            this.showPrevious = HIDEDIV;
            this.showNext = HIDEDIV;
        }else if(this.totalPages > 1){
           this.showPrevious = SHOWDIV;
           this.showNext = SHOWDIV;
        }
        // Previous/Next buttons visibility by Page number
        if(this.pageNumber <= 1){
            this.pageNumber = 1;
            this.showPrevious = HIDEDIV;
        }else if(this.pageNumber >= this.totalPages){
            this.pageNumber = this.totalPages;
            this.showNext = HIDEDIV;
        }
        // Previous/Next buttons visibility by Pagination visibility
        if(this.paginationVisibility === HIDEDIV){
            this.showPrevious = HIDEDIV;
            this.showNext = HIDEDIV;
        }
    }
    handleKeyChange(event) {
        window.clearTimeout(this.delayTimeout);
        const searchKey = event.target.value;
        if(searchKey){
            this.delayTimeout = setTimeout(() => {
                //this.paginationVisibility = HIDEDIV;
                this.setPaginationControls();
                this.searchKey = searchKey;
                //Use other field name here in place of 'Name' field if you want to search by other field
                //this.recordsToDisplay = this.records.filter(rec => rec.includes(searchKey));
                //Search with any column value (Updated as per the feedback)
                this.filteredRecords = this.records.filter(rec => JSON.stringify(rec).toLowerCase().includes(searchKey.toLowerCase()));
                this.filtredNum = this.filteredRecords.length;
                this.setRecordsOnPage();
            }, DELAY);
        }else{
            this.filteredRecords = this.records;
            this.filtredNum = this.totalRecords;
            this.paginationVisibility = SHOWDIV;
            this.setRecordsOnPage();
        }
    }
    handelRowsSelected(selectedRows) {
        console.log(selectedRows.length);
        this.totalSelected = 0;
        this.pageSelectedRecords = [];
        if(this.maxRowSelection != '1' && this.recordsToDisplay &&
            this.recordsToDisplay.length > 0 &&
            ((selectedRows.length === 0 && !this.refreshCurrentData) || selectedRows.length > 0) ){
            this.recordsToDisplay.forEach((item)=>{
                var row = new Object();
                row.Id = item.Id;
                if(selectedRows.includes(item.Id)){
                    row.selected = true;
                }else{
                    row.selected = false;
                }
                this.pageSelectedRecords.push(row) ;
            });
        }
        // To store previous row Selection
        if(this.selectedRecords.length == 0 ){
            this.selectedRecords = this.pageSelectedRecords;
        }
        this.selectedRecords = this.mergeObjectArray(this.selectedRecords, this.pageSelectedRecords, "Id");
        if(this.maxRowSelection === '1' && selectedRows && selectedRows.length > 0){
            this.totalSelected = 1;
        }else{
            let i=0;
            this.selectedRecords.forEach(item => {
                if(item.selected){
                    i++;
                    this.totalSelected = i;
                }
            })
            //this.totalSelected = this.totalSelected ===1 && selectedRows.length ===0? 0: this.totalSelected;
        }
        const filterSelected = this.selectedRecords.filter(({ selected }) => selected === true );
        this.dispatchEvent(new CustomEvent('setselectedrecords', {detail: filterSelected})); //Send records to display on table to the parent component
        this.refreshCurrentData = false;
    }
    mergeObjectArray(firstArray, secondArray, prop){
        var reduced =  firstArray.filter( aitem => ! secondArray.find ( bitem => aitem[prop] === bitem[prop]) )
        //let arr3 = arr1.map((item, i) => Object.assign({}, item, arr2[i]));
        return reduced.concat(secondArray);
    }
    getSelectedRows(event) {
        const selectedRows = event.detail.selectedRows;
        let selectedRecordIds = [];
        // Display that fieldName of the selected rows
        for (let i = 0; i < selectedRows.length; i++){
            selectedRecordIds.push(selectedRows[i].Id);
        }
        this.handelRowsSelected(selectedRecordIds);
    }
    handelSort(event){
        const { fieldName: sortedBy, sortDirection } = event.detail;
        const cloneData = [...this.filteredRecords];
        cloneData.sort(this.sortBy(sortedBy, sortDirection === 'asc' ? 1 : -1));
        this.filteredRecords = cloneData;
        this.sortDirection = sortDirection;
        this.sortedBy = sortedBy;
        this.setRecordsOnPage();
    }
    sortBy(field, reverse, primer) {
        const key = primer
            ? function(x) {
                  return primer(x[field]);
              }
            : function(x) {
                  return x[field];
              };
        return function(a, b) {
            a = key(a);
            b = key(b);
            return reverse * ((a > b) - (b > a));
        };
    }
}
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js-meta.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>48.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lwcDatatableUtility/templates/customShipmentNumber.html
New file
@@ -0,0 +1,11 @@
<template>
    <lightning-input
        type="text"
        name="shipmentNumber"
        label="deliveryOrderNo"
        variant="label-hidden"
        onchange={dataChange}
        data-field="shipmentNumber"
        value={shipmentNumber}
    ></lightning-input>
</template>
force-app/main/default/lwc/lwcDatatableUtility/templates/customShippingUnitPrice.html
New file
@@ -0,0 +1,11 @@
<template>
    <lightning-input
        type="number"
        name="shipmentUnitPrice"
        label="deliveryOrderNo"
        variant="label-hidden"
        onchange={dataChange}
        data-field="shipmentUnitPrice"
        value={shipmentUnitPrice}
    ></lightning-input>
</template>
force-app/main/default/lwc/lwcDatatableUtility/templates/customUnit.html
New file
@@ -0,0 +1,8 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <select>
        <option value="盒">盒</option>
        <option value="个">个</option>
      </select>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/customName.html
New file
@@ -0,0 +1,6 @@
<template>
    <lightning-badge
        label={typeAttributes.accountName}
        icon-name="standard:account">
    </lightning-badge>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/customNumber.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="slds-p-around_x-small">
        <lightning-formatted-number value={value} class="slds-float_right"></lightning-formatted-number>
        <lightning-icon icon-name={typeAttributes.status} alternative-text="Employer Status"></lightning-icon>
    </div>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/customShipmentNumber.html
New file
@@ -0,0 +1,11 @@
<template>
    <lightning-input
        type="text"
        name="shipmentNumber"
        label="deliveryOrderNo"
        variant="label-hidden"
        onchange={dataChange}
        data-field="shipmentNumber"
        value={shipmentNumber}
    ></lightning-input>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/customShippingUnitPrice.html
New file
@@ -0,0 +1,11 @@
<template>
    <lightning-input
        type="number"
        name="shipmentUnitPrice"
        label="deliveryOrderNo"
        variant="label-hidden"
        onchange={dataChange}
        data-field="shipmentUnitPrice"
        value={shipmentUnitPrice}
    ></lightning-input>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/customUnit.html
New file
@@ -0,0 +1,8 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <select>
        <option value="盒">盒</option>
        <option value="个">个</option>
      </select>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.html
New file
@@ -0,0 +1,2 @@
<template>
</template>
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.js
New file
@@ -0,0 +1,41 @@
import { LightningElement,api,wire,track } from 'lwc';
import LightningDatatable from 'lightning/datatable';
import customUnitTemplate from './customUnit.html';
import customShipmentNumberTemplate from './customShipmentNumber.html';
import customShippingUnitPriceTemplate from './customShippingUnitPrice.html';
import customNameTemplate from './customName.html';
import customNumberTemplate from './customNumber.html';
export default class MyCustomTypeDatatable extends LightningDatatable  {
    // static customTypes = {
    //     customUnit: {
    //         template: customUnitTemplate,
    //         //typeAttributes: ['value'],
    //     },
    //     customShipment: {
    //         template: customShipmentNumberTemplate,
    //         //typeAttributes: ['value'],
    //     },
    //     customShipmentUnitPrice: {
    //         template: customShippingUnitPriceTemplate,
    //         //typeAttributes: ['value'],
    //     }
    //     // Other types here
    // }
    static customTypes = {
        customName: {
            template: customNameTemplate,
            standardCellLayout: true,
            typeAttributes: ['accountName'],
        }
        // Other types here
    }
    connectedCallback(){
        console.log('MyCustomTypeDatatable enter')
    }
}
force-app/main/default/lwc/myCustomTypeDatatable/myCustomTypeDatatable.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/paginatedList/paginatedList.html
New file
@@ -0,0 +1,35 @@
<template>
    <template if:true={loader}>
        <lightning-spinner alternative-text="Loading..." size="small"></lightning-spinner>
    </template>
    <template if:true={records}>
        <div class="table-container">
            <lightning-datatable
                key-field="id"
                data={records}
                columns={columns}
                sorted-by={sortBy}
                sorted-direction={sortDirection}
                onsort={doSorting}
            >
            </lightning-datatable>
        </div>
        <c-paginator
            if:true={paginationVisibility}
            onprevious={handlePrevious}
            onnext={handleNext}
            onpageschange={handlePageschange}
            onfirst={handleFirst}
            onlast={handleLast}
            page-size-options={pageSizeOptions}
            previous-button-disabled={previousButtonDisabled}
            next-button-disabled={nextButtonDisabled}
            record-start={recordStart}
            record-end={recordEnd}
            total-records={totalRecords}
        ></c-paginator>
    </template>
    <template if:true={error}>
        <c-error-panel errors={error}></c-error-panel>
    </template>
</template>
force-app/main/default/lwc/paginatedList/paginatedList.js
New file
@@ -0,0 +1,120 @@
import { LightningElement, api, track } from "lwc";
import getAccountsPaginated from "@salesforce/apex/PaginatedListControllerLwc.getAccountsPaginated";
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { reduceErrors } from 'c/ldsUtils';
import ACCOUNT_NAME_FIELD from "@salesforce/schema/Account.Name";
import ACCOUNT_TYPE_FIELD from "@salesforce/schema/Account.Type";
import ACCOUNT_PHONE_FIELD from "@salesforce/schema/Account.Type";
import ACCOUNT_EMPLOYEES_FIELD from "@salesforce/schema/Account.NumberOfEmployees";
const COLUMNS = [
    {
        label: "Account Name",
        fieldName: ACCOUNT_NAME_FIELD.fieldApiName,
        type: "text",
        sortable: "true"
    },
    { label: "Type", fieldName: ACCOUNT_TYPE_FIELD.fieldApiName, type: "text" },
    {
        label: "Phone",
        fieldName: ACCOUNT_PHONE_FIELD.fieldApiName,
        type: "phone"
    },
    {
        label: "Employees",
        fieldName: ACCOUNT_EMPLOYEES_FIELD.fieldApiName,
        type: "Number"
    }
];
export default class PaginatedList extends LightningElement {
    columns = COLUMNS;
    @track sortBy = "Name";
    @track sortDirection = "asc";
    @track pageSize = 10;
    error;
    records;
    currentPageToken = 0;
    nextPageToken = this.pageSize;
    @track loader = false;
    @track pageNumber = 1;
    @track paginationVisibility = false;
    @track totalPages = 1;
    @api pageSizeOptions = [10, 25, 50, 75, 100];
    connectedCallback() {
        this.getAccounts();
    }
    getAccounts() {
        this.loader = true;
        getAccountsPaginated({
            pageSize: this.pageSize,
            pageToken: this.currentPageToken,
            sortField: this.sortBy,
            sortOrder: this.sortDirection
        })
            .then((result) => {
                this.loader = false;
                if (result) {
                    this.records = result.records;
                    this.nextPageToken = result.nextPageToken;
                    this.totalRecords = result.totalRecords;
                    this.recordStart = result.recordStart;
                    this.recordEnd = result.recordEnd;
                    this.totalPages = Math.ceil(result.totalRecords / this.pageSize);
                    this.paginationVisibility = this.totalPages > 1 ? true : false;
                }
            })
            .catch((error) => {
                this.loader = false;
                this.error = error;
                this.currentPageToken = 0;
                const evt = new ShowToastEvent({
                    title: 'Error',
                    message: reduceErrors(error).join(', '),
                    variant: 'error'
                });
                this.dispatchEvent(evt);
            });
    }
    doSorting(event) {
        console.log("Sort");
        this.sortBy = event.detail.fieldName;
        this.sortDirection = event.detail.sortDirection;
        this.currentPageToken = 0;
        this.getAccounts();
    }
    handlePrevious() {
        this.currentPageToken = Number(this.currentPageToken) - Number(this.pageSize);
        this.getAccounts();
    }
    handleNext() {
        this.currentPageToken = Number(this.currentPageToken) + Number(this.pageSize);
        this.getAccounts();
    }
    handleFirst() {
        this.currentPageToken = 0;
        this.getAccounts();
    }
    handleLast() {
        this.currentPageToken = this.totalPages > 1? (this.totalPages-1)* this.pageSize:0;
        this.getAccounts();
    }
    handlePageschange(event) {
        console.log(event.detail);
        this.pageSize = event.detail;
        this.currentPageToken = 0;
        this.getAccounts();
    }
    get previousButtonDisabled() {
        return this.currentPageToken === 0;
    }
    get nextButtonDisabled() {
        return this.nextPageToken === undefined;
    }
}
force-app/main/default/lwc/paginatedList/paginatedList.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/paginator/paginator.css
New file
@@ -0,0 +1,13 @@
.customSelect select {
    padding-right: 1.25rem;
    min-height: inherit;
    line-height: normal;
    height: 1.4rem;
}
.customSelect label {
    margin-top: .1rem;
}
.customSelect .slds-select_container::before {
    border-bottom: 0;
}
force-app/main/default/lwc/paginator/paginator.html
New file
@@ -0,0 +1,42 @@
<template>
    <lightning-card>
        <div class="slds-grid slds-grid_vertical-align-center slds-grid_align-spread">
            <div class="slds-col"><!--RECORDS PER PAGE-->
                <div class="slds-list_inline slds-p-bottom_xx-small customSelect">
                    <label class="slds-text-color_weak slds-p-horizontal_x-small" for="recordsPerPage">Page Size:</label>
                    <div class="slds-select_container">
                        <select class="slds-select" id="recordsPerPage" onchange={handleRecordsPerPage}>
                            <template for:each={pageSizeOptions} for:item="option">
                                <option key={option} value={option}>{option}</option>
                            </template>
                        </select>
                    </div>
                </div>
            </div>
            <div class="slds-align_absolute-center">
                <lightning-layout>
                    <lightning-layout-item>
                        <lightning-button icon-name="utility:jump_to_left" onclick={handleFirst} class="first"
                            disabled={previousButtonDisabled}></lightning-button>
                    </lightning-layout-item>
                    <lightning-layout-item>
                        <lightning-button icon-name="utility:chevronleft" onclick={handlePrevious} class="previous"
                            disabled={previousButtonDisabled}></lightning-button>
                    </lightning-layout-item>
                    <lightning-layout-item flexibility="grow"></lightning-layout-item>
                    <span class="slds-badge slds-badge_lightest">
                        {recordStart}-{recordEnd} 共 {totalRecords}个
                    </span>
                    <lightning-layout-item>
                        <lightning-button icon-name="utility:chevronright" onclick={handleNext}
                            class="next" disabled={nextButtonDisabled}></lightning-button>
                    </lightning-layout-item>
                    <lightning-layout-item>
                        <lightning-button icon-name="utility:jump_to_right" onclick={handleLast} class="last"
                            disabled={nextButtonDisabled}></lightning-button>
                    </lightning-layout-item>
                </lightning-layout>
            </div>
        </div>
    </lightning-card>
</template>
force-app/main/default/lwc/paginator/paginator.js
New file
@@ -0,0 +1,32 @@
import { LightningElement, api } from 'lwc';
export default class Paginator extends LightningElement {
    @api previousButtonDisabled;
    @api nextButtonDisabled;
    @api recordStart;
    @api recordEnd;
    @api totalRecords;
    @api pageSizeOptions;
    handlePrevious() {
        this.dispatchEvent(new CustomEvent('previous'));
    }
    handleNext() {
        this.dispatchEvent(new CustomEvent('next'));
    }
    handleFirst() {
        this.dispatchEvent(new CustomEvent('first'));
    }
    handleLast() {
        this.dispatchEvent(new CustomEvent('last'));
    }
    handleRecordsPerPage(event){
        let perpages = event.target.value;
        let pageschangeEvent = new CustomEvent("pageschange",{detail:perpages});
        this.dispatchEvent(pageschangeEvent);
    }
}
force-app/main/default/lwc/paginator/paginator.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/pocLightningDatatable/customShipmentAmount.html
New file
@@ -0,0 +1,7 @@
<template>
    <c-custom-shipment-Amount-comp
    shipment-amount={typeAttributes.shipmentAmount}
    record-id={typeAttributes.recordId}>
    </c-custom-shipment-Amount-comp>
</template>
force-app/main/default/lwc/pocLightningDatatable/customShipmentNumber.html
New file
@@ -0,0 +1,6 @@
<template>
    <c-custom-shipment-number-comp
    record-id={typeAttributes.recordId}>
    </c-custom-shipment-number-comp>
</template>
force-app/main/default/lwc/pocLightningDatatable/customShippingUnitPrice.html
New file
@@ -0,0 +1,6 @@
<template>
    <c-custom-shipping-unit-price-comp
    record-id={typeAttributes.recordId}>
    </c-custom-shipping-unit-price-comp>
</template>
force-app/main/default/lwc/pocLightningDatatable/customUnit.html
New file
@@ -0,0 +1,12 @@
<!-- sldsValidatorIgnore -->
<!-- sldsValidatorIgnore -->
<template>
    <c-custom-unit-comp
        style="position:relative; z-index:9999;"
        unit-value={typeAttributes.unitValue}
        unit-options={typeAttributes.unitOptions}
        record-id={typeAttributes.recordId}
        onunitchange={handleDataChange}
    >
    </c-custom-unit-comp>
</template>
force-app/main/default/lwc/pocLightningDatatable/pocFileUpload.html
New file
@@ -0,0 +1,5 @@
<template>
    <c-poc-custom-comp record-id={value}
                       accepted-formats={typeAttributes.acceptedFormats}>
    </c-poc-custom-comp>
</template>
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.html
New file
@@ -0,0 +1,3 @@
<template>
</template>
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.js
New file
@@ -0,0 +1,28 @@
import LightningDatatable from 'lightning/datatable';
import pocFileUpload from './pocFileUpload.html';
import customUnitTemplate from './customUnit.html';
import customShipmentNumberTemplate from './customShipmentNumber.html';
import customShippingUnitPriceTemplate from './customShippingUnitPrice.html';
import customShipmentAmountTemplate from './customShipmentAmount.html';
export default class PocLightningDatatable extends LightningDatatable {
    static customTypes = {
        customUnit: {
            template: customUnitTemplate,
            typeAttributes: ['unitValue','unitOptions','recordId'],
        },
        customShipment: {
            template: customShipmentNumberTemplate,
            typeAttributes: ['recordId'],
        },
        customShipmentUnitPrice: {
            template: customShippingUnitPriceTemplate,
            typeAttributes: ['recordId'],
        },
        customShipmentAmount: {
            template: customShipmentAmountTemplate,
            typeAttributes: ['shipmentAmount','recordId'],
        }
    };
}
force-app/main/default/lwc/pocLightningDatatable/pocLightningDatatable.js-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>false</isExposed>
</LightningComponentBundle>
force-app/main/default/lwc/testPaginated/__tests__/testPaginated.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import TestPaginated from 'c/testPaginated';
describe('c-test-paginated', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-test-paginated', {
            is: TestPaginated
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/testPaginated/testPaginated.html
New file
@@ -0,0 +1,3 @@
<template>
    <c-paginated-list slot="lwc"></c-paginated-list>
</template>
force-app/main/default/lwc/testPaginated/testPaginated.js
New file
@@ -0,0 +1,3 @@
import { LightningElement } from 'lwc';
export default class TestPaginated extends LightningElement {}
force-app/main/default/lwc/testPaginated/testPaginated.js-meta.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/package.xml
File was deleted
force-app/main/default/pages/Inventory.page
@@ -5,6 +5,7 @@
    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}" />
    <script>
        console.log('ConsumableorderdetailsRecordsview = ' + '{!ConsumableorderdetailsRecordsview}')
function checkAll() {
    var productCount = j$(escapeVfId('allPage:allForm:allBlock:ConsumableorderdetailsSection:ConsumableorderdetailsCnt')).value();
    if (j$(escapeVfId('checker')).attr('checked') == 'checked') {
force-app/main/default/pages/InventoryView.page
@@ -4,6 +4,7 @@
<apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
<apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
<script>
    console.log('pageRecords = ' + '{!pageRecords}')
function ClearJs(){
    blockme();
    //document.getElementById("allPage:allForm:allBlock:searchBlock:OrderCodeSearch").value = "";
force-app/main/default/staticresources/LexCustomDataTable.css
New file
@@ -0,0 +1,12 @@
.picklist-container,
.lookup-container {
    overflow: visible;
}
.picklist-container .slds-dropdown,
.lookup-container .slds-dropdown {
    position: relative !important;
    z-index: 99 !important;
    max-height: 120px;
    overflow: visible;
}
force-app/main/default/staticresources/LexCustomDataTable.resource-meta.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaticResource xmlns="http://soap.sforce.com/2006/04/metadata">
    <cacheControl>Public</cacheControl>
    <contentType>text/css</contentType>
    <description>File to hold CSS for custom datatable</description>
</StaticResource>
manifest/package.xml
@@ -1,9 +1,478 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>NewAndEditLead</members>
        <members>NewAndEditReport</members>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexComponent</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexPage</name>
    </types>
    <version>52.0</version>
</Package>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <types>
        <members>*</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomApplication</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomApplicationComponent</name>
    </types>
    <types>
        <members>*</members>
        <name>CustomMetadata</name>
    </types>
    <types>
        <members>ASEActivity__c</members>
        <members>AWS_Integration_Info__mdt</members>
        <members>Account</members>
        <members>Account2__c</members>
        <members>AccountBrand</members>
        <members>AccountContactRole</members>
        <members>AccountTeamMember</members>
        <members>Account_Number_of_case__c</members>
        <members>Account_Number_of_target__c</members>
        <members>Account_Service_Of_Target__c</members>
        <members>Achievement_linkage__c</members>
        <members>Activity</members>
        <members>ActivityRecurrence2Exception</members>
        <members>Activity_History_Daily_Report__c</members>
        <members>Address_Level2__c</members>
        <members>Address_Level__c</members>
        <members>Address__c</members>
        <members>Advance_Payment__c</members>
        <members>Agency_Contact__c</members>
        <members>Agency_Hospital_Link__c</members>
        <members>Agency_Opportunity__c</members>
        <members>Agency_Report_Header__c</members>
        <members>Agency_Report__c</members>
        <members>Amount_Major_Product__c</members>
        <members>Application_for_Conference_Adjudication__c</members>
        <members>AssessmentReportStaff__c</members>
        <members>AssessmentReport__c</members>
        <members>Asset</members>
        <members>AssetHistory__c</members>
        <members>AssetMaintainDetail__c</members>
        <members>AssetMaintainHeader__c</members>
        <members>AssetModifyBelongsChangeDetail__c</members>
        <members>AssetModifyBelongsChange__c</members>
        <members>AssetRelationship</members>
        <members>Asset_EquipmentSet_Managment_Code__c</members>
        <members>Asset_Service_Of_Target__c</members>
        <members>AssistantProgress</members>
        <members>AssociatedLocation</members>
        <members>AuthorizationForm</members>
        <members>AuthorizationFormConsent</members>
        <members>AuthorizationFormDataUse</members>
        <members>AuthorizationFormText</members>
        <members>BI_OpportunityLineItem__c</members>
        <members>BI_Opportunity__c</members>
        <members>BI_Product2__c</members>
        <members>BI_Statu_Achievements__c</members>
        <members>BMEFollowup__c</members>
        <members>BSS_Master__c</members>
        <members>BackOrderOpen__c</members>
        <members>BackOrder__c</members>
        <members>Backorder_Comment__c</members>
        <members>BatchIF_Log__c</members>
        <members>BatchIF_Transfer__c</members>
        <members>Bid_Announcement__c</members>
        <members>Bulletin_Board__c</members>
        <members>BusinessBrand</members>
        <members>CIC__c</members>
        <members>CIC_and_product_middle_table__c</members>
        <members>CIC_case_and_product_middle_table__c</members>
        <members>Campaign</members>
        <members>CampaignLable__c</members>
        <members>CampaignMember</members>
        <members>CampaignMember__c</members>
        <members>Campaign_Cost__c</members>
        <members>CancelPostponePlan__c</members>
        <members>Case</members>
        <members>CaseContactRole</members>
        <members>ChatterActivity</members>
        <members>CollaborationGroup</members>
        <members>CollaborationGroupMember</members>
        <members>CommSubscription</members>
        <members>CommSubscriptionChannelType</members>
        <members>CommSubscriptionConsent</members>
        <members>CommSubscriptionTiming</members>
        <members>Comment_Sequence__c</members>
        <members>Common_Sequence__c</members>
        <members>Competition_Company__c</members>
        <members>Complaint__c</members>
        <members>ConsumApplySafetyStockMiddleTable__c</members>
        <members>Consum_Apply_Equipment_Set_Detail__c</members>
        <members>Consum_Apply_Equipment_Set__c</members>
        <members>Consum_Apply_Meta__mdt</members>
        <members>Consum_Apply__c</members>
        <members>Consum_Inventory_Detail__c</members>
        <members>ConsumableSales__c</members>
        <members>ConsumableSampleLineItem__c</members>
        <members>ConsumableSample__c</members>
        <members>Consumable_ET__c</members>
        <members>Consumable_Orderdetails__c</members>
        <members>Consumable_Promotion__c</members>
        <members>Consumable_accessories_invoice__c</members>
        <members>Consumable_order_LinkTable__c</members>
        <members>Consumable_order__c</members>
        <members>Consumable_order_details2__c</members>
        <members>Contact</members>
        <members>ContactPointAddress</members>
        <members>ContactPointConsent</members>
        <members>ContactPointEmail</members>
        <members>ContactPointPhone</members>
        <members>ContactPointTypeConsent</members>
        <members>ContactRequest</members>
        <members>ContentVersion</members>
        <members>Contract</members>
        <members>ContractContactRole</members>
        <members>CustomObject123__c</members>
        <members>Customer</members>
        <members>Daily_Report__c</members>
        <members>DataUseLegalBasis</members>
        <members>DataUsePurpose</members>
        <members>Dealer_Product__c</members>
        <members>Dealer_Stock__c</members>
        <members>Dealer_elationship__c</members>
        <members>DelegatedAccount</members>
        <members>DiscountProductApplicationDetail__c</members>
        <members>DiscountProductApplication__c</members>
        <members>DuplicateRecordItem</members>
        <members>DuplicateRecordSet</members>
        <members>EffectProgress__c</members>
        <members>EmailMessage</members>
        <members>EngagementChannelType</members>
        <members>Enquiry_No_Bidding_Apply__c</members>
        <members>Equipment_Set_Detail__c</members>
        <members>Equipment_Set__c</members>
        <members>Event</members>
        <members>Event_Oppotunity__c</members>
        <members>Event_Service__c</members>
        <members>Event__c</members>
        <members>ExchangeUserMapping</members>
        <members>ExpressionFilter</members>
        <members>ExpressionFilterCriteria</members>
        <members>ExternalEventMapping</members>
        <members>FSE_Regional_Assistant_Account__mdt</members>
        <members>FSE_Regional_Assistant__mdt</members>
        <members>FeedItem</members>
        <members>FixtureDeliverySlip__c</members>
        <members>FixtureRemindSnapshot__c</members>
        <members>Fixture_OneToOne_Link__c</members>
        <members>Fixture_Set_Detail__c</members>
        <members>Fixture_Set__c</members>
        <members>GIRSolutionAreaNumber__c</members>
        <members>GuaranteePeriodAlterationApplication__c</members>
        <members>GuaranteePeriodAlterationDetail__c</members>
        <members>IS_Opportunity_Demand_Configuration__c</members>
        <members>IS_Opportunity_Demand_Demonstration__c</members>
        <members>IS_Opportunity_Demand_Operating__c</members>
        <members>IS_Opportunity_Demand__c</members>
        <members>Idea</members>
        <members>Image</members>
        <members>ImportantProductCategory__c</members>
        <members>Individual</members>
        <members>Inquiry_form__c</members>
        <members>Inspection_Item__c</members>
        <members>Inspection_Report__c</members>
        <members>Inspectup_Plan__c</members>
        <members>InstructStatusMonthly__c</members>
        <members>Instruct_report__c</members>
        <members>Instructed_staff__c</members>
        <members>Inventory_Batch_Mapping__mdt</members>
        <members>Inventory_Detail__c</members>
        <members>Inventory_Header_New__c</members>
        <members>Inventory_Header__c</members>
        <members>Inventory_User_Permission__mdt</members>
        <members>JF_scope_Training__c</members>
        <members>Key_Product_Goals__c</members>
        <members>LTV_6_SS__c</members>
        <members>LastbuyProduct__c</members>
        <members>Lead</members>
        <members>License_Information__c</members>
        <members>Loaner_check_disinfection__c</members>
        <members>Location</members>
        <members>LocationTrustMeasure</members>
        <members>LogisticsInformation__c</members>
        <members>LostReport_Detail__c</members>
        <members>LostReport__c</members>
        <members>Lost_Report__c</members>
        <members>Lost_cancel_report__c</members>
        <members>MB4S__MotionBoardProperty__c</members>
        <members>MB_Account__c</members>
        <members>MB_Asset__c</members>
        <members>MB_Daily_Report__c</members>
        <members>MB_Event__c</members>
        <members>MB_Maintenance_Contract__c</members>
        <members>MB_OpportunityLineItem__c</members>
        <members>MB_Opportunity__c</members>
        <members>MB_Repair__c</members>
        <members>MB_Report__c</members>
        <members>MB_Statu_Achievements__c</members>
        <members>MB_TargetLineItem__c</members>
        <members>MB_Target__c</members>
        <members>Macro</members>
        <members>MacroAction</members>
        <members>MacroInstruction</members>
        <members>MacroUsage</members>
        <members>Maintenance_Contract_Asset_Estimate__c</members>
        <members>Maintenance_Contract_Asset__c</members>
        <members>Maintenance_Contract_Estimate__c</members>
        <members>Maintenance_Contract__c</members>
        <members>Maintenance_Product_Data_Details__c</members>
        <members>Maintenance_Product_Data__c</members>
        <members>Maintenance_Task__c</members>
        <members>ManagedContentVersion</members>
        <members>Material_For__c</members>
        <members>Medical_expense_Province__c</members>
        <members>Medical_expense_Request__c</members>
        <members>Medical_expense__c</members>
        <members>Medical_expense_product_middle__c</members>
        <members>MeetingManagement__c</members>
        <members>ModelLendingProduct__c</members>
        <members>Monthly_Report__c</members>
        <members>NetworkMember</members>
        <members>NetworkMemberChunk</members>
        <members>NewMaintenanceReport_Task__c</members>
        <members>NotesEventHistory__c</members>
        <members>Num_Major_Product__c</members>
        <members>OCM_Management_Province__c</members>
        <members>ODS__c</members>
        <members>OFSHospitalLayout__c</members>
        <members>OFSInsReportLayout__c</members>
        <members>OFSSetting__c</members>
        <members>OPDPlan__c</members>
        <members>ObjectPrefix__c</members>
        <members>OlympusCalendar__c</members>
        <members>OnCall_detail__c</members>
        <members>On_Call__c</members>
        <members>On_Line_Survey__c</members>
        <members>OppComment__c</members>
        <members>Opponent_Bid_Information__c</members>
        <members>Opportunity</members>
        <members>Opportunity2__c</members>
        <members>OpportunityCompetitor</members>
        <members>OpportunityContactRole</members>
        <members>OpportunityFileOrder__c</members>
        <members>OpportunityLineItem</members>
        <members>OpportunitySpecialApply__c</members>
        <members>OpportunityTeamMember</members>
        <members>Opportunity_Budget_Actual__c</members>
        <members>Opportunity_File__c</members>
        <members>OrderOpen__c</members>
        <members>Order__c</members>
        <members>Order_history__c</members>
        <members>OrgMetricScanResult</members>
        <members>OrgMetricScanSummary</members>
        <members>PAE_DecisionRecordDetail__c</members>
        <members>PAE_DecisionRecord__c</members>
        <members>PBIAuthorization__c</members>
        <members>PCLLostBrand__c</members>
        <members>PCLLostProduct__c</members>
        <members>PI_Field_Policy__c</members>
        <members>PartnerRole</members>
        <members>PartyConsent</members>
        <members>Payment_Maintenance_Contract__c</members>
        <members>PersonalEvaluation__c</members>
        <members>Personal_Evaluation__c</members>
        <members>Plan_Rental_Equipment__c</members>
        <members>PowerBISyncDefine__c</members>
        <members>Pricebook2</members>
        <members>PricebookEntry</members>
        <members>ProcessException</members>
        <members>Product2</members>
        <members>Product2__c</members>
        <members>ProductMonthlySales__c</members>
        <members>ProductTypes__c</members>
        <members>ProductURF__c</members>
        <members>Product_CategoryPrice_Table__c</members>
        <members>Product_Documentation__c</members>
        <members>Product_Material__c</members>
        <members>Product_Register_Link__c</members>
        <members>Product_Register__c</members>
        <members>Product_Register_contrast__c</members>
        <members>Product_Score_Table_History__c</members>
        <members>Product_Score_Table__c</members>
        <members>Product_Set_Detail__c</members>
        <members>Product_Set__c</members>
        <members>Product_and_document_middle_table__c</members>
        <members>Product_document_Lead__c</members>
        <members>PromotionHead__c</members>
        <members>PromotionProduct__c</members>
        <members>PromotionSalesProducts__c</members>
        <members>PromotionSales__c</members>
        <members>PromptAction</members>
        <members>PromptError</members>
        <members>Province_Target_Table__c</members>
        <members>Provincial_Goal_Setting_Input__c</members>
        <members>QIS_M_BC__c</members>
        <members>QIS_Report__c</members>
        <members>QIS_SC_Report__c</members>
        <members>Questionnaire_Survey__c</members>
        <members>QuestionsAndAnswers__c</members>
        <members>QuickText</members>
        <members>QuickTextUsage</members>
        <members>Quote</members>
        <members>QuoteIraiLineItem__c</members>
        <members>QuoteIrai__c</members>
        <members>QuoteLineItem</members>
        <members>RSA_master_data__c</members>
        <members>ReceivingNoteDetail__c</members>
        <members>ReceivingNoteSummary__c</members>
        <members>ReceivingNote__c</members>
        <members>Recommendation</members>
        <members>RecordAction</members>
        <members>RecordMergeHistory</members>
        <members>RentalApply_Postpone__mdt</members>
        <members>Rental_Apply_App_CCEmail__mdt</members>
        <members>Rental_Apply_Equipment_Set_DetailPower_B__c</members>
        <members>Rental_Apply_Equipment_Set_Detail__c</members>
        <members>Rental_Apply_Equipment_Set_Power_BI__c</members>
        <members>Rental_Apply_Equipment_Set__c</members>
        <members>Rental_Apply_Power_BI__c</members>
        <members>Rental_Apply_Sequence__c</members>
        <members>Rental_Apply__c</members>
        <members>Rental_Equipment__c</members>
        <members>Rental_Queue_Info__c</members>
        <members>RepairAgainAn__c</members>
        <members>RepairComment__c</members>
        <members>RepairSubOrder__c</members>
        <members>Repair_Quotation__c</members>
        <members>Repair__c</members>
        <members>Repair_quotation_reason__c</members>
        <members>Repair_reason__c</members>
        <members>Repair_receipt__c</members>
        <members>ReportList__c</members>
        <members>ReportMemo__c</members>
        <members>Report__c</members>
        <members>Request_tedner_doc__c</members>
        <members>Result_for_Conference_Adjudication__c</members>
        <members>SAP_for_BackOrder__c</members>
        <members>SFDA__c</members>
        <members>SFDelete__c</members>
        <members>SI_Attachment__c</members>
        <members>SLAReportInfo__c</members>
        <members>SMARM__c</members>
        <members>SSConsumable_order_details2__c</members>
        <members>SS_BO_shipment_accurancy__c</members>
        <members>SS_BatchColumnMapping__c</members>
        <members>SS_Batch_Column_Mapping__c</members>
        <members>SS_Dinghuo_accurancy__c</members>
        <members>SS_HCP_vist_cover_monthly__c</members>
        <members>SS_LTV_Dept_monthly__c</members>
        <members>SS_LTV_HP_monthly__c</members>
        <members>SS_LastMonthCompleteaccuracy__c</members>
        <members>SS_OPDPlan__c</members>
        <members>SS_OPDQuarterPlan__c</members>
        <members>SS_OPD_SIS_Monthly_by_User__c</members>
        <members>SS_Prospect_5days_list__c</members>
        <members>SS_Prospect_Order_accurancy__c</members>
        <members>SS_Prospect_detail_product__c</members>
        <members>SS_Prospect_list__c</members>
        <members>SS_User_list__c</members>
        <members>SS_accompany_report_monthly__c</members>
        <members>SS_backorder_list__c</members>
        <members>SS_monthly_submit_daily_report__c</members>
        <members>SS_shipment_acurancy__c</members>
        <members>SS_update_this_month__c</members>
        <members>SS_user_visit_covager__c</members>
        <members>Sample_inventory_sheet__c</members>
        <members>Sample_order_list_DN__c</members>
        <members>Sample_order_list__c</members>
        <members>Sample_order_list_detail__c</members>
        <members>Sample_stock_log_sheet__c</members>
        <members>Scorecard</members>
        <members>ScorecardAssociation</members>
        <members>ScorecardMetric</members>
        <members>SelableProduct__c</members>
        <members>Seller</members>
        <members>Service_Category6__c</members>
        <members>Service_Category7__c</members>
        <members>Ship_History__c</members>
        <members>Ship_History_open__c</members>
        <members>Ship_Open__c</members>
        <members>Ship__c</members>
        <members>Shipment_address__c</members>
        <members>Site</members>
        <members>SocialPersona</members>
        <members>SocialPost</members>
        <members>Solution</members>
        <members>SolutionProjectRequirements__c</members>
        <members>Solution_Programme__c</members>
        <members>Statu_Achievements_DN__c</members>
        <members>Statu_Achievements_DN_details__c</members>
        <members>Statu_Achievements_Journal__c</members>
        <members>Statu_Achievements__c</members>
        <members>StreamActivityAccess</members>
        <members>StreamingChannel</members>
        <members>SubAuthorized__c</members>
        <members>SurveyQuestionResponse__c</members>
        <members>SurveyTaker__c</members>
        <members>Survey_Question__c</members>
        <members>Survey__c</members>
        <members>System_Request__c</members>
        <members>System_UserSetting__c</members>
        <members>Target_account_manage__c</members>
        <members>Task</members>
        <members>TaskEventReportOPD__c</members>
        <members>TemporaryFileBox__c</members>
        <members>Tender_Opportunity_Link__c</members>
        <members>Tender_information__c</members>
        <members>Tender_information_details__c</members>
        <members>Territory2</members>
        <members>Territory2Model</members>
        <members>ThreeMonthlyContact__c</members>
        <members>Topic</members>
        <members>TopicAssignment</members>
        <members>TracingCode__c</members>
        <members>Training_test_Result__c</members>
        <members>Transaction_Log__c</members>
        <members>TransferApplyDetail__c</members>
        <members>TransferApplySummary__c</members>
        <members>TransferApply__c</members>
        <members>User</members>
        <members>UserProvisioningRequest</members>
        <members>UserTerritory2Association</members>
        <members>VideoCall</members>
        <members>VideoCallParticipant</members>
        <members>VideoCallRecording</members>
        <members>Visit_Report__c</members>
        <members>WarlockClassification__c</members>
        <members>Weekly_OPP_Follow_record__c</members>
        <members>accompanying_report__c</members>
        <members>asset_Power_BI__c</members>
        <members>bidInfoFile__c</members>
        <members>bp3_Setting__c</members>
        <members>eSignFormEntry__c</members>
        <members>eSignFormLineItemEntry__c</members>
        <members>eSignFormLineItem__c</members>
        <members>eSignForm__c</members>
        <members>guar__GUAR_Setting__mdt</members>
        <members>hospitalprice__c</members>
        <members>meeting_delay_apply__c</members>
        <members>report_report__c</members>
        <members>solutionClosingAttachment__c</members>
        <members>task__c</members>
        <name>CustomObject</name>
    </types>
    <types>
        <members>*</members>
        <name>HomePageComponent</name>
    </types>
    <types>
        <members>*</members>
        <name>StaticResource</name>
    </types>
    <version>41.0</version>
</Package>
manifest/packageForPIPL.xml
@@ -1,255 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>AgencyAccountCmp</members>
        <members>AgencyAccountCmpTest</members>
        <members>AgencyContactHandler</members>
        <members>AgencyContactHandlerTest</members>
        <members>AssessmentReportController</members>
        <members>AssessmentReportControllerTest</members>
        <members>AWSServiceTool</members>
        <members>AWSServiceToolTest</members>
        <members>B_Test</members>
        <members>B_TestTest</members>
        <members>BmeWorkController</members>
        <members>BmeWorkControllerTest</members>
        <members>CampaignMemberController</members>
        <members>CampaignMemberControllerTest</members>
        <members>CampaignMemberServiceController</members>
        <members>CampaignMemberServiceControllerTest</members>
        <members>CM_SearchContact</members>
        <members>CM_SearchContactServiceController</members>
        <members>CM_SearchContactServiceControllerTest</members>
        <members>CM_SearchContactTest</members>
        <members>ConsumFixtureSetSelectController</members>
        <members>ConsumFixtureSetSelectControllerTest</members>
        <members>ConsumReassignController</members>
        <members>ConsumReassignControllerTest</members>
        <members>ConsumTrialController</members>
        <members>ConsumTrialControllerTest</members>
        <members>ConsumTrialPDFController</members>
        <members>ConsumTrialPDFControllerTest</members>
        <members>ControllerResponse</members>
        <members>ControllerResponseTest</members>
        <members>DeleteBatch</members>
        <members>DeleteBatchTest</members>
        <members>FieldInfo</members>
        <members>FieldInfoTest</members>
        <members>FileUploadController</members>
        <members>FileUploadControllerTest</members>
        <members>FixtureRentalPDFController</members>
        <members>FixtureRentalPDFControllerTest</members>
        <members>InsReportPDFController</members>
        <members>InsReportPDFControllerTest</members>
        <members>InstructReportController</members>
        <members>InstructReportControllerTest</members>
        <members>LayoutDescriberHelper</members>
        <members>LayoutDescriberHelperTest</members>
        <members>LeadIntentionController</members>
        <members>LeadIntentionControllerTest</members>
        <members>LightningUtil</members>
        <members>LightningUtilTest</members>
        <members>MetaDataUtility</members>
        <members>NewAgencyContactController</members>
        <members>NewAgencyContactControllerTest</members>
        <members>NewAndEditAddressController</members>
        <members>NewAndEditAddressControllerTest</members>
        <members>NewAndEditAgencyContactController</members>
        <members>NewAndEditAgencyContactControllerTest</members>
        <members>NewAndEditASEActivityController</members>
        <members>NewAndEditASEActivityControllerTest</members>
        <members>NewAndEditBaseController</members>
        <members>NewAndEditBaseControllerTest</members>
        <members>NewAndEditCampaignMemberController</members>
        <members>NewAndEditCampaignMemberControllerTest</members>
        <members>NewAndEditCaseController</members>
        <members>NewAndEditCaseControllerTest</members>
        <members>NewAndEditContactController</members>
        <members>NewAndEditContactControllerTest</members>
        <members>NewAndEditEventController</members>
        <members>NewAndEditEventControllerTest</members>
        <members>NewAndEditInquiryFormController</members>
        <members>NewAndEditInquiryFormControllerTest</members>
        <members>NewAndEditInspectionReportController</members>
        <members>NewAndEditInspectionReportControllerTest</members>
        <members>NewAndEditLeadController</members>
        <members>NewAndEditLeadControllerTest</members>
        <members>NewAndEditQISController</members>
        <members>NewAndEditQISControllerTest</members>
        <members>NewAndEditRepairSubOrderController</members>
        <members>NewAndEditRepairSubOrderControllerTest</members>
        <members>NewAndEditReportController</members>
        <members>NewAndEditReportControllerTest</members>
        <members>NewAndEditTenderinformationController</members>
        <members>NewAndEditTenderinformationControlTest</members>
        <members>NewConsumApplyController</members>
        <members>NewConsumApplyControllerTest</members>
        <members>NewConsumApplyEquipSetDetailController</members>
        <members>NewConsumApplyEquipSetDetailControlTest</members>
        <members>NewRepairController</members>
        <members>NewRepairControllerTest</members>
        <members>NFM103Controller</members>
        <members>NFM103ControllerTest</members>
        <members>NFM115ControllerTest</members>
        <members>NFM203Rest</members>
        <members>NFM203RestTest</members>
        <members>NFM501Controller</members>
        <members>NFM501ControllerTest</members>
        <members>NFM501FutureController</members>
        <members>NFM501FutureControllerTest</members>
        <members>NFM502Controller</members>
        <members>NFM502ControllerTest</members>
        <members>NFM503Controller</members>
        <members>NFM503InfoFileBatch</members>
        <members>NFM503InfoFileBatchTest</members>
        <members>NFM606Controller</members>
        <members>NFM606ControllerTest</members>
        <members>NFM607Rest</members>
        <members>NFM607RestTest</members>
        <members>NFM612Rest</members>
        <members>NFM612RestTest</members>
        <members>NFM620Rest</members>
        <members>NFM620RestSchedule</members>
        <members>NFM620RestScheduleTest</members>
        <members>NFM620RestTest</members>
        <members>NFM623Rest</members>
        <members>NFM623RestTest</members>
        <members>NFM702Controller</members>
        <members>NFM702ControllerTest</members>
        <members>NFM702WebService</members>
        <members>NFM702WebServiceTest</members>
        <members>NFMUtil</members>
        <members>NFMUtilTest</members>
        <members>OFSInsReportLayoutController</members>
        <members>OFSInsReportLayoutControllerTest</members>
        <members>OnCallController</members>
        <members>OnCallControllerTest</members>
        <members>Option</members>
        <members>PIHelper</members>
        <members>PIHelperTest</members>
        <members>QISPDFController</members>
        <members>QISPDFControllerTest</members>
        <members>RentalApplyController</members>
        <members>RentalApplyControllerTest</members>
        <members>SearchContactController</members>
        <members>SearchContactControllerTest</members>
        <members>SearchLeadController</members>
        <members>SearchLeadControllerTest</members>
        <members>SearchVisitorController</members>
        <members>SearchVistorControllerTest</members>
        <members>SimpleEventRegisterController</members>
        <members>SimpleEventRegisterControllerTester</members>
        <members>SLAReportDetailsController</members>
        <members>SLAReportDetailsControllerTest</members>
        <members>SObjectHelper</members>
        <members>SObjectHelperTest</members>
        <members>SoqlHelper</members>
        <members>SoqlHelperTest</members>
        <members>StartTradingController</members>
        <members>StartTradingControllerTest</members>
        <members>StraightBackAddressController</members>
        <members>StraightBackAddressControllerTest</members>
        <members>UpdateContractAimAmountHandler</members>
        <members>UpdateContractAimAmountHandlerTest</members>
        <members>ViewParticipantsController</members>
        <members>ViewParticipantsControllerTest</members>
        <members>WeeklyReportCmp</members>
        <members>WeeklyReportCmpTest</members>
        <members>XinDailyReportController</members>
        <members>XinDailyReportControllerTest</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>AssessmentReport</members>
        <members>BMEWorkPage</members>
        <members>B_Test</members>
        <members>CampaignMember</members>
        <members>CampaignMemberService</members>
        <members>CM_SearchContact</members>
        <members>CM_SearchContactService</members>
        <members>ConsumApplyUploadPdf</members>
        <members>ConsumReassign</members>
        <members>ConsumTrial</members>
        <members>ConsumTrialPDF</members>
        <members>FixtureRentalPDF</members>
        <members>FixtureRentalPicturePDF</members>
        <members>InsReportPDF</members>
        <members>InsReportPDFOuter</members>
        <members>InstructReport</members>
        <members>LeadIntention</members>
        <members>NewAndEditAddress</members>
        <members>NewAndEditAgencyContact</members>
        <members>NewAndEditASEActivity</members>
        <members>NewAndEditCampaignMember</members>
        <members>NewAndEditCase</members>
        <members>NewAndEditContact</members>
        <members>NewAndEditInquiryForm</members>
        <members>NewAndEditInspectionReport</members>
        <members>NewAndEditLead</members>
        <members>NewAndEditQIS</members>
        <members>NewAndEditRepairSubOrder</members>
        <members>NewAndEditReport</members>
        <members>NewAndEditTenderinformation</members>
        <members>NewConsumApply</members>
        <members>NewConsumApplyEquipmentSetDetail</members>
        <members>NewListOfConsumables</members>
        <members>NewOnCall</members>
        <members>NewRentalApply</members>
        <members>NewRepair</members>
        <members>NewRepairPage</members>
        <members>OFSInsReportLayout</members>
        <members>QISPDF</members>
        <members>RentalApplyUploadPdf</members>
        <members>SearchContactPage</members>
        <members>SearchLeadPage</members>
        <members>SearchVisitor</members>
        <members>SimpleEventRegister</members>
        <members>SLAReportDetails</members>
        <members>StartTrading</members>
        <members>StraightBackAddress</members>
        <members>TenderInformationUploadPdf</members>
        <members>TestClass</members>
        <members>TestVfPage</members>
        <members>UploadPdf</members>
        <members>ViewAddressDecryptInfo</members>
        <members>ViewAgencyContactDecryptInfo</members>
        <members>ViewASEActivityDecryptInfo</members>
        <members>ViewCaseDecryptInfo</members>
        <members>ViewConsumApplyEquipmentSetDetailDecrypt</members>
        <members>ViewContactDecryptInfo</members>
        <members>ViewDecryptConsumApply</members>
        <members>ViewEventDecryptInfo</members>
        <members>ViewInquiryFormDecryptInfo</members>
        <members>ViewInspectionReportDecryptInfo</members>
        <members>ViewLeadDecryptInfo</members>
        <members>ViewListOfConsumablesDecrypt</members>
        <members>ViewOnCallDecrypt</members>
        <members>ViewParticipantsDecryptInfo</members>
        <members>ViewQISReportDecryptInfo</members>
        <members>ViewRentalApplyDecrypt</members>
        <members>ViewRepairEncrypt</members>
        <members>ViewRepairSubOrderDecryptInfo</members>
        <members>ViewReportDecryptInfo</members>
        <members>ViewTenderinformationDecryptInfo</members>
        <members>XinDailyReport</members>
        <members>SearchAWSContactByNamePage</members>
        <name>ApexPage</name>
    </types>
    <types>
        <members>ContactHpDeptUpd</members>
        <members>FileAddressTrigger</members>
        <members>Repair</members>
        <name>ApexTrigger</name>
    </types>
    <types>
        <members>AgencyAccount</members>
        <members>NewAgencyContact</members>
        <members>WeeklyReport</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <types>
        <members>AWSService</members>
        <name>StaticResource</name>
        <members>lexInventoryCount</members>
        <name>LightningComponentBundle</name>
    </types>
    <version>52.0</version>
</Package>