buli
2023-07-14 744f42c5496e656a1f9927740a3b37c0b97a6cba
lexcommunityupload0714
9个文件已添加
154个文件已修改
118842 ■■■■■ 已修改文件
.sf/config.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/AgencyAccount/AgencyAccount.css 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.cmp 947 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.cmp-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.css 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTargetHelper.js 1244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImport.cmp 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportHelper.js 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.auradoc 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.cmp 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.cmp-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.css 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.design 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.svg 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Controller.js 396 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Helper.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Renderer.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.cmp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.css 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityController.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityHelper.js 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.cmp 2056 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.css 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportController.js 703 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportHelper.js 7360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp 1616 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.css 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js 630 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js 5859 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsController.cls 10046 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTest.cls 6484 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFiles.cls 194 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/DealerInquiryModifyStateController.cls 1315 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/DealerInquiryModifyStateControllerTest.cls 843 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest.cls 773 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainController.cls 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxController.cls 1365 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls 1512 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceListTest.cls 284 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceListTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewController.cls 3541 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls 6411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsController.cls 869 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls 659 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountController.cls 956 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountControllerTest.cls 306 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQL.cls 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQLTest.cls 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQLTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableController.cls 4960 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableControllerTest.cls 2089 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableGoodsInfoTest.cls 1844 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableGoodsInfoTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageController.cls 687 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls 163 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryController.cls 3230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryControllerTest.cls 1837 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListController.cls 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListControllerTest.cls 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryViewControllerTest.cls 2023 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryViewControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexLicenceReminderControllerTest.cls 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexLicenceReminderControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportController.cls 1920 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportControllerTest.cls 992 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockController.cls 819 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockControllerTest.cls 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexProductLimitEditControllerTest.cls 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexProductLimitEditControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexRemoveBoxControllerTest.cls 1270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexRemoveBoxControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderController.cls 2838 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderControllerTest.cls 3026 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchContractControllerTest.cls 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchContractControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchHospitalControllerTest.cls 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchHospitalControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatController.cls 6292 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatControllerTest.cls 6097 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexTopPageControllerTest.cls 732 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexTopPageControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimit.cls 306 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls 227 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUtilityTest.cls 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUtilityTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LookupSearchResultTest.cls 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LookupSearchResultTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ResponseBodyLWCTest.cls 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ResponseBodyLWCTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLoginBG.asset-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLogo.asset-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.html 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.html 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.js-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customOutputGood/customOutputGood.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.html 809 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.js 1674 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.html 456 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.js 1034 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.html 2319 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.js 4085 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumable/lexConsumable.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumable/lexConsumable.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomInventoryColor/lexCustomInventoryColor.html 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventory/lexInventory.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventory/lexInventory.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.html 495 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.js 824 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopPage/lexTopPage.html 371 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopPage/lexTopPage.js 1518 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/paginator/paginator.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/DealerInquiryModifyState.page 1356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/DealerInquiryModifyState.page-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/permissionsets/Community_Consumable_LEX_PS.permissionset-meta.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger 1444 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger-meta.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ContentDocumentLink.trigger 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ContentDocumentTrigger.trigger 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC02packagelexcommunityupdate.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/config.json
@@ -1,3 +1,3 @@
{
  "target-org": "OlympusProd"
  "target-org": "OlympusStageEnv"
}
force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp
@@ -12,13 +12,16 @@
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" afterScriptsLoaded="{!c.scriptsLoaded}" />
    <aura:renderIf isTrue="{!v.login}">
        <div class="slds-spinner_container height100vh">
            <div class="slds-spinner--brand slds-spinner slds-spinner--medium" role="alert">
                <span class="slds-assistive-text">Loading</span>
                <div class="slds-spinner__dot-a"></div>
                <div class="slds-spinner__dot-b"></div>
            </div>
        </div>
        <!-- add by Deloitte-Link 2023-6-19 -->
        <div class="weeklyReportSpinner">
            <div class="slds-spinner_container">
                <div class="slds-spinner--brand slds-spinner slds-spinner--medium" role="alert">
                    <span id="aa" class="slds-assistive-text">Loading</span>
                    <div class="slds-spinner__dot-a"></div>
                    <div class="slds-spinner__dot-b"></div>
                </div>
            </div>
        </div>
    </aura:renderIf>
    <form class="slds-form--inline">
      <div class="slds-form-element">
@@ -77,7 +80,8 @@
            
            <div class="slds-truncate">
                <a href="{!'/partner/s/agency-contact/' + item.Id}" style="position: relative;">
                    {!item.Name}
                    <span class="encrypt">{!item.Name}</span>
                    <span class="decrypt">{!item.awsdata.name}</span>
                </a>
            </div>
          </th>
force-app/main/default/aura/AgencyAccount/AgencyAccount.css
@@ -18,4 +18,15 @@
.THIS tr:hover .encrypt{
    display: none;
}
}
/* add by Deloitte-Link 2023-6-19 start*/
.THIS .weeklyReportSpinner{
    top:100px;
}
.THIS .slds-spinner_container{
    position: absolute;
    top:100px;
}
/* add by Deloitte-Link 2023-6-19 end*/
force-app/main/default/aura/CreateTarget/CreateTarget.cmp
@@ -1,642 +1,321 @@
<aura:component
  controller="CreateTargetCmp"
  implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes"
  access="global"
>
  <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
  <aura:attribute name="recordId" type="Id" />
  <aura:attribute name="hospital" type="string" default="" />
  <aura:attribute name="test" type="string" default="1" />
  <aura:handler event="force:refreshView" action="{!c.isRefreshed}" />
  <aura:attribute name="hospitalId" type="string" default="" />
  <aura:attribute name="GIAmount" type="string" default="0.00" />
  <aura:attribute name="BFAmount" type="string" default="0.00" />
  <aura:attribute name="ETAmount" type="string" default="0.00" />
  <aura:attribute name="GSAmount" type="string" default="0.00" />
  <aura:attribute name="UROAmount" type="string" default="0.00" />
  <aura:attribute name="GYNAmount" type="string" default="0.00" />
  <aura:attribute name="ENTAmount" type="string" default="0.00" />
  <aura:attribute name="OTHAmount" type="string" default="0.00" />
  <aura:attribute name="OCMTerm" type="string" default="" />
  <aura:attribute name="button_text" type="string" default="新建" />
  <aura:handler
    name="change"
    value="{!v.record.Agency_Hospital__c}"
    action="{!c.hosChange}"
  />
  <aura:attribute name="hospitalList" type="sobject[]" />
  <aura:attribute
    name="record"
    type="Agency_Opportunity__c"
    default="{'sobjectType':'Agency_Opportunity__c'}"
  />
  <aura:handler
    name="change"
    value="{!v.recordET.Product_Category1__c}"
    action="{!c.productcategoryETChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordET.Product_Category2__c}"
    action="{!c.productcategoryETChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordET.Product_Category3__c}"
    action="{!c.productcategoryETChange3}"
  />
<aura:component controller="CreateTargetCmp" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes" access="global" >
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
    <aura:attribute name="recordId" type="Id" />
    <aura:attribute name="hospital" type="string" default=""/>
    <aura:attribute name="test" type="string" default="1"/>
    <aura:handler event="force:refreshView" action="{!c.isRefreshed}" />
    <aura:attribute name="hospitalId" type="string" default=""/>
    <aura:attribute name="GIAmount" type="string" default="0.00"/>
    <aura:attribute name="BFAmount" type="string" default="0.00"/>
    <aura:attribute name="ETAmount" type="string" default="0.00"/>
    <aura:attribute name="GSAmount" type="string" default="0.00"/>
    <aura:attribute name="UROAmount" type="string" default="0.00"/>
    <aura:attribute name="GYNAmount" type="string" default="0.00"/>
    <aura:attribute name="ENTAmount" type="string" default="0.00"/>
    <aura:attribute name="OTHAmount" type="string" default="0.00"/>
    <aura:attribute name="OCMTerm" type="string" default=""/>
    <aura:attribute name="button_text" type="string" default="新建"/>
    <aura:handler name="change" value="{!v.record.Agency_Hospital__c}" action="{!c.hosChange}"/>
    <aura:attribute name="hospitalList" type="sobject[]" />
    <aura:attribute name="record" type="Agency_Opportunity__c" default="{'sobjectType':'Agency_Opportunity__c'}"/>
    <aura:handler name="change" value="{!v.recordET.Product_Category1__c}" action="{!c.productcategoryETChange1}"/>
    <aura:handler name="change" value="{!v.recordET.Product_Category2__c}" action="{!c.productcategoryETChange2}"/>
    <aura:handler name="change" value="{!v.recordET.Product_Category3__c}" action="{!c.productcategoryETChange3}"/>
  <aura:handler
    name="change"
    value="{!v.recordBF.Product_Category1__c}"
    action="{!c.productcategoryBFChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordBF.Product_Category2__c}"
    action="{!c.productcategoryBFChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordBF.Product_Category3__c}"
    action="{!c.productcategoryBFChange3}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGS.Product_Category1__c}"
    action="{!c.productcategoryGSChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGS.Product_Category2__c}"
    action="{!c.productcategoryGSChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGS.Product_Category3__c}"
    action="{!c.productcategoryGSChange3}"
  />
  <aura:handler
    name="change"
    value="{!v.recordURO.Product_Category1__c}"
    action="{!c.productcategoryUROChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordURO.Product_Category2__c}"
    action="{!c.productcategoryUROChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordURO.Product_Category3__c}"
    action="{!c.productcategoryUROChange3}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGYN.Product_Category1__c}"
    action="{!c.productcategoryGYNChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGYN.Product_Category2__c}"
    action="{!c.productcategoryGYNChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordGYN.Product_Category3__c}"
    action="{!c.productcategoryGYNChange3}"
  />
  <aura:handler
    name="change"
    value="{!v.recordENT.Product_Category1__c}"
    action="{!c.productcategoryENTChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordENT.Product_Category2__c}"
    action="{!c.productcategoryENTChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordENT.Product_Category3__c}"
    action="{!c.productcategoryENTChange3}"
  />
  <aura:handler
    name="change"
    value="{!v.recordOTH.Product_Category1__c}"
    action="{!c.productcategoryOTHChange1}"
  />
  <aura:handler
    name="change"
    value="{!v.recordOTH.Product_Category2__c}"
    action="{!c.productcategoryOTHChange2}"
  />
  <aura:handler
    name="change"
    value="{!v.recordOTH.Product_Category3__c}"
    action="{!c.productcategoryOTHChange3}"
  />
  <div class="button_area">
    <ui:button label="{!v.button_text}" press="{!c.toggle_report}" />
  </div>
  <div
    aura:id="modal_window"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
    aria-labelledby="headerTarget"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <button
          class="slds-button slds-modal__close slds-button--icon-inverse"
          title="Close"
          onclick="{!c.toggle_report}"
        >
          <lightning:icon
            iconName="utility:close"
            size="medium"
            alternative-text="close"
            variant="inverse"
          />
          <span class="slds-assistive-text">Close</span>
        </button>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          目标({!v.OCMTerm})
        </h2>
      </div>
      <div class="slds-modal__content slds-grow slds-p-around--medium">
        <div class="slds-box slds-theme--shade">
          <fieldset class="slds-form--compound">
            <div class="slds-form-element__group">
              <div class="slds-form-element__row">
                <div class="slds-form-element slds-size--1-of-2">
                  <label class="slds-form-element__label" for="input-hos"
                    >医院</label
                  >
                  <!-- <force:inputField value="{!v.record.Agency_Hospital__c}" aura:id="input-hos"/> -->
                  <lightning:recordEditForm
                    objectApiName="Agency_Opportunity__c"
                  >
                    <lightning:inputField
                      variant="label-hidden"
                      fieldName="Agency_Hospital__c"
                      value="{!v.record.Agency_Hospital__c}"
                      aura:id="input-hos"
                    />
                  </lightning:recordEditForm>
                </div>
              </div>
              <!-- <h4 class="slds-section__title">访问目标</h4>
    <aura:handler name="change" value="{!v.recordBF.Product_Category1__c}" action="{!c.productcategoryBFChange1}"/>
    <aura:handler name="change" value="{!v.recordBF.Product_Category2__c}" action="{!c.productcategoryBFChange2}"/>
    <aura:handler name="change" value="{!v.recordBF.Product_Category3__c}" action="{!c.productcategoryBFChange3}"/>
    <aura:handler name="change" value="{!v.recordGS.Product_Category1__c}" action="{!c.productcategoryGSChange1}"/>
    <aura:handler name="change" value="{!v.recordGS.Product_Category2__c}" action="{!c.productcategoryGSChange2}"/>
    <aura:handler name="change" value="{!v.recordGS.Product_Category3__c}" action="{!c.productcategoryGSChange3}"/>
    <aura:handler name="change" value="{!v.recordURO.Product_Category1__c}" action="{!c.productcategoryUROChange1}"/>
    <aura:handler name="change" value="{!v.recordURO.Product_Category2__c}" action="{!c.productcategoryUROChange2}"/>
    <aura:handler name="change" value="{!v.recordURO.Product_Category3__c}" action="{!c.productcategoryUROChange3}"/>
    <aura:handler name="change" value="{!v.recordGYN.Product_Category1__c}" action="{!c.productcategoryGYNChange1}"/>
    <aura:handler name="change" value="{!v.recordGYN.Product_Category2__c}" action="{!c.productcategoryGYNChange2}"/>
    <aura:handler name="change" value="{!v.recordGYN.Product_Category3__c}" action="{!c.productcategoryGYNChange3}"/>
    <aura:handler name="change" value="{!v.recordENT.Product_Category1__c}" action="{!c.productcategoryENTChange1}"/>
    <aura:handler name="change" value="{!v.recordENT.Product_Category2__c}" action="{!c.productcategoryENTChange2}"/>
    <aura:handler name="change" value="{!v.recordENT.Product_Category3__c}" action="{!c.productcategoryENTChange3}"/>
    <aura:handler name="change" value="{!v.recordOTH.Product_Category1__c}" action="{!c.productcategoryOTHChange1}"/>
    <aura:handler name="change" value="{!v.recordOTH.Product_Category2__c}" action="{!c.productcategoryOTHChange2}"/>
    <aura:handler name="change" value="{!v.recordOTH.Product_Category3__c}" action="{!c.productcategoryOTHChange3}"/>
    <div class="button_area">
        <ui:button label="{!v.button_text}" press="{!c.toggle_report}"/>
    </div>
    <div aura:id="modal_window" role="dialog" tabindex="-1" class="disp_none slds-modal slds-fade-in-open slds-modal--large" aria-labelledby="headerTarget">
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <button class="slds-button slds-modal__close slds-button--icon-inverse" title="Close" onclick="{!c.toggle_report}">
                    <lightning:icon iconName="utility:close" size="medium" alternative-text="close" variant="inverse"/>
                    <span class="slds-assistive-text">Close</span>
                </button>
                <h2 id="headerTarget" class="slds-text-heading--medium">目标({!v.OCMTerm})</h2>
            </div>
            <div class="slds-modal__content slds-grow slds-p-around--medium">
                <div class="slds-box slds-theme--shade ">
                    <fieldset class="slds-form--compound">
                        <div class="slds-form-element__group">
                            <div class="slds-form-element__row">
                                <div class="slds-form-element slds-size--1-of-2">
                                    <label class="slds-form-element__label" for="input-hos">医院</label>
                                    <!-- <force:inputField value="{!v.record.Agency_Hospital__c}" aura:id="input-hos"/> -->
                                    <lightning:recordEditForm objectApiName="Agency_Opportunity__c">
                                        <lightning:inputField variant="label-hidden" fieldName="Agency_Hospital__c" value="{!v.record.Agency_Hospital__c}" aura:id="input-hos"/>
                                    </lightning:recordEditForm>
                                </div>
                            </div>
                            <!-- <h4 class="slds-section__title">访问目标</h4>
                            <div class="slds-form-element__row">
                                <div class="slds-form-element slds-size-1-of-2">
                                    <label class="slds-form-element__label" for="input-target">目标医院</label>
                                    <force:inputField value="{!v.record2.TargetHospital__c}" aura:id="input-target"/>
                                </div>
                            </div> -->
              <h4 class="slds-section__title">产品目标</h4>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">消化科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_GI1"
                    class="slds-select"
                    change="{!c.productcategoryGIChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GI4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_GI2"
                    class="slds-select"
                    change="{!c.productcategoryGIChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GI4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_GI3"
                    class="slds-select"
                    change="{!c.productcategoryGIChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GI4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">ET耗材</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_ET1"
                    class="slds-select"
                    change="{!c.productcategoryETChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ET4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_ET2"
                    class="slds-select"
                    change="{!c.productcategoryETChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ET4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_ET3"
                    class="slds-select"
                    change="{!c.productcategoryETChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ET4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">呼吸科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_BF1"
                    class="slds-select"
                    change="{!c.productcategoryBFChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_BF4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_BF2"
                    class="slds-select"
                    change="{!c.productcategoryBFChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_BF4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_BF3"
                    class="slds-select"
                    change="{!c.productcategoryBFChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_BF4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">普外科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_GS1"
                    class="slds-select"
                    change="{!c.productcategoryGSChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GS4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_GS2"
                    class="slds-select"
                    change="{!c.productcategoryGSChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GS4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_GS3"
                    class="slds-select"
                    change="{!c.productcategoryGSChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GS4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">泌尿科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_URO1"
                    class="slds-select"
                    change="{!c.productcategoryUROChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_URO4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_URO2"
                    class="slds-select"
                    change="{!c.productcategoryUROChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_URO4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_URO3"
                    class="slds-select"
                    change="{!c.productcategoryUROChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_URO4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">妇科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_GYN1"
                    class="slds-select"
                    change="{!c.productcategoryGYNChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GYN4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_GYN2"
                    class="slds-select"
                    change="{!c.productcategoryGYNChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GYN4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_GYN3"
                    class="slds-select"
                    change="{!c.productcategoryGYNChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_GYN4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">耳鼻喉科</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_ENT1"
                    class="slds-select"
                    change="{!c.productcategoryENTChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ENT4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_ENT2"
                    class="slds-select"
                    change="{!c.productcategoryENTChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ENT4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_ENT3"
                    class="slds-select"
                    change="{!c.productcategoryENTChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_ENT4_3" class="slds-select" />
                </div>
              </div>
              <div class="slds-form-element__row">
                <div class="slds-size--1-of-7 slds-grid--align-center">
                  <div style="margin-top: 32px">其他</div>
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分1</label
                  >
                  <ui:inputSelect
                    aura:id="select_OTH1"
                    class="slds-select"
                    change="{!c.productcategoryOTHChange1}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_OTH4_1" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分2</label
                  >
                  <ui:inputSelect
                    aura:id="select_OTH2"
                    class="slds-select"
                    change="{!c.productcategoryOTHChange2}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_OTH4_2" class="slds-select" />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >产品区分3</label
                  >
                  <ui:inputSelect
                    aura:id="select_OTH3"
                    class="slds-select"
                    change="{!c.productcategoryOTHChange3}"
                  />
                </div>
                <div class="slds-form-element slds-size--1-of-7">
                  <label class="slds-form-element__label" for="input-hos"
                    >金额目标(不含税)</label
                  >
                  <ui:inputText aura:id="select_OTH4_3" class="slds-select" />
                </div>
              </div>
            </div>
          </fieldset>
        </div>
      </div>
      <div class="slds-modal__footer slds-grid slds-grid--align-spread">
        <div class="slds-order--1" />
        <ui:button
          aura:id="save_button"
          label="保存"
          class="slds-button slds-button--brand slds-order--2"
          press="{!c.createTarget}"
        />
        <div class="slds-order--3" />
      </div>
                            <h4 class="slds-section__title">产品目标</h4>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">消化科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_GI1" class="slds-select" change="{!c.productcategoryGIChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GI4_1" class="slds-select"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_GI2" class="slds-select" change="{!c.productcategoryGIChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GI4_2" class="slds-select"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_GI3" class="slds-select" change="{!c.productcategoryGIChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GI4_3" class="slds-select"/>
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">ET耗材</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_ET1" class="slds-select" change="{!c.productcategoryETChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ET4_1" class="slds-select"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_ET2" class="slds-select" change="{!c.productcategoryETChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ET4_2" class="slds-select"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_ET3" class="slds-select" change="{!c.productcategoryETChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ET4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">呼吸科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_BF1" class="slds-select" change="{!c.productcategoryBFChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_BF4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_BF2" class="slds-select" change="{!c.productcategoryBFChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_BF4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_BF3" class="slds-select" change="{!c.productcategoryBFChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_BF4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">普外科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_GS1" class="slds-select" change="{!c.productcategoryGSChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GS4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_GS2" class="slds-select" change="{!c.productcategoryGSChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GS4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_GS3" class="slds-select" change="{!c.productcategoryGSChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GS4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">泌尿科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_URO1" class="slds-select" change="{!c.productcategoryUROChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_URO4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_URO2" class="slds-select" change="{!c.productcategoryUROChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_URO4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_URO3" class="slds-select" change="{!c.productcategoryUROChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_URO4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">妇科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_GYN1" class="slds-select" change="{!c.productcategoryGYNChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GYN4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_GYN2" class="slds-select" change="{!c.productcategoryGYNChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GYN4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_GYN3" class="slds-select" change="{!c.productcategoryGYNChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_GYN4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">耳鼻喉科</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_ENT1" class="slds-select" change="{!c.productcategoryENTChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ENT4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_ENT2" class="slds-select" change="{!c.productcategoryENTChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ENT4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_ENT3" class="slds-select" change="{!c.productcategoryENTChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_ENT4_3" class="slds-select" />
                                </div>
                            </div>
                            <div class="slds-form-element__row">
                                <div class="slds-size--1-of-7 slds-grid--align-center">
                                    <div style="margin-top: 32px;">其他</div>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分1</label>
                                    <ui:inputSelect aura:id="select_OTH1" class="slds-select" change="{!c.productcategoryOTHChange1}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_OTH4_1" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分2</label>
                                    <ui:inputSelect aura:id="select_OTH2" class="slds-select" change="{!c.productcategoryOTHChange2}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_OTH4_2" class="slds-select" />
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">产品区分3</label>
                                    <ui:inputSelect aura:id="select_OTH3" class="slds-select" change="{!c.productcategoryOTHChange3}"/>
                                </div>
                                <div class="slds-form-element slds-size--1-of-7">
                                    <label class="slds-form-element__label" for="input-hos">金额目标(不含税)</label>
                                    <ui:inputText aura:id="select_OTH4_3" class="slds-select" />
                                </div>
                            </div>
                        </div>
                    </fieldset>
                </div>
            </div>
            <div class="slds-modal__footer slds-grid slds-grid--align-spread">
                <div class="slds-order--1" />
                <ui:button aura:id="save_button" label="保存" class="slds-button slds-button--brand slds-order--2" press="{!c.createTarget}"/>
                <div class="slds-order--3" />
            </div>
        </div>
    </div>
  </div>
  <div
    aura:id="modal_bg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
</aura:component>
    <div aura:id="modal_bg" class="disp_none slds-backdrop slds-backdrop--open"></div>
</aura:component>
force-app/main/default/aura/CreateTarget/CreateTarget.cmp-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>42.0</apiVersion>
    <description>A Lightning Component Bundle</description>
force-app/main/default/aura/CreateTarget/CreateTarget.css
@@ -1,12 +1,12 @@
.THIS.button_area {
  text-align: right;
    text-align: right;
}
.THIS.disp_none {
  display: none;
    display: none;
}
.THIS select {
  --lwc-lineHeightButton: 36px;
  --lwc-heightInput: 36px;
  min-height: 0px !important;
  height: 36px !important;
}
    --lwc-lineHeightButton:36px;
    --lwc-heightInput:36px;
    min-height: 0px !important;
    height: 36px !important;
}
force-app/main/default/aura/CreateTarget/CreateTargetHelper.js
@@ -1,693 +1,593 @@
({
  doinit: function (component, event, helper) {
    component.set("v.OCMTerm", this.getOCMTerm());
    if (component.get("v.recordId")) {
      component.set("v.button_text", "编辑");
      var recordId = component.get("v.recordId");
      var action = component.get("c.getHospital");
      action.setParams({ recordId: recordId });
      action.setCallback(this, function (response) {
        var state = response.getState();
        console.log("state1:" + state);
        if (state === "SUCCESS") {
          var ah = response.getReturnValue();
          var select_ah = ah.Id;
          var select_ah_name = ah.Name;
          // component.set('v.record.Agency_Hospital__c', select_ah);
          //add by Deloitte 2023-6-8
          let agency = component.get("v.record");
          agency.Agency_Hospital__c = select_ah;
          // component.set("v.record", agency);
          // alert(JSON.stringify(component.find('input-hos').get("v.body")[0].get('v.values')));
          if ($A.get("$Browser.formFactor") == "DESKTOP") {
            console.log("flag1");
            var values = [
              {
                type: "Agency_Hospital_Link__c",
                id: select_ah,
                label: select_ah_name,
                icon: {
                  url: "/img/icon/t4v35/custom/custom24_120.png",
                  backgroundColor: "dc71d1",
                  alt: "Agency_Hospital_Link__c"
    doinit : function(component, event, helper) {
        component.set("v.OCMTerm", this.getOCMTerm());
        if (component.get("v.recordId")) {
            component.set("v.button_text", "编辑");
            var recordId = component.get("v.recordId");
            var action = component.get("c.getHospital");
            action.setParams({recordId: recordId});
            action.setCallback(this, function(response) {
            var state = response.getState();
            console.log("state1:"+state);
                if(state === "SUCCESS") {
                    var ah = response.getReturnValue();
                    var select_ah = ah.Id;
                    var select_ah_name = ah.Name;
                    // component.set('v.record.Agency_Hospital__c', select_ah);
                    //add by Deloitte 2023-6-8
                    let agency = component.get("v.record");
                    agency.Agency_Hospital__c = select_ah;
                    // component.set("v.record", agency);
                    // alert(JSON.stringify(component.find('input-hos').get("v.body")[0].get('v.values')));
                    if ($A.get("$Browser.formFactor") == 'DESKTOP') {
                        console.log("flag1");
                        var values = [{
                            type: 'Agency_Hospital_Link__c',
                            id: select_ah,
                            label: select_ah_name,
                            icon : {
                                url:'/img/icon/t4v35/custom/custom24_120.png',
                                backgroundColor:'dc71d1',
                                alt:'Agency_Hospital_Link__c'
                            }
                        }];
                        // component.find('input-hos').get("v.body")[0].set('v.values', values);
                        //add by Deloitte 2023-6-8
                        if(component.find('input-hos').get("v.body") && component.find('input-hos').get("v.body").length>0){
                            component.find('input-hos').get("v.body")[0].set('v.values', values);
                        }
                    } else {
                        // component.find('input-hos').get("v.body")[0].set('v.selectedLabel', select_ah_name);
                        //add by Deloitte 2023-6-8
                        if(component.find('input-hos').get("v.body") && component.find('input-hos').get("v.body").length>0){
                            component.find('input-hos').get("v.body")[0].set('v.selectedLabel', select_ah_name);
                        }
                    }
                } else if (state === "ERROR") {
                    var errors = response.getError();
                    var toastEvent = $A.get("e.force:showToast");
                    toastEvent.setParams({
                        "title": "错误",
                        "type":"error",
                        "message": errors[0].message
                    });
                    toastEvent.fire();
                }
              }
            ];
            // component.find('input-hos').get("v.body")[0].set('v.values', values);
            //add by Deloitte 2023-6-8
            if (
              component.find("input-hos").get("v.body") &&
              component.find("input-hos").get("v.body").length > 0
            ) {
              component
                .find("input-hos")
                .get("v.body")[0]
                .set("v.values", values);
            });
            $A.enqueueAction(action);
        }
        var action = component.get("c.getProductList");
        action.setCallback(this, function(response) {
            var state = response.getState();
            console.log("state2:"+state);
            if(state === "SUCCESS") {
                var opts = response.getReturnValue();
                // alert(JSON.stringify(opts["GI"]));
                component.find("select_GI1").set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
                component.find("select_GI2").set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
                component.find("select_GI3").set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
                component.find("select_GS1").set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
                component.find("select_GS2").set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
                component.find("select_GS3").set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
                component.find("select_GYN1").set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
                component.find("select_GYN2").set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
                component.find("select_GYN3").set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
                component.find("select_URO1").set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
                component.find("select_URO2").set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
                component.find("select_URO3").set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
                component.find("select_ENT1").set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
                component.find("select_ENT2").set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
                component.find("select_ENT3").set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
                component.find("select_OTH1").set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
                component.find("select_OTH2").set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
                component.find("select_OTH3").set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
                component.find("select_ET1").set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
                component.find("select_ET2").set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
                component.find("select_ET3").set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
                component.find("select_BF1").set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
                component.find("select_BF2").set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
                component.find("select_BF3").set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
            } else if (state === "ERROR") {
                var errors = response.getError();
                var toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    title: "错误",
                    type:"error",
                    message: errors[0].message
                });
                toastEvent.fire();
            }
          } else {
            // component.find('input-hos').get("v.body")[0].set('v.selectedLabel', select_ah_name);
            //add by Deloitte 2023-6-8
            if (
              component.find("input-hos").get("v.body") &&
              component.find("input-hos").get("v.body").length > 0
            ) {
              component
                .find("input-hos")
                .get("v.body")[0]
                .set("v.selectedLabel", select_ah_name);
            }
          }
        } else if (state === "ERROR") {
          var errors = response.getError();
          var toastEvent = $A.get("e.force:showToast");
          toastEvent.setParams({
            title: "错误",
            type: "error",
            message: errors[0].message
          });
          toastEvent.fire();
        });
        $A.enqueueAction(action);
    },
    toggle_report : function(component, event, helper) {
        var modal_window = component.find('modal_window');
        var modal_bg = component.find('modal_bg');
        $A.util.toggleClass(modal_window, 'disp_none');
        $A.util.toggleClass(modal_bg, 'disp_none');
        if ($A.util.hasClass(modal_window, 'disp_none') && !component.get("v.recordId")) {
            $A.get('e.force:refreshView').fire();
        }
      });
      $A.enqueueAction(action);
    }
    },
    var action = component.get("c.getProductList");
    action.setCallback(this, function (response) {
      var state = response.getState();
      console.log("state2:" + state);
      if (state === "SUCCESS") {
        var opts = response.getReturnValue();
        // alert(JSON.stringify(opts["GI"]));
        component
          .find("select_GI1")
          .set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
        component
          .find("select_GI2")
          .set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
        component
          .find("select_GI3")
          .set("v.options", JSON.parse(JSON.stringify(opts["GI"])));
    productcategoryChange : function(component, event, helper, dept, index) {
        var cmpId = 'select_'+dept;
        var myId;
        var o1Id;
        var o2Id;
        if (index == 1) {
            myId = cmpId + '1';
            o1Id = cmpId + '2';
            o2Id = cmpId + '3';
        } else if (index == 2){
            myId = cmpId + '2';
            o1Id = cmpId + '1';
            o2Id = cmpId + '3';
        } else {
            myId = cmpId + '3';
            o1Id = cmpId + '1';
            o2Id = cmpId + '2';
        }
        component
          .find("select_GS1")
          .set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
        component
          .find("select_GS2")
          .set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
        component
          .find("select_GS3")
          .set("v.options", JSON.parse(JSON.stringify(opts["GS"])));
        var product_category_id = component.find(myId).get('v.value');
        var pcId1 = component.find(o1Id).get('v.value');
        var pcId2 = component.find(o2Id).get('v.value');
        var p1bool = pcId1 != '' && pcId1 != null && pcId1 != undefined;
        var p2bool = pcId2 != '' && pcId2 != null && pcId2 != undefined;
        var p0bool = product_category_id != '' && product_category_id != null && product_category_id != undefined;
        if ((p1bool && p0bool && product_category_id == pcId1) || (p2bool && p0bool && product_category_id == pcId2)) {
            this.warning('不能选择同样的产品区分');
            component.find(myId).set('v.value','');
        }
    },
        component
          .find("select_GYN1")
          .set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
        component
          .find("select_GYN2")
          .set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
        component
          .find("select_GYN3")
          .set("v.options", JSON.parse(JSON.stringify(opts["GYN"])));
    selectHos : function(component, event, helper) {
        component
          .find("select_URO1")
          .set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
        component
          .find("select_URO2")
          .set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
        component
          .find("select_URO3")
          .set("v.options", JSON.parse(JSON.stringify(opts["URO"])));
        var accid = component.get("v.record.Agency_Hospital__c");
        var action = component.get("c.getDeptAmount");
        action.setParams({ hospitalId : accid });
        action.setCallback(this, function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                var amountMap = response.getReturnValue();
                var GIProduct_Category1 = '';
                var GIProduct_Category2 = '';
                var GIProduct_Category3 = '';
                var GIAim_Price__c1 = '';
                var GIAim_Price__c2 = '';
                var GIAim_Price__c3 = '';
                if (amountMap.GI.length > 0) {
                    GIProduct_Category1 = amountMap.GI[0].Product_Category__c;
                    if (amountMap.GI.length > 1) {
                        GIProduct_Category2 = amountMap.GI[1].Product_Category__c;
                    }
                    if (amountMap.GI.length > 2) {
                        GIProduct_Category3 = amountMap.GI[2].Product_Category__c;
                    }
                    GIAim_Price__c1 = amountMap.GI[0].Aim_Price__c;
                    GIAim_Price__c2 = amountMap.GI[1].Aim_Price__c;
                    GIAim_Price__c3 = amountMap.GI[2].Aim_Price__c;
                    console.warn(GIAim_Price__c1+"-"+GIAim_Price__c2+"-"+GIAim_Price__c3);
        component
          .find("select_ENT1")
          .set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
        component
          .find("select_ENT2")
          .set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
        component
          .find("select_ENT3")
          .set("v.options", JSON.parse(JSON.stringify(opts["ENT"])));
                }
                component.find('select_GI1').set('v.value',GIProduct_Category1);
                component.find('select_GI2').set('v.value',GIProduct_Category2);
                component.find('select_GI3').set('v.value',GIProduct_Category3);
                component.find('select_GI4_1').set('v.value',GIAim_Price__c1);
                component.find('select_GI4_2').set('v.value',GIAim_Price__c2);
                component.find('select_GI4_3').set('v.value',GIAim_Price__c3);
        component
          .find("select_OTH1")
          .set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
        component
          .find("select_OTH2")
          .set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
        component
          .find("select_OTH3")
          .set("v.options", JSON.parse(JSON.stringify(opts["OTH"])));
        component
          .find("select_ET1")
          .set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
        component
          .find("select_ET2")
          .set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
        component
          .find("select_ET3")
          .set("v.options", JSON.parse(JSON.stringify(opts["ET"])));
                var ETProduct_Category1 = '';
                var ETProduct_Category2 = '';
                var ETProduct_Category3 = '';
                var ETAim_Price__c1 = '';
                var ETAim_Price__c2 = '';
                var ETAim_Price__c3 = '';
                if (amountMap.ET.length > 0) {
                    ETProduct_Category1 = amountMap.ET[0].Product_Category__c;
                    if (amountMap.ET.length > 1) {
                        ETProduct_Category2 = amountMap.ET[1].Product_Category__c;
                    }
                    if (amountMap.ET.length > 2) {
                        ETProduct_Category3 = amountMap.ET[2].Product_Category__c;
                    }
                    ETAim_Price__c1 = amountMap.ET[0].Aim_Price__c;
                    ETAim_Price__c2 = amountMap.ET[1].Aim_Price__c;
                    ETAim_Price__c3 = amountMap.ET[2].Aim_Price__c;
                }
                component.find('select_ET1').set('v.value',ETProduct_Category1);
                component.find('select_ET2').set('v.value',ETProduct_Category2);
                component.find('select_ET3').set('v.value',ETProduct_Category3);
                component.find('select_ET4_1').set('v.value',ETAim_Price__c1);
                component.find('select_ET4_2').set('v.value',ETAim_Price__c2);
                component.find('select_ET4_3').set('v.value',ETAim_Price__c3);
        component
          .find("select_BF1")
          .set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
        component
          .find("select_BF2")
          .set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
        component
          .find("select_BF3")
          .set("v.options", JSON.parse(JSON.stringify(opts["BF"])));
      } else if (state === "ERROR") {
        var errors = response.getError();
                var BFProduct_Category1 = '';
                var BFProduct_Category2 = '';
                var BFProduct_Category3 = '';
                var BFAim_Price__c1 = '';
                var BFAim_Price__c2 = '';
                var BFAim_Price__c3 = '';
                if (amountMap.BF.length > 0) {
                    BFProduct_Category1 = amountMap.BF[0].Product_Category__c;
                    if (amountMap.BF.length > 1) {
                        BFProduct_Category2 = amountMap.BF[1].Product_Category__c;
                    }
                    if (amountMap.BF.length > 2) {
                        BFProduct_Category3 = amountMap.BF[2].Product_Category__c;
                    }
                    BFAim_Price__c1 = amountMap.BF[0].Aim_Price__c;
                    BFAim_Price__c2 = amountMap.BF[1].Aim_Price__c;
                    BFAim_Price__c3 = amountMap.BF[2].Aim_Price__c;
                }
                component.find('select_BF1').set('v.value',BFProduct_Category1);
                component.find('select_BF2').set('v.value',BFProduct_Category2);
                component.find('select_BF3').set('v.value',BFProduct_Category3);
                component.find('select_BF4_1').set('v.value',BFAim_Price__c1);
                component.find('select_BF4_2').set('v.value',BFAim_Price__c2);
                component.find('select_BF4_3').set('v.value',BFAim_Price__c3);
                var OTHProduct_Category1 = '';
                var OTHProduct_Category2 = '';
                var OTHProduct_Category3 = '';
                var OTHAim_Price__c1 = '';
                var OTHAim_Price__c2 = '';
                var OTHAim_Price__c3 = '';
                if (amountMap.OTH.length > 0) {
                    OTHProduct_Category1 = amountMap.OTH[0].Product_Category__c;
                    if (amountMap.OTH.length > 1) {
                        OTHProduct_Category2 = amountMap.OTH[1].Product_Category__c;
                    }
                    if (amountMap.OTH.length > 2) {
                        OTHProduct_Category3 = amountMap.OTH[2].Product_Category__c;
                    }
                    OTHAim_Price__c1 = amountMap.OTH[0].Aim_Price__c;
                    OTHAim_Price__c2 = amountMap.OTH[1].Aim_Price__c;
                    OTHAim_Price__c3 = amountMap.OTH[2].Aim_Price__c;
                }
                component.find('select_OTH1').set('v.value',OTHProduct_Category1);
                component.find('select_OTH2').set('v.value',OTHProduct_Category2);
                component.find('select_OTH3').set('v.value',OTHProduct_Category3);
                component.find('select_OTH4_1').set('v.value',OTHAim_Price__c1);
                component.find('select_OTH4_2').set('v.value',OTHAim_Price__c2);
                component.find('select_OTH4_3').set('v.value',OTHAim_Price__c3);
                var GSProduct_Category1 = '';
                var GSProduct_Category2 = '';
                var GSProduct_Category3 = '';
                var GSPAim_Price__c1 = '';
                var GSPAim_Price__c2 = '';
                var GSPAim_Price__c3 = '';
                if (amountMap.GS.length > 0) {
                    GSProduct_Category1 = amountMap.GS[0].Product_Category__c;
                    if (amountMap.GS.length > 1) {
                        GSProduct_Category2 = amountMap.GS[1].Product_Category__c;
                    }
                    if (amountMap.GS.length > 2) {
                        GSProduct_Category3 = amountMap.GS[2].Product_Category__c;
                    }
                    GSPAim_Price__c1 = amountMap.GS[0].Aim_Price__c;
                    GSPAim_Price__c2 = amountMap.GS[1].Aim_Price__c;
                    GSPAim_Price__c3= amountMap.GS[2].Aim_Price__c;
                }
                component.find('select_GS1').set('v.value',GSProduct_Category1);
                component.find('select_GS2').set('v.value',GSProduct_Category2);
                component.find('select_GS3').set('v.value',GSProduct_Category3);
                component.find('select_GS4_1').set('v.value',GSPAim_Price__c1);
                component.find('select_GS4_2').set('v.value',GSPAim_Price__c2);
                component.find('select_GS4_3').set('v.value',GSPAim_Price__c3);
                var UROProduct_Category1 = '';
                var UROProduct_Category2 = '';
                var UROProduct_Category3 = '';
                var UROAim_Price__c1 = '';
                var UROAim_Price__c2 = '';
                var UROAim_Price__c3 = '';
                if (amountMap.URO.length > 0) {
                    UROProduct_Category1 = amountMap.URO[0].Product_Category__c;
                    if (amountMap.URO.length > 1) {
                        UROProduct_Category2 = amountMap.URO[1].Product_Category__c;
                    }
                    if (amountMap.URO.length > 2) {
                        UROProduct_Category3 = amountMap.URO[2].Product_Category__c;
                    }
                    UROAim_Price__c1 = amountMap.URO[0].Aim_Price__c;
                    UROAim_Price__c2 = amountMap.URO[1].Aim_Price__c;
                    UROAim_Price__c3 = amountMap.URO[2].Aim_Price__c;
                }
                component.find('select_URO1').set('v.value',UROProduct_Category1);
                component.find('select_URO2').set('v.value',UROProduct_Category2);
                component.find('select_URO3').set('v.value',UROProduct_Category3);
                component.find('select_URO4_1').set('v.value',UROAim_Price__c1);
                component.find('select_URO4_2').set('v.value',UROAim_Price__c2);
                component.find('select_URO4_3').set('v.value',UROAim_Price__c3);
                var GYNProduct_Category1 = '';
                var GYNProduct_Category2 = '';
                var GYNProduct_Category3 = '';
                var GYNAim_Price__c1 = '';
                var GYNAim_Price__c2 = '';
                var GYNAim_Price__c3 = '';
                if (amountMap.GYN.length > 0) {
                    GYNProduct_Category1 = amountMap.GYN[0].Product_Category__c;
                    if (amountMap.GYN.length > 1) {
                        GYNProduct_Category2 = amountMap.GYN[1].Product_Category__c;
                    }
                    if (amountMap.GYN.length > 2) {
                        GYNProduct_Category3 = amountMap.GYN[2].Product_Category__c;
                    }
                    GYNAim_Price__c1= amountMap.GYN[0].Aim_Price__c;
                    GYNAim_Price__c2 = amountMap.GYN[1].Aim_Price__c;
                    GYNAim_Price__c3 = amountMap.GYN[2].Aim_Price__c;
                }
                component.find('select_GYN1').set('v.value',GYNProduct_Category1);
                component.find('select_GYN2').set('v.value',GYNProduct_Category2);
                component.find('select_GYN3').set('v.value',GYNProduct_Category3);
                component.find('select_GYN4_1').set('v.value',GYNAim_Price__c1);
                component.find('select_GYN4_2').set('v.value',GYNAim_Price__c2);
                component.find('select_GYN4_3').set('v.value',GYNAim_Price__c3);
                var ENTProduct_Category1 = '';
                var ENTProduct_Category2 = '';
                var ENTProduct_Category3 = '';
                var ENTAim_Price__c1 = '';
                var ENTAim_Price__c2 = '';
                var ENTAim_Price__c3 = '';
                if (amountMap.ENT.length > 0) {
                    ENTProduct_Category1 = amountMap.ENT[0].Product_Category__c;
                    if (amountMap.ENT.length > 1) {
                        ENTProduct_Category2 = amountMap.ENT[1].Product_Category__c;
                    }
                    if (amountMap.ENT.length > 2) {
                        ENTProduct_Category3 = amountMap.ENT[2].Product_Category__c;
                    }
                    ENTAim_Price__c1 = amountMap.ENT[0].Aim_Price__c;
                    ENTAim_Price__c2 = amountMap.ENT[1].Aim_Price__c;
                    ENTAim_Price__c3 = amountMap.ENT[2].Aim_Price__c;
                }
                component.find('select_ENT1').set('v.value',ENTProduct_Category1);
                component.find('select_ENT2').set('v.value',ENTProduct_Category2);
                component.find('select_ENT3').set('v.value',ENTProduct_Category3);
                component.find('select_ENT4_1').set('v.value',ENTAim_Price__c1);
                component.find('select_ENT4_2').set('v.value',ENTAim_Price__c2);
                component.find('select_ENT4_3').set('v.value',ENTAim_Price__c3);
            }
        });
        $A.enqueueAction(action);
        console.log(JSON.stringify(component.find('input-hos').get("v.body")[0].get('v')));
    },
    getOCMTerm : function() {
        var today = new Date();
        var year = today.getFullYear();
        var month = today.getMonth();
        if (month < 3) year -= 1;
        var thisYearOCMPeriod = String(year - 1867) + 'P';
        return thisYearOCMPeriod;
    },
    createTarget : function(component, event, helper) {
        var action = component.get("c.createSFTarget");
        // alert(component.get("v.GIAmount"));
        var  p1_1 = component.find('select_GI4_1').get('v.value') ;
        var  p1_2 = component.find('select_GI4_2').get('v.value') ;
        var  p1_3 = component.find('select_GI4_3').get('v.value') ;
        if (p1_1 == undefined || p1_1 == "") {
            p1_1 = 0;
        }
        if (p1_2 == undefined || p1_2 == "") {
            p1_2 = 0;
        }
        if (p1_3 == undefined || p1_3 == "") {
            p1_3 = 0;
        }
        console.warn(p1_1+"-"+p1_2+"-"+p1_3);
        var  p2_1 = component.find('select_ET4_1').get('v.value') ;
        var  p2_2 = component.find('select_ET4_2').get('v.value') ;
        var  p2_3 = component.find('select_ET4_3').get('v.value') ;
        if (p2_1 == undefined || p2_1 == "") {
            p2_1 = 0;
        }
        if (p2_2 == undefined || p2_2 == "") {
            p2_2 = 0;
        }
        if (p2_3 == undefined || p2_3 == "") {
            p2_3 = 0;
        }
        var  p3_1 = component.find('select_BF4_1').get('v.value') ;
        var  p3_2 = component.find('select_BF4_2').get('v.value') ;
        var  p3_3 = component.find('select_BF4_3').get('v.value') ;
        if (p3_1 == undefined || p3_1 == "") {
            p3_1 = 0;
        }
        if (p3_2 == undefined || p3_2 == "") {
            p3_2 = 0;
        }
        if (p3_3 == undefined || p3_3 == "") {
            p3_3 = 0;
        }
        var  p4_1 = component.find('select_OTH4_1').get('v.value') ;
        var  p4_2 = component.find('select_OTH4_2').get('v.value') ;
        var  p4_3 = component.find('select_OTH4_3').get('v.value') ;
        if (p4_1 == undefined || p4_1 == "") {
            p4_1 = 0;
        }
        if (p4_2 == undefined || p4_2 == "") {
            p4_2 = 0;
        }
        if (p4_3 == undefined || p4_3 == "") {
            p4_3 = 0;
        }
        var  p5_1 = component.find('select_GS4_1').get('v.value') ;
        var  p5_2 = component.find('select_GS4_2').get('v.value') ;
        var  p5_3 = component.find('select_GS4_3').get('v.value') ;
        if (p5_1 == undefined || p5_1 == "") {
            p5_1 = 0;
        }
        if (p5_2 == undefined || p5_2 == "") {
            p5_2 = 0;
        }
        if (p5_3 == undefined || p5_3 == "") {
            p5_3 = 0;
        }
        var  p6_1 = component.find('select_URO4_1').get('v.value') ;
        var  p6_2 = component.find('select_URO4_2').get('v.value') ;
        var  p6_3 = component.find('select_URO4_3').get('v.value') ;
        if (p6_1 == undefined || p6_1 == "") {
            p6_1 = 0;
        }
        if (p6_2 == undefined || p6_2 == "") {
            p6_2 = 0;
        }
        if (p6_3 == undefined || p6_3 == "") {
            p6_3 = 0;
        }
        var  p7_1 = component.find('select_GYN4_1').get('v.value') ;
        var  p7_2 = component.find('select_GYN4_2').get('v.value') ;
        var  p7_3 = component.find('select_GYN4_3').get('v.value') ;
        if (p7_1 == undefined || p7_1 == "") {
            p7_1 = 0;
        }
        if (p7_2 == undefined || p7_2 == "") {
            p7_2 = 0;
        }
        if (p7_3 == undefined || p7_3 == "") {
            p7_3 = 0;
        }
        var  p8_1 = component.find('select_ENT4_1').get('v.value') ;
        var  p8_2 = component.find('select_ENT4_2').get('v.value') ;
        var  p8_3 = component.find('select_ENT4_3').get('v.value') ;
        if (p8_1 == undefined || p8_1 == "") {
            p8_1 = 0;
        }
        if (p8_2 == undefined || p8_2 == "") {
            p8_2 = 0;
        }
        if (p8_3 == undefined || p8_3 == "") {
            p8_3 = 0;
        }
        action.setParams({
                            "hospitalId" : component.get("v.record.Agency_Hospital__c"),
                            "GIProduct" : [component.find('select_GI1').get('v.value'),component.find('select_GI2').get('v.value'),component.find('select_GI3').get('v.value'),p1_1,p1_2,p1_3],
                            "ETProduct" : [component.find('select_ET1').get('v.value'),component.find('select_ET2').get('v.value'),component.find('select_ET3').get('v.value'),p2_1, p2_2,p2_3 ],
                            "BFProduct" : [component.find('select_BF1').get('v.value'),component.find('select_BF2').get('v.value'),component.find('select_BF3').get('v.value'),p3_1 ,p3_2 ,p3_3 ],
                            "OTHProduct" : [component.find('select_OTH1').get('v.value'),component.find('select_OTH2').get('v.value'),component.find('select_OTH3').get('v.value'),p4_1,p4_2 ,p4_3],
                            "GSProduct" : [component.find('select_GS1').get('v.value'),component.find('select_GS2').get('v.value'),component.find('select_GS3').get('v.value'),p5_1,p5_2,p5_3],
                            "UROProduct" : [component.find('select_URO1').get('v.value'),component.find('select_URO2').get('v.value'),component.find('select_URO3').get('v.value'),p6_1,p6_2 ,p6_2 ],
                            "GYNProduct" : [component.find('select_GYN1').get('v.value'),component.find('select_GYN2').get('v.value'),component.find('select_GYN3').get('v.value'),p7_1,p7_2 ,p7_3 ],
                            "ENTProduct" : [component.find('select_ENT1').get('v.value'),component.find('select_ENT2').get('v.value'),component.find('select_ENT3').get('v.value'),p8_1 ,p8_2 ,p8_3],
                            "OCMTerm" : component.get("v.OCMTerm")
                        });
        action.setCallback(this, function(response) {
            console.warn(response);
            var state = response.getState();
            if (state === "SUCCESS") {
                var modal_window = component.find('modal_window');
                var modal_bg = component.find('modal_bg');
                $A.util.toggleClass(modal_window, 'disp_none');
                $A.util.toggleClass(modal_bg, 'disp_none');
                var toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    title: "成功",
                    type:"success",
                    message: "保存成功"
                });
                toastEvent.fire();
                $A.get('e.force:refreshView').fire();
            } else if (state === "INCOMPLETE") {
                var toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    title: "未完成!",
                    type:"error",
                    message: "未完成"
                });
                toastEvent.fire();
            } else if (state === "ERROR") {
                var errors = response.getError();
                var toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    title: "错误",
                    type:"error",
                    message: errors[0].message
                });
                toastEvent.fire();
            }
        });
        $A.enqueueAction(action);
    },
    warning : function(message) {
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams({
          title: "错误",
          type: "error",
          message: errors[0].message
            title: "警告!",
            message: message,
            type:"warning",
            duration : "10000"
        });
        toastEvent.fire();
      }
    });
    $A.enqueueAction(action);
  },
  toggle_report: function (component, event, helper) {
    var modal_window = component.find("modal_window");
    var modal_bg = component.find("modal_bg");
    $A.util.toggleClass(modal_window, "disp_none");
    $A.util.toggleClass(modal_bg, "disp_none");
    if (
      $A.util.hasClass(modal_window, "disp_none") &&
      !component.get("v.recordId")
    ) {
      $A.get("e.force:refreshView").fire();
    }
  },
  productcategoryChange: function (component, event, helper, dept, index) {
    var cmpId = "select_" + dept;
    var myId;
    var o1Id;
    var o2Id;
    if (index == 1) {
      myId = cmpId + "1";
      o1Id = cmpId + "2";
      o2Id = cmpId + "3";
    } else if (index == 2) {
      myId = cmpId + "2";
      o1Id = cmpId + "1";
      o2Id = cmpId + "3";
    } else {
      myId = cmpId + "3";
      o1Id = cmpId + "1";
      o2Id = cmpId + "2";
    }
    var product_category_id = component.find(myId).get("v.value");
    var pcId1 = component.find(o1Id).get("v.value");
    var pcId2 = component.find(o2Id).get("v.value");
    var p1bool = pcId1 != "" && pcId1 != null && pcId1 != undefined;
    var p2bool = pcId2 != "" && pcId2 != null && pcId2 != undefined;
    var p0bool =
      product_category_id != "" &&
      product_category_id != null &&
      product_category_id != undefined;
    if (
      (p1bool && p0bool && product_category_id == pcId1) ||
      (p2bool && p0bool && product_category_id == pcId2)
    ) {
      this.warning("不能选择同样的产品区分");
      component.find(myId).set("v.value", "");
    }
  },
  selectHos: function (component, event, helper) {
    var accid = component.get("v.record.Agency_Hospital__c");
    var action = component.get("c.getDeptAmount");
    action.setParams({ hospitalId: accid });
    action.setCallback(this, function (response) {
      var state = response.getState();
      if (state === "SUCCESS") {
        var amountMap = response.getReturnValue();
        var GIProduct_Category1 = "";
        var GIProduct_Category2 = "";
        var GIProduct_Category3 = "";
        var GIAim_Price__c1 = "";
        var GIAim_Price__c2 = "";
        var GIAim_Price__c3 = "";
        if (amountMap.GI.length > 0) {
          GIProduct_Category1 = amountMap.GI[0].Product_Category__c;
          if (amountMap.GI.length > 1) {
            GIProduct_Category2 = amountMap.GI[1].Product_Category__c;
          }
          if (amountMap.GI.length > 2) {
            GIProduct_Category3 = amountMap.GI[2].Product_Category__c;
          }
          GIAim_Price__c1 = amountMap.GI[0].Aim_Price__c;
          GIAim_Price__c2 = amountMap.GI[1].Aim_Price__c;
          GIAim_Price__c3 = amountMap.GI[2].Aim_Price__c;
          console.warn(
            GIAim_Price__c1 + "-" + GIAim_Price__c2 + "-" + GIAim_Price__c3
          );
        }
        component.find("select_GI1").set("v.value", GIProduct_Category1);
        component.find("select_GI2").set("v.value", GIProduct_Category2);
        component.find("select_GI3").set("v.value", GIProduct_Category3);
        component.find("select_GI4_1").set("v.value", GIAim_Price__c1);
        component.find("select_GI4_2").set("v.value", GIAim_Price__c2);
        component.find("select_GI4_3").set("v.value", GIAim_Price__c3);
        var ETProduct_Category1 = "";
        var ETProduct_Category2 = "";
        var ETProduct_Category3 = "";
        var ETAim_Price__c1 = "";
        var ETAim_Price__c2 = "";
        var ETAim_Price__c3 = "";
        if (amountMap.ET.length > 0) {
          ETProduct_Category1 = amountMap.ET[0].Product_Category__c;
          if (amountMap.ET.length > 1) {
            ETProduct_Category2 = amountMap.ET[1].Product_Category__c;
          }
          if (amountMap.ET.length > 2) {
            ETProduct_Category3 = amountMap.ET[2].Product_Category__c;
          }
          ETAim_Price__c1 = amountMap.ET[0].Aim_Price__c;
          ETAim_Price__c2 = amountMap.ET[1].Aim_Price__c;
          ETAim_Price__c3 = amountMap.ET[2].Aim_Price__c;
        }
        component.find("select_ET1").set("v.value", ETProduct_Category1);
        component.find("select_ET2").set("v.value", ETProduct_Category2);
        component.find("select_ET3").set("v.value", ETProduct_Category3);
        component.find("select_ET4_1").set("v.value", ETAim_Price__c1);
        component.find("select_ET4_2").set("v.value", ETAim_Price__c2);
        component.find("select_ET4_3").set("v.value", ETAim_Price__c3);
        var BFProduct_Category1 = "";
        var BFProduct_Category2 = "";
        var BFProduct_Category3 = "";
        var BFAim_Price__c1 = "";
        var BFAim_Price__c2 = "";
        var BFAim_Price__c3 = "";
        if (amountMap.BF.length > 0) {
          BFProduct_Category1 = amountMap.BF[0].Product_Category__c;
          if (amountMap.BF.length > 1) {
            BFProduct_Category2 = amountMap.BF[1].Product_Category__c;
          }
          if (amountMap.BF.length > 2) {
            BFProduct_Category3 = amountMap.BF[2].Product_Category__c;
          }
          BFAim_Price__c1 = amountMap.BF[0].Aim_Price__c;
          BFAim_Price__c2 = amountMap.BF[1].Aim_Price__c;
          BFAim_Price__c3 = amountMap.BF[2].Aim_Price__c;
        }
        component.find("select_BF1").set("v.value", BFProduct_Category1);
        component.find("select_BF2").set("v.value", BFProduct_Category2);
        component.find("select_BF3").set("v.value", BFProduct_Category3);
        component.find("select_BF4_1").set("v.value", BFAim_Price__c1);
        component.find("select_BF4_2").set("v.value", BFAim_Price__c2);
        component.find("select_BF4_3").set("v.value", BFAim_Price__c3);
        var OTHProduct_Category1 = "";
        var OTHProduct_Category2 = "";
        var OTHProduct_Category3 = "";
        var OTHAim_Price__c1 = "";
        var OTHAim_Price__c2 = "";
        var OTHAim_Price__c3 = "";
        if (amountMap.OTH.length > 0) {
          OTHProduct_Category1 = amountMap.OTH[0].Product_Category__c;
          if (amountMap.OTH.length > 1) {
            OTHProduct_Category2 = amountMap.OTH[1].Product_Category__c;
          }
          if (amountMap.OTH.length > 2) {
            OTHProduct_Category3 = amountMap.OTH[2].Product_Category__c;
          }
          OTHAim_Price__c1 = amountMap.OTH[0].Aim_Price__c;
          OTHAim_Price__c2 = amountMap.OTH[1].Aim_Price__c;
          OTHAim_Price__c3 = amountMap.OTH[2].Aim_Price__c;
        }
        component.find("select_OTH1").set("v.value", OTHProduct_Category1);
        component.find("select_OTH2").set("v.value", OTHProduct_Category2);
        component.find("select_OTH3").set("v.value", OTHProduct_Category3);
        component.find("select_OTH4_1").set("v.value", OTHAim_Price__c1);
        component.find("select_OTH4_2").set("v.value", OTHAim_Price__c2);
        component.find("select_OTH4_3").set("v.value", OTHAim_Price__c3);
        var GSProduct_Category1 = "";
        var GSProduct_Category2 = "";
        var GSProduct_Category3 = "";
        var GSPAim_Price__c1 = "";
        var GSPAim_Price__c2 = "";
        var GSPAim_Price__c3 = "";
        if (amountMap.GS.length > 0) {
          GSProduct_Category1 = amountMap.GS[0].Product_Category__c;
          if (amountMap.GS.length > 1) {
            GSProduct_Category2 = amountMap.GS[1].Product_Category__c;
          }
          if (amountMap.GS.length > 2) {
            GSProduct_Category3 = amountMap.GS[2].Product_Category__c;
          }
          GSPAim_Price__c1 = amountMap.GS[0].Aim_Price__c;
          GSPAim_Price__c2 = amountMap.GS[1].Aim_Price__c;
          GSPAim_Price__c3 = amountMap.GS[2].Aim_Price__c;
        }
        component.find("select_GS1").set("v.value", GSProduct_Category1);
        component.find("select_GS2").set("v.value", GSProduct_Category2);
        component.find("select_GS3").set("v.value", GSProduct_Category3);
        component.find("select_GS4_1").set("v.value", GSPAim_Price__c1);
        component.find("select_GS4_2").set("v.value", GSPAim_Price__c2);
        component.find("select_GS4_3").set("v.value", GSPAim_Price__c3);
        var UROProduct_Category1 = "";
        var UROProduct_Category2 = "";
        var UROProduct_Category3 = "";
        var UROAim_Price__c1 = "";
        var UROAim_Price__c2 = "";
        var UROAim_Price__c3 = "";
        if (amountMap.URO.length > 0) {
          UROProduct_Category1 = amountMap.URO[0].Product_Category__c;
          if (amountMap.URO.length > 1) {
            UROProduct_Category2 = amountMap.URO[1].Product_Category__c;
          }
          if (amountMap.URO.length > 2) {
            UROProduct_Category3 = amountMap.URO[2].Product_Category__c;
          }
          UROAim_Price__c1 = amountMap.URO[0].Aim_Price__c;
          UROAim_Price__c2 = amountMap.URO[1].Aim_Price__c;
          UROAim_Price__c3 = amountMap.URO[2].Aim_Price__c;
        }
        component.find("select_URO1").set("v.value", UROProduct_Category1);
        component.find("select_URO2").set("v.value", UROProduct_Category2);
        component.find("select_URO3").set("v.value", UROProduct_Category3);
        component.find("select_URO4_1").set("v.value", UROAim_Price__c1);
        component.find("select_URO4_2").set("v.value", UROAim_Price__c2);
        component.find("select_URO4_3").set("v.value", UROAim_Price__c3);
        var GYNProduct_Category1 = "";
        var GYNProduct_Category2 = "";
        var GYNProduct_Category3 = "";
        var GYNAim_Price__c1 = "";
        var GYNAim_Price__c2 = "";
        var GYNAim_Price__c3 = "";
        if (amountMap.GYN.length > 0) {
          GYNProduct_Category1 = amountMap.GYN[0].Product_Category__c;
          if (amountMap.GYN.length > 1) {
            GYNProduct_Category2 = amountMap.GYN[1].Product_Category__c;
          }
          if (amountMap.GYN.length > 2) {
            GYNProduct_Category3 = amountMap.GYN[2].Product_Category__c;
          }
          GYNAim_Price__c1 = amountMap.GYN[0].Aim_Price__c;
          GYNAim_Price__c2 = amountMap.GYN[1].Aim_Price__c;
          GYNAim_Price__c3 = amountMap.GYN[2].Aim_Price__c;
        }
        component.find("select_GYN1").set("v.value", GYNProduct_Category1);
        component.find("select_GYN2").set("v.value", GYNProduct_Category2);
        component.find("select_GYN3").set("v.value", GYNProduct_Category3);
        component.find("select_GYN4_1").set("v.value", GYNAim_Price__c1);
        component.find("select_GYN4_2").set("v.value", GYNAim_Price__c2);
        component.find("select_GYN4_3").set("v.value", GYNAim_Price__c3);
        var ENTProduct_Category1 = "";
        var ENTProduct_Category2 = "";
        var ENTProduct_Category3 = "";
        var ENTAim_Price__c1 = "";
        var ENTAim_Price__c2 = "";
        var ENTAim_Price__c3 = "";
        if (amountMap.ENT.length > 0) {
          ENTProduct_Category1 = amountMap.ENT[0].Product_Category__c;
          if (amountMap.ENT.length > 1) {
            ENTProduct_Category2 = amountMap.ENT[1].Product_Category__c;
          }
          if (amountMap.ENT.length > 2) {
            ENTProduct_Category3 = amountMap.ENT[2].Product_Category__c;
          }
          ENTAim_Price__c1 = amountMap.ENT[0].Aim_Price__c;
          ENTAim_Price__c2 = amountMap.ENT[1].Aim_Price__c;
          ENTAim_Price__c3 = amountMap.ENT[2].Aim_Price__c;
        }
        component.find("select_ENT1").set("v.value", ENTProduct_Category1);
        component.find("select_ENT2").set("v.value", ENTProduct_Category2);
        component.find("select_ENT3").set("v.value", ENTProduct_Category3);
        component.find("select_ENT4_1").set("v.value", ENTAim_Price__c1);
        component.find("select_ENT4_2").set("v.value", ENTAim_Price__c2);
        component.find("select_ENT4_3").set("v.value", ENTAim_Price__c3);
      }
    });
    $A.enqueueAction(action);
    console.log(
      JSON.stringify(component.find("input-hos").get("v.body")[0].get("v"))
    );
  },
  getOCMTerm: function () {
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth();
    if (month < 3) year -= 1;
    var thisYearOCMPeriod = String(year - 1867) + "P";
    return thisYearOCMPeriod;
  },
  createTarget: function (component, event, helper) {
    var action = component.get("c.createSFTarget");
    // alert(component.get("v.GIAmount"));
    var p1_1 = component.find("select_GI4_1").get("v.value");
    var p1_2 = component.find("select_GI4_2").get("v.value");
    var p1_3 = component.find("select_GI4_3").get("v.value");
    if (p1_1 == undefined || p1_1 == "") {
      p1_1 = 0;
    }
    if (p1_2 == undefined || p1_2 == "") {
      p1_2 = 0;
    }
    if (p1_3 == undefined || p1_3 == "") {
      p1_3 = 0;
    }
    console.warn(p1_1 + "-" + p1_2 + "-" + p1_3);
    var p2_1 = component.find("select_ET4_1").get("v.value");
    var p2_2 = component.find("select_ET4_2").get("v.value");
    var p2_3 = component.find("select_ET4_3").get("v.value");
    if (p2_1 == undefined || p2_1 == "") {
      p2_1 = 0;
    }
    if (p2_2 == undefined || p2_2 == "") {
      p2_2 = 0;
    }
    if (p2_3 == undefined || p2_3 == "") {
      p2_3 = 0;
    }
    var p3_1 = component.find("select_BF4_1").get("v.value");
    var p3_2 = component.find("select_BF4_2").get("v.value");
    var p3_3 = component.find("select_BF4_3").get("v.value");
    if (p3_1 == undefined || p3_1 == "") {
      p3_1 = 0;
    }
    if (p3_2 == undefined || p3_2 == "") {
      p3_2 = 0;
    }
    if (p3_3 == undefined || p3_3 == "") {
      p3_3 = 0;
    }
    var p4_1 = component.find("select_OTH4_1").get("v.value");
    var p4_2 = component.find("select_OTH4_2").get("v.value");
    var p4_3 = component.find("select_OTH4_3").get("v.value");
    if (p4_1 == undefined || p4_1 == "") {
      p4_1 = 0;
    }
    if (p4_2 == undefined || p4_2 == "") {
      p4_2 = 0;
    }
    if (p4_3 == undefined || p4_3 == "") {
      p4_3 = 0;
    }
    var p5_1 = component.find("select_GS4_1").get("v.value");
    var p5_2 = component.find("select_GS4_2").get("v.value");
    var p5_3 = component.find("select_GS4_3").get("v.value");
    if (p5_1 == undefined || p5_1 == "") {
      p5_1 = 0;
    }
    if (p5_2 == undefined || p5_2 == "") {
      p5_2 = 0;
    }
    if (p5_3 == undefined || p5_3 == "") {
      p5_3 = 0;
    }
    var p6_1 = component.find("select_URO4_1").get("v.value");
    var p6_2 = component.find("select_URO4_2").get("v.value");
    var p6_3 = component.find("select_URO4_3").get("v.value");
    if (p6_1 == undefined || p6_1 == "") {
      p6_1 = 0;
    }
    if (p6_2 == undefined || p6_2 == "") {
      p6_2 = 0;
    }
    if (p6_3 == undefined || p6_3 == "") {
      p6_3 = 0;
    }
    var p7_1 = component.find("select_GYN4_1").get("v.value");
    var p7_2 = component.find("select_GYN4_2").get("v.value");
    var p7_3 = component.find("select_GYN4_3").get("v.value");
    if (p7_1 == undefined || p7_1 == "") {
      p7_1 = 0;
    }
    if (p7_2 == undefined || p7_2 == "") {
      p7_2 = 0;
    }
    if (p7_3 == undefined || p7_3 == "") {
      p7_3 = 0;
    }
    var p8_1 = component.find("select_ENT4_1").get("v.value");
    var p8_2 = component.find("select_ENT4_2").get("v.value");
    var p8_3 = component.find("select_ENT4_3").get("v.value");
    if (p8_1 == undefined || p8_1 == "") {
      p8_1 = 0;
    }
    if (p8_2 == undefined || p8_2 == "") {
      p8_2 = 0;
    }
    if (p8_3 == undefined || p8_3 == "") {
      p8_3 = 0;
    }
    action.setParams({
      hospitalId: component.get("v.record.Agency_Hospital__c"),
      GIProduct: [
        component.find("select_GI1").get("v.value"),
        component.find("select_GI2").get("v.value"),
        component.find("select_GI3").get("v.value"),
        p1_1,
        p1_2,
        p1_3
      ],
      ETProduct: [
        component.find("select_ET1").get("v.value"),
        component.find("select_ET2").get("v.value"),
        component.find("select_ET3").get("v.value"),
        p2_1,
        p2_2,
        p2_3
      ],
      BFProduct: [
        component.find("select_BF1").get("v.value"),
        component.find("select_BF2").get("v.value"),
        component.find("select_BF3").get("v.value"),
        p3_1,
        p3_2,
        p3_3
      ],
      OTHProduct: [
        component.find("select_OTH1").get("v.value"),
        component.find("select_OTH2").get("v.value"),
        component.find("select_OTH3").get("v.value"),
        p4_1,
        p4_2,
        p4_3
      ],
      GSProduct: [
        component.find("select_GS1").get("v.value"),
        component.find("select_GS2").get("v.value"),
        component.find("select_GS3").get("v.value"),
        p5_1,
        p5_2,
        p5_3
      ],
      UROProduct: [
        component.find("select_URO1").get("v.value"),
        component.find("select_URO2").get("v.value"),
        component.find("select_URO3").get("v.value"),
        p6_1,
        p6_2,
        p6_2
      ],
      GYNProduct: [
        component.find("select_GYN1").get("v.value"),
        component.find("select_GYN2").get("v.value"),
        component.find("select_GYN3").get("v.value"),
        p7_1,
        p7_2,
        p7_3
      ],
      ENTProduct: [
        component.find("select_ENT1").get("v.value"),
        component.find("select_ENT2").get("v.value"),
        component.find("select_ENT3").get("v.value"),
        p8_1,
        p8_2,
        p8_3
      ],
      OCMTerm: component.get("v.OCMTerm")
    });
    action.setCallback(this, function (response) {
      console.warn(response);
      var state = response.getState();
      if (state === "SUCCESS") {
        var modal_window = component.find("modal_window");
        var modal_bg = component.find("modal_bg");
        $A.util.toggleClass(modal_window, "disp_none");
        $A.util.toggleClass(modal_bg, "disp_none");
    },
    error : function(message) {
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams({
          title: "成功",
          type: "success",
          message: "保存成功"
            title: "错误!",
            message: message,
            type:"error",
            duration : "10000"
        });
        toastEvent.fire();
    },
        $A.get("e.force:refreshView").fire();
      } else if (state === "INCOMPLETE") {
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams({
          title: "未完成!",
          type: "error",
          message: "未完成"
        });
        toastEvent.fire();
      } else if (state === "ERROR") {
        var errors = response.getError();
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams({
          title: "错误",
          type: "error",
          message: errors[0].message
        });
        toastEvent.fire();
      }
    });
    $A.enqueueAction(action);
  },
  warning: function (message) {
    var toastEvent = $A.get("e.force:showToast");
    toastEvent.setParams({
      title: "警告!",
      message: message,
      type: "warning",
      duration: "10000"
    });
    toastEvent.fire();
  },
  error: function (message) {
    var toastEvent = $A.get("e.force:showToast");
    toastEvent.setParams({
      title: "错误!",
      message: message,
      type: "error",
      duration: "10000"
    });
    toastEvent.fire();
  }
});
})
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImport.cmp
@@ -1,3 +1,11 @@
<!--
 * @Author: Thhto 997058689@qq.com
 * @Date: 2022-07-08 10:47:25
 * @LastEditors: Thhto 997058689@qq.com
 * @LastEditTime: 2023-02-03 15:25:46
 * @FilePath: \ceshihuanj\force-app\main\default\aura\DealerPersonnelInformationImport\DealerPersonnelInformationImport.cmp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<aura:component controller="DealerPersonnelController"
    implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes"
    access="global">
@@ -35,7 +43,7 @@
    </aura:renderIf>
    <!-- 批量添加周报 start-->
    <div class="slds-modal slds-fade-in-open slds-hide" aura:id="errorDiv" style="z-index: 10001">
        <ui:inputText aura:id="articleURL" />
        <!-- <ui:inputText aura:id="articleURL" /> -->
        <div class="demo-only" style="height: 8rem;">
            <div class="slds-notify_container slds-is-relative">
                <div class="slds-notify slds-notify_toast slds-theme_error" role="status">
@@ -44,7 +52,10 @@
                            class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large">
                            <lightning:icon alternativeText="error" iconName="utility:error" size="small"
                                class="buttonColor slds-m-right_small" />
                            <h2 class="slds-text-heading_small ">{!v.errorMessage}</h2>
                            <!-- DB202301262139 SFDC经销商人员导入功能改进 start -->
                            <!-- <h2 class="slds-text-heading_small ">{!v.errorMessage}</h2> -->
                            <pre class="slds-text-heading_small ">{!v.errorMessage}</pre>
                            <!-- DB202301262139 SFDC经销商人员导入功能改进 end -->
                        </div>
                    </div>
                </div>
@@ -52,7 +63,7 @@
        </div>
    </div>
    <div class="slds-modal slds-fade-in-open slds-hide" aura:id="successDiv01">
        <ui:inputText aura:id="articleURL" />
        <!-- <ui:inputText aura:id="articleURL" /> -->
        <div class="demo-only" style="height: 8rem;">
            <div class="slds-notify_container slds-is-relative">
                <div class="slds-notify slds-notify_toast slds-theme_success" role="alert">
@@ -68,7 +79,7 @@
            </div>
        </div>
    </div>
    <div>
    <div >
        <div class="slds-modal__header ">
            <h4 id="headerTarget" class="slds-float--left"></h4>
            <h2 id="headerTarget" class="slds-text-heading--medium">客户人员批量导入</h2>
@@ -83,7 +94,7 @@
                <aura:set attribute="else">
                    <ui:outputRichText class="uiOutputRichText slds-m--around-large" value="{!v.TableContent}" />
                    <div class="slds-p-around--large slds-align--absolute-center">
                        <lightning:button label="保存" variant="brand" onclick="{!c.processFileContent}" />
                        <lightning:button aura:id="save_con" label="保存" variant="brand" onclick="{!c.processFileContent}" disabled="false" />
                        <lightning:button label="取消" variant="brand" onclick="{!c.cancel}" />
                    </div>
                    <aura:if isTrue="{!v.showErrorInfo}">
@@ -93,7 +104,7 @@
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <div style="height: 300px;overflow-x:scroll">
                                <lightning:datatable keyField="id" data="{! v.errorData }" columns="{! v.errorColumns }"
                                    hideCheckboxColumn="true"  minColumnWidth="120"/>
                                    hideCheckboxColumn="true"/>
                            </div>
                        </div>
                    </aura:if>
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportHelper.js
@@ -77,6 +77,9 @@
        };
        reader.readAsDataURL(file);
    },
    isNumber: function(str) {
        return /^\d+$/.test(str);
    },
    saveRecords: function (component, event, helper) {
        component.set('v.login', true);
        var action = component.get("c.processData");
@@ -101,34 +104,44 @@
                        res1 += ress[i].substr(7) + '\n';
                        if (ress[i] != '') {
                            let errorData = {}
                            if(!this.isNumber(ress[i].substr(7).substring(1, 2))){
                                continue
                            }
                            let index = errorDataRow.indexOf(ress[i].substr(7).substring(1, 2));
                            if (index == -1) {
                                errorData.errorRow = ress[i].substr(7).substring(1, 2);
                                errorDataRow.push(errorData.errorRow);
                                errorData.errorInfo = ress[i].substr(7).substring(6);
                                errorData.errorInfo = ress[i].substr(7).substring(5);
                                errorDatas.push(errorData);
                            } else {
                                errorDatas[index].errorInfo += '; ' + ress[i].substr(7).substring(6);
                                errorDatas[index].errorInfo += '; ' + ress[i].substr(7).substring(5);
                            }
                        }
                    }
                    var fileContentData = component.get("v.fileContentData").split('\n');
                    let errorColumns = [
                        { label: '错误行', fieldName: 'errorRow', type: 'text', hideDefaultActions: true, initialWidth: 50 },
                        { label: '错误行', fieldName: 'errorRow', type: 'text', hideDefaultActions: true, initialWidth: 100 },
                        { label: '错误信息', fieldName: 'errorInfo', type: 'text', hideDefaultActions: true,initialWidth: 300,wrapText: true }
                    ];
                    for (var i = 0; i < fileContentData[0].split(',').length - 1; i++) {
                        errorColumns.push({
                            label: fileContentData[0].split(',')[i], fieldName: 'field' + i, type: 'text', hideDefaultActions: true,wrapText: true
                            label: fileContentData[0].split(',')[i],
                            fieldName: 'field' + i,
                            type: 'text',
                            hideDefaultActions: true,
                            wrapText: true,
                            initialWidth: 120
                        });
                    }
                    
                    for(var i = 0; i < errorDatas.length; i++){
                        let data = fileContentData[errorDatas[i].errorRow];
                        console.log('data = ' + JSON.stringify(data));
                        for(var j = 0; j < data.split(',').length; j++){
                            let label = 'field' + j;
                            errorDatas[i][label] = data.split(',')[j];
                        if(data){
                            for(var j = 0; j < data.split(',').length; j++){
                                let label = 'field' + j;
                                errorDatas[i][label] = data.split(',')[j];
                            }
                        }
                    }
                    console.log('errorDatas = ' + JSON.stringify(errorDatas))
@@ -142,12 +155,14 @@
                    component.set('v.errorMessage', res1 + "请修改后重新上传");
                    this.showErrorToast(component);
                    component.set('v.login', false);
                    component.find('save_con').set('v.disabled', true);
                } else {
                    // this.success('导入成功');
                    component.set('v.successMessage', '导入成功');
                    this.showSuccessToast01(component);
                    component.set("v.showMain", true);
                    component.set('v.login', false);
                    component.find('save_con').set('v.disabled', false);
                }
            }
            else if (state === "INCOMPLETE") {
@@ -195,7 +210,7 @@
        window.setTimeout($A.getCallback(function () {
            $A.util.addClass(component.find('errorDiv'), 'slds-hide');
        }),
            4000
            7000
        );
    },
    success: function (message) {
@@ -283,8 +298,9 @@
    downloadCSV: function (component, csv) {
        var link = document.createElement('a');
        // 设置字符集和文件头
        let bom = "\uFEFF";
        link.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(bom+csv);
        var bom = "\uFEFF";
        link.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(bom + csv);
        //link.href = URL.createObjectURL(csvFile);
        link.download = 'data.csv';
        document.body.appendChild(link);
        link.click();
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.auradoc
New file
@@ -0,0 +1,6 @@
<aura:documentation>
    <aura:description>Documentation</aura:description>
    <aura:example name="ExampleName" ref="exampleComponentName" label="Label">
        Example Description
    </aura:example>
</aura:documentation>
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.cmp
New file
@@ -0,0 +1,71 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 07-08-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId,lightning:actionOverride,lightning:isUrlAddressable" access="global"
                controller="NewAgencyContactController">
    <aura:attribute name = "recordId" type = "Id" default = ""/>
    <aura:attribute name="title" type="string"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:attribute name="layout" type="LayoutDescriberHelper.LayoutWrapper"/>
    <aura:attribute name="record_data" type="Map"/>
    <aura:attribute name="section_names" type="List"/>
    <aura:attribute name="showSpinner" type="Boolean" default = "False"/>
    <aura:attribute name="staticResource" type="Map"/>
    <aura:attribute name="pi_fields_map" type="Map"/>
    <aura:attribute name="isClone" type="Boolean" default = "False"/>
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <aura:registerEvent name="NewAgencyContactEvent" type="c:NewAgencyContactEvent"/>
    <aura:attribute name="agencyHospitalId" type="String"/>
    <div class="slds-modal__container">
        <!-- header -->
        <header class="slds-modal__header">
            <h2 id="modal-heading-01" class="slds-modal__title slds-hyphenate">
                {!v.title}
            </h2>
        </header>
        <div class="slds-modal__content slds-p-around_medium">
            <aura:if isTrue="{!v.showSpinner}">
                <lightning:spinner alternativeText="Loading" size="medium" />
            </aura:if>
            <lightning:recordEditForm objectApiName="Agency_Contact__c" onload="{!c.handleLoad}">
                <lightning:accordion activeSectionName="{! v.section_names }" allowMultipleSectionsOpen="true" class="greyyyy" >
                    <aura:iteration items="{!v.layout}" var="section">
                        <aura:if isTrue="{! section.editHeading }">
                            <lightning:accordionSection name="{! section.label }" label="{! section.label }">
                                <aura:iteration items="{! section.layoutColumns}" var="col">
                                    <aura:iteration items="{! col.layoutItems}" var="field">
                                        <aura:if isTrue="{! field.behavior != 'Readonly' }">
                                            <lightning:inputField required="{! field.behavior == 'Required' }" aura:id="field" fieldName="{! field.field}" value="{! field.value}" />
                                        </aura:if>
                                    </aura:iteration>
                                </aura:iteration>
                            </lightning:accordionSection>
                        </aura:if>
                    </aura:iteration>
                </lightning:accordion>
            </lightning:recordEditForm>
            <div  style="text-align:center;margin: 5px;">
                <lightning:button class="slds-button slds-button_neutral" label="取消" onclick="{! c.cancelClick }" />
                <lightning:button class="slds-button slds-button_brand" variant="brand" label="保存" onclick="{! c.saveClick }" />
            </div>
        </div>
    </div>
</aura:component>
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.cmp-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>55.0</apiVersion>
    <description>A Lightning Component Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.css
New file
@@ -0,0 +1,15 @@
.THIS {
}
.THIS .greyyyy .slds-button_reset{
 display: flex;
    align-items: center;
 background: var(--lwc-colorBackground,rgb(243, 242, 242));
 cursor: pointer;
    width: 100%;
    height: 2rem;
    text-align: left;
    color: currentColor;
    font-size: inherit;
    padding: 0 var(--lwc-spacingXSmall,0.5rem);
}
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.design
New file
@@ -0,0 +1,3 @@
<design:component >
</design:component>
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2.svg
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <path d="M120,108 C120,114.6 114.6,120 108,120 L12,120 C5.4,120 0,114.6 0,108 L0,12 C0,5.4 5.4,0 12,0 L108,0 C114.6,0 120,5.4 120,12 L120,108 L120,108 Z" id="Shape" fill="#2A739E" />
        <path d="M77.7383308,20 L61.1640113,20 L44.7300055,63.2000173 L56.0543288,63.2000173 L40,99.623291 L72.7458388,54.5871812 L60.907727,54.5871812 L77.7383308,20 Z" id="Path-1" fill="#FFFFFF" />
    </g>
</svg>
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Controller.js
New file
@@ -0,0 +1,396 @@
({
    doInit : function(component, event, helper) {
        let rid = component.get('v.recordId');
        let pid = null;
        if(!rid){
            pid = window.location.href.replace("https://","").split("/")[4];
        }
        let isClone = component.get('v.isClone');
        if(!rid || isClone){
            component.set('v.title',$A.get("$Label.c.New")+'.客户人员');
        }else{
            component.set('v.title',$A.get("$Label.c.Edit")+'.客户人员');
        }
        let record_type_id = null;
        let pageref = component.get("v.pageReference")
        if(!record_type_id && pageref){
           record_type_id = pageref.state.recordTypeId
        }
        component.set("v.showSpinner", true);
        helper.CallBackAction(component,'Init',{
            rid : rid,
            pid : null,
            //rid : component.get('v.recordId'),
            record_type_id : record_type_id,
        },function(data){
            debugger
            console.log('data = ' + JSON.stringify(data));
            if(data.getState() == "SUCCESS"){
                var rv = data.getReturnValue();
                console.log(rv);
                if(rv.IsSuccess){
                    let layout = JSON.parse(rv.Data.layout);
                    let fields = rv.Data.fields;
                    let staticResource = JSON.parse(rv.Data.staticResource);
                    let staticResourceV2 = JSON.parse(rv.Data.staticResourceV2);
                    let section_names = [];
                    section_names = layout.map(s=>s.label);
                    component.set('v.section_names',section_names);
                    let m = {};
                    for(let f of staticResource.PIDetails){
                        m[f.SF_Field_API_Name__c] = f;
                    }
                    component.set('v.pi_fields_map',m);
                    var agencyHospitalId = component.get("v.agencyHospitalId");
                    console.log('agencyHospitalId = ' + agencyHospitalId);
                    if(rv.Data && rv.Data.data && rv.Data.data.AWS_Data_Id__c){
                        helper.AwsGet(staticResource.queryUrl, {
                            dataId : rv.Data.data.AWS_Data_Id__c
                        }, function(data){
                            console.log('data = ' + data);
                            for(let f of staticResource.PIDetails){
                                if(data.object && data.object.hasOwnProperty(f.AWS_Field_API__c)){
                                    rv.Data.data[f.SF_Field_API_Name__c] = data.object[f.AWS_Field_API__c];
                                    if(data.object.hasOwnProperty(f.AWS_Encrypted_Field_API__c) && data.object[f.AWS_Encrypted_Field_API__c]){
                                        rv.Data.data[f.SF_Field_Encrypted_API__c] = data.object[f.AWS_Encrypted_Field_API__c];
                                    }
                                }
                            }
                            for(let s of layout){
                                for(let c of s.layoutColumns){
                                    for(let item of c.layoutItems){
                                        if(rv.Data.data.hasOwnProperty(item.field)){
                                            item.value = rv.Data.data[item.field];
                                        }
                                        if(fields.hasOwnProperty(item.field)){
                                            item.fi = fields[item.field];
                                        }
                                        if(item.field == 'Agency_Hospital__c'){
                                            item.value = agencyHospitalId;
                                        }
                                    }
                                }
                            }
                            component.set('v.record_data',rv.Data.data);
                            component.set('v.layout',layout);
                        }, staticResource.token);
                    }else{
                        for(let s of layout){
                            for(let c of s.layoutColumns){
                                for(let item of c.layoutItems){
                                    if(rv.Data && fields.hasOwnProperty(item.field) && fields[item.field].References && fields[item.field].References.map(m=>m.value).indexOf(rv.Data.pidType) > -1){
                                        item.value = pid;
                                    }
                                    if(item.field == 'Agency_Hospital__c'){
                                        item.value = agencyHospitalId;
                                    }
                                }
                            }
                        }
                        component.set('v.layout',layout);
                    }
                    component.set('v.fields',fields);
                    component.set('v.staticResource',staticResource);
                    component.set('v.staticResourceV2',staticResourceV2);
                }else{
                    helper.ShowToast({
                        "message" : rv.Message,
                        "type" : "error"
                    });
                }
            }else{
                helper.ShowToast({
                    "message" : "Init error",
                    "type" : "error"
                });
            }
        });
    },
    handleLoad: function(component, event, helper) {
        console.log('recordEditForm handleSuccess')
        component.set("v.showSpinner", false);
    },
    saveClick : function(component, event, helper){
        let staticResource = component.get('v.staticResource');
        //let staticResourceV2 = component.get('v.staticResourceV2');
        let record_id = component.get('v.recordId');
        let record_type_id = component.get('v.recordTypeId');
        let isClone = component.get('v.isClone');
        let url = staticResource.newUrl;
        //let urlV2 = staticResourceV2.newUrl;
        let payloadPi = {};
        if (record_id && !isClone) {
            url = staticResource.updateUrl;
            //urlV2 = staticResourceV2.updateUrl;
            payloadPi['dataId'] = component.get('v.record_data').AWS_Data_Id__c;
        }
        let layout = component.get('v.layout');
        let pi_fields_map = component.get('v.pi_fields_map');
        let hospitalId = '';
        for(let s of layout){
            for(let c of s.layoutColumns){
                for(let item of c.layoutItems){
                    if(item.field == 'Agency_Hospital__c'){
                        hospitalId = item.value;
                    }
                    if(pi_fields_map.hasOwnProperty(item.field)){
                        payloadPi[pi_fields_map[item.field].AWS_Field_API__c] = item.value;
                    }
                    if (item.behavior == "Required" && !item.value ) {
                        let fs = component.find("field");
                        for(let fi in fs){
                            let f = fs[fi];
                            if(!f.get('v.value')){
                                f.reset();
                            }
                        }
                        return;
                    }
                }
            }
        }
        component.set("v.showSpinner", true);
        //zhj MEBG新方案改造 2022-11-29 start
        debugger
        let hospitalName = '';
        //调用后端searchAgencyDataId方法查询出医院下面所有客户人员dataid
        helper.CallBackAction(component,'searchAgencyDataId',{
            hospitalId : hospitalId
        },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);
                        payloadPi['agencyContactIds'] = agencyContactIds;
                    }else{
                        payloadPi['agencyContactIds'] = agencyContactIds;
                    }
                    helper.AwsPost(url+'V2', [payloadPi], function(result){
                        //如果返回是129表示重复了,报错
                        if(result.status == '129'){
                            helper.ShowToast({
                                "message" : '该客户人员名字已存在,在'+hospitalName+'医院,请修改',
                                "type" : "error"
                            });
                            component.set("v.showSpinner", false);
                            return
                        }
                        let obj = result.object[0];
                        let data = {};
                        if(record_id && !isClone){
                            data.Id = record_id;
                        }else{
                            data.AWS_Data_Id__c = obj.dataId;
                        }
                        for(let s of layout){
                            for(let c of s.layoutColumns){
                                for(let item of c.layoutItems){
                                    if(item.field && item.behavior != "Readonly"){
                                        if(pi_fields_map.hasOwnProperty(item.field)){
                                            data[item.field] = obj[pi_fields_map[item.field].AWS_Field_API__c];
                                            //data[pi_fields_map[item.field].SF_Field_Encrypted_API__c] = obj[pi_fields_map[item.field].AWS_Encrypted_Field_API__c];
                                        }else{
                                            data[item.field] = item.value;
                                        }
                                    }
                                }
                            }
                        }
                        $A.getCallback(function(){
                            helper.CallBackAction(component,'Save',{
                                data : data,
                                transId : result.txId
                            },function(data){
                                component.set("v.showSpinner", false);
                                if(data.getState() == "SUCCESS"){
                                    var rv = data.getReturnValue();
                                    console.log(rv);
                                    var sfId = null;
                                    if(rv.IsSuccess){
                                        sfId = rv.Data.recordId;
                                    }
                                    helper.AwsPost(staticResource.transactionUrl,{
                                        txId: result.txId,
                                        sfRecordId:sfId,
                                        isSuccess: rv.IsSuccess ? 1 : 0
                                    },function(data){
                                        if(rv.IsSuccess){
                                            helper.ShowToast({
                                                "message" : "成功",
                                                "type" : "success"
                                            });
                                            helper.closeAgencyContact(component);
                                            // if (record_id && !isClone){
                                            //     helper.closeAgencyContact(component);
                                            //     //$A.get('e.force:refreshView').fire();
                                            // }else{
                                            //     var sObjectEvent = $A.get("e.force:navigateToSObject");
                                            //     sObjectEvent.setParams({
                                            //         "recordId": sfId
                                            //     })
                                            //     sObjectEvent.fire();
                                            // }
                                        }else{
                                            helper.ShowToast({
                                                "message" : rv.Message,
                                                "type" : "error"
                                            });
                                        }
                                    },staticResource.token);
                                }else{
                                    helper.ShowToast({
                                        "message" : "Init error",
                                        "type" : "error"
                                    });
                                }
                            });
                        })();
                    }, staticResource.token);
                }else{
                    helper.ShowToast({
                        "message" : data.message,
                        "type" : "error"
                    });
                    component.set("v.showSpinner", false);
                }
            }else{
                helper.ShowToast({
                    "message" : 'searchAgency失败',
                    "type" : "error"
                });
                component.set("v.showSpinner", false);
            }
        });
        //zhj MEBG新方案改造 2022-11-29 end
        // helper.AwsPost(urlV2, [payloadPi], function(result){
        //     let obj = result.object[0];
        //     let data = {};
        //     if(record_id && !isClone){
        //         data.Id = record_id;
        //     }else{
        //         data.AWS_Data_Id__c = obj.dataId;
        //     }
        //     for(let s of layout){
        //         for(let c of s.layoutColumns){
        //             for(let item of c.layoutItems){
        //                 if(item.field && item.behavior != "Readonly"){
        //                     if(pi_fields_map.hasOwnProperty(item.field)){
        //                         data[item.field] = obj[pi_fields_map[item.field].AWS_Field_API__c];
        //                         data[pi_fields_map[item.field].SF_Field_Encrypted_API__c] = obj[pi_fields_map[item.field].AWS_Encrypted_Field_API__c];
        //                     }else{
        //                         data[item.field] = item.value;
        //                     }
        //                 }
        //             }
        //         }
        //     }
        //     $A.getCallback(function(){
        //         helper.CallBackAction(component,'Save',{
        //             data : data,
        //             transId : result.txId
        //         },function(data){
        //             component.set("v.showSpinner", false);
        //             if(data.getState() == "SUCCESS"){
        //                 var rv = data.getReturnValue();
        //                 console.log(rv);
        //                 var sfId = null;
        //                 if(rv.IsSuccess){
        //                     sfId = rv.Data.recordId;
        //                 }
        //                 helper.AwsPost(staticResource.transactionUrl,{
        //                     txId: result.txId,
        //                     sfRecordId:sfId,
        //                     isSuccess: rv.IsSuccess ? 1 : 0
        //                 },function(data){
        //                     if(rv.IsSuccess){
        //                         helper.ShowToast({
        //                             "message" : "成功",
        //                             "type" : "success"
        //                         });
        //                         helper.closeAgencyContact(component);
        //                         // if (record_id && !isClone){
        //                         //     helper.closeAgencyContact(component);
        //                         //     //$A.get('e.force:refreshView').fire();
        //                         // }else{
        //                         //     var sObjectEvent = $A.get("e.force:navigateToSObject");
        //                         //     sObjectEvent.setParams({
        //                         //         "recordId": sfId
        //                         //     })
        //                         //     sObjectEvent.fire();
        //                         // }
        //                     }else{
        //                         helper.ShowToast({
        //                             "message" : rv.Message,
        //                             "type" : "error"
        //                         });
        //                     }
        //                 },staticResource.token);
        //             }else{
        //                 helper.ShowToast({
        //                     "message" : "Init error",
        //                     "type" : "error"
        //                 });
        //             }
        //         });
        //     })();
        // }, staticResource.token);
    },
    cancelClick : function(component, event, helper){
        helper.closeAgencyContact(component);
    },
    scriptsLoaded : function(component, event, helper){}
})
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Helper.js
New file
@@ -0,0 +1,56 @@
({
    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);
    },
    ShowToast : function(paras){
        var toastEvent = $A.get("e.force:showToast");
        toastEvent.setParams(paras);
        toastEvent.fire();
    },
    AwsPost : function(postURL, data ,callback,token){
        let payloadForNewPI = '';
        if(typeof(data) == 'string'){
            payloadForNewPI = data;
        }else{
            payloadForNewPI = JSON.stringify(data);
        }
        AWSService.post(postURL,payloadForNewPI,function(result) {
            //this.insertCalloutLog(this.insertModule,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),this.successStatus);
            if(callback) callback(result);
        },token);
    },
    AwsGet : function(url, data ,callback,token){
        if(typeof(data) == 'string'){
            url += data;
        }else{
            let i = 0;
            for(let p in data){
                url += (i++) ? '&' : '?';
                url += p + '=' + data[p];
            }
        }
        AWSService.get(url,function(result){
            //this.insertCalloutLog(this.insertModule,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),this.successStatus);
            if(callback) callback(result);
        },token);
    },
    closeAgencyContact : function(component){
        var cmpEvent = component.getEvent("NewAgencyContactEvent");
        cmpEvent.setParams({
            "showNewAgencyContact":false});
        cmpEvent.fire();
    }
})
force-app/main/default/aura/NewAgencyContact2/NewAgencyContact2Renderer.js
New file
@@ -0,0 +1,5 @@
({
// Your renderer method overrides go here
})
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.cmp
@@ -30,6 +30,7 @@
    <aura:attribute name="show" type="Boolean" default="false"/>
    <aura:attribute name="showNewAgencyContact" type="Boolean" default="false"/>
    <aura:handler name="NewAgencyContactEvent" event="c:NewAgencyContactEvent" action="{!c.closeAgencyContact}"/>
    <aura:attribute name="agencyHospitalId" type="String" default = ""/>
    
    
@@ -45,7 +46,7 @@
            <aura:if isTrue="{!v.showSpinner}">
                <lightning:spinner alternativeText="Loading" size="medium" />
            </aura:if>
            <lightning:recordEditForm objectApiName="Agency_Opportunity__c">
            <lightning:recordEditForm objectApiName="Agency_Opportunity__c" onload="{!c.handleLoad}">
                <lightning:accordion activeSectionName="{! v.section_names }" allowMultipleSectionsOpen="true" class="greyyyy" >
                    <aura:iteration items="{!v.layout}" var="section">
                        <aura:if isTrue="{! section.editHeading }">
@@ -130,10 +131,19 @@
                        </div>
                    </div>
                        
                        <aura:if isTrue="{!v.showNewAgencyContact}">
                        <!-- <aura:if isTrue="{!v.showNewAgencyContact}">
                            <section role="dialog" tabindex="-1" aria-modal="true" aria-labelledby="modal-heading-01" class="slds-modal slds-fade-in-open"  aura:id="NewAgencyContact" id="NewAgencyContact">
                                <c:NewAgencyContact2 />
                            </section>
                        </aura:if> -->
                        <aura:if isTrue="{!v.showNewAgencyContact}">
                            <section role="dialog" tabindex="-1" aria-modal="true" aria-labelledby="modal-heading-01"
                                class="slds-modal slds-fade-in-open" aura:id="NewAgencyContact"
                                id="NewAgencyContact" aria-describedby="modal-content-id-2" style="z-index: 9999;">
                                <c:NewAgencyContact2 agencyHospitalId="{!v.agencyHospitalId}"/>
                            </section>
                            <div class="slds-backdrop2 slds-backdrop_open2"></div>
                        </aura:if>
                        
                    </div>                               
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.css
@@ -64,4 +64,16 @@
.THIS .slds-spinner_container{
    position: revert;
}
.THIS .slds-backdrop2 {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.6); /* 遮罩层的半透明背景色 */
}
.THIS .slds-backdrop_open2 {
    z-index: 9003; /* 遮罩层的层级,需要确保比模态框的层级高 */
}
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityController.js
@@ -106,7 +106,7 @@
                    }
                    // component.set('v.fields',fields);
                    // component.set('v.staticResource',staticResource);
                    component.set("v.showSpinner", false);
                    //component.set("v.showSpinner", false);
                }else{
                    component.set("v.showSpinner", false);
                    helper.ShowToast({
@@ -125,6 +125,10 @@
            }
        });
    },
    handleLoad: function(component, event, helper) {
        console.log('recordEditForm handleSuccess')
        component.set("v.showSpinner", false);
    },
    saveClick : function(component, event, helper){
        
        let staticResource = component.get('v.staticResource');
@@ -264,6 +268,9 @@
                            "type" : "warning"
                        });
                        return
                    }else if(item.field == 'Agency_Hospital__c' && item.value){
                        component.set('v.agencyHospitalId',item.value)
                        console.log('v.agencyHospitalId item.value = ' + item.value)
                    }
                }
            }
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityHelper.js
@@ -52,13 +52,13 @@
        let myTableDiv = document.getElementById("QueryResult");
        let table = document.createElement('TABLE');
        table.border = '1';
        table.id = 'table';
        table.id = 'customTable';
        table.setAttribute('class','slds-table slds-table_cell-buffer slds-table_bordered');
        let tableBody = document.createElement('TBODY');
        table.appendChild(tableBody);
        let headerTR = document.createElement('TR');
        headerTR.setAttribute('class','slds-line-height_reset');
        let colsHeader = ['姓名','医院', '医生区分(职务)','分类'];
        let colsHeader = [' ','姓名','医院', '医生区分(职务)','分类'];
        tableBody.appendChild(headerTR);
        for (let i = 0; i < colsHeader.length; i++) {
            let td = document.createElement('TH');
@@ -71,7 +71,27 @@
        for (let i = 0; i < contactInfoList.length; i++) {
            let tr = document.createElement('TR');
            tableBody.appendChild(tr);
            let contactInfoTemp = contactInfoList[i]
            let contactInfoTemp = contactInfoList[i];
            //再加一列选择button
            debugger
            let td = document.createElement('TD');
            td.width = '75';
            td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
            console.log('contactInfoTemp = ' + JSON.stringify(contactInfoTemp))
            // 创建按钮元素
            var button = document.createElement('button');
            button.classList.add('slds-button','slds-button_neutral');
            button.id = contactInfoTemp.sfRecordId != null ? contactInfoTemp.sfRecordId : '';
            // 设置按钮的文本内容
            var buttonText = document.createTextNode('选择');
            button.appendChild(buttonText);
            button.addEventListener("click", function (obj) {
                that.redirectToParentPage(component, event, helper, obj);
            });
            button.value = contactInfoTemp[cols[0]] != null ? contactInfoTemp[cols[0]] : ''
            td.appendChild(button);
            tr.appendChild(td);
            for (let j = 0; j < cols.length; j++) {
                let td = document.createElement('TD');
                td.width = '75';
@@ -86,19 +106,20 @@
                    td.id = contactInfoTemp.sfRecordId;
                }              
                td.appendChild(document.createTextNode(contactInfoTemp[cols[j]]!=null?contactInfoTemp[cols[j]]:''));
                if (cols[j] == 'Name') {
                    td.addEventListener("click", function (obj) {
                        that.redirectToParentPage(component, event, helper,obj);
                    });
                }
                // if (cols[j] == 'Name') {
                //     td.addEventListener("click", function (obj) {
                //         that.redirectToParentPage(component, event, helper,obj);
                //     });
                // }
                tr.appendChild(td);
            }
        }
        that.resetTable();
        myTableDiv.appendChild(table);
        component.find('button').set('v.disabled', false);
    },
    redirectToParentPage : function(component, event, helper,obj){
        let agencyContactName = obj.currentTarget.innerText;
        let agencyContactName = obj.currentTarget.value;
        let id = obj.currentTarget.id;
        component.set('v.ac_name',agencyContactName);
        let layout = component.get('v.layout');
@@ -114,15 +135,17 @@
        component.set("v.isModalOpen", false);
    },
    resetTable : function(){
        let queryResult = document.getElementById('QueryResult');
        let table = document.getElementsByTagName('table');
        debugger;
        console.log('table:' + table);
        debugger;
        if(table.length > 1){
            for(var i=1;i<table.length;i++){
                queryResult.removeChild(table[i])
            }
        // let queryResult = document.getElementById('QueryResult');
        // let table = document.getElementById('customTable');
        // console.log('table:' + table);
        // if(table.length > 1){
        //     for(var i=1;i<table.length;i++){
        //         queryResult.removeChild(table[i])
        //     }
        // }
        let customTable = document.getElementById('customTable');
        if(customTable){
            customTable.parentNode.removeChild(customTable);
        }
    },
    preparePayloadForSearchAgencyContact : function(component, event, helper){
@@ -159,6 +182,7 @@
                    });
                    return
                }
                component.set('v.showSpinner',true);
                let searchPayload = new Object();
                let searchAgencyContactName = component.get('v.searchKeyWord');
                searchPayload.dataIds = rv.Data;
@@ -178,6 +202,7 @@
                                "message" : '没有查询到该客户人员',
                                "type" : "warning"
                            });
                            component.set('v.showSpinner',false);
                            return
                        }
                        for(var i=0;i<data.object.length;i++){
@@ -196,13 +221,30 @@
                            }                    
                        }
                        //let AWSIdToSFIdMapValue = {};
                        debugger
                        var searchAgencyContacts = component.get('c.searchAgencyContacts');
                        searchAgencyContacts.setParams({
                            "awsAgencyContactIds" : JSON.stringify(awsDataIds),
                            "agencyHospitalId" : agencyHospitalId,
                            "accountId" : accountId                            
                        });
                        searchAgencyContacts.setCallback(this,function(response){
                        // 延迟执行一段代码
                        setTimeout(function() {
                            // 需要延迟执行的代码
                           // 创建一个鼠标点击事件
                            var event = new MouseEvent('click', {
                                bubbles: true,
                                cancelable: true,
                                view: window
                            });
                            // 触发元素的点击事件
                            var element = document.getElementById('NewAgencyContact');
                            for(var i = 0;i<100;i++){
                                element.dispatchEvent(event);
                            }
                        }, 1000); // 延迟 1000 毫秒(即 1 秒)
                        searchAgencyContacts.setCallback(that,function(response){
                            var state = response.getState();
                            if(state == 'SUCCESS'){
                                var rv = response.getReturnValue();
@@ -226,10 +268,13 @@
                                        }
                                    }
                                    that.refreshTable(component, event, helper,cols,contactInfoList,contactsInfo);
                                    component.set('v.showSpinner',false);
                                }
                            }
                        });
                        $A.enqueueAction(searchAgencyContacts);
                    }else{
                        component.set('v.showSpinner',false);
                    }
                },token);
            }
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.cmp
@@ -1,455 +1,310 @@
<aura:component
  controller="RetrospectiveWeeklyReportController"
  implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes,lightning:availableForFlowScreens"
  access="global"
>
  <ltng:require styles="{!$Resource.multilineToastCSS}" /> 
  <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
  <aura:handler
    event="c:strike_evt"
    action="{!c.createAopp}"
    name="strike_evt_addNewRecord"
  />
  <aura:attribute
    name="data"
    type="Agency_Report__c"
    default="{sobjectType:'Agency_Report__c'}"
  />
  <aura:attribute
    name="oppdata"
    type="Agency_Opportunity__c"
    default="{sobjectType:'Agency_Opportunity__c'}"
  />
  <aura:attribute
    name="acondata"
    type="Agency_Contact__c"
    default="{sobjectType:'Ag
    ency_Contact__c'}"
  />
  <aura:attribute name="successMessage" type="String" />
  <aura:attribute name="etEng" type="String" />
  <aura:attribute name="errorMessage" type="String" />
  <aura:attribute name="Close_Forecasted_Date__c_o" type="Date" />
  <aura:attribute name="Amount__c_o" type="String" />
  <aura:attribute name="OCMSale_Price__c_o" type="String" />
  <aura:attribute name="StageName__c_o" type="String" />
  <aura:attribute name="fieldsmap" type="Map" />
  <aura:attribute name="AgencyReportMap" type="Boolean" default="false" />
  <!-- 日报分类 -->
<aura:component controller="RetrospectiveWeeklyReportController"
    implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes,lightning:availableForFlowScreens"
    access="global">
    <ltng:require styles="{!$Resource.multilineToastCSS}" /> 
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:handler event="c:strike_evt" action="{!c.createAopp}" name="strike_evt_addNewRecord" />
    <aura:attribute name="data" type="Agency_Report__c" default="{sobjectType:'Agency_Report__c'}" />
    <aura:attribute name="oppdata" type="Agency_Opportunity__c" default="{sobjectType:'Agency_Opportunity__c'}" />
    <aura:attribute name="acondata" type="Agency_Contact__c" default="{sobjectType:'Ag
    ency_Contact__c'}" />
    <aura:attribute name="successMessage" type="String" />
    <aura:attribute name="etEng" type="String" />
    <aura:attribute name="errorMessage" type="String" />
    <aura:attribute name="Close_Forecasted_Date__c_o" type="Date" />
    <aura:attribute name="Amount__c_o" type="String" />
    <aura:attribute name="OCMSale_Price__c_o" type="String" />
    <aura:attribute name="StageName__c_o" type="String" />
    <aura:attribute name="fieldsmap" type="Map" />
    <aura:attribute name="AgencyReportMap" type="Boolean" default="false" />
    <!-- 日报分类 -->
  <aura:attribute name="alldata" type="List" />
  <aura:attribute name="setdoctorlisthos" type="Boolean" default="false" />
  <aura:attribute name="allselectlist" type="Map" />
  <aura:attribute name="doclist" type="List" />
  <aura:attribute name="docmap" type="Map" />
  <aura:attribute name="login" type="Boolean" default="false" />
  <aura:attribute name="loginEdit" type="Boolean" default="false" />
  <aura:attribute name="modal_import_spinner" type="Boolean" default="false" />
  <aura:attribute name="loadOpp" type="Boolean" default="false" />
  <aura:attribute name="reportPageData" type="Map" />
  <aura:attribute name="selectbody" type="String" />
  <aura:attribute name="report_date_list" type="Map" />
  <aura:attribute name="selected_date" type="String" />
  <aura:attribute name="selected_agency_person" type="String" />
  <aura:attribute name="agency_report_header" type="String" />
  <aura:attribute name="agency_report_header_id" type="String" />
  <aura:attribute name="result" type="String" default="" />
  <!-- //医院 点选需要    -->
  <aura:attribute name="hospital" type="string" default="" />
  <aura:attribute name="hospitalId" type="string" default="" />
  <aura:attribute name="hospitals" type="string" default="" />
  <aura:attribute name="hospitalLinkId" type="string" default="" />
  <aura:handler name="change" value="{!v.hospital}" action="{!c.hosChange}" />
  <aura:attribute name="hospitalList" type="Map" />
  <!-- 使用产品1(产品型号) -->
  <aura:attribute name="UseProduct1" type="string" default="" />
  <aura:attribute name="UseProduct1s" type="string" default="" />
  <aura:handler
    name="change"
    value="{!v.UseProduct1}"
    action="{!c.UseProduct1Change}"
  />
  <aura:attribute name="UseProduct1List" type="Map" />
  <aura:attribute name="UseProduct1Id" type="string" default="" />
  <!-- 使用产品2 -->
  <aura:attribute name="UseProduct2" type="string" default="" />
  <aura:attribute name="UseProduct2s" type="string" default="" />
  <aura:handler
    name="change"
    value="{!v.UseProduct2}"
    action="{!c.UseProduct2Change}"
  />
  <aura:attribute name="UseProduct2List" type="Map" />
  <aura:attribute name="UseProduct2Id" type="string" default="" />
  <!-- 使用产品3 -->
  <aura:attribute name="UseProduct3" type="string" default="" />
  <aura:attribute name="UseProduct3s" type="string" default="" />
  <aura:handler
    name="change"
    value="{!v.UseProduct3}"
    action="{!c.UseProduct3Change}"
  />
  <aura:attribute name="UseProduct3List" type="Map" />
  <aura:attribute name="UseProduct3Id" type="string" default="" />
  <!--SWAG-CF58C3 fy start -->
  <aura:attribute name="AWStoken" type="String" />
  <aura:attribute name="AWSsearch" type="String" />
  <aura:attribute name="AWSinsert" type="String" />
  <aura:attribute name="AWStransactionURL" type="String" />
  <aura:attribute name="AWSDoctor2Map" type="String" />
  <aura:attribute name="awsurl" type="Map" />
  <aura:attribute name="contactawsurl" type="Map" />
  <aura:attribute name="allselectlistAgencyPerson" type="Map" />
  <!--SWAG-CF58C3 fy end -->
    <aura:attribute name="alldata" type="List" />
    <aura:attribute name="setdoctorlisthos" type="Boolean" default="false" />
    <aura:attribute name="allselectlist" type="Map" />
    <aura:attribute name="doclist" type="List" />
    <aura:attribute name="docmap" type="Map" />
    <aura:attribute name="login" type="Boolean" default="false" />
    <aura:attribute name="loginEdit" type="Boolean" default="false" />
    <aura:attribute name="modal_import_spinner" type="Boolean" default="false" />
    <aura:attribute name="loadOpp" type="Boolean" default="false" />
    <aura:attribute name="reportPageData" type="Map" />
    <aura:attribute name="selectbody" type="String" />
    <aura:attribute name="report_date_list" type="Map" />
    <aura:attribute name="selected_date" type="String" />
    <aura:attribute name="selected_agency_person" type="String" />
    <aura:attribute name="agency_report_header" type="String" />
    <aura:attribute name="agency_report_header_id" type="String" />
    <aura:attribute name="result" type="String" default="" />
    <!-- //医院 点选需要    -->
    <aura:attribute name="hospital" type="string" default="" />
    <aura:attribute name="hospitalId" type="string" default="" />
    <aura:attribute name="hospitals" type="string" default="" />
    <aura:attribute name="hospitalLinkId" type="string" default="" />
    <aura:handler name="change" value="{!v.hospital}" action="{!c.hosChange}" />
    <aura:attribute name="hospitalList" type="Map" />
    <!-- 使用产品1(产品型号) -->
    <aura:attribute name="UseProduct1" type="string" default="" />
    <aura:attribute name="UseProduct1s" type="string" default="" />
    <aura:handler name="change" value="{!v.UseProduct1}" action="{!c.UseProduct1Change}" />
    <aura:attribute name="UseProduct1List" type="Map" />
    <aura:attribute name="UseProduct1Id" type="string" default="" />
    <!-- 使用产品2 -->
    <aura:attribute name="UseProduct2" type="string" default="" />
    <aura:attribute name="UseProduct2s" type="string" default="" />
    <aura:handler name="change" value="{!v.UseProduct2}" action="{!c.UseProduct2Change}" />
    <aura:attribute name="UseProduct2List" type="Map" />
    <aura:attribute name="UseProduct2Id" type="string" default="" />
    <!-- 使用产品3 -->
    <aura:attribute name="UseProduct3" type="string" default="" />
    <aura:attribute name="UseProduct3s" type="string" default="" />
    <aura:handler name="change" value="{!v.UseProduct3}" action="{!c.UseProduct3Change}" />
    <aura:attribute name="UseProduct3List" type="Map" />
    <aura:attribute name="UseProduct3Id" type="string" default="" />
    <!--SWAG-CF58C3 fy start -->
    <aura:attribute name="AWStoken" type="String" />
    <aura:attribute name="AWSsearch" type="String" />
    <aura:attribute name="AWSinsert" type="String" />
    <aura:attribute name="AWStransactionURL" type="String" />
    <aura:attribute name="AWSDoctor2Map" type="String" />
    <aura:attribute name="awsurl" type="Map" />
    <aura:attribute name="contactawsurl" type="Map" />
    <aura:attribute name="allselectlistAgencyPerson" type="Map" />
    <!--SWAG-CF58C3 fy end -->
  <aura:attribute name="doctor_list" type="Map" />
  <!-- <aura:attribute name="doctor_title" type="String" /> -->
  <aura:attribute name="opportunity_list" type="Map" />
  <aura:attribute name="edit_copy_select_report_id" type="String" />
  <aura:attribute name="create_agency_report_id" type="String" />
  <aura:attribute name="reports" type="List" />
  <aura:attribute name="reports_now" type="List" />
  <aura:attribute name="reports_now_count" type="Integer" />
  <aura:attribute name="mode" type="String" />
  <aura:attribute name="select_report_data" type="Map" />
  <aura:attribute name="select_report_data_radio" type="Map" />
  <aura:attribute name="default_select_doctor_id" type="String" />
  <aura:attribute name="default_select_doctor_id2" type="String" />
  <aura:attribute name="default_select_opportunity_id" type="String" />
  <aura:attribute name="report_count" type="Integer" />
  <aura:attribute name="dialog_type" type="String" />
  <aura:attribute name="truthy" type="Boolean" default="false" />
  <aura:attribute name="list_message" type="String" default="搜索" />
  <aura:attribute name="confirm_status" type="Integer" default="0" />
  <aura:attribute name="modal_confirm_title" type="String" />
  <aura:attribute name="modal_confirm_text" type="String" />
  <!-- <aura:attribute name="new_falg" type="String" /> -->
  <!-- fy -->
  <aura:attribute name="UserProType" type="String" />
  <!-- 科室 -->
  <aura:attribute name="opportunity_cfilter" type="String" />
  <aura:attribute
    name="update_select_report_data_id"
    type="String"
    default=""
  />
  <!-- 批量添加日报 start-->
  <aura:attribute name="reports_date" type="List" />
  <aura:attribute
    name="TableContent"
    type="String"
    description=" Show the Result class"
  />
  <aura:attribute
    name="TableContent2"
    type="String"
    description=" Show the Result class"
  />
  <aura:attribute
    name="TargetFileName"
    type="String"
    description="Name of the file"
  />
  <aura:attribute name="tableheaders" type="Object[]" />
  <aura:attribute name="fileContentData" type="String" />
  <aura:attribute name="filename" type="String" />
  <aura:attribute name="NumOfRecords" type="Integer" default="1000" />
  <aura:attribute name="showMain" type="Boolean" default="true" />
  <aura:attribute name="IsEventDefault" type="Boolean" default="true" />
  <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
  <aura:attribute name="errorData" type="Object" />
  <aura:attribute name="errorColumns" type="List" />
  <!-- show Error information -->
  <aura:attribute name="showErrorInfo" type="Boolean" default="false" />
  <!-- end DTT-zhj 增加错误信息table 2023-05-16-->
  <aura:attribute name="PIConfig" type="Map" />
    <aura:attribute name="doctor_list" type="Map" />
    <!-- <aura:attribute name="doctor_title" type="String" /> -->
    <aura:attribute name="opportunity_list" type="Map" />
    <aura:attribute name="edit_copy_select_report_id" type="String" />
    <aura:attribute name="create_agency_report_id" type="String" />
    <aura:attribute name="reports" type="List" />
    <aura:attribute name="reports_now" type="List" />
    <aura:attribute name="reports_now_count" type="Integer" />
    <aura:attribute name="mode" type="String" />
    <aura:attribute name="select_report_data" type="Map" />
    <aura:attribute name="select_report_data_radio" type="Map" />
    <aura:attribute name="default_select_doctor_id" type="String" />
    <aura:attribute name="default_select_doctor_id2" type="String" />
    <aura:attribute name="default_select_opportunity_id" type="String" />
    <aura:attribute name="report_count" type="Integer" />
    <aura:attribute name="dialog_type" type="String" />
    <aura:attribute name="truthy" type="Boolean" default="false" />
    <aura:attribute name="list_message" type="String" default="搜索" />
    <aura:attribute name="confirm_status" type="Integer" default="0" />
    <aura:attribute name="modal_confirm_title" type="String" />
    <aura:attribute name="modal_confirm_text" type="String" />
    <!-- <aura:attribute name="new_falg" type="String" /> -->
    <!-- fy -->
    <aura:attribute name="UserProType" type="String" />
    <!-- 科室 -->
    <aura:attribute name="opportunity_cfilter" type="String" />
    <aura:attribute name="update_select_report_data_id" type="String" default="" />
    <!-- 批量添加日报 start-->
    <aura:attribute name="reports_date" type="List" />
    <aura:attribute name="TableContent" type="String" description=" Show the Result class" />
    <aura:attribute name="TableContent2" type="String" description=" Show the Result class" />
    <aura:attribute name="TargetFileName" type="String" description="Name of the file" />
    <aura:attribute name="tableheaders" type="Object[]" />
    <aura:attribute name="fileContentData" type="String" />
    <aura:attribute name="filename" type="String" />
    <aura:attribute name="NumOfRecords" type="Integer" default="1000" />
    <aura:attribute name="showMain" type="Boolean" default="true" />
    <aura:attribute name="IsEventDefault" type="Boolean" default="true" />
    <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
    <aura:attribute name="errorData" type="Object" />
    <aura:attribute name="errorColumns" type="List" />
    <!-- show Error information -->
    <aura:attribute name="showErrorInfo" type="Boolean" default="false" />
    <!-- end DTT-zhj 增加错误信息table 2023-05-16-->
  <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
  <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <aura:attribute name="PIConfig" type="Map" />
  <!-- 批量添加日报 end-->
  <!--ロード中...-->
  <aura:renderIf isTrue="{!v.login}">
    <aura:renderIf isTrue="{!!v.loginEdit}">
      <!-- <div class="slds-spinner_container">
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <!-- 批量添加日报 end-->
    <!--ロード中...-->
    <aura:renderIf isTrue="{!v.login}">
        <aura:renderIf isTrue="{!!v.loginEdit}">
            <!-- <div class="slds-spinner_container">
                <div role="status" class="slds-spinner slds-spinner_medium slds-spinner_brand">
                        <span class="slds-assistive-text">Loading</span>
                        <div class="slds-spinner__dot-a"></div>
                        <div class="slds-spinner__dot-b"></div>
                </div>
            </div> -->
      <div
        class="slds-spinner_container"
        id="spinner"
        style="position: fixed; top: 123px"
      >
        <div
          role="status"
          class="slds-spinner slds-spinner_medium slds-spinner_brand"
        >
          <span class="slds-assistive-text">Loading</span>
          <div class="slds-spinner__dot-a"></div>
          <div class="slds-spinner__dot-b"></div>
        </div>
      </div>
    </aura:renderIf>
  </aura:renderIf>
  <div aura:id="report" id="report">
    <div class="slds-grid slds-wrap slds-grid--pull-padded">
      <div style="width: 150px"></div>
      <div
        class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12 fontSize"
      >
        周
      </div>
      <div
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 fontSize"
      >
        <ui:inputSelect
          aura:id="select_date"
          class="slds-select"
          change="{!c.select_date_change}"
        />
      </div>
      <!-- 代理店担当者 -->
      <div
        class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12"
        style="display: none"
      >
        {!v.fieldsmap.Person_In_Charge2__c}
      </div>
      <div
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12"
        style="display: none"
      >
        <ui:inputSelect
          aura:id="select_agency_person"
          class="slds-select agency_person_select"
          change="{!c.select_agency_change}"
        />
      </div>
      <div style="width: 100px"></div>
      <div
        class="tr slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
        style="display: contents"
      >
        <ui:button
          aura:id="new_button"
          label="新建"
          press="{!c.new_report}"
          class="buttonFontSize"
        />
      </div>
      <div
        style="width: 400px"
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--4-of-12 slds-large-size--4-of-12"
      >
        <ui:button
          aura:id="copy_button"
          label="复制"
          press="{!c.copy_button}"
          disabled="true"
          class="buttonFontSize"
        />
        <ui:button
          aura:id="delete_button"
          label="删除"
          press="{!c.delete_button}"
          disabled="true"
          class="buttonFontSize"
        />
        <ui:button
          aura:id="import"
          label="导入"
          press="{!c.import}"
          class="buttonFontSize"
        />
        <ui:button
          aura:id="export"
          label="导出"
          press="{!c.export_condition}"
          class="buttonFontSize"
        />
        <!-- <ui:button aura:id="returnbutton" label="返回" press="{!c.return_main_page}" /> -->
      </div>
    </div>
  </div>
  <div aura:id="report_list" class="report_list_area">
    <div
      class="slds-table--edit_container slds-is-relative"
      style="padding-left: 50px"
    >
      <table
        class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
        role="grid"
        style="width: 66.75rem"
      >
        <thead>
          <tr class="slds-line-height--reset">
            <th
              class="table_header slds-text-title--caps fontSize"
              style="width: 250px"
            >
              <span class="slds-truncate" title="Name">日报编号</span>
            </th>
            <th class="table_header slds-text-title--caps fontSize">
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.Person_In_Charge2__c}</span
              >
              <!-- {!v.fieldsmap.Person_In_Charge2__c}  担当-->
            </th>
            <th
              class="table_header slds-text-title--caps fontSize"
              style="width: 250px"
            >
              <span class="slds-truncate" title="Name">医院</span>
            </th>
            <th class="table_header slds-text-title--caps fontSize">
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.Department_Cateogy__c}</span
              >
              <!-- {!v.fieldsmap.Department_Cateogy__c}    科室-->
            </th>
            <th class="table_header slds-text-title--caps fontSize">
              <span class="slds-truncate" title="Name">拜访人</span>
              <!-- {!v.fieldsmap.doctor2__c}    拜访人 -->
            </th>
            <th class="table_header slds-text-title--caps fontSize">
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.DealerPersonnel__c}</span
              >
              <!-- {!v.fieldsmap.visitor_title__c}   职位-->
            </th>
            <th class="table_header slds-text-title--caps fontSize">
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.WorkMark__c}</span
              >
              <!-- {!v.fieldsmap.visitor_title__c}   职位-->
            </th>
          </tr>
        </thead>
        <tbody>
          <aura:iteration items="{!v.reports}" var="item" indexVar="index">
            <tr class="slds-hint-parent">
              <td role="gridcell" class="slds-cell-edit fontSize">
                <ui:inputRadio
                  class="report_radio"
                  name="report_radio"
                  label="{!item.Name}"
                  change="{!c.change_report_radio}"
                />
                <lightning:buttonIcon
                  class="edit_button"
                  iconName="utility:edit"
                  size="small"
                  alternativeText="edit"
                  value="{!index}"
                  onclick="{!c.edit_button}"
                />
              </td>
              <td role="gridcell" class="slds-cell-edit fontSize">
                <span class="slds-grid slds-grid--align-spread">
                  <span
                    class="slds-truncate"
                    title="{!item.Person_In_Charge2__r.Name}"
                    >{!item.Person_In_Charge2__r.Name}</span
                  >
                </span>
              </td>
              <td scope="row" tabindex="0" class="slds-cell-edit fontSize">
            <div class="slds-spinner_container" id="spinner" style="position: fixed;top:123px;">
                <div
                  class="slds-grid slds-grid--align-spread"
                  style="word-wrap: break-word"
                    role="status"
                    class="slds-spinner slds-spinner_medium slds-spinner_brand"
                >
                  {!item.Agency_Hospital__r.Name}
                    <span class="slds-assistive-text">Loading</span>
                    <div class="slds-spinner__dot-a"></div>
                    <div class="slds-spinner__dot-b"></div>
                </div>
              </td>
              <td role="gridcell" class="slds-cell-edit fontSize">
                <span class="slds-grid slds-grid--align-spread">
                  <span
                    class="slds-truncate"
                    title="{!item.Department_Cateogy_text__c}"
                    >{!item.Department_Cateogy_text__c}</span
                  >
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit fontSize">
                <span class="slds-grid slds-grid--align-spread">
                  <span class="slds-truncate" title="{!item.doctor2__r.Name}">
                    <span class="encrypt">{!item.doctor2__r.Name}</span>
                    <span class="decrypt">{!item.doctor2__r.awsdata.name}</span>
                  </span>
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit fontSize">
                <span class="slds-grid slds-grid--align-spread">
                  <span
                    class="slds-truncate"
                    title="{!item.DealerPersonnel__r.Name}"
                    >{!item.DealerPersonnel__r.Name}</span
                  >
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit fontSize">
                <span class="slds-grid slds-grid--align-spread">
                  <span class="slds-truncate" title="{!item.WorkMark__c}">
                    <lightning:input
                      type="checkbox"
                      checked="{!item.WorkMark__c}"
                      disabled="true"
                    />
                  </span>
                </span>
              </td>
            </tr>
          </aura:iteration>
        </tbody>
      </table>
    </div>
    <aura:renderIf isTrue="{!v.report_count > 0}">
      <aura:set attribute="else">
        <div class="no_data_area">{!v.list_message}</div>
      </aura:set>
    </aura:renderIf>
  </div>
  <!-- 批量添加日报 start-->
  <div
    aura:id="modal_import"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
    aria-labelledby="headerTarget"
  >
    <aura:renderIf isTrue="{!v.modal_import_spinner}">
      <lightning:spinner alternativeText="Loading" size="medium" />
    </aura:renderIf>
    <div class="slds-modal slds-fade-in-open slds-hide" aura:id="successDiv01">
      <!-- <ui:inputText aura:id="articleURL" /> -->
      <div class="demo-only" style="height: 8rem">
        <div class="slds-notify_container slds-is-relative">
          <div
            class="slds-notify slds-notify_toast slds-theme_success"
            role="alert"
          >
            <div class="slds-m-left_xx-large">
              <div
                class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large"
              >
                <lightning:icon
                  alternativeText="Success"
                  iconName="utility:success"
                  size="small"
                  class="buttonColor slds-m-right_small"
                />
                <h2 class="slds-text-heading_small">{!v.successMessage}</h2>
              </div>
            </div>
          </div>
        </aura:renderIf>
    </aura:renderIf>
    <div aura:id="report" id="report">
        <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div style="width: 150px;"></div>
            <div
                class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12 fontSize">
                周
            </div>
            <div
                class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 fontSize">
                <ui:inputSelect aura:id="select_date" class="slds-select" change="{!c.select_date_change}" />
            </div>
            <!-- 代理店担当者 -->
            <div class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12"
                style="display: none;">
                {!v.fieldsmap.Person_In_Charge2__c}
            </div>
            <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12"
                style="display: none;">
                <ui:inputSelect aura:id="select_agency_person" class="slds-select agency_person_select"
                    change="{!c.select_agency_change}" />
            </div>
            <div style="width: 100px;">
            </div>
            <div class="tr slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
                style="display: contents;">
                <ui:button aura:id="new_button" label="新建" press="{!c.new_report}" class="buttonFontSize" />
            </div>
            <div style="width: 400px;"
                class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--4-of-12 slds-large-size--4-of-12">
                <ui:button aura:id="copy_button" label="复制" press="{!c.copy_button}" disabled="true"
                    class="buttonFontSize" />
                <ui:button aura:id="delete_button" label="删除" press="{!c.delete_button}" disabled="true"
                    class="buttonFontSize" />
                <ui:button aura:id="import" label="导入" press="{!c.import}" class="buttonFontSize" />
                <ui:button aura:id="export" label="导出" press="{!c.export_condition}" class="buttonFontSize" />
                <!-- <ui:button aura:id="returnbutton" label="返回" press="{!c.return_main_page}" /> -->
            </div>
        </div>
      </div>
    </div>
    <!-- <div class="slds-modal slds-fade-in-open slds-hide" aura:id="errorDiv01" style="z-index: 10001">
    <div aura:id="report_list" class="report_list_area">
        <div class="slds-table--edit_container slds-is-relative" style="padding-left: 50px;">
            <table class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
                role="grid" style="width:66.75rem;">
                <thead>
                    <tr class="slds-line-height--reset">
                        <th class="table_header slds-text-title--caps fontSize" style="width:250px">
                            <span class="slds-truncate" title="Name">日报编号</span>
                        </th>
                        <th class="table_header slds-text-title--caps fontSize">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Person_In_Charge2__c}</span>
                            <!-- {!v.fieldsmap.Person_In_Charge2__c}  担当-->
                        </th>
                        <th class="table_header slds-text-title--caps fontSize" style="width:250px">
                            <span class="slds-truncate" title="Name">医院</span>
                        </th>
                        <th class="table_header slds-text-title--caps fontSize">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                            <!-- {!v.fieldsmap.Department_Cateogy__c}    科室-->
                        </th>
                        <th class="table_header slds-text-title--caps fontSize">
                            <span class="slds-truncate" title="Name">拜访人</span>
                            <!-- {!v.fieldsmap.doctor2__c}    拜访人 -->
                        </th>
                        <th class="table_header slds-text-title--caps fontSize">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.DealerPersonnel__c}</span>
                            <!-- {!v.fieldsmap.visitor_title__c}   职位-->
                        </th>
                        <th class="table_header slds-text-title--caps fontSize">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.WorkMark__c}</span>
                            <!-- {!v.fieldsmap.visitor_title__c}   职位-->
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <aura:iteration items="{!v.reports}" var="item" indexVar="index">
                        <tr class="slds-hint-parent">
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <ui:inputRadio class="report_radio" name="report_radio" label="{!item.Name}"
                                    change="{!c.change_report_radio}" />
                                <lightning:buttonIcon class="edit_button" iconName="utility:edit" size="small"
                                    alternativeText="edit" value="{!index}" onclick="{!c.edit_button}" />
                            </td>
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate"
                                        title="{!item.Person_In_Charge2__r.Name}">{!item.Person_In_Charge2__r.Name}</span>
                                </span>
                            </td>
                            <td scope="row" tabindex="0" class="slds-cell-edit fontSize">
                                <div class="slds-grid slds-grid--align-spread" style="word-wrap: break-word;">
                                    {!item.Agency_Hospital__r.Name}
                                </div>
                            </td>
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate"
                                        title="{!item.Department_Cateogy_text__c}">{!item.Department_Cateogy_text__c}</span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">
                                        <span class="encrypt">{!item.doctor2__r.Name}</span>
                                        <span class="decrypt">{!item.doctor2__r.awsdata.name}</span>
                                    </span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate"
                                        title="{!item.DealerPersonnel__r.Name}">{!item.DealerPersonnel__r.Name}</span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit fontSize">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.WorkMark__c}">
                                        <lightning:input type="checkbox" checked="{!item.WorkMark__c}"
                                            disabled="true" />
                                    </span>
                                </span>
                            </td>
                        </tr>
                    </aura:iteration>
                </tbody>
            </table>
        </div>
        <aura:renderIf isTrue="{!v.report_count > 0}">
            <aura:set attribute="else">
                <div class="no_data_area">
                    {!v.list_message}
                </div>
            </aura:set>
        </aura:renderIf>
    </div>
    <!-- 批量添加日报 start-->
    <div aura:id="modal_import" role="dialog" tabindex="-1"
        class="disp_none slds-modal slds-fade-in-open slds-modal--large" aria-labelledby="headerTarget">
        <aura:renderIf isTrue="{!v.modal_import_spinner}">
            <lightning:spinner alternativeText="Loading" size="medium" />
        </aura:renderIf>
        <div class="slds-modal slds-fade-in-open slds-hide" aura:id="successDiv01">
            <!-- <ui:inputText aura:id="articleURL" /> -->
            <div class="demo-only" style="height: 8rem;">
                <div class="slds-notify_container slds-is-relative">
                    <div class="slds-notify slds-notify_toast slds-theme_success" role="alert">
                        <div class=" slds-m-left_xx-large">
                            <div
                                class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large">
                                <lightning:icon alternativeText="Success" iconName="utility:success" size="small"
                                    class="buttonColor slds-m-right_small" />
                                <h2 class="slds-text-heading_small ">{!v.successMessage}</h2>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- <div class="slds-modal slds-fade-in-open slds-hide" aura:id="errorDiv01" style="z-index: 10001">
            <div class="demo-only" style="height: 8rem;">
                <div class="slds-notify_container slds-is-relative">
                    <div class="slds-notify slds-notify_toast slds-theme_error" role="status">
@@ -467,857 +322,516 @@
                </div>
            </div>
        </div> -->
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          日报批量导入
        </h2>
        <ui:button
          aura:id="close_button"
          label="关闭"
          class="close_button slds-button slds-button--neutral slds-order--1 buttonFontSize"
          press="{!c.close_import}"
        />
      </div>
      <div
        class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium fontSize"
      >
        <aura:if isTrue="{!v.showMain}">
          <div>
            <lightning:input
              type="file"
              class="file"
              uara:id="file"
              onchange="{!c.CreateRecord}"
            />
          </div>
          <aura:set attribute="else">
            <ui:outputRichText
              class="uiOutputRichText slds-m--around-large fontSize"
              value="{!v.TableContent}"
            />
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="保存"
                variant="brand"
                onclick="{!c.processFileContent}"
                class="buttonFontSize"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.cancel}"
                class="buttonFontSize"
              />
        <div class="slds-modal__container ">
            <div class="slds-modal__header ">
                <h4 id="headerTarget" class="slds-float--left"></h4>
                <h2 id="headerTarget" class="slds-text-heading--medium">日报批量导入</h2>
                <ui:button aura:id="close_button" label="关闭"
                    class="close_button slds-button slds-button--neutral slds-order--1 buttonFontSize"
                    press="{!c.close_import}" />
            </div>
            <aura:if isTrue="{!v.showErrorInfo}">
              <div class="slds-p-around--large slds-align--absolute-center">
                <lightning:button
                  label="导出错误信息"
                  variant="brand"
                  onclick="{!c.exportErrorInfo}"
                />
              </div>
              <div class="slds-p-around--large slds-align--absolute-center">
                <div style="height: 300px; overflow-x: scroll">
                  <lightning:datatable
                    keyField="id"
                    data="{! v.errorData }"
                    columns="{! v.errorColumns }"
                    hideCheckboxColumn="true"
                  />
                </div>
              </div>
            </aura:if>
          </aura:set>
        </aura:if>
      </div>
    </div>
  </div>
  <div
    aura:id="modal_importbg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <!-- 批量添加日报 end-->
  <!-- 批量导出日报 start-->
  <div
    aura:id="modal_export"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          日报批量导出
        </h2>
        <ui:button
          aura:id="close_button"
          label="关闭"
          class="close_button slds-button slds-button--neutral slds-order--1"
          press="{!c.close_export}"
        />
      </div>
      <div
        class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium"
      >
        <aura:if isTrue="{!v.showMain}">
          <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            ></div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            >
              活动日开始日期
              <lightning:input
                type="Date"
                class="slds-input slds-input_bare"
                aura:id="input-report-date1"
              />
            </div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            >
              活动日结束日期
              <lightning:input
                type="Date"
                class="slds-input slds-input_bare"
                aura:id="input-report-date2"
              />
            </div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            ></div>
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="确认"
                variant="brand"
                onclick="{!c.select_repores_date}"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.close_export}"
              />
            </div>
          </div>
          <aura:set attribute="else">
            <ui:outputRichText
              class="uiOutputRichText slds-m--around-large"
              value="{!v.TableContent2}"
            />
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="确认"
                variant="brand"
                onclick="{!c.exportDate}"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.close_export}"
              />
            </div>
          </aura:set>
        </aura:if>
      </div>
    </div>
  </div>
  <div
    aura:id="modal_exportbg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <!-- 批量导出日报 end-->
  <div
    aura:id="modal_window"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
    aria-labelledby="headerTarget"
  >
    <div class="slds-modal__container">
      <div class="slds-modal slds-fade-in-open slds-hide" aura:id="successDiv">
        <!-- <ui:inputText aura:id="articleURL" /> -->
        <div class="demo-only" style="height: 8rem">
          <div class="slds-notify_container slds-is-relative">
            <div
              class="slds-notify slds-notify_toast slds-theme_success"
              role="alert"
            >
              <div class="slds-m-left_xx-large">
                <div
                  class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large"
                >
                  <lightning:icon
                    alternativeText="Success"
                    iconName="utility:success"
                    size="small"
                    class="buttonColor slds-m-right_small"
                  />
                  <h2 class="slds-text-heading_small">{!v.successMessage}</h2>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div
        class="slds-modal slds-fade-in-open slds-hide"
        aura:id="errorDiv"
        style="z-index: 10001"
      >
        <!-- <ui:inputText aura:id="articleURL" /> -->
        <div class="demo-only" style="height: 8rem">
          <div class="slds-notify_container slds-is-relative">
            <div
              class="slds-notify slds-notify_toast slds-theme_error"
              role="status"
            >
              <div class="slds-m-left_xx-large">
                <div
                  class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large"
                >
                  <lightning:icon
                    alternativeText="error"
                    iconName="utility:error"
                    size="small"
                    class="buttonColor slds-m-right_small"
                  />
                  <h2 class="slds-text-heading_small">{!v.errorMessage}</h2>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div
        class="slds-modal__content slds-grow slds-p-around--medium"
        style="position: relative"
      >
        <aura:renderIf isTrue="{!v.loginEdit}">
          <lightning:spinner
            alternativeText="Loading"
            size="medium"
            style="width: 100%; height: 100%"
          />
        </aura:renderIf>
        <div class="slds-modal__header">
          <h2 id="headerTarget" class="slds-text-heading--medium">
            日报({!v.selected_date}&nbsp;{!v.selected_agency_person})
          </h2>
          <ui:button
            aura:id="close_button"
            label="关闭"
            class="close_button slds-button slds-button--neutral slds-order--1"
            press="{!c.toggle_report}"
          />
        </div>
        <div class="slds-box slds-theme--shade">
          <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
            >
              活动日
              <lightning:input
                type="date"
                value="{!v.data.Report_Date__c}"
                aura:id="input-report-date"
                variant="label-hidden"
              />
            </div>
            <!-- 医院 -->
            <div
              aura:id="hospital_list"
              class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
              data-select="single"
            >
              <!-- label="医院" -->
              医院
              <lightning:input
                aura:id="hospital_input_text"
                class="field"
                value="{!v.hospital}"
                updateOn="keyup"
                variant="label-hidden"
              />
              <div class="slds-lookup__menu" id="lookup-66">
                <ul class="slds-lookup__list" role="listbox">
                  <aura:iteration var="hospital" items="{!v.hospitalList}">
                    <li
                      role="presentation"
                      onclick="{!c.selectHos}"
                      data-accName="{!hospital.Hospital_Name_readonly__c}"
                      data-accId="{!hospital.Hospital__c}"
                    >
                      <span
                        class="slds-lookup__item-action slds-media"
                        id="lookup-option-498"
                        role="option"
                      >
                        <div class="slds-media__body">
                          <div class="slds-lookup__result-text">
                            {!hospital.Hospital_Name_readonly__c}
                          </div>
            <div class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium fontSize">
                <aura:if isTrue="{!v.showMain}">
                    <div>
                        <lightning:input type="file" class="file" uara:id="file" onchange="{!c.CreateRecord}" />
                    </div>
                    <aura:set attribute="else">
                        <ui:outputRichText class="uiOutputRichText slds-m--around-large fontSize"
                            value="{!v.TableContent}" />
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="保存" variant="brand" onclick="{!c.processFileContent}"
                                class="buttonFontSize" />
                            <lightning:button label="取消" variant="brand" onclick="{!c.cancel}" class="buttonFontSize" />
                        </div>
                      </span>
                    </li>
                  </aura:iteration>
                </ul>
              </div>
                        <aura:if isTrue="{!v.showErrorInfo}">
                            <div class="slds-p-around--large slds-align--absolute-center">
                                <lightning:button label="导出错误信息" variant="brand" onclick="{!c.exportErrorInfo}" />
                            </div>
                            <div class="slds-p-around--large slds-align--absolute-center">
                                <div style="height: 300px;overflow-x:scroll">
                                    <lightning:datatable keyField="id" data="{! v.errorData }"
                                        columns="{! v.errorColumns }" hideCheckboxColumn="true" />
                                </div>
                            </div>
                        </aura:if>
                    </aura:set>
                </aura:if>
            </div>
            <!-- 科室分类 -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
            >
              {!v.fieldsmap.Department_Cateogy__c}
              <!-- <ui:inputText aura:id="select_department" class="slds-select"
        </div>
    </div>
    <div aura:id="modal_importbg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <!-- 批量添加日报 end-->
    <!-- 批量导出日报 start-->
    <div aura:id="modal_export" role="dialog" tabindex="-1"
        class="disp_none slds-modal slds-fade-in-open slds-modal--large">
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <h4 id="headerTarget" class="slds-float--left"></h4>
                <h2 id="headerTarget" class="slds-text-heading--medium">日报批量导出</h2>
                <ui:button aura:id="close_button" label="关闭"
                    class="close_button slds-button slds-button--neutral slds-order--1" press="{!c.close_export}" />
            </div>
            <div class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium">
                <aura:if isTrue="{!v.showMain}">
                    <div class="slds-grid slds-wrap slds-grid--pull-padded">
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                        </div>
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                            活动日开始日期
                            <lightning:input type="Date" class="slds-input slds-input_bare "
                                aura:id="input-report-date1" />
                        </div>
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                            活动日结束日期
                            <lightning:input type="Date" class="slds-input slds-input_bare "
                                aura:id="input-report-date2" />
                        </div>
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                        </div>
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="确认" variant="brand" onclick="{!c.select_repores_date}" />
                            <lightning:button label="取消" variant="brand" onclick="{!c.close_export}" />
                        </div>
                    </div>
                    <aura:set attribute="else">
                        <ui:outputRichText class="uiOutputRichText slds-m--around-large" value="{!v.TableContent2}" />
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="确认" variant="brand" onclick="{!c.exportDate}" />
                            <lightning:button label="取消" variant="brand" onclick="{!c.close_export}" />
                        </div>
                    </aura:set>
                </aura:if>
            </div>
        </div>
    </div>
    <div aura:id="modal_exportbg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <!-- 批量导出日报 end-->
    <div aura:id="modal_window" role="dialog" tabindex="-1"
        class="disp_none slds-modal slds-fade-in-open slds-modal--large" aria-labelledby="headerTarget">
        <div class="slds-modal__container">
            <div class="slds-modal slds-fade-in-open slds-hide" aura:id="successDiv">
                <!-- <ui:inputText aura:id="articleURL" /> -->
                <div class="demo-only" style="height: 8rem;">
                    <div class="slds-notify_container slds-is-relative">
                        <div class="slds-notify slds-notify_toast slds-theme_success" role="alert">
                            <div class=" slds-m-left_xx-large">
                                <div
                                    class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large">
                                    <lightning:icon alternativeText="Success" iconName="utility:success" size="small"
                                        class="buttonColor slds-m-right_small" />
                                    <h2 class="slds-text-heading_small ">{!v.successMessage}</h2>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="slds-modal slds-fade-in-open slds-hide" aura:id="errorDiv" style="z-index: 10001">
                <!-- <ui:inputText aura:id="articleURL" /> -->
                <div class="demo-only" style="height: 8rem;">
                    <div class="slds-notify_container slds-is-relative">
                        <div class="slds-notify slds-notify_toast slds-theme_error" role="status">
                            <div class=" slds-m-left_xx-large">
                                <div
                                    class="slds-notify__content slds-m-left_small slds-align_absolute-center slds-m-left_xx-large">
                                    <lightning:icon alternativeText="error" iconName="utility:error" size="small"
                                        class="buttonColor slds-m-right_small" />
                                    <h2 class="slds-text-heading_small ">{!v.errorMessage}</h2>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="slds-modal__content slds-grow slds-p-around--medium" style="position: relative;">
                <aura:renderIf isTrue="{!v.loginEdit}">
                    <lightning:spinner alternativeText="Loading" size="medium" style="width: 100%; height: 100%;" />
                </aura:renderIf>
                <div class="slds-modal__header">
                    <h2 id="headerTarget" class="slds-text-heading--medium">
                        日报({!v.selected_date}&nbsp;{!v.selected_agency_person})</h2>
                    <ui:button aura:id="close_button" label="关闭"
                        class="close_button slds-button slds-button--neutral slds-order--1"
                        press="{!c.toggle_report}" />
                </div>
                <div class="slds-box slds-theme--shade">
                    <div class="slds-grid slds-wrap slds-grid--pull-padded">
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7">
                            活动日
                            <lightning:input type="date" value="{!v.data.Report_Date__c}" aura:id="input-report-date"
                                variant="label-hidden" />
                        </div>
                        <!-- 医院 -->
                        <div aura:id="hospital_list"
                            class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
                            data-select="single">
                            <!-- label="医院" -->
                            医院
                            <lightning:input aura:id="hospital_input_text" class="field" value="{!v.hospital}"
                                updateOn="keyup" variant="label-hidden" />
                            <div class="slds-lookup__menu" id="lookup-66">
                                <ul class="slds-lookup__list" role="listbox">
                                    <aura:iteration var="hospital" items="{!v.hospitalList}">
                                        <li role="presentation" onclick="{!c.selectHos}"
                                            data-accName="{!hospital.Hospital_Name_readonly__c}"
                                            data-accId="{!hospital.Hospital__c}">
                                            <span class="slds-lookup__item-action slds-media" id="lookup-option-498"
                                                role="option">
                                                <div class="slds-media__body">
                                                    <div class="slds-lookup__result-text">
                                                        {!hospital.Hospital_Name_readonly__c}</div>
                                                </div>
                                            </span>
                                        </li>
                                    </aura:iteration>
                                </ul>
                            </div>
                        </div>
                        <!-- 科室分类 -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7">
                            {!v.fieldsmap.Department_Cateogy__c}
                            <!-- <ui:inputText aura:id="select_department" class="slds-select"
                                change="{!c.select_department}"/> -->
              <lightning:input
                type="text"
                onchange="{!c.select_department}"
                aura:id="select_department"
                variant="label-hidden"
              />
            </div>
            <!-- 经销商人员  change="{!c.select_DealerPersonnel}" -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
              style="width: 145px"
            >
              {!v.fieldsmap.DealerPersonnel__c}
              <ui:inputSelect
                aura:id="select_DealerPersonnel"
                class="slds-select"
              />
            </div>
            <!-- 活动区分   -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
            >
              {!v.fieldsmap.WorkRecord__c}
              <ui:inputSelect
                aura:id="select_purpose_type"
                class="slds-select"
                change="{!c.select_purpose_type}"
              />
            </div>
            <!-- 拜访人 {!v.fieldsmap.doctor2__c}-->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
              style="width: 145px"
            >
              拜访人
              <ui:inputSelect
                aura:id="select_doctor"
                class="slds-select"
                change="{!c.doctor_change}"
              />
            </div>
            <!-- <p hidden="hidden"> -->
                            <lightning:input type="text" onchange="{!c.select_department}" aura:id="select_department"
                                variant="label-hidden" />
                        </div>
                        <!-- 经销商人员  change="{!c.select_DealerPersonnel}" -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
                            style="width: 145px;">
                            {!v.fieldsmap.DealerPersonnel__c}
                            <ui:inputSelect aura:id="select_DealerPersonnel" class="slds-select" />
                        </div>
                        <!-- 活动区分   -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7">
                            {!v.fieldsmap.WorkRecord__c}
                            <ui:inputSelect aura:id="select_purpose_type" class="slds-select"
                                change="{!c.select_purpose_type}" />
                        </div>
                        <!-- 拜访人 {!v.fieldsmap.doctor2__c}-->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
                            style="width: 145px;">
                            拜访人
                            <ui:inputSelect aura:id="select_doctor" class="slds-select" change="{!c.doctor_change}" />
                        </div>
                        <!-- <p hidden="hidden"> -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7"
            >
              <br />
              <ui:button
                label="新建"
                class="slds-button"
                press="{!c.createCon}"
                disabled="true"
                aura:id="new_con"
              />
            </div>
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-7 slds-large-size--1-of-7">
                            <br />
                            <ui:button label="新建" class="slds-button" press="{!c.createCon}" disabled="true"
                                aura:id="new_con" />
                        </div>
            <!-- </p> -->
            <hr />
            <!-- 产品分类(第三分类) change="{!c.select_ProductClassification}" -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
            >
              产品分类(第三分类)
              <ui:inputSelect
                aura:id="select_ProductClassification"
                class="slds-select"
                change="{!c.selectProductClassification}"
              />
            </div>
            <!-- 使用产品1(产品型号)   UseProduct1__c  -->
            <div
              aura:id="UseProduct1_List"
              class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
              data-select="single"
            >
              <!-- label="使用产品1(产品型号)" -->
              使用产品1(产品型号)
              <lightning:input
                aura:id="UseProduct1_TEXT"
                class="field"
                value="{!v.UseProduct1}"
                updateOn="keyup"
                variant="label-hidden"
              />
              <div class="slds-lookup__menu" id="lookup-11">
                <ul
                  class="slds-lookup__list"
                  role="listbox"
                  style="max-height: 230px"
                >
                  <aura:iteration
                    var="UseProduct1"
                    items="{!v.UseProduct1List}"
                  >
                    <li
                      role="presentation"
                      onclick="{!c.seletUseProduct1Change}"
                      data-accid="{!UseProduct1.Id}"
                      data-accName="{!UseProduct1.Asset_Model_No__c}"
                    >
                      <span
                        class="slds-lookup__item-action slds-media"
                        id="lookup-option-498"
                        role="option"
                      >
                        <div class="slds-media__body">
                          <div class="slds-lookup__result-text">
                            {!UseProduct1.Asset_Model_No__c}
                          </div>
                        <!-- </p> -->
                        <hr />
                        <!-- 产品分类(第三分类) change="{!c.select_ProductClassification}" -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5">
                            产品分类(第三分类)
                            <ui:inputSelect aura:id="select_ProductClassification" class="slds-select"
                                change="{!c.selectProductClassification}" />
                        </div>
                      </span>
                    </li>
                  </aura:iteration>
                </ul>
              </div>
            </div>
            <!-- 使用产品2   UseProduct2__c  -->
            <div
              aura:id="UseProduct2_List"
              class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
              data-select="single"
            >
              <!-- label="使用产品2" -->
              使用产品2
              <lightning:input
                aura:id="UseProduct2_TEXT"
                class="field"
                value="{!v.UseProduct2}"
                updateOn="keyup"
                variant="label-hidden"
              />
              <div class="slds-lookup__menu" id="lookup-22">
                <ul
                  class="slds-lookup__list"
                  role="listbox"
                  style="max-height: 230px"
                >
                  <aura:iteration
                    var="UseProduct2"
                    items="{!v.UseProduct2List}"
                  >
                    <li
                      role="presentation"
                      onclick="{!c.seletUseProduct2Change}"
                      data-accid="{!UseProduct2.Id}"
                      data-accName="{!UseProduct2.Asset_Model_No__c}"
                    >
                      <span
                        class="slds-lookup__item-action slds-media"
                        id="lookup-option-498"
                        role="option"
                      >
                        <div class="slds-media__body">
                          <div class="slds-lookup__result-text">
                            {!UseProduct2.Asset_Model_No__c}
                          </div>
                        <!-- 使用产品1(产品型号)   UseProduct1__c  -->
                        <div aura:id="UseProduct1_List"
                            class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
                            data-select="single">
                            <!-- label="使用产品1(产品型号)" -->
                            使用产品1(产品型号)
                            <lightning:input aura:id="UseProduct1_TEXT" class="field" value="{!v.UseProduct1}"
                                updateOn="keyup" variant="label-hidden" />
                            <div class="slds-lookup__menu" id="lookup-11">
                                <ul class="slds-lookup__list" role="listbox" style="max-height:230px;">
                                    <aura:iteration var="UseProduct1" items="{!v.UseProduct1List}">
                                        <li role="presentation" onclick="{!c.seletUseProduct1Change}"
                                            data-accid="{!UseProduct1.Id}"
                                            data-accName="{!UseProduct1.Asset_Model_No__c}">
                                            <span class="slds-lookup__item-action slds-media" id="lookup-option-498"
                                                role="option">
                                                <div class="slds-media__body">
                                                    <div class="slds-lookup__result-text">
                                                        {!UseProduct1.Asset_Model_No__c}</div>
                                                </div>
                                            </span>
                                        </li>
                                    </aura:iteration>
                                </ul>
                            </div>
                        </div>
                      </span>
                    </li>
                  </aura:iteration>
                </ul>
              </div>
            </div>
            <!-- 使用产品3   UseProduct3__c  -->
            <div
              aura:id="UseProduct3_List"
              class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
              data-select="single"
            >
              <!-- label="使用产品3" -->
              使用产品3
              <lightning:input
                aura:id="UseProduct3_TEXT"
                class="field"
                value="{!v.UseProduct3}"
                updateOn="keyup"
                variant="label-hidden"
              />
              <div class="slds-lookup__menu" id="lookup-33">
                <ul
                  class="slds-lookup__list"
                  role="listbox"
                  style="max-height: 230px"
                >
                  <aura:iteration
                    var="UseProduct3"
                    items="{!v.UseProduct3List}"
                  >
                    <li
                      role="presentation"
                      onclick="{!c.seletUseProduct3Change}"
                      data-accid="{!UseProduct3.Id}"
                      data-accName="{!UseProduct3.Asset_Model_No__c}"
                    >
                      <span
                        class="slds-lookup__item-action slds-media"
                        id="lookup-option-498"
                        role="option"
                      >
                        <div class="slds-media__body">
                          <div class="slds-lookup__result-text">
                            {!UseProduct3.Asset_Model_No__c}
                          </div>
                        <!-- 使用产品2   UseProduct2__c  -->
                        <div aura:id="UseProduct2_List"
                            class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
                            data-select="single">
                            <!-- label="使用产品2" -->
                            使用产品2
                            <lightning:input aura:id="UseProduct2_TEXT" class="field" value="{!v.UseProduct2}"
                                updateOn="keyup" variant="label-hidden" />
                            <div class="slds-lookup__menu" id="lookup-22">
                                <ul class="slds-lookup__list" role="listbox" style="max-height:230px;">
                                    <aura:iteration var="UseProduct2" items="{!v.UseProduct2List}">
                                        <li role="presentation" onclick="{!c.seletUseProduct2Change}"
                                            data-accid="{!UseProduct2.Id}"
                                            data-accName="{!UseProduct2.Asset_Model_No__c}">
                                            <span class="slds-lookup__item-action slds-media" id="lookup-option-498"
                                                role="option">
                                                <div class="slds-media__body">
                                                    <div class="slds-lookup__result-text">
                                                        {!UseProduct2.Asset_Model_No__c}</div>
                                                </div>
                                            </span>
                                        </li>
                                    </aura:iteration>
                                </ul>
                            </div>
                        </div>
                      </span>
                    </li>
                  </aura:iteration>
                </ul>
              </div>
            </div>
            <!-- 效果/进度  EffectProgress__c-->
            <div
              aura:id="product_category_select1"
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
            >
              {!v.fieldsmap.EffectProgress__c}
              <ui:inputSelect
                aura:id="select_EffectProgress"
                class="slds-select"
              />
            </div>
            <hr />
            <!-- 产品1同类耗材科室月使用量  ConsumptionOfConsumables__c-->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
            >
              {!v.fieldsmap.ConsumptionOfConsumables__c}
              <!-- <ui:inputText aura:id="select_ConsumptionOfConsumables" class="slds-select"
                        <!-- 使用产品3   UseProduct3__c  -->
                        <div aura:id="UseProduct3_List"
                            class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5"
                            data-select="single">
                            <!-- label="使用产品3" -->
                            使用产品3
                            <lightning:input aura:id="UseProduct3_TEXT" class="field" value="{!v.UseProduct3}"
                                updateOn="keyup" variant="label-hidden" />
                            <div class="slds-lookup__menu" id="lookup-33">
                                <ul class="slds-lookup__list" role="listbox" style="max-height:230px;">
                                    <aura:iteration var="UseProduct3" items="{!v.UseProduct3List}">
                                        <li role="presentation" onclick="{!c.seletUseProduct3Change}"
                                            data-accid="{!UseProduct3.Id}"
                                            data-accName="{!UseProduct3.Asset_Model_No__c}">
                                            <span class="slds-lookup__item-action slds-media" id="lookup-option-498"
                                                role="option">
                                                <div class="slds-media__body">
                                                    <div class="slds-lookup__result-text">
                                                        {!UseProduct3.Asset_Model_No__c}</div>
                                                </div>
                                            </span>
                                        </li>
                                    </aura:iteration>
                                </ul>
                            </div>
                        </div>
                        <!-- 效果/进度  EffectProgress__c-->
                        <div aura:id="product_category_select1"
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5">
                            {!v.fieldsmap.EffectProgress__c}
                            <ui:inputSelect aura:id="select_EffectProgress" class="slds-select" />
                        </div>
                        <hr />
                        <!-- 产品1同类耗材科室月使用量  ConsumptionOfConsumables__c-->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5">
                            {!v.fieldsmap.ConsumptionOfConsumables__c}
                            <!-- <ui:inputText aura:id="select_ConsumptionOfConsumables" class="slds-select"
                                change="{!c.select_ConsumptionOfConsumables}" /> -->
              <lightning:input
                type="text"
                onchange="{!c.select_ConsumptionOfConsumables}"
                aura:id="select_ConsumptionOfConsumables"
                variant="label-hidden"
              />
            </div>
            <!-- 术士分类   WarlockClassification__c   -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6"
            >
              {!v.fieldsmap.WarlockClassification__c}
              <ui:inputSelect
                aura:id="select_OtherBrandConsumables"
                class="slds-select"
              />
            </div>
            <!-- 已采用其他品牌   ProductCcategory__c -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6"
            >
              {!v.fieldsmap.ProductCcategory__c}
              <ui:inputSelect
                aura:id="select_ProductCcategory"
                class="slds-select"
                change="{!c.selectpurposetype}"
              />
            </div>
            <!-- 其他品牌产品类别  -->
            <div
              aura:id="result"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6"
            >
              {!v.fieldsmap.productCategories__c}
              <ui:inputSelect
                aura:id="select_productCategories"
                class="slds-select"
              />
            </div>
            <!-- 产品用量   warlocksNumber__c   -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6"
            >
              {!v.fieldsmap.warlocksNumber__c}
              <!-- <ui:inputText aura:id="select_warlocksNumber" class="slds-select"
                            <lightning:input type="text" onchange="{!c.select_ConsumptionOfConsumables}"
                                aura:id="select_ConsumptionOfConsumables" variant="label-hidden" />
                        </div>
                        <!-- 术士分类   WarlockClassification__c   -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                            {!v.fieldsmap.WarlockClassification__c}
                            <ui:inputSelect aura:id="select_OtherBrandConsumables" class="slds-select" />
                        </div>
                        <!-- 已采用其他品牌   ProductCcategory__c -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                            {!v.fieldsmap.ProductCcategory__c}
                            <ui:inputSelect aura:id="select_ProductCcategory" class="slds-select"
                                change="{!c.selectpurposetype}" />
                        </div>
                        <!-- 其他品牌产品类别  -->
                        <div aura:id="result"
                            class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                            {!v.fieldsmap.productCategories__c}
                            <ui:inputSelect aura:id="select_productCategories" class="slds-select" />
                        </div>
                        <!-- 产品用量   warlocksNumber__c   -->
                        <div
                            class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                            {!v.fieldsmap.warlocksNumber__c}
                            <!-- <ui:inputText aura:id="select_warlocksNumber" class="slds-select"
                                change="{!c.select_warlocksNumber}" /> -->
              <lightning:input
                type="text"
                onchange="{!c.select_warlocksNumber}"
                aura:id="select_warlocksNumber"
                variant="label-hidden"
              />
                            <lightning:input type="text" onchange="{!c.select_warlocksNumber}"
                                aura:id="select_warlocksNumber" variant="label-hidden" />
                        </div>
                        <!-- 支援需求      WorkMark__c-->
                        <div style="padding-left: 12px;">
                            {!v.fieldsmap.WorkMark__c}
                            <lightning:input type="checkbox" aura:id="select_WorkMark" />
                        </div>
                        <div aura:id="input-opportunity-stage"
                            class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12">
                            {!v.fieldsmap.StageName__c}
                            <ui:inputSelect aura:id="select_stageName" class="slds-select" />
                        </div>
                        <div aura:id="input-opportunity-amount1"
                            class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12">
                            {!v.fieldsmap.Amount__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>  医院采购预算(不含税,元)-->
                            <lightning:inputField value="{!v.oppdata.Amount__c}" class="" />
                        </div>
                        <div aura:id="input-opportunity-amount2"
                            class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12">
                            {!v.fieldsmap.OCMSale_Price__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>      订货金额(不含税,元)  -->
                            <lightning:inputField value="{!v.oppdata.OCMSale_Price__c}" class="" />
                        </div>
                        <div aura:id="input-opportunity-date"
                            class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12">
                            {!v.fieldsmap.Close_Forecasted_Date__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>    预测与OCSM签约日 -->
                            <lightning:inputField value="{!v.oppdata.Close_Forecasted_Date__c}" class="" />
                        </div>
                        <hr />
                    </div>
                </div>
                <div class="save_button_area">
                    <ui:button aura:id="save_button" label="保存并新建"
                        class="save_button slds-button slds-button--brand slds-order--3" press="{!c.save_report}" />
                </div>
                <aura:renderIf isTrue="{!v.reports_now_count > 0}">
                    <div class="mt40 slds-box slds-theme--shade">
                        <div class="slds-table--edit_container slds-is-relative">
                            <table
                                class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
                                role="grid">
                                <thead>
                                    <tr class="slds-line-height--reset">
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name"></span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">医院</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate"
                                                title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.doctor2__c}</span>
                                            <!-- 客户人员 -->
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate"
                                                title="Name">{!v.fieldsmap.visitor_title__c}</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.WorkRecord__c}</span>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <aura:iteration items="{!v.reports_now}" var="item" indexVar="index">
                                        <tr aura:id="modal_data_list_tr" class="slds-hint-parent">
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.Department_Cateogy_text__c}">{!item.Name}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.Agency_Hospital__r.Name}">{!item.Agency_Hospital__r.Name}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.Department_Cateogy_text__c}">{!item.Department_Cateogy_text__c}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.doctor2__r.Name}">{!item.doctor2__r.Name}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.visitor_title__c}">{!item.visitor_title__c}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate"
                                                        title="{!item.WorkRecord__c}">{!item.WorkRecord__c}</span>
                                                </span>
                                            </td>
                                        </tr>
                                    </aura:iteration>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </aura:renderIf>
            </div>
            <!-- 支援需求      WorkMark__c-->
            <div style="padding-left: 12px">
              {!v.fieldsmap.WorkMark__c}
              <lightning:input type="checkbox" aura:id="select_WorkMark" />
            </div>
            <div
              aura:id="input-opportunity-stage"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
            >
              {!v.fieldsmap.StageName__c}
              <ui:inputSelect aura:id="select_stageName" class="slds-select" />
            </div>
            <div
              aura:id="input-opportunity-amount1"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
            >
              {!v.fieldsmap.Amount__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>  医院采购预算(不含税,元)-->
              <lightning:inputField value="{!v.oppdata.Amount__c}" class="" />
            </div>
            <div
              aura:id="input-opportunity-amount2"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
            >
              {!v.fieldsmap.OCMSale_Price__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>      订货金额(不含税,元)  -->
              <lightning:inputField
                value="{!v.oppdata.OCMSale_Price__c}"
                class=""
              />
            </div>
            <div
              aura:id="input-opportunity-date"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
            >
              {!v.fieldsmap.Close_Forecasted_Date__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/>    预测与OCSM签约日 -->
              <lightning:inputField
                value="{!v.oppdata.Close_Forecasted_Date__c}"
                class=""
              />
            </div>
            <hr />
          </div>
        </div>
        <div class="save_button_area">
          <ui:button
            aura:id="save_button"
            label="保存并新建"
            class="save_button slds-button slds-button--brand slds-order--3"
            press="{!c.save_report}"
          />
        </div>
        <aura:renderIf isTrue="{!v.reports_now_count > 0}">
          <div class="mt40 slds-box slds-theme--shade">
            <div class="slds-table--edit_container slds-is-relative">
              <table
                class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
                role="grid"
              >
                <thead>
                  <tr class="slds-line-height--reset">
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"></span>
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name">医院</span>
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.Department_Cateogy__c}</span
                      >
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.doctor2__c}</span
                      >
                      <!-- 客户人员 -->
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.visitor_title__c}</span
                      >
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.WorkRecord__c}</span
                      >
                    </th>
                  </tr>
                </thead>
                <tbody>
                  <aura:iteration
                    items="{!v.reports_now}"
                    var="item"
                    indexVar="index"
                  >
                    <tr aura:id="modal_data_list_tr" class="slds-hint-parent">
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Department_Cateogy_text__c}"
                            >{!item.Name}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Agency_Hospital__r.Name}"
                            >{!item.Agency_Hospital__r.Name}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Department_Cateogy_text__c}"
                            >{!item.Department_Cateogy_text__c}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.doctor2__r.Name}"
                            >{!item.doctor2__r.Name}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.visitor_title__c}"
                            >{!item.visitor_title__c}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.WorkRecord__c}"
                            >{!item.WorkRecord__c}</span
                          >
                        </span>
                      </td>
                    </tr>
                  </aura:iteration>
                </tbody>
              </table>
    </div>
    <div aura:id="modal_bg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <div aura:id="modal_confirm" role="dialog" tabindex="-2" aria-labelledby="header43"
        class="disp_none slds-modal slds-fade-in-open">
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <h2 id="header43" class="slds-text-heading--medium">{!v.modal_confirm_title}</h2>
            </div>
          </div>
        </aura:renderIf>
      </div>
            <div class="slds-modal__content slds-p-around--medium">
                <p>{!v.modal_confirm_text}</p>
            </div>
            <div class="slds-modal__footer">
                <ui:button label="是" class="slds-button slds-button--brand" press="{!c.yes_button}" />
                <ui:button label="否" class="slds-button slds-button--neutral" press="{!c.no_button}" />
            </div>
        </div>
    </div>
  </div>
    <div aura:id="modal_confirm_bg" class="disp_none slds-backdrop slds-backdrop--open"></div>
  <div
    aura:id="modal_bg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <div
    aura:id="modal_confirm"
    role="dialog"
    tabindex="-2"
    aria-labelledby="header43"
    class="disp_none slds-modal slds-fade-in-open"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h2 id="header43" class="slds-text-heading--medium">
          {!v.modal_confirm_title}
        </h2>
      </div>
      <div class="slds-modal__content slds-p-around--medium">
        <p>{!v.modal_confirm_text}</p>
      </div>
      <div class="slds-modal__footer">
        <ui:button
          label="是"
          class="slds-button slds-button--brand"
          press="{!c.yes_button}"
        />
        <ui:button
          label="否"
          class="slds-button slds-button--neutral"
          press="{!c.no_button}"
        />
      </div>
    <div aura:id="modal_newAC" role="dialog" tabindex="-3" aria-labelledby="headertest"
        class="disp_none slds-modal slds-fade-in-open">
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <h2 id="headertest" class="slds-text-heading--medium">新建.拜访人</h2>
            </div>
            <div class="slds-modal__content slds-p-around--medium">
                <lightning:recordEditForm aura:id="recordEditForm" objectApiName="Agency_Contact__c"
                    onsuccess="{!c.handleSuccess}" onload="{!c.showRequiredFields}" onsubmit="{!c.handleSubmit}">
                    <lightning:messages aura:id="OppMessage" />
                    <!-- onload="{!c.showRequiredFields}" -->
                    <aura:renderIf isTrue="{!v.truthy}">
                        <lightning:inputField fieldName="Name" aura:id="newOpportunityField" />
                        <lightning:inputField fieldName="Type__c" aura:id="newOpportunityField" />
                        <lightning:inputField fieldName="Doctor_Division1__c" aura:id="newOpportunityField" />
                    </aura:renderIf>
                    <br />
                    <br />
                    <br />
                    <br />
                    <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="button" label="保存"
                            onclick="{!c.handleSubmit}" />
                    </div>
                </lightning:recordEditForm>
            </div>
        </div>
    </div>
  </div>
  <div
    aura:id="modal_confirm_bg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <div
    aura:id="modal_newAC"
    role="dialog"
    tabindex="-3"
    aria-labelledby="headertest"
    class="disp_none slds-modal slds-fade-in-open"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h2 id="headertest" class="slds-text-heading--medium">新建.拜访人</h2>
      </div>
      <div class="slds-modal__content slds-p-around--medium">
        <lightning:recordEditForm
          aura:id="recordEditForm"
          objectApiName="Agency_Contact__c"
          onsuccess="{!c.handleSuccess}"
          onload="{!c.showRequiredFields}"
          onsubmit="{!c.handleSubmit}"
        >
          <lightning:messages aura:id="OppMessage" />
          <!-- onload="{!c.showRequiredFields}" -->
          <aura:renderIf isTrue="{!v.truthy}">
            <lightning:inputField
              fieldName="Name"
              aura:id="newOpportunityField"
            />
            <lightning:inputField
              fieldName="Type__c"
              aura:id="newOpportunityField"
            />
            <lightning:inputField
              fieldName="Doctor_Division1__c"
              aura:id="newOpportunityField"
            />
          </aura:renderIf>
          <br />
          <br />
          <br />
          <br />
          <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="button"
              label="保存"
              onclick="{!c.handleSubmit}"
            />
          </div>
        </lightning:recordEditForm>
      </div>
    </div>
  </div>
</aura:component>
</aura:component>
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.css
@@ -1,202 +1,202 @@
@import "c/lexCssUtility";
@import 'c/lexCssUtility';
.THIS .bcolor {
  color: #333;
    color: #333;
}
.THIS.height100vh {
  height: 100vh;
    height: 100vh;
}
.THIS.contents_wrapper {
  padding-top: 50px;
    padding-top: 50px;
}
.THIS .mt5 {
  margin-top: 5px;
    margin-top: 5px;
}
.THIS .mt40 {
  margin-top: 40px;
    margin-top: 40px;
}
.THIS .edit_button {
  float: right;
  margin: -1.5em 0.5em 0 0;
  border: 0;
    float: right;
    margin: -1.5em 0.5em 0 0;
    border: 0;
}
.THIS .no_data_area {
  text-align: center;
  margin: 0.5em 0;
    text-align: center;
    margin: .5em 0;
}
.THIS.report_list_area {
  margin: 40px 0 20px 100px;
  height: 60vh;
  overflow-y: scroll;
    margin: 40px 0 20px 100px;
    height: 60vh;
    overflow-y: scroll;
}
.THIS .report_radio {
  float: left;
    float: left;
}
.THIS .table_header {
  width: 9.4rem;
  height: 2em;
    width: 9.4rem;
    height: 2em;
}
.THIS.disp_none {
  display: none;
    display: none;
}
.THIS .disp_none {
  display: none;
    display: none;
}
.THIS .tr {
  text-align: right;
    text-align: right;
}
.THIS .close_button {
  float: right;
  margin-top: -2em;
    float: right;
    margin-top: -2em;
}
.THIS .close_icn svg {
  fill: #fefefe;
    fill: #fefefe;
}
.THIS .slds-progress__marker {
  cursor: default;
    cursor: default;
}
.THIS .progress_0 {
  width: 0%;
    width: 0%;
}
.THIS .progress_100 {
  width: 100%;
    width: 100%;
}
.THIS .new_btn_area {
  text-align: center;
  margin-top: 22px;
    text-align: center;
    margin-top: 22px;
}
.THIS .new_btn {
  width: 100%;
    width: 100%;
}
.THIS .save_button_area {
  margin: 1em 0;
  text-align: right;
    margin: 1em 0;
    text-align: right;
}
.THIS .save_button {
  background-color: #ffa500;
  border: 1px solid #ff8c00;
    background-color: #ffa500;
    border: 1px solid #ff8c00;
}
.THIS .report_data_header {
  border-bottom: 2px solid #ccc;
    border-bottom: 2px solid #ccc;
}
.THIS .report_data_area {
  border-bottom: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}
.THIS.fade {
  transition: 5s opacity linear;
    transition: 5s opacity linear;
}
.THIS.animation_off {
  opacity: 0;
    opacity: 0;
}
.THIS.animation_on {
  opacity: 1;
    opacity: 1;
}
.THIS .fade {
  transition: 5s opacity linear;
    transition: 5s opacity linear;
}
.THIS .animation_off {
  opacity: 0;
    opacity: 0;
}
.THIS .animation_on {
  opacity: 1;
    opacity: 1;
}
.THIS .divbotuser {
  width: fit-content;
    width: fit-content;
}
.THIS .toastMessage.forceActionsText {
  white-space: pre-line !important;
    white-space: pre-line !important;
}
.THIS .slds-file-selector__dropzone .slds-file-selector__text {
  display: none;
    display: none;
}
.THIS .slds-input:focus,
.THIS .slds-input:active {
  border-color: rgb(216, 221, 230);
  box-shadow: none;
    border-color: rgb(216, 221, 230);
    box-shadow: none;
}
.THIS .customRequired {
  font-weight: 400;
    font-weight: 400;
}
.THIS .customRequired:before {
  content: "*";
  margin: 0 0.125rem 0 0.125rem;
  color: rgb(194, 57, 52);
  float: left;
    content: "*";
    margin: 0 0.125rem 0 0.125rem;
    color: rgb(194, 57, 52);
    float: left;
}
.THIS .none {
  display: none;
    display: none;
}
.THIS tr .decrypt {
  display: none;
    display: none;
}
.THIS tr:hover .decrypt {
  display: unset;
    display: unset;
}
.THIS tr:hover .encrypt {
  display: none;
    display: none;
}
.THIS tr:hover .encrypt {
  display: none;
    display: none;
}
.THIS .buttonFontSize {
  font-size: 18px;
  min-width: 80px;
  max-width: 110px;
    font-size: 18px;
    min-width: 80px;
    max-width: 110px;
}
.THIS .fontSize {
  font-size: 18px;
    font-size: 18px;
}
.THIS thead th {
  font-size: 18px;
    font-size: 18px;
}
.THIS table {
  table-layout: fixed;
    table-layout: fixed;
}
.THIS td {
  white-space: normal;
  overflow-wrap: break-word;
}
    white-space: normal;
    overflow-wrap: break-word;
}
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportController.js
@@ -1,379 +1,352 @@
({
  doInit: function (component, event, helper) {
    helper.doinit(component, event, helper);
  },
    doInit: function (component, event, helper) {
        helper.doinit(component, event, helper);
    },
  createAopp: function (component, event, helper) {
    var addRecordEvent = $A.get("e.force:createRecord");
    addRecordEvent.setParams({
      entityApiName: "Agency_Opportunity__c",
      recordTypeId: "012100000006KW7"
    });
    addRecordEvent.fire();
  },
    createAopp: function (component, event, helper) {
        var addRecordEvent = $A.get('e.force:createRecord');
        addRecordEvent.setParams({
            entityApiName: 'Agency_Opportunity__c',
            recordTypeId: '012100000006KW7'
        });
        addRecordEvent.fire();
    },
  new_report: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存并新建");
    helper.new_report(component, event, helper);
  },
    new_report: function (component, event, helper) {
        component.find('save_button').set('v.label', '保存并新建');
        helper.new_report(component, event, helper);
    },
  copy_button: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存并新建");
    helper.copy_button(component, event, helper);
  },
  delete_button: function (component, event, helper) {
    helper.delete_button(component, event, helper);
  },
  change_report_radio: function (component, event, helper) {
    helper.change_report_radio(component, event, helper);
  },
    copy_button: function (component, event, helper) {
        component.find('save_button').set('v.label', '保存并新建');
        helper.copy_button(component, event, helper);
    },
    delete_button: function (component, event, helper) {
        helper.delete_button(component, event, helper);
    },
    change_report_radio: function (component, event, helper) {
        helper.change_report_radio(component, event, helper);
    },
  edit_button: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存");
    helper.edit_button(component, event, helper);
  },
    edit_button: function (component, event, helper) {
        component.find('save_button').set('v.label', '保存');
        helper.edit_button(component, event, helper);
    },
  createCon: function (component, event, helper) {
    helper.createCon(component, event, helper);
  },
    createCon: function (component, event, helper) {
        helper.createCon(component, event, helper);
    },
  showRequiredFields: function (component, event, helper) {
    $A.util.removeClass(component.find("newOpportunityField"), "none");
    $A.util.removeClass(component.find("newOpportunityField"), "none");
  },
    showRequiredFields: function (component, event, helper) {
        $A.util.removeClass(component.find("newOpportunityField"), "none");
        $A.util.removeClass(component.find("newOpportunityField"), "none");
    },
  handleSuccess: function (component, event, helper) {
    helper.handleSuccess(component, event, helper);
  },
    handleSuccess: function (component, event, helper) {
        helper.handleSuccess(component, event, helper);
    },
  handleSubmit: function (component, event, helper) {
    event.preventDefault(); // stop form submission
    var showValidationError = false;
    var fields = component.find("newOpportunityField");
    var vaildationFailReason = "";
    let agencyReport = Object.create(null);
    fields.forEach(function (field) {
      if (
        field.get("v.fieldName") === "Type__c" &&
        $A.util.isEmpty(field.get("v.value"))
      ) {
        showValidationError = true;
        vaildationFailReason = "分类不能为空!";
      } else if (
        field.get("v.fieldName") === "Doctor_Division1__c" &&
        $A.util.isEmpty(field.get("v.value"))
      ) {
        showValidationError = true;
        if (vaildationFailReason != "") {
          vaildationFailReason += "医生区分(职务)不能为空!";
        } else {
          vaildationFailReason = "医生区分(职务)不能为空!";
        }
      }
      //SWAG-CF58C3 fy start
      if (field.get("v.fieldName") === "Name") {
        agencyReport["name"] = field.get("v.value");
      } else if (field.get("v.fieldName") === "Type__c") {
        agencyReport["type"] = field.get("v.value");
      } else if (field.get("v.fieldName") === "Doctor_Division1__c") {
        agencyReport["doctorDivision1"] = field.get("v.value");
      }
      //SWAG-CF58C3 fy end
    });
    if (!showValidationError) {
      //SWAG-CF58C3 fy start
      var agencyHospitalid = component.get("v.hospitalLinkId");
      //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;
    handleSubmit: function (component, event, helper) {
        event.preventDefault(); // stop form submission
        var showValidationError = false;
        var fields = component.find("newOpportunityField");
        var vaildationFailReason = '';
        let agencyReport = Object.create(null);
        fields.forEach(function (field) {
            if (field.get("v.fieldName") === 'Type__c' && $A.util.isEmpty(field.get("v.value"))) {
                showValidationError = true;
                vaildationFailReason = "分类不能为空!";
            } else if (field.get("v.fieldName") === 'Doctor_Division1__c' && $A.util.isEmpty(field.get("v.value"))) {
                showValidationError = true;
                if (vaildationFailReason != '') {
                    vaildationFailReason += "医生区分(职务)不能为空!";
                } else {
                    vaildationFailReason = "医生区分(职务)不能为空!";
                }
                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") + "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"
            });
          }
            //SWAG-CF58C3 fy start
            if (field.get("v.fieldName") === 'Name') {
                agencyReport['name'] = field.get("v.value");
            } else if (field.get("v.fieldName") === 'Type__c') {
                agencyReport['type'] = field.get("v.value");
            } else if (field.get("v.fieldName") === 'Doctor_Division1__c') {
                agencyReport['doctorDivision1'] = field.get("v.value");
            }
            //SWAG-CF58C3 fy end
        });
        if (!showValidationError) {
            //SWAG-CF58C3 fy start
            var agencyHospitalid = component.get('v.hospitalLinkId');
            //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') + '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);
            // 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);
            //SWAG-CF58C3 fy end
            // helper.newlyBuild(component, event, helper);
        } else {
            component.find('OppMessage').setError(vaildationFailReason);
        }
      );
      //zhj MEBG新方案改造 2022-11-29 end
      // var arr = new Array();
      // arr.push(agencyReport);
      // var data = JSON.stringify(arr);
      // 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);
      //SWAG-CF58C3 fy end
      // helper.newlyBuild(component, event, helper);
    } else {
      component.find("OppMessage").setError(vaildationFailReason);
    },
    createCancel: function (component, event, helper) {
        helper.createCancel(component, event, helper);
    },
    yes_button: function (component, event, helper) {
        component.set('v.confirm_status', 1);
        helper.close_confirm(component, component.get('v.modal_confirm_title'), component.get('v.modal_confirm_text'));
    },
    no_button: function (component, event, helper) {
        component.set('v.confirm_status', 2);
        helper.close_confirm(component, component.get('v.modal_confirm_title'), component.get('v.modal_confirm_text'));
    },
    toggle_report: function (component, event, helper) {
        helper.toggle_report(component, event, helper);
    },
    save_report: function (component, event, helper) {
        helper.save_report(component, event, helper);
    },
    select_date_change: function (component, event, helper) {
        helper.select_date_change(component, event, helper);
    },
    select_agency_change: function (component, event, helper) {
        debugger
        helper.select_agency_change(component, event, helper);
    },
    hosChange: function (component, event, helper) {
        var hospital_name = event.getParam("value");
        var hospital_nameld = component.get("v.UseProduct1s");
        if (hospital_name.match(/(\S+\s)+/)) {
            if (hospital_nameld != hospital_name) {
                helper.searchHos(component, event, helper);
            }
        } else {
            if (hospital_name == '') {
                helper.hideSearchs(component, event, helper);
            } else {
                helper.hideSearch(component, event, helper);
            }
        }
    },
    selectHos: function (component, event, helper) {
        helper.selectHos(component, event, helper);
        helper.setOpportunity_cfilter(component);
    },
    //使用产品1
    UseProduct1Change: function (component, event, helper) {
        var UseProduct1Name = event.getParam("value");
        var UseProduct1Nameold = component.get("v.UseProduct1s");
        debugger
        if (UseProduct1Name.match(/(\S+\s)+/)) {
            if (UseProduct1Name != UseProduct1Nameold) {
                helper.searchUseProduct1(component, event, helper);
            }
        } else {
            if (UseProduct1Name == '') {
                helper.hideSearchUseProduct1s(component, event, helper);
            } else {
                helper.hideSearchUseProduct1(component, event, helper);
            }
        }
    },
    seletUseProduct1Change: function (component, event, helper) {
        helper.seletUseProduct1Change(component, event, helper);
    },
    //使用产品2
    UseProduct2Change: function (component, event, helper) {
        var UseProduct2Name = event.getParam("value");
        var UseProduct2Nameold = component.get("v.UseProduct2s");
        if (UseProduct2Name.match(/(\S+\s)+/)) {
            if (UseProduct2Name != UseProduct2Nameold) {
                helper.searchUseProduct2(component, event, helper);
            }
        } else {
            if (UseProduct2Name == '') {
                helper.hideSearchUseProduct2s(component, event, helper);
            } else {
                helper.hideSearchUseProduct2(component, event, helper);
            }
        }
    },
    seletUseProduct2Change: function (component, event, helper) {
        helper.seletUseProduct2Change(component, event, helper);
    },
    productcategoryChange2: function (component, event, helper) {
        helper.productcategoryChange2(component, event, helper);
    },
    //使用产品3
    UseProduct3Change: function (component, event, helper) {
        var UseProduct3Name = event.getParam("value");
        var UseProduct3Nameold = component.get("v.UseProduct3s");
        if (UseProduct3Name.match(/(\S+\s)+/)) {
            if (UseProduct3Name != UseProduct3Nameold) {
                helper.searchUseProduct3(component, event, helper);
            }
        } else {
            if (UseProduct3Name == '') {
                helper.hideSearchUseProduct3s(component, event, helper);
            } else {
                helper.hideSearchUseProduct3(component, event, helper);
            }
        }
    },
    seletUseProduct3Change: function (component, event, helper) {
        helper.seletUseProduct3Change(component, event, helper);
    },
    select_department: function (component, event, helper) {
        helper.setOpportunity_cfilter(component);
    },
    doctor_change: function (component, event, helper) {
        helper.doctor_change(component, event, helper);
    },
    stageNameChange: function (component, event, helper) {
        helper.stageNameChange(component, event, helper);
    },
    onDragOver: function (component, event, helper) {
        event.preventDefault();
    },
    onDrop: function (component, event, helper) {
        event.stopPropagation();
        event.preventDefault();
        event.dataTransfer.dropEffect = 'copy';
        var files = event.dataTransfer.files;
        helper.readFile(component, helper, files[0]);
    },
    CreateRecord: function (component, event, helper) {
        var files = event.getSource().get("v.files");
        helper.readFile(component, helper, files[0]);
        component.set("v.showErrorInfo", false);
    },
    processFileContent: function (component, event, helper) {
        helper.saveRecords(component, event, helper);
        component.set("v.showErrorInfo", false);
    },
    cancel: function (component, event, helper) {
        component.set("v.showMain", true);
    },
    import: function (component, event, helper) {
        helper.showImport(component);
    },
    exportDate: function (component, event, helper) {
        var stockData = component.get("v.reports_date");
        console.log('导出数据' + stockData);
        var csv = helper.convertArrayOfObjectsToCSV(component, stockData);
        if (csv == null) { return; }
        var universalBOM = "\uFEFF";
        var hiddenElement = document.createElement('a');
        hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(universalBOM + csv);
        hiddenElement.target = '_self'; //
        hiddenElement.download = 'ExportData.csv';  // CSV file Name* you can change it.[only name not .csv]
        document.body.appendChild(hiddenElement); // Required for FireFox browser
        hiddenElement.click(); // using click() js function to download csv file
    },
    export_condition: function (component, event, helper) {
        helper.showExport(component);
    },
    select_repores_date: function (component, event, helper) {
        helper.select_repores_date(component, event, helper);
    },
    export: function (component, event, helper) {
        console.log('进入export');
        var stockData = component.get("v.reports_date");
        console.log('查出的数据' + stockData);
    },
    close_import: function (component, event, helper) {
        component.set("v.showMain", true);
        helper.close_import(component);
    },
    close_export: function (component, event, helper) {
        component.set("v.showMain", true);
        helper.close_export(component);
    },
    select_ConsumptionOfConsumables: function (component, event, helper) {
        helper.select_ConsumptionOfConsumables(component, event, helper);
    },
    select_purpose_type: function (component, event, helper) {
        helper.selectPurposeType(component, event, helper);
    },
    select_warlocksNumber: function (component, event, helper) {
        helper.select_warlocksNumber(component, event, helper);
    },
    selectProductClassification: function (component, event, helper) {
        helper.selectProductClassification(component, event, helper);
    },
    selectpurposetype: function (component, event, helper) {
        helper.selectpurposetype(component, event, helper);
    },
    return_main_page: function (component, event, helper) {
        window.open('/customer/', '_self');
    },
    exportErrorInfo: function (component, event, helper) {
        helper.exportErrorInfoHelper(component);
    },
    closeErrorDiv: function (component, event, helper) {
        var errorDiv01 = component.find('errorDiv01');
        $A.util.addClass(errorDiv01, 'slds-hide');
    }
  },
  createCancel: function (component, event, helper) {
    helper.createCancel(component, event, helper);
  },
  yes_button: function (component, event, helper) {
    component.set("v.confirm_status", 1);
    helper.close_confirm(
      component,
      component.get("v.modal_confirm_title"),
      component.get("v.modal_confirm_text")
    );
  },
  no_button: function (component, event, helper) {
    component.set("v.confirm_status", 2);
    helper.close_confirm(
      component,
      component.get("v.modal_confirm_title"),
      component.get("v.modal_confirm_text")
    );
  },
  toggle_report: function (component, event, helper) {
    helper.toggle_report(component, event, helper);
  },
  save_report: function (component, event, helper) {
    helper.save_report(component, event, helper);
  },
  select_date_change: function (component, event, helper) {
    helper.select_date_change(component, event, helper);
  },
  select_agency_change: function (component, event, helper) {
    debugger;
    helper.select_agency_change(component, event, helper);
  },
  hosChange: function (component, event, helper) {
    var hospital_name = event.getParam("value");
    var hospital_nameld = component.get("v.UseProduct1s");
    if (hospital_name.match(/(\S+\s)+/)) {
      if (hospital_nameld != hospital_name) {
        helper.searchHos(component, event, helper);
      }
    } else {
      if (hospital_name == "") {
        helper.hideSearchs(component, event, helper);
      } else {
        helper.hideSearch(component, event, helper);
      }
    }
  },
  selectHos: function (component, event, helper) {
    helper.selectHos(component, event, helper);
    helper.setOpportunity_cfilter(component);
  },
  //使用产品1
  UseProduct1Change: function (component, event, helper) {
    var UseProduct1Name = event.getParam("value");
    var UseProduct1Nameold = component.get("v.UseProduct1s");
    debugger;
    if (UseProduct1Name.match(/(\S+\s)+/)) {
      if (UseProduct1Name != UseProduct1Nameold) {
        helper.searchUseProduct1(component, event, helper);
      }
    } else {
      if (UseProduct1Name == "") {
        helper.hideSearchUseProduct1s(component, event, helper);
      } else {
        helper.hideSearchUseProduct1(component, event, helper);
      }
    }
  },
  seletUseProduct1Change: function (component, event, helper) {
    helper.seletUseProduct1Change(component, event, helper);
  },
  //使用产品2
  UseProduct2Change: function (component, event, helper) {
    var UseProduct2Name = event.getParam("value");
    var UseProduct2Nameold = component.get("v.UseProduct2s");
    if (UseProduct2Name.match(/(\S+\s)+/)) {
      if (UseProduct2Name != UseProduct2Nameold) {
        helper.searchUseProduct2(component, event, helper);
      }
    } else {
      if (UseProduct2Name == "") {
        helper.hideSearchUseProduct2s(component, event, helper);
      } else {
        helper.hideSearchUseProduct2(component, event, helper);
      }
    }
  },
  seletUseProduct2Change: function (component, event, helper) {
    helper.seletUseProduct2Change(component, event, helper);
  },
  productcategoryChange2: function (component, event, helper) {
    helper.productcategoryChange2(component, event, helper);
  },
  //使用产品3
  UseProduct3Change: function (component, event, helper) {
    var UseProduct3Name = event.getParam("value");
    var UseProduct3Nameold = component.get("v.UseProduct3s");
    if (UseProduct3Name.match(/(\S+\s)+/)) {
      if (UseProduct3Name != UseProduct3Nameold) {
        helper.searchUseProduct3(component, event, helper);
      }
    } else {
      if (UseProduct3Name == "") {
        helper.hideSearchUseProduct3s(component, event, helper);
      } else {
        helper.hideSearchUseProduct3(component, event, helper);
      }
    }
  },
  seletUseProduct3Change: function (component, event, helper) {
    helper.seletUseProduct3Change(component, event, helper);
  },
  select_department: function (component, event, helper) {
    helper.setOpportunity_cfilter(component);
  },
  doctor_change: function (component, event, helper) {
    helper.doctor_change(component, event, helper);
  },
  stageNameChange: function (component, event, helper) {
    helper.stageNameChange(component, event, helper);
  },
  onDragOver: function (component, event, helper) {
    event.preventDefault();
  },
  onDrop: function (component, event, helper) {
    event.stopPropagation();
    event.preventDefault();
    event.dataTransfer.dropEffect = "copy";
    var files = event.dataTransfer.files;
    helper.readFile(component, helper, files[0]);
  },
  CreateRecord: function (component, event, helper) {
    var files = event.getSource().get("v.files");
    helper.readFile(component, helper, files[0]);
    component.set("v.showErrorInfo", false);
  },
  processFileContent: function (component, event, helper) {
    helper.saveRecords(component, event, helper);
    component.set("v.showErrorInfo", false);
  },
  cancel: function (component, event, helper) {
    component.set("v.showMain", true);
  },
  import: function (component, event, helper) {
    helper.showImport(component);
  },
  exportDate: function (component, event, helper) {
    var stockData = component.get("v.reports_date");
    console.log("导出数据" + stockData);
    var csv = helper.convertArrayOfObjectsToCSV(component, stockData);
    if (csv == null) {
      return;
    }
    var universalBOM = "\uFEFF";
    var hiddenElement = document.createElement("a");
    hiddenElement.href =
      "data:text/csv;charset=utf-8," + encodeURI(universalBOM + csv);
    hiddenElement.target = "_self"; //
    hiddenElement.download = "ExportData.csv"; // CSV file Name* you can change it.[only name not .csv]
    document.body.appendChild(hiddenElement); // Required for FireFox browser
    hiddenElement.click(); // using click() js function to download csv file
  },
  export_condition: function (component, event, helper) {
    helper.showExport(component);
  },
  select_repores_date: function (component, event, helper) {
    helper.select_repores_date(component, event, helper);
  },
  export: function (component, event, helper) {
    console.log("进入export");
    var stockData = component.get("v.reports_date");
    console.log("查出的数据" + stockData);
  },
  close_import: function (component, event, helper) {
    component.set("v.showMain", true);
    helper.close_import(component);
  },
  close_export: function (component, event, helper) {
    component.set("v.showMain", true);
    helper.close_export(component);
  },
  select_ConsumptionOfConsumables: function (component, event, helper) {
    helper.select_ConsumptionOfConsumables(component, event, helper);
  },
  select_purpose_type: function (component, event, helper) {
    helper.selectPurposeType(component, event, helper);
  },
  select_warlocksNumber: function (component, event, helper) {
    helper.select_warlocksNumber(component, event, helper);
  },
  selectProductClassification: function (component, event, helper) {
    helper.selectProductClassification(component, event, helper);
  },
  selectpurposetype: function (component, event, helper) {
    helper.selectpurposetype(component, event, helper);
  },
  return_main_page: function (component, event, helper) {
    window.open("/customer/", "_self");
  },
  exportErrorInfo: function (component, event, helper) {
    helper.exportErrorInfoHelper(component);
  },
  closeErrorDiv: function (component, event, helper) {
    var errorDiv01 = component.find("errorDiv01");
    $A.util.addClass(errorDiv01, "slds-hide");
  }
});
})
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportHelper.js
Diff too large
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
@@ -1,533 +1,321 @@
<aura:component
  controller="WeeklyReportCmp"
  implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes"
  access="global"
>
  <ltng:require styles="{!$Resource.multilineToastCSS}" /> 
  <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
  <aura:handler
    event="c:strike_evt"
    action="{!c.createAopp}"
    name="strike_evt_addNewRecord"
  />
  <aura:attribute
    name="data"
    type="Agency_Report__c"
    default="{sobjectType:'Agency_Report__c'}"
  />
  <aura:attribute
    name="oppdata"
    type="Agency_Opportunity__c"
    default="{sobjectType:'Agency_Opportunity__c'}"
  />
  <aura:attribute
    name="acondata"
    type="Agency_Contact__c"
    default="{sobjectType:'Agency_Contact__c'}"
  />
  <!-- <aura:attribute name="oppdata_old" type="Agency_Opportunity__c" default="{sobjectType:'Agency_Opportunity__c'}"/> -->
  <aura:attribute name="Close_Forecasted_Date__c_o" type="Date" />
  <aura:attribute name="Amount__c_o" type="String" />
  <aura:attribute name="OCMSale_Price__c_o" type="String" />
  <aura:attribute name="StageName__c_o" type="String" />
  <aura:attribute name="fieldsmap" type="Map" />
  <aura:attribute name="alldata" type="List" />
  <aura:attribute name="allselectlist" type="Map" />
  <aura:attribute name="doclist" type="List" />
  <aura:attribute name="docmap" type="Map" />
  <aura:attribute name="login" type="Boolean" default="false" />
  <aura:attribute name="loginEdit" type="Boolean" default="false" />
  <aura:attribute name="loadOpp" type="Boolean" default="false" />
  <aura:attribute name="reportPageData" type="Map" />
  <aura:attribute name="selectbody" type="String" />
  <aura:attribute name="report_date_list" type="Map" />
  <aura:attribute name="selected_date" type="String" />
  <aura:attribute name="selected_agency_person" type="String" />
  <aura:attribute name="agency_report_header" type="String" />
  <aura:attribute name="agency_report_header_id" type="String" />
  <aura:attribute name="result" type="String" default="" />
  <aura:attribute name="hospital" type="string" default="" />
  <aura:attribute name="hospitalId" type="string" default="" />
  <aura:attribute name="hospitalLinkId" type="string" default="" />
  <aura:handler name="change" value="{!v.hospital}" action="{!c.hosChange}" />
  <aura:attribute name="hospitalList" type="Map" />
  <aura:attribute name="doctor_list" type="Map" />
  <aura:attribute name="doctor_title" type="String" />
  <aura:attribute name="opportunity_list" type="Map" />
  <aura:handler
    name="change"
    value="{!v.data.Opportunity__c}"
    action="{!c.opportunityChange}"
  />
  <aura:attribute name="edit_copy_select_report_id" type="String" />
  <aura:attribute name="create_agency_report_id" type="String" />
  <aura:attribute name="reports" type="List" />
  <aura:attribute name="reports_now" type="List" />
  <aura:attribute name="reports_now_count" type="Integer" />
  <aura:attribute name="mode" type="String" />
  <aura:attribute name="select_report_data" type="Map" />
  <aura:attribute name="select_report_data_radio" type="Map" />
  <aura:attribute name="default_select_doctor_id" type="String" />
  <aura:attribute name="default_select_opportunity_id" type="String" />
  <aura:attribute name="report_count" type="Integer" />
  <aura:attribute name="dialog_type" type="String" />
  <aura:attribute name="truthy" type="Boolean" default="false" />
  <aura:attribute name="list_message" type="String" default="搜索" />
  <aura:attribute name="confirm_status" type="Integer" default="0" />
  <aura:attribute name="modal_confirm_title" type="String" />
  <aura:attribute name="modal_confirm_text" type="String" />
  <aura:attribute name="opportunity_cfilter" type="String" />
  <!-- <aura:handler name="change" value="{!v.data.Product_Category1__c}" action="{!c.productcategoryChange1}"/>
<aura:component controller="WeeklyReportCmp" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes" access="global" >
    <ltng:require styles="{!$Resource.multilineToastCSS}" /> 
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
    <aura:handler event="c:strike_evt" action="{!c.createAopp}" name="strike_evt_addNewRecord"/>
    <aura:attribute name="data" type="Agency_Report__c" default="{sobjectType:'Agency_Report__c'}"/>
    <aura:attribute name="oppdata" type="Agency_Opportunity__c" default="{sobjectType:'Agency_Opportunity__c'}"/>
    <aura:attribute name="acondata" type="Agency_Contact__c" default="{sobjectType:'Agency_Contact__c'}"/>
    <!-- <aura:attribute name="oppdata_old" type="Agency_Opportunity__c" default="{sobjectType:'Agency_Opportunity__c'}"/> -->
    <aura:attribute name="Close_Forecasted_Date__c_o" type="Date"/>
    <aura:attribute name="Amount__c_o" type="String"/>
    <aura:attribute name="OCMSale_Price__c_o" type="String"/>
    <aura:attribute name="StageName__c_o" type="String"/>
    <aura:attribute name="fieldsmap" type="Map"/>
    <aura:attribute name="alldata" type="List"/>
    <aura:attribute name="allselectlist" type="Map"/>
    <aura:attribute name="doclist" type="List"/>
    <aura:attribute name="docmap" type="Map"/>
    <aura:attribute name="login" type="Boolean" default="false"/>
    <aura:attribute name="loginEdit" type="Boolean" default="false" />
    <aura:attribute name="loadOpp" type="Boolean" default="false"/>
    <aura:attribute name="reportPageData" type="Map"/>
    <aura:attribute name="selectbody" type="String"/>
    <aura:attribute name="report_date_list" type="Map"/>
    <aura:attribute name="selected_date" type="String"/>
    <aura:attribute name="selected_agency_person" type="String"/>
    <aura:attribute name="agency_report_header" type="String"/>
    <aura:attribute name="agency_report_header_id" type="String"/>
    <aura:attribute name="result" type="String" default=""/>
    <aura:attribute name="hospital" type="string" default=""/>
    <aura:attribute name="hospitalId" type="string" default=""/>
    <aura:attribute name="hospitalLinkId" type="string" default=""/>
    <aura:handler name="change" value="{!v.hospital}" action="{!c.hosChange}"/>
    <aura:attribute name="hospitalList" type="Map" />
    <aura:attribute name="doctor_list" type="Map"/>
    <aura:attribute name="doctor_title" type="String"/>
    <aura:attribute name="opportunity_list" type="Map"/>
    <aura:handler name="change" value="{!v.data.Opportunity__c}" action="{!c.opportunityChange}"/>
    <aura:attribute name="edit_copy_select_report_id" type="String"/>
    <aura:attribute name="create_agency_report_id" type="String"/>
    <aura:attribute name="reports" type="List"/>
    <aura:attribute name="reports_now" type="List"/>
    <aura:attribute name="reports_now_count" type="Integer"/>
    <aura:attribute name="mode" type="String"/>
    <aura:attribute name="select_report_data" type="Map"/>
    <aura:attribute name="select_report_data_radio" type="Map"/>
    <aura:attribute name="default_select_doctor_id" type="String"/>
    <aura:attribute name="default_select_opportunity_id" type="String"/>
    <aura:attribute name="report_count" type="Integer"/>
    <aura:attribute name="dialog_type" type="String"/>
    <aura:attribute name="truthy" type="Boolean" default="false"/>
    <aura:attribute name="list_message" type="String" default="搜索" />
    <aura:attribute name="confirm_status" type="Integer" default="0" />
    <aura:attribute name="modal_confirm_title" type="String" />
    <aura:attribute name="modal_confirm_text" type="String" />
    <aura:attribute name="opportunity_cfilter" type="String" />
    <!-- <aura:handler name="change" value="{!v.data.Product_Category1__c}" action="{!c.productcategoryChange1}"/>
    <aura:handler name="change" value="{!v.data.Product_Category2__c}" action="{!c.productcategoryChange2}"/>
    <aura:handler name="change" value="{!v.data.Product_Category3__c}" action="{!c.productcategoryChange3}"/> -->
  <!-- <aura:handler name="change" value="{!v.oppdata.StageName__c}" action="{!c.stageNameChange}"/> -->
  <aura:attribute
    name="update_select_report_data_id"
    type="String"
    default=""
  />
    <!-- <aura:handler name="change" value="{!v.oppdata.StageName__c}" action="{!c.stageNameChange}"/> -->
    <aura:attribute name="update_select_report_data_id" type="String" default=""/>
  <!-- 批量添加周报 start-->
  <aura:attribute name="reports_date" type="List" />
  <!-- <aura:attribute name="reports_date1" type="Date" />
    <!-- 批量添加周报 start-->
    <aura:attribute name="reports_date" type="List" />
    <!-- <aura:attribute name="reports_date1" type="Date" />
    <aura:attribute name="reports_date2" type="Date" /> -->
  <aura:attribute
    name="TableContent"
    type="String"
    description=" Show the Result class"
  />
  <aura:attribute
    name="TableContent2"
    type="String"
    description=" Show the Result class"
  />
  <aura:attribute
    name="TargetFileName"
    type="String"
    description="Name of the file"
  />
  <aura:attribute name="tableheaders" type="Object[]" />
  <aura:attribute name="fileContentData" type="String" />
  <aura:attribute name="filename" type="String" />
  <!-- It will display 100 records . Change for your requirement-->
  <aura:attribute name="NumOfRecords" type="Integer" default="1000" />
  <aura:attribute name="showMain" type="Boolean" default="true" />
  <!-- PIPL update Yin Mingjie 21/02/2022 start -->
  <aura:attribute name="AWStoken" type="String" />
  <aura:attribute name="AWSsearch" type="String" />
  <aura:attribute name="AWSinsert" type="String" />
  <aura:attribute name="AWStransactionURL" type="String" />
  <aura:attribute name="AWSDoctor2Map" type="String" />
  <aura:attribute name="awsurl" type="Map" />
  <aura:attribute name="contactawsurl" type="Map" />
  <aura:attribute name="allselectlistAgencyPerson" type="Map" />
  <!-- PIPL update Yin Mingjie 21/02/2022 end -->
    <aura:attribute name="TableContent" type="String"  description=" Show the Result class"/>
    <aura:attribute name="TableContent2" type="String"  description=" Show the Result class"/>
    <aura:attribute name="TargetFileName" type="String"  description="Name of the file"/>
    <aura:attribute name="tableheaders" type="Object[]" />
    <aura:attribute name="fileContentData" type="String"/>
    <aura:attribute name="filename" type="String"/>
    <!-- It will display 100 records . Change for your requirement-->
    <aura:attribute name="NumOfRecords" type="Integer" default="1000"/>
    <aura:attribute name="showMain" type="Boolean" default="true"/>
    <!-- PIPL update Yin Mingjie 21/02/2022 start -->
    <aura:attribute name="AWStoken" type="String"/>
    <aura:attribute name="AWSsearch" type="String"/>
    <aura:attribute name="AWSinsert" type="String"/>
    <aura:attribute name="AWStransactionURL" type="String"/>
    <aura:attribute name="AWSDoctor2Map" type="String"/>
    <aura:attribute name="awsurl" type="Map"/>
    <aura:attribute name="contactawsurl" type="Map"/>
    <aura:attribute name="allselectlistAgencyPerson" type="Map"/>
    <!-- PIPL update Yin Mingjie 21/02/2022 end -->
  <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
  <aura:attribute name="errorData" type="Object" />
  <aura:attribute name="errorColumns" type="List" />
  <!-- show Error information -->
  <aura:attribute name="showErrorInfo" type="Boolean" default="false" />
  <!-- end DTT-zhj 增加错误信息table 2023-05-16-->
    <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
    <aura:attribute name="errorData" type="Object" />
    <aura:attribute name="errorColumns" type="List" />
    <!-- show Error information -->
    <aura:attribute name="showErrorInfo" type="Boolean" default="false" />
    <!-- end DTT-zhj 增加错误信息table 2023-05-16-->
  <!-- 批量添加周报 end-->
  <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
  <ltng:require scripts="{! $Resource.jquery183minjs }" />
  <!--ロード中...-->
  <aura:renderIf isTrue="{!v.login}">
    <aura:renderIf isTrue="{!!v.loginEdit}">
      <!-- add by Deloitte-Link 2023-6-19 -->
      <div class="weeklyReportSpinner">
        <div class="slds-spinner_container">
          <div
            class="slds-spinner--brand slds-spinner slds-spinner--medium"
            role="alert"
          >
            <span id="aa" class="slds-assistive-text">Loading</span>
            <div class="slds-spinner__dot-a"></div>
            <div class="slds-spinner__dot-b"></div>
          </div>
        </div>
      </div>
    <!-- 批量添加周报 end-->
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <!--ロード中...-->
    <aura:renderIf isTrue="{!v.login}">
        <aura:renderIf isTrue="{!!v.loginEdit}">
            <!-- add by Deloitte-Link 2023-6-19 -->
            <div class="weeklyReportSpinner">
                <div class="slds-spinner_container">
                    <div class="slds-spinner--brand slds-spinner slds-spinner--medium" role="alert">
                        <span id="aa" class="slds-assistive-text">Loading</span>
                        <div class="slds-spinner__dot-a"></div>
                        <div class="slds-spinner__dot-b"></div>
                    </div>
                </div>
            </div>
        </aura:renderIf>
    </aura:renderIf>
  </aura:renderIf>
  <div aura:id="report" id="report" class="contents_wrapper">
    <div class="slds-grid slds-wrap slds-grid--pull-padded">
      <div
        class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12"
      >
        周
      </div>
      <div
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12"
      >
        <ui:inputSelect
          aura:id="select_date"
          class="slds-select"
          change="{!c.select_date_change}"
        />
      </div>
      <!-- 代理店担当者 -->
      <div
        class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12"
      >
        {!v.fieldsmap.Person_In_Charge2__c}
      </div>
      <div
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12"
      >
        <ui:inputSelect
          aura:id="select_agency_person"
          class="slds-select agency_person_select"
          change="{!c.select_agency_change}"
        />
      </div>
      <div
        class="tr slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12"
      >
        <ui:button
          aura:id="new_button"
          label="新建"
          press="{!c.new_report}"
          disabled="true"
        />
      </div>
      <div
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12"
      >
        <ui:button
          aura:id="copy_button"
          label="复制"
          press="{!c.copy_button}"
          disabled="true"
        />
        <!-- <ui:button aura:id="import" label="导入" press="{!c.import}" /> -->
        <ui:button aura:id="import" label="导入" press="{!c.import}" />
        <!-- <input type="file" class="file" aura:id="file" onchange="{!c.CreateRecord}"  style="position:absolute;filter:alpha(opacity=0);" size="1" hidden="true" />  -->
        <!-- <ui:button aura:id="import" label="导出" press="{!c.export}"/> -->
        <ui:button
          aura:id="export"
          label="导出"
          press="{!c.export_condition}"
        />
      </div>
    <div aura:id="report" id="report" class="contents_wrapper">
        <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12">
                周
            </div>
            <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12">
                <ui:inputSelect aura:id="select_date" class="slds-select" change="{!c.select_date_change}"/>
            </div>
            <!-- 代理店担当者 -->
            <div class="tr mt5 slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12">
                {!v.fieldsmap.Person_In_Charge2__c}
            </div>
            <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12">
                <ui:inputSelect aura:id="select_agency_person" class="slds-select agency_person_select" change="{!c.select_agency_change}"/>
            </div>
            <div class="tr slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-12 slds-large-size--1-of-12">
                <ui:button aura:id="new_button" label="新建" press="{!c.new_report}" disabled="true"/>
            </div>
            <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12">
                <ui:button aura:id="copy_button" label="复制" press="{!c.copy_button}" disabled="true"/>
                <!-- <ui:button aura:id="import" label="导入" press="{!c.import}" /> -->
                <ui:button aura:id="import" label="导入" press="{!c.import}" />
                <!-- <input type="file" class="file" aura:id="file" onchange="{!c.CreateRecord}"  style="position:absolute;filter:alpha(opacity=0);" size="1" hidden="true" />  -->
                <!-- <ui:button aura:id="import" label="导出" press="{!c.export}"/> -->
                <ui:button aura:id="export" label="导出" press="{!c.export_condition}"/>
            </div>
        </div>
    </div>
  </div>
  <div aura:id="report_list" class="report_list_area">
    <div class="slds-table--edit_container slds-is-relative">
      <table
        class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
        role="grid"
        style="width: 66.75rem"
      >
        <thead>
          <tr class="slds-line-height--reset">
            <th
              class="table_header slds-text-title--caps"
              style="width: 250px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name">周报编号</span>
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 100px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.Person_In_Charge2__c}</span
              >
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 250px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name">医院</span>
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 100px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.Department_Cateogy__c}</span
              >
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 100px; font-size: 13px"
            >
              <!-- PIPL update Yin Mingjie 21/02/2022 start
    <div aura:id="report_list" class="report_list_area" >
        <div class="slds-table--edit_container slds-is-relative">
            <table class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus" role="grid" style="width:66.75rem;">
                <thead>
                    <tr class="slds-line-height--reset">
                        <th class="table_header slds-text-title--caps" style="width: 250px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">周报编号</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 100px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Person_In_Charge2__c}</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 250px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">医院</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 100px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 100px;font-size: 13px;">
                            <!-- PIPL update Yin Mingjie 21/02/2022 start
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.doctor2__r}</span>
                            PIPL update Yin Mingjie 21/02/2022 end-->
              <span
                class="slds-truncate"
                title="Name"
                style="width: 100px; font-size: 13px"
                >{!v.fieldsmap.Agency_Contact__c}</span
              >
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 100px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.visitor_title__c}</span
              >
            </th>
            <th
              class="table_header slds-text-title--caps"
              style="width: 100px; font-size: 13px"
            >
              <span class="slds-truncate" title="Name"
                >{!v.fieldsmap.Purpose_Type__c}</span
              >
            </th>
          </tr>
        </thead>
        <tbody>
          <aura:iteration items="{!v.reports}" var="item" indexVar="index">
            <tr class="slds-hint-parent">
              <td role="gridcell" class="slds-cell-edit">
                <ui:inputRadio
                  class="report_radio"
                  name="report_radio"
                  label="{!item.Name}"
                  change="{!c.change_report_radio}"
                />
                <lightning:buttonIcon
                  class="edit_button"
                  iconName="utility:edit"
                  size="small"
                  alternativeText="edit"
                  value="{!index}"
                  onclick="{!c.edit_button}"
                />
              </td>
              <td role="gridcell" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  <span
                    class="slds-truncate"
                    title="{!item.Person_In_Charge2__r.Name}"
                  >
                    {!item.Person_In_Charge2__r.Name}
                    <!-- <span class="decrypt">{!item.Person_In_Charge2__r.awsdata.lastName}</span> -->
                  </span>
                </span>
              </td>
              <th scope="row" tabindex="0" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  {!item.Agency_Hospital__r.Name}
                </span>
              </th>
              <td role="gridcell" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  <span
                    class="slds-truncate"
                    title="{!item.Department_Cateogy__c}"
                    >{!item.Department_Cateogy__c}</span
                  >
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  <span class="slds-truncate" title="{!item.doctor2__r.Name}">
                    <span class="encrypt">{!item.doctor2__r.Name}</span>
                    <span class="decrypt">{!item.doctor2__r.awsdata.name}</span>
                  </span>
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  <span class="slds-truncate" title="{!item.visitor_title__c}">
                    <span class="encrypt">{!item.visitor_title__c}</span>
                    <span class="decrypt"
                      >{!item.doctor2__r.awsdata.doctorDivision1}</span
                    >
                  </span>
                </span>
              </td>
              <td role="gridcell" class="slds-cell-edit">
                <span class="slds-grid slds-grid--align-spread">
                  <span class="slds-truncate" title="{!item.Purpose_Type__c}"
                    >{!item.Purpose_Type__c}</span
                  >
                </span>
              </td>
            </tr>
          </aura:iteration>
        </tbody>
      </table>
    </div>
    <aura:renderIf isTrue="{!v.report_count > 0}">
      <aura:set attribute="else">
        <div class="no_data_area">{!v.list_message}</div>
      </aura:set>
    </aura:renderIf>
  </div>
  <!--    <ui:button aura:id="test_button" label="test" class="fade animation_on" press="{!c.test}"/>-->
  <!-- 批量添加周报 start-->
  <div
    aura:id="modal_import"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
    aria-labelledby="headerTarget"
  >
    <div class="slds-modal__container">
      <aura:renderIf isTrue="{!v.loginEdit}">
        <lightning:spinner
          alternativeText="Loading"
          size="medium"
          style="width: 100%; height: 80%; top: 50px"
        />
      </aura:renderIf>
      <div class="slds-modal__header">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          周报批量导入
        </h2>
        <ui:button
          aura:id="close_button"
          label="关闭"
          class="close_button slds-button slds-button--neutral slds-order--1"
          press="{!c.close_import}"
        />
      </div>
      <div
        class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium"
      >
        <aura:if isTrue="{!v.showMain}">
          <div>
            <!-- <input type="file" class="file" aura:id="file" onchange="{!c.CreateRecord}" value="导入" /> -->
            <lightning:input
              type="file"
              class="file"
              uara:id="file"
              onchange="{!c.CreateRecord}"
            />
            <!-- <ui:button label="Create Accounts" press="{!c.CreateRecord}"/> -->
          </div>
          <aura:set attribute="else">
            <!-- <ui:outputRichText class="uiOutputRichText slds-m-around-large" value="{!v.TargetFileName}"/>  -->
            <ui:outputRichText
              class="uiOutputRichText slds-m--around-large"
              value="{!v.TableContent}"
            />
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="保存"
                variant="brand"
                onclick="{!c.processFileContent}"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.cancel}"
              />
            </div>
            <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
            <aura:if isTrue="{!v.showErrorInfo}">
              <div class="slds-p-around--large slds-align--absolute-center">
                <lightning:button
                  label="导出错误信息"
                  variant="brand"
                  onclick="{!c.exportErrorInfo}"
                />
              </div>
              <div class="slds-p-around--large slds-align--absolute-center">
                <div style="height: 300px; overflow-x: scroll">
                  <lightning:datatable
                    keyField="id"
                    data="{! v.errorData }"
                    columns="{! v.errorColumns }"
                    hideCheckboxColumn="true"
                  />
                            <span class="slds-truncate" title="Name" style="width: 100px;font-size: 13px;">{!v.fieldsmap.Agency_Contact__c}</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 100px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.visitor_title__c}</span>
                        </th>
                        <th class="table_header slds-text-title--caps" style="width: 100px;font-size: 13px;">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Purpose_Type__c}</span>
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <aura:iteration items="{!v.reports}" var="item" indexVar="index">
                        <tr class="slds-hint-parent">
                            <td role="gridcell" class="slds-cell-edit">
                                <ui:inputRadio class="report_radio" name="report_radio" label="{!item.Name}" change="{!c.change_report_radio}"/>
                                <lightning:buttonIcon class="edit_button" iconName="utility:edit" size="small" alternativeText="edit" value="{!index}" onclick="{!c.edit_button}"/>
                            </td>
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.Person_In_Charge2__r.Name}">
                                        {!item.Person_In_Charge2__r.Name}
                                        <!-- <span class="decrypt">{!item.Person_In_Charge2__r.awsdata.lastName}</span> -->
                                    </span>
                                </span>
                            </td>
                            <th scope="row" tabindex="0" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    {!item.Agency_Hospital__r.Name}
                                </span>
                            </th>
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.Department_Cateogy__c}">{!item.Department_Cateogy__c}</span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">
                                        <span class="encrypt">{!item.doctor2__r.Name}</span>
                                        <span class="decrypt">{!item.doctor2__r.awsdata.name}</span>
                                    </span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.visitor_title__c}">
                                        <span class="encrypt">{!item.visitor_title__c}</span>
                                        <span class="decrypt">{!item.doctor2__r.awsdata.doctorDivision1}</span>
                                    </span>
                                </span>
                            </td>
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.Purpose_Type__c}">{!item.Purpose_Type__c}</span>
                                </span>
                            </td>
                        </tr>
                    </aura:iteration>
                </tbody>
            </table>
        </div>
        <aura:renderIf isTrue="{!v.report_count > 0}">
            <aura:set attribute="else">
                <div class="no_data_area">
                    {!v.list_message}
                </div>
              </div>
            </aura:if>
            <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
          </aura:set>
        </aura:if>
      </div>
            </aura:set>
        </aura:renderIf>
    </div>
  </div>
  <div
    aura:id="modal_importbg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <!-- 批量添加周报 end-->
  <!-- 批量导出周报 start-->
  <div
    aura:id="modal_export"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          周报批量导出
        </h2>
        <ui:button
          aura:id="close_button"
          label="关闭"
          class="close_button slds-button slds-button--neutral slds-order--1"
          press="{!c.close_export}"
        />
      </div>
      <div
        class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium"
      >
        <aura:if isTrue="{!v.showMain}">
          <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            ></div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            >
              活动日开始日期
    <!--    <ui:button aura:id="test_button" label="test" class="fade animation_on" press="{!c.test}"/>-->
    <!-- 批量添加周报 start-->
    <div aura:id="modal_import" role="dialog" tabindex="-1" class="disp_none slds-modal slds-fade-in-open slds-modal--large" aria-labelledby="headerTarget">
        <div class="slds-modal__container ">
            <aura:renderIf isTrue="{!v.loginEdit}">
                <lightning:spinner alternativeText="Loading" size="medium" style="width: 100%; height: 80%;top:50px;" />
            </aura:renderIf>
            <div class="slds-modal__header ">
                <h4 id="headerTarget" class="slds-float--left"></h4>
                <h2 id="headerTarget" class="slds-text-heading--medium">周报批量导入</h2>
                <ui:button aura:id="close_button" label="关闭" class="close_button slds-button slds-button--neutral slds-order--1" press="{!c.close_import}"/>
            </div>
            <div class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium " >
                <aura:if isTrue="{!v.showMain}">
                    <div>
                        <!-- <input type="file" class="file" aura:id="file" onchange="{!c.CreateRecord}" value="导入" /> -->
                        <lightning:input type="file" class="file" uara:id="file" onchange="{!c.CreateRecord}" />
                        <!-- <ui:button label="Create Accounts" press="{!c.CreateRecord}"/> -->
                    </div>
                    <aura:set attribute="else">
                        <!-- <ui:outputRichText class="uiOutputRichText slds-m-around-large" value="{!v.TargetFileName}"/>  -->
                        <ui:outputRichText class="uiOutputRichText slds-m--around-large" value="{!v.TableContent}"/>
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="保存" variant="brand" onclick="{!c.processFileContent}"
                                              />
                            <lightning:button label="取消" variant="brand"
                                              onclick="{!c.cancel}" />
                        </div>
                        <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
                        <aura:if isTrue="{!v.showErrorInfo}">
                            <div class="slds-p-around--large slds-align--absolute-center">
                                <lightning:button label="导出错误信息" variant="brand" onclick="{!c.exportErrorInfo}" />
                            </div>
                            <div class="slds-p-around--large slds-align--absolute-center">
                                <div style="height: 300px;overflow-x:scroll">
                                    <lightning:datatable keyField="id" data="{! v.errorData }"
                                        columns="{! v.errorColumns }" hideCheckboxColumn="true" />
                                </div>
                            </div>
                        </aura:if>
                        <!-- start DTT-zhj 增加错误信息table 2023-05-16-->
                    </aura:set>
                </aura:if>
            </div>
        </div>
    </div>
    <div aura:id="modal_importbg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <!-- 批量添加周报 end-->
              <lightning:input
                type="Date"
                class="slds-input slds-input_bare"
                aura:id="input-report-date1"
              />
    <!-- 批量导出周报 start-->
    <div aura:id="modal_export" role="dialog" tabindex="-1" class="disp_none slds-modal slds-fade-in-open slds-modal--large" >
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <h4 id="headerTarget" class="slds-float--left"></h4>
                <h2 id="headerTarget" class="slds-text-heading--medium">周报批量导出</h2>
                <ui:button aura:id="close_button" label="关闭" class="close_button slds-button slds-button--neutral slds-order--1" press="{!c.close_export}"/>
            </div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            >
              活动日结束日期
              <lightning:input
                type="Date"
                class="slds-input slds-input_bare"
                aura:id="input-report-date2"
              />
            </div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4"
            ></div>
            <div class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium">
                <aura:if isTrue="{!v.showMain}">
                    <div class="slds-grid slds-wrap slds-grid--pull-padded" >
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                        </div>
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                            活动日开始日期
                            <lightning:input type="Date" class="slds-input slds-input_bare " aura:id="input-report-date1" />
                        </div>
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                            活动日结束日期
                            <lightning:input type="Date" class="slds-input slds-input_bare " aura:id="input-report-date2" />
                        </div>
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-4">
                        </div>
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="确认"
                variant="brand"
                onclick="{!c.select_repores_date}"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.close_export}"
              />
            </div>
          </div>
          <!-- <div>
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="确认" variant="brand" onclick="{!c.select_repores_date}"
                                                  />
                            <lightning:button label="取消" variant="brand"
                                                  onclick="{!c.close_export}" />
                        </div>
                    </div>
                    <!-- <div>
                        请输入要导出日报的报活动日的开始和结束日期
                        <force:inputField  aura:id="input-report-date1"/>到
                        <force:inputField  aura:id="input-report-date2"/>
@@ -536,530 +324,296 @@
                        <lightning:button label="取消" variant="brand" 
                                              onclick="{!c.close_export}" /> 
                    </div> -->
          <aura:set attribute="else">
            <ui:outputRichText
              class="uiOutputRichText slds-m--around-large"
              value="{!v.TableContent2}"
            />
            <div class="slds-p-around--large slds-align--absolute-center">
              <lightning:button
                label="确认"
                variant="brand"
                onclick="{!c.exportDate}"
              />
              <lightning:button
                label="取消"
                variant="brand"
                onclick="{!c.close_export}"
              />
            </div>
          </aura:set>
        </aura:if>
      </div>
    </div>
  </div>
  <div
    aura:id="modal_exportbg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <!-- 批量导出周报 end-->
  <div
    aura:id="modal_window"
    role="dialog"
    tabindex="-1"
    class="disp_none slds-modal slds-fade-in-open slds-modal--large"
    aria-labelledby="headerTarget"
  >
    <div class="slds-modal__container">
      <aura:renderIf isTrue="{!v.loginEdit}">
        <lightning:spinner
          alternativeText="Loading"
          size="medium"
          style="width: 100%; height: 80%; top: 50px"
        />
      </aura:renderIf>
      <div class="slds-modal__header">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">
          周报({!v.selected_date}&nbsp;{!v.selected_agency_person})
        </h2>
        <ui:button
          aura:id="close_button"
          label="关闭"
          class="close_button slds-button slds-button--neutral slds-order--1"
          press="{!c.toggle_report}"
        />
      </div>
      <div class="slds-modal__content slds-grow slds-p-around--medium">
        <div class="slds-box slds-theme--shade">
          <div class="slds-grid slds-wrap slds-grid--pull-padded">
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop"
            >
              活动日
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <!-- <force:inputField value="{!v.data.Report_Date__c}" aura:id="input-report-date"/> -->
              <lightning:input
                type="date"
                value="{!v.data.Report_Date__c}"
                aura:id="input-report-date"
                variant="label-hidden"
              />
            </div>
            <!-- 医院 -->
            <div
              aura:id="hospital_list"
              class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5 marginTop"
              data-select="single"
            >
              <!-- <ui:inputText aura:id="hospital_input_text" label="医院" class="field" value="{!v.hospital}" updateOn="keyup"/> -->
              医院
              <lightning:input
                aura:id="hospital_input_text"
                class="field"
                value="{!v.hospital}"
                variant="label-hidden"
                updateOn="keyup"
              />
              <div class="slds-lookup__menu" id="lookup-66">
                <ul class="slds-lookup__list" role="listbox">
                  <aura:iteration var="hospital" items="{!v.hospitalList}">
                    <li
                      role="presentation"
                      onclick="{!c.selectHos}"
                      data-accName="{!hospital.Hospital_Name_readonly__c}"
                      data-accId="{!hospital.Hospital__c}"
                    >
                      <span
                        class="slds-lookup__item-action slds-media"
                        id="lookup-option-498"
                        role="option"
                      >
                        <div class="slds-media__body">
                          <div class="slds-lookup__result-text">
                            {!hospital.Hospital_Name_readonly__c}
                          </div>
                    <aura:set attribute="else">
                        <ui:outputRichText class="uiOutputRichText slds-m--around-large" value="{!v.TableContent2}"/>
                        <div class="slds-p-around--large slds-align--absolute-center">
                            <lightning:button label="确认" variant="brand" onclick="{!c.exportDate}"
                                              />
                            <lightning:button label="取消" variant="brand"
                                              onclick="{!c.close_export}" />
                        </div>
                      </span>
                    </li>
                  </aura:iteration>
                </ul>
              </div>
                    </aura:set>
                </aura:if>
            </div>
            <!-- 科室分类 -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop"
            >
              {!v.fieldsmap.Department_Cateogy__c}
              <ui:inputSelect
                aura:id="select_department"
                class="slds-select"
                change="{!c.select_department}"
              />
            </div>
            <!-- 先生 -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop"
            >
              {!v.fieldsmap.doctor2__c}
              <ui:inputSelect
                aura:id="select_doctor"
                class="slds-select"
                change="{!c.doctor_change}"
              />
            </div>
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-12 marginTop"
            >
              <br />
              <ui:button
                label="新建"
                class="slds-button"
                press="{!c.createCon}"
                disabled="true"
                aura:id="new_con"
              />
            </div>
            <!-- 职位 -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop"
            >
              {!v.fieldsmap.visitor_title__c}
              <div>{!v.doctor_title}</div>
            </div>
            <!-- 活动区分 -->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop"
            >
              {!v.fieldsmap.Purpose_Type__c}
              <ui:inputSelect
                aura:id="select_purpose_type"
                class="slds-select"
                change="{!c.select_purpose_type}"
              />
            </div>
            <!-- 询价 -->
            <div
              aura:id="input-opportunity-opp"
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--4-of-12 slds-large-size--4-of-12 marginTop"
            >
              {!v.fieldsmap.Opportunity__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <!-- <force:inputField value="{!v.data.Opportunity__c}" aura:id="input-opportunity"/> -->
              <c:strike_lookup
                label=""
                object="Agency_Opportunity__c"
                searchField="Name"
                placeholder="搜索经销商询价..."
                iconName="standard:opportunity"
                subtitleField="Department_Cateogy__c,Agency_Opportunity_No__c,Change_To_Opportunity__r.Name"
                order="StageName__c"
                limit="5"
                loadingMessage="Loading..."
                errorMessage="Invalid input"
                allowNewRecords="true"
                overrideNewEvent="true"
                showRecentRecords="true"
                value="{!v.data.Opportunity__c}"
                filter="{!v.opportunity_cfilter}"
                subTitleFormat="{0}+{1}+{2}"
              />
            </div>
            <div
              aura:id="input-opportunity-blank"
              class="lds-p-horizontal--small slds-size--1-of-1 slds-medium-size--8-of-12 slds-large-size--8-of-12 marginTop"
            ></div>
            <div
              aura:id="input-opportunity-stage"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop"
            >
              {!v.fieldsmap.StageName__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <ui:inputSelect aura:id="select_stageName" class="slds-select" />
              <!-- <force:inputField value="{!v.oppdata.StageName__c}" aura:id="input-oppstage" /> -->
            </div>
            <div
              aura:id="input-opportunity-amount1"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop"
            >
              {!v.fieldsmap.Amount__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <force:inputField value="{!v.oppdata.Amount__c}" class="" />
            </div>
            <div
              aura:id="input-opportunity-amount2"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop"
            >
              {!v.fieldsmap.OCMSale_Price__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <force:inputField
                value="{!v.oppdata.OCMSale_Price__c}"
                class=""
              />
            </div>
            <div
              aura:id="input-opportunity-date"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop"
            >
              {!v.fieldsmap.Close_Forecasted_Date__c}
              <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
              <force:inputField
                value="{!v.oppdata.Close_Forecasted_Date__c}"
                class=""
              />
            </div>
            <!-- 製品分類 -->
            <div
              aura:id="product_category_select1"
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop"
            >
              {!v.fieldsmap.Product_Category1__c}
              <!-- <force:inputField value="{!v.data.Product_Category1__c}" aura:id="input-product-category1"/> -->
              <ui:inputSelect
                aura:id="select_Product1"
                class="slds-select"
                change="{!c.productcategoryChange1}"
              />
            </div>
            <div
              aura:id="product_category_select2"
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop"
            >
              {!v.fieldsmap.Product_Category2__c}
              <!-- <force:inputField value="{!v.data.Product_Category2__c}" aura:id="input-product-category2"/> -->
              <ui:inputSelect
                aura:id="select_Product2"
                class="slds-select"
                change="{!c.productcategoryChange2}"
              />
            </div>
            <div
              aura:id="product_category_select3"
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop"
            >
              {!v.fieldsmap.Product_Category3__c}
              <!-- <force:inputField value="{!v.data.Product_Category3__c}" aura:id="input-product-category3"/> -->
              <ui:inputSelect
                aura:id="select_Product3"
                class="slds-select"
                change="{!c.productcategoryChange3}"
              />
            </div>
            <!--SWAG-CBX68C fy 【委托】DAMS系统周报模块内容需求增加 start-->
            <!-- 支援需求 change="{!c.SupportNeeds__c}"-->
            <div
              class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop"
            >
              {!v.fieldsmap.SupportNeeds__c}
              <ui:inputSelect aura:id="SupportNeeds__c" class="slds-select" />
            </div>
            <!--SWAG-CBX68C fy 【委托】DAMS系统周报模块内容需求增加 end-->
            <div
              aura:id="result"
              class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop"
            >
              {!v.fieldsmap.Result__c}
              <ui:inputSelect aura:id="select_result" class="slds-select" />
              <!-- <ui:inputText label="结果" class="bcolor" value="{!v.result}"/> -->
            </div>
          </div>
        </div>
        <div class="save_button_area">
          <ui:button
            aura:id="save_button"
            label="保存并新建"
            class="save_button slds-button slds-button--brand slds-order--3"
            press="{!c.save_report}"
          />
        </div>
    </div>
    <div aura:id="modal_exportbg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <!-- 批量导出周报 end-->
        <aura:renderIf isTrue="{!v.reports_now_count > 0}">
          <div class="mt40 slds-box slds-theme--shade">
            <div class="slds-table--edit_container slds-is-relative">
              <table
                class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus"
                role="grid"
              >
                <thead>
                  <tr class="slds-line-height--reset">
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"></span>
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name">医院</span>
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.Department_Cateogy__c}</span
                      >
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.doctor2__c}</span
                      >
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.visitor_title__c}</span
                      >
                    </th>
                    <th class="table_header slds-text-title--caps">
                      <span class="slds-truncate" title="Name"
                        >{!v.fieldsmap.Purpose_Type__c}</span
                      >
                    </th>
                  </tr>
                </thead>
                <tbody>
                  <aura:iteration
                    items="{!v.reports_now}"
                    var="item"
                    indexVar="index"
                  >
                    <tr aura:id="modal_data_list_tr" class="slds-hint-parent">
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Department_Cateogy__c}"
                            >{!item.Name}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Agency_Hospital__r.Name}"
                            >{!item.Agency_Hospital__r.Name}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Department_Cateogy__c}"
                            >{!item.Department_Cateogy__c}</span
                          >
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.doctor2__r.Name}"
                          >
                            <span class="encrypt">{!item.doctor2__r.Name}</span>
                            <span class="decrypt"
                              >{!item.doctor2NameOrigin}</span
                            >
                          </span>
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.visitor_title__c}"
                          >
                            <span class="encrypt"
                              >{!item.visitor_title__c}</span
                            >
                            <span class="decrypt"
                              >{!item.visitorTitleOrigin}</span
                            >
                          </span>
                        </span>
                      </td>
                      <td role="gridcell" class="slds-cell-edit">
                        <span class="slds-grid slds-grid--align-spread">
                          <span
                            class="slds-truncate"
                            title="{!item.Purpose_Type__c}"
                            >{!item.Purpose_Type__c}</span
                          >
                        </span>
                      </td>
                    </tr>
                  </aura:iteration>
                </tbody>
              </table>
    <div aura:id="modal_window" role="dialog" tabindex="-1" class="disp_none slds-modal slds-fade-in-open slds-modal--large" aria-labelledby="headerTarget">
        <div class="slds-modal__container" >
            <aura:renderIf isTrue="{!v.loginEdit}">
                <lightning:spinner alternativeText="Loading" size="medium" style="width: 100%; height: 80%;top:50px;" />
            </aura:renderIf>
            <div class="slds-modal__header">
                <h4 id="headerTarget" class="slds-float--left"></h4>
                <h2 id="headerTarget" class="slds-text-heading--medium">周报({!v.selected_date}&nbsp;{!v.selected_agency_person})</h2>
                <ui:button aura:id="close_button" label="关闭" class="close_button slds-button slds-button--neutral slds-order--1" press="{!c.toggle_report}"/>
            </div>
          </div>
        </aura:renderIf>
      </div>
            <div class="slds-modal__content slds-grow slds-p-around--medium">
                <div class="slds-box slds-theme--shade">
                    <div class="slds-grid slds-wrap slds-grid--pull-padded" >
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop" >
                            活动日
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <!-- <force:inputField value="{!v.data.Report_Date__c}" aura:id="input-report-date"/> -->
                            <lightning:input type="date" value="{!v.data.Report_Date__c}" aura:id="input-report-date"
                                variant="label-hidden" />
                        </div>
                        <!-- 医院 -->
                        <div aura:id="hospital_list" class="slds-form-element slds-lookup slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-5 marginTop" data-select="single">
                            <!-- <ui:inputText aura:id="hospital_input_text" label="医院" class="field" value="{!v.hospital}" updateOn="keyup"/> -->
                            医院
                            <lightning:input aura:id="hospital_input_text" class="field" value="{!v.hospital}" variant="label-hidden" updateOn="keyup"/>
                            <div class="slds-lookup__menu" id="lookup-66">
                                <ul class="slds-lookup__list" role="listbox">
                                    <aura:iteration var="hospital" items="{!v.hospitalList}">
                                        <li role="presentation" onclick="{!c.selectHos}" data-accName="{!hospital.Hospital_Name_readonly__c}" data-accId="{!hospital.Hospital__c}">
                                            <span class="slds-lookup__item-action slds-media" id="lookup-option-498" role="option">
                                                <div class="slds-media__body">
                                                    <div class="slds-lookup__result-text">{!hospital.Hospital_Name_readonly__c}</div>
                                                </div>
                                            </span>
                                        </li>
                                    </aura:iteration>
                                </ul>
                            </div>
                        </div>
                        <!-- 科室分类 -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop">
                            {!v.fieldsmap.Department_Cateogy__c}
                            <ui:inputSelect aura:id="select_department" class="slds-select" change="{!c.select_department}"/>
                        </div>
                        <!-- 先生 -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop">
                            {!v.fieldsmap.doctor2__c}
                            <ui:inputSelect aura:id="select_doctor" class="slds-select" change="{!c.doctor_change}"/>
                        </div>
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-12 marginTop">
                            <br/>
                            <ui:button label="新建" class="slds-button" press="{!c.createCon}" disabled="true" aura:id="new_con"/>
                        </div>
                        <!-- 职位 -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8 marginTop">
                            {!v.fieldsmap.visitor_title__c}
                            <div>{!v.doctor_title}</div>
                        </div>
                        <!-- 活动区分 -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop">
                            {!v.fieldsmap.Purpose_Type__c}
                            <ui:inputSelect aura:id="select_purpose_type" class="slds-select" change="{!c.select_purpose_type}"/>
                        </div>
                        <!-- 询价 -->
                        <div aura:id="input-opportunity-opp" class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--4-of-12 slds-large-size--4-of-12 marginTop">
                            {!v.fieldsmap.Opportunity__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <!-- <force:inputField value="{!v.data.Opportunity__c}" aura:id="input-opportunity"/> -->
                            <c:strike_lookup label=""
                                    object="Agency_Opportunity__c"
                                    searchField="Name"
                                    placeholder="搜索经销商询价..."
                                    iconName="standard:opportunity"
                                    subtitleField="Department_Cateogy__c,Agency_Opportunity_No__c,Change_To_Opportunity__r.Name"
                                    order="StageName__c"
                                    limit="5"
                                    loadingMessage="Loading..."
                                    errorMessage="Invalid input"
                                    allowNewRecords = "true"
                                    overrideNewEvent = "true"
                                    showRecentRecords ="true"
                                    value="{!v.data.Opportunity__c}"
                                    filter="{!v.opportunity_cfilter}"
                                    subTitleFormat="{0}+{1}+{2}"/>
                        </div>
                        <div aura:id="input-opportunity-blank" class="lds-p-horizontal--small slds-size--1-of-1 slds-medium-size--8-of-12 slds-large-size--8-of-12 marginTop">
                        </div>
                        <div aura:id="input-opportunity-stage" class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop">
                            {!v.fieldsmap.StageName__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <ui:inputSelect aura:id="select_stageName" class="slds-select"/>
                            <!-- <force:inputField value="{!v.oppdata.StageName__c}" aura:id="input-oppstage" /> -->
                        </div>
                        <div aura:id="input-opportunity-amount1" class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop">
                            {!v.fieldsmap.Amount__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <force:inputField value="{!v.oppdata.Amount__c}" class=""/>
                        </div>
                        <div aura:id="input-opportunity-amount2" class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop">
                            {!v.fieldsmap.OCMSale_Price__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <force:inputField value="{!v.oppdata.OCMSale_Price__c}" class=""/>
                        </div>
                        <div aura:id="input-opportunity-date" class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12 marginTop">
                            {!v.fieldsmap.Close_Forecasted_Date__c}
                            <!-- <ui:inputSelect aura:id="select_opportunity" class="slds-select"/> -->
                            <force:inputField value="{!v.oppdata.Close_Forecasted_Date__c}" class=""/>
                        </div>
                        <!-- 製品分類 -->
                        <div aura:id="product_category_select1" class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop">
                            {!v.fieldsmap.Product_Category1__c}
                            <!-- <force:inputField value="{!v.data.Product_Category1__c}" aura:id="input-product-category1"/> -->
                            <ui:inputSelect aura:id="select_Product1" class="slds-select" change="{!c.productcategoryChange1}"/>
                        </div>
                        <div aura:id="product_category_select2" class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop">
                            {!v.fieldsmap.Product_Category2__c}
                            <!-- <force:inputField value="{!v.data.Product_Category2__c}" aura:id="input-product-category2"/> -->
                            <ui:inputSelect aura:id="select_Product2" class="slds-select" change="{!c.productcategoryChange2}"/>
                        </div>
                        <div aura:id="product_category_select3" class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop">
                            {!v.fieldsmap.Product_Category3__c}
                            <!-- <force:inputField value="{!v.data.Product_Category3__c}" aura:id="input-product-category3"/> -->
                            <ui:inputSelect aura:id="select_Product3" class="slds-select" change="{!c.productcategoryChange3}"/>
                        </div>
                        <!--SWAG-CBX68C fy 【委托】DAMS系统周报模块内容需求增加 start-->
                        <!-- 支援需求 change="{!c.SupportNeeds__c}"-->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6 marginTop">
                            {!v.fieldsmap.SupportNeeds__c}
                            <ui:inputSelect aura:id="SupportNeeds__c" class="slds-select" />
                        </div>
                        <!--SWAG-CBX68C fy 【委托】DAMS系统周报模块内容需求增加 end-->
                        <div aura:id="result" class="disp_none slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--3-of-12 slds-large-size--3-of-12 marginTop">
                            {!v.fieldsmap.Result__c}
                            <ui:inputSelect aura:id="select_result" class="slds-select"/>
                            <!-- <ui:inputText label="结果" class="bcolor" value="{!v.result}"/> -->
                        </div>
                    </div>
                </div>
                <div class="save_button_area">
                    <ui:button aura:id="save_button" label="保存并新建" class="save_button slds-button slds-button--brand slds-order--3" press="{!c.save_report}"/>
                </div>
                <aura:renderIf isTrue="{!v.reports_now_count > 0}">
                    <div class="mt40 slds-box slds-theme--shade">
                        <div class="slds-table--edit_container slds-is-relative">
                            <table class="slds-table slds-table--edit slds-table--bordered slds-table--fixed-layout slds-no-cell-focus" role="grid">
                                <thead>
                                    <tr class="slds-line-height--reset">
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name"></span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">医院</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.doctor2__c}</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.visitor_title__c}</span>
                                        </th>
                                        <th class="table_header slds-text-title--caps">
                                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Purpose_Type__c}</span>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <aura:iteration items="{!v.reports_now}" var="item" indexVar="index">
                                        <tr aura:id="modal_data_list_tr" class="slds-hint-parent">
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.Department_Cateogy__c}">{!item.Name}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.Agency_Hospital__r.Name}">{!item.Agency_Hospital__r.Name}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.Department_Cateogy__c}">{!item.Department_Cateogy__c}</span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">
                                                        <span class="encrypt">{!item.doctor2__r.Name}</span>
                                                        <span class="decrypt">{!item.doctor2NameOrigin}</span>
                                                    </span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.visitor_title__c}">
                                                        <span class="encrypt">{!item.visitor_title__c}</span>
                                                        <span class="decrypt">{!item.visitorTitleOrigin}</span>
                                                    </span>
                                                </span>
                                            </td>
                                            <td role="gridcell" class="slds-cell-edit">
                                                <span class="slds-grid slds-grid--align-spread">
                                                    <span class="slds-truncate" title="{!item.Purpose_Type__c}">{!item.Purpose_Type__c}</span>
                                                </span>
                                            </td>
                                        </tr>
                                    </aura:iteration>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </aura:renderIf>
            </div>
        </div>
    </div>
  </div>
  <div
    aura:id="modal_bg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
  <div
    aura:id="modal_confirm"
    role="dialog"
    tabindex="-2"
    aria-labelledby="header43"
    class="disp_none slds-modal slds-fade-in-open"
  >
    <div class="slds-modal__container">
      <div class="slds-modal__header">
        <h2 id="header43" class="slds-text-heading--medium">
          {!v.modal_confirm_title}
        </h2>
      </div>
      <div class="slds-modal__content slds-p-around--medium">
        <p>{!v.modal_confirm_text}</p>
      </div>
      <div class="slds-modal__footer">
        <ui:button
          label="是"
          class="slds-button slds-button--brand"
          press="{!c.yes_button}"
        />
        <ui:button
          label="否"
          class="slds-button slds-button--neutral"
          press="{!c.no_button}"
        />
      </div>
    <div aura:id="modal_bg" class="disp_none slds-backdrop slds-backdrop--open"></div>
    <div aura:id="modal_confirm" role="dialog" tabindex="-2" aria-labelledby="header43" class="disp_none slds-modal slds-fade-in-open">
        <div class="slds-modal__container">
            <div class="slds-modal__header">
                <h2 id="header43" class="slds-text-heading--medium">{!v.modal_confirm_title}</h2>
            </div>
            <div class="slds-modal__content slds-p-around--medium">
                <p>{!v.modal_confirm_text}</p>
            </div>
            <div class="slds-modal__footer">
                <ui:button label="是" class="slds-button slds-button--brand" press="{!c.yes_button}"/>
                <ui:button label="否" class="slds-button slds-button--neutral" press="{!c.no_button}" />
            </div>
        </div>
    </div>
  </div>
  <div
    aura:id="modal_confirm_bg"
    class="disp_none slds-backdrop slds-backdrop--open"
  ></div>
    <div aura:id="modal_confirm_bg" class="disp_none slds-backdrop slds-backdrop--open"></div>
  <div
    aura:id="modal_newAC"
    role="dialog"
    tabindex="-3"
    aria-labelledby="headertest"
    class="disp_none slds-modal slds-fade-in-open"
  >
    <div class="slds-modal__container">
      <aura:renderIf isTrue="{!v.loginEdit}">
        <lightning:spinner
          alternativeText="Loading"
          size="medium"
          style="width: 100%; height: 80%; top: 50px"
        />
      </aura:renderIf>
      <div class="slds-modal__header">
        <h2 id="headertest" class="slds-text-heading--medium">新建.客户人员</h2>
      </div>
      <div class="slds-modal__content slds-p-around--medium">
        <lightning:recordEditForm
          aura:id="recordEditForm"
          objectApiName="Agency_Contact__c"
          onsuccess="{!c.handleSuccess}"
          onload="{!c.showRequiredFields}"
          onsubmit="{!c.handleSubmit}"
        >
          <lightning:messages aura:id="OppMessage" />
          <!-- onload="{!c.showRequiredFields}" -->
          <aura:renderIf isTrue="{!v.truthy}">
            <lightning:inputField
              fieldName="Name"
              aura:id="newOpportunityField"
            />
            <lightning:inputField
              fieldName="Type__c"
              aura:id="newOpportunityField"
            />
            <lightning:inputField
              fieldName="Doctor_Division1__c"
              aura:id="newOpportunityField"
            />
            <!-- <lightning:inputField class="customRequired none" aura:id="Input_type__c" fieldName="Type__c"/>
    <div aura:id="modal_newAC" role="dialog" tabindex="-3" aria-labelledby="headertest" class="disp_none slds-modal slds-fade-in-open">
        <div class="slds-modal__container">
            <aura:renderIf isTrue="{!v.loginEdit}">
                <lightning:spinner alternativeText="Loading" size="medium" style="width: 100%; height: 80%;top:50px;" />
            </aura:renderIf>
            <div class="slds-modal__header">
                <h2 id="headertest" class="slds-text-heading--medium">新建.客户人员</h2>
            </div>
            <div class="slds-modal__content slds-p-around--medium">
                <lightning:recordEditForm aura:id="recordEditForm"  objectApiName="Agency_Contact__c" onsuccess="{!c.handleSuccess}" onload="{!c.showRequiredFields}" onsubmit="{!c.handleSubmit}">
                    <lightning:messages aura:id="OppMessage" />
                    <!-- onload="{!c.showRequiredFields}" -->
                    <aura:renderIf isTrue="{!v.truthy}">
                        <lightning:inputField fieldName="Name" aura:id="newOpportunityField" />
                        <lightning:inputField fieldName="Type__c" aura:id="newOpportunityField" />
                        <lightning:inputField fieldName="Doctor_Division1__c" aura:id="newOpportunityField" />
                        <!-- <lightning:inputField class="customRequired none" aura:id="Input_type__c" fieldName="Type__c"/>
                        <lightning:inputField class="customRequired none" aura:id="Input_Doctor_Division1__c" fieldName="Doctor_Division1__c"/> -->
          </aura:renderIf>
          <br />
          <br />
          <br />
          <br />
          <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="保存"
            />
          </div>
        </lightning:recordEditForm>
      </div>
                    </aura:renderIf>
                    <br/>
                    <br/>
                    <br/>
                    <br/>
                    <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="保存" />
                    </div>
                </lightning:recordEditForm>
            </div>
        </div>
    </div>
  </div>
</aura:component>
</aura:component>
force-app/main/default/aura/WeeklyReport/WeeklyReport.css
@@ -1,170 +1,169 @@
.THIS .bcolor {
  color: #333;
    color: #333;
}
.THIS.height100vh {
  height: 100vh;
    height: 100vh;
}
/* .THIS.contents_wrapper {
    padding-top: 50px;
    width: 105%;
} */
.THIS .mt5 {
  margin-top: 5px;
    margin-top: 5px;
}
.THIS .mt40 {
  margin-top: 40px;
    margin-top: 40px;
}
.THIS .edit_button {
  float: right;
  margin: -1.5em 0.5em 0 0;
  border: 0;
    float: right;
    margin: -1.5em 0.5em 0 0;
    border: 0;
}
.THIS .no_data_area {
  text-align: center;
  margin: 0.5em 0;
    text-align: center;
    margin: .5em 0;
}
.THIS.report_list_area {
  margin: 40px 0 20px 0px;
  height: 60vh;
  overflow-y: scroll;
    margin: 40px 0 20px 0px;
    height: 60vh;
    overflow-y: scroll;
}
.THIS .report_radio {
  float: left;
    float: left;
}
.THIS .table_header {
  width: 9.4rem;
  height: 2em;
    width: 9.4rem;
    height: 2em;
}
.THIS.disp_none {
  display: none;
    display: none;
}
.THIS .disp_none {
  display: none;
    display: none;
}
.THIS .tr {
  text-align: right;
    text-align: right;
}
.THIS .close_button {
  float: right;
  margin-top: -2em;
    float: right;
    margin-top: -2em;
}
.THIS .close_icn svg {
  fill: #fefefe;
    fill: #fefefe;
}
.THIS .slds-progress__marker {
  cursor: default;
    cursor: default;
}
.THIS .progress_0 {
  width: 0%;
    width: 0%;
}
.THIS .progress_100 {
  width: 100%;
    width: 100%;
}
.THIS .new_btn_area {
  text-align: center;
  margin-top: 22px;
    text-align: center;
    margin-top: 22px;
}
.THIS .new_btn {
  width: 100%;
    width: 100%;
}
.THIS .save_button_area {
  margin: 1em 0;
  text-align: right;
    margin: 1em 0;
    text-align: right;
}
.THIS .save_button {
  background-color: #ffa500;
  border: 1px solid #ff8c00;
    background-color: #ffa500;
    border: 1px solid #ff8c00;
}
.THIS .report_data_header {
  border-bottom: 2px solid #ccc;
    border-bottom: 2px solid #ccc;
}
.THIS .report_data_area {
  border-bottom: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}
.THIS.fade {
  transition: 5s opacity linear;
    transition: 5s opacity linear;
}
.THIS.animation_off {
  opacity: 0;
    opacity: 0;
}
.THIS.animation_on {
  opacity: 1;
    opacity: 1;
}
.THIS .fade {
  transition: 5s opacity linear;
    transition: 5s opacity linear;
}
.THIS .animation_off {
  opacity: 0;
    opacity: 0;
}
.THIS .animation_on {
  opacity: 1;
    opacity: 1;
}
.THIS .divbotuser {
  width: fit-content;
.THIS .divbotuser{
    width:fit-content;
}
.THIS .toastMessage.forceActionsText {
  white-space: pre-line !important;
.THIS .toastMessage.forceActionsText{
    white-space : pre-line !important;
}
.THIS .slds-file-selector__dropzone .slds-file-selector__text {
  display: none;
.THIS .slds-file-selector__dropzone .slds-file-selector__text{
    display: none;
}
.THIS .slds-input:focus,
.THIS .slds-input:active {
  border-color: rgb(216, 221, 230);
  box-shadow: none;
.THIS .slds-input:focus, .THIS .slds-input:active {
     border-color: rgb(216, 221, 230);
     box-shadow: none;
}
.THIS .customRequired {
  font-weight: 400;
}
.THIS .customRequired:before {
  content: "*";
  margin: 0 0.125rem 0 0.125rem;
  color: rgb(194, 57, 52);
  float: left;
}
.THIS .none {
  display: none;
.THIS .customRequired{
     font-weight: 400;
}
.THIS .customRequired:before{
     content: "*";
     margin: 0 0.125rem 0 0.125rem;
     color: rgb(194, 57, 52);
     float: left;
}
.THIS .none{
     display:none;
}
.THIS tr .decrypt {
  display: none;
.THIS tr .decrypt{
    display: none;
}
.THIS tr:hover .decrypt {
  display: unset;
.THIS tr:hover .decrypt{
    display: unset;
}
.THIS tr:hover .encrypt {
  display: none;
.THIS tr:hover .encrypt{
    display: none;
}
/* add by Deloitte-Link 2023-6-19 start*/
.THIS .weeklyReportSpinner {
  top: 100px;
.THIS .weeklyReportSpinner{
    top:100px;
}
.THIS .weeklyReportSpinnerEdit {
  top: 50px;
.THIS .weeklyReportSpinnerEdit{
    top:50px;
}
.THIS .slds-spinner_container {
  position: absolute;
  top: 100px;
.THIS .slds-spinner_container{
    position: absolute;
    top:100px;
}
.THIS .slds-spinner_containerEdit {
  position: absolute;
  top: 50px;
.THIS .slds-spinner_containerEdit{
    position: absolute;
    top:50px;
}
.THIS .marginTop {
  margin-top: 10px;
.THIS .marginTop{
    margin-top: 10px;
}
.THIS .custom-input .uiInput {
  height: 2rem;
    height: 2rem;
}
/* add by Deloitte-Link 2023-6-19 end*/
/* add by Deloitte-Link 2023-6-19 end*/
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
@@ -1,354 +1,326 @@
({
  doInit: function (component, event, helper) {
    console.log("zhj 新方案weeklyReport");
    if (window.location.href.endsWith("weekly-report")) {
      helper.doinit(component, event, helper);
    } else {
      helper.hideCmp(component, event, helper);
    }
    component.set("v.showErrorInfo", false);
  },
    doInit : function(component, event, helper) {
        console.log('zhj 新方案weeklyReport');
        if (window.location.href.endsWith("weekly-report")) {
            helper.doinit(component, event, helper);
        } else {
            helper.hideCmp(component, event, helper);
        }
        component.set("v.showErrorInfo", false);
    },
  createAopp: function (component, event, helper) {
    var addRecordEvent = $A.get("e.force:createRecord");
    addRecordEvent.setParams({
      entityApiName: "Agency_Opportunity__c",
      recordTypeId: "012100000006KW7"
    });
    addRecordEvent.fire();
    component.set("v.showErrorInfo", false);
  },
    createAopp : function(component, event, helper) {
        var addRecordEvent = $A.get('e.force:createRecord');
        addRecordEvent.setParams({
            entityApiName: 'Agency_Opportunity__c',
            recordTypeId: '012100000006KW7'
        });
        addRecordEvent.fire();
        component.set("v.showErrorInfo", false);
    },
    new_report : function(component, event, helper) {
        component.find('save_button').set('v.label', '保存并新建');
        component.set('v.data.Report_Date__c', '');
        helper.new_report(component, event, helper);
    },
    copy_button : function(component, event, helper) {
        component.find('save_button').set('v.label', '保存并新建');
        helper.copy_button(component, event, helper);
    },
    change_report_radio : function(component, event, helper) {
        helper.change_report_radio(component, event, helper);
    },
    edit_button : function(component, event, helper) {
        component.find('save_button').set('v.label', '保存');
        helper.edit_button(component, event, helper);
    },
    createCon : function(component, event, helper) {
        helper.createCon(component, event, helper);
    },
  new_report: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存并新建");
    component.set("v.data.Report_Date__c", "");
    helper.new_report(component, event, helper);
  },
  copy_button: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存并新建");
    helper.copy_button(component, event, helper);
  },
  change_report_radio: function (component, event, helper) {
    helper.change_report_radio(component, event, helper);
  },
  edit_button: function (component, event, helper) {
    component.find("save_button").set("v.label", "保存");
    helper.edit_button(component, event, helper);
  },
  createCon: function (component, event, helper) {
    helper.createCon(component, event, helper);
  },
  showRequiredFields: function (component, event, helper) {
    $A.util.removeClass(component.find("newOpportunityField"), "none");
    $A.util.removeClass(component.find("newOpportunityField"), "none");
  },
  handleSuccess: function (component, event, helper) {
    helper.handleSuccess(component, event, helper);
  },
  handleSubmit: function (component, event, helper) {
    /*
    showRequiredFields: function(component, event, helper){
        $A.util.removeClass(component.find("newOpportunityField"), "none");
        $A.util.removeClass(component.find("newOpportunityField"), "none");
    },
    handleSuccess : function(component, event, helper) {
        helper.handleSuccess(component, event, helper);
    },
    handleSubmit : function(component, event, helper) {
        /*
        var params = event.getParams();
        params.fields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
        console.log(params);
        event.setParams(params);
        */
    event.preventDefault(); // stop form submission
    // vivek 添加验证 start
    // helper.handleFormSubmit(component);
    var showValidationError = false;
    var fields = component.find("newOpportunityField");
    var vaildationFailReason = "";
    // var vaildationFailReason2 = '';
    // var currentDate = new Date().toJSON().slice(0,10);
        event.preventDefault(); // stop form submission
        // vivek 添加验证 start
        // helper.handleFormSubmit(component);
        var showValidationError = false;
        var fields = component.find("newOpportunityField");
        var vaildationFailReason = '';
        // var vaildationFailReason2 = '';
        // var currentDate = new Date().toJSON().slice(0,10);
        // PIPL update Yin Mingjie 21/02/2022 start
        let agencyReport = Object.create(null);
        // PIPL update Yin Mingjie 21/02/2022 end
    // PIPL update Yin Mingjie 21/02/2022 start
    let agencyReport = Object.create(null);
    // PIPL update Yin Mingjie 21/02/2022 end
    fields.forEach(function (field) {
      if (
        field.get("v.fieldName") === "Type__c" &&
        $A.util.isEmpty(field.get("v.value"))
      ) {
        showValidationError = true;
        vaildationFailReason = "分类不能为空!";
      } else if (
        field.get("v.fieldName") === "Doctor_Division1__c" &&
        $A.util.isEmpty(field.get("v.value"))
      ) {
        showValidationError = true;
        if (vaildationFailReason != "") {
          vaildationFailReason += "医生区分(职务)不能为空!";
        } else {
          vaildationFailReason = "医生区分(职务)不能为空!";
        }
      }
      // PIPL update Yin Mingjie 21/02/2022 start
      if (field.get("v.fieldName") === "Name") {
        agencyReport["name"] = field.get("v.value");
      } else if (field.get("v.fieldName") === "Type__c") {
        agencyReport["type"] = field.get("v.value");
      } else if (field.get("v.fieldName") === "Doctor_Division1__c") {
        agencyReport["doctorDivision1"] = field.get("v.value");
      }
      // PIPL update Yin Mingjie 21/02/2022 end
    });
    if (!showValidationError) {
      // PIPL update Yin Mingjie 21/02/2022 start
      /*
        fields.forEach(function (field) {
            if(field.get("v.fieldName") === 'Type__c' && $A.util.isEmpty(field.get("v.value"))){
                showValidationError = true;
                vaildationFailReason = "分类不能为空!";
            }else if(field.get("v.fieldName") === 'Doctor_Division1__c' && $A.util.isEmpty(field.get("v.value"))){
                showValidationError = true;
                if(vaildationFailReason != ''){
                    vaildationFailReason += "医生区分(职务)不能为空!";
                }else{
                    vaildationFailReason = "医生区分(职务)不能为空!";
                }
            }
            // PIPL update Yin Mingjie 21/02/2022 start
            if(field.get("v.fieldName") === 'Name'){
                agencyReport['name'] = field.get("v.value");
            }else if(field.get("v.fieldName") === 'Type__c'){
                agencyReport['type'] = field.get("v.value");
            }else if(field.get("v.fieldName") === 'Doctor_Division1__c'){
                agencyReport['doctorDivision1'] = field.get("v.value");
            }
            // PIPL update Yin Mingjie 21/02/2022 end
        });
        if (!showValidationError) {
            // PIPL update Yin Mingjie 21/02/2022 start
            /*
            var eventFields = event.getParam("fields");
            eventFields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
            component.find('recordEditForm').submit(eventFields);
            */
      var agencyHospitalid = component.get("v.hospitalLinkId");
      //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;
            var agencyHospitalid = component.get('v.hospitalLinkId');
            //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') + 'V2';
                        component.set('v.loginEdit',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"
                    });
                }
                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);
            })
            //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") + "V2";
            // 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.loginEdit", 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"
            });
          }
            // PIPL update Yin Mingjie 21/02/2022 end
        }else{
            component.find('OppMessage').setError(vaildationFailReason);
        }
      );
      //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 eventFields = event.getParam("fields");
        // eventFields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
        // component.find('recordEditForm').submit(eventFields);
        // vivek 添加验证 end
    },
    createCancel : function(component, event, helper) {
        helper.createCancel(component, event, helper);
    },
    yes_button : function(component, event, helper) {
        component.set('v.confirm_status', 1);
        helper.close_confirm(component, component.get('v.modal_confirm_title'), component.get('v.modal_confirm_text'));
    },
      // var token = component.get('v.AWStoken');
      // var newUrl = component.get('v.AWSinsert');
    no_button : function(component, event, helper) {
        component.set('v.confirm_status', 2);
        helper.close_confirm(component, component.get('v.modal_confirm_title'), component.get('v.modal_confirm_text'));
    },
    toggle_report : function(component, event, helper) {
        helper.toggle_report(component);
    },
      // component.set('v.login',true);
      // helper.insert_agencycontact(component,token,newUrl,data,agencyHospitalid,helper);
    save_report : function(component, event, helper) {
        helper.save_report(component, event, helper);
    },
    select_date_change : function(component, event, helper) {
        helper.select_date_change(component, event, helper);
    },
    select_agency_change : function(component, event, helper) {
        helper.select_agency_change(component, event, helper);
    },
    hosChange : function(component, event, helper) {
        var hospital_name = event.getParam("value");
        if (hospital_name.match(/(\S+\s)+/)) {
            helper.searchHos(component, event, helper);
        } else {
            helper.hideSearch(component, event, helper);
        }
    },
    selectHos : function(component, event, helper) {
        helper.selectHos(component, event, helper);
        helper.setOpportunity_cfilter(component);
    },
    select_department : function(component, event, helper) {
        helper.select_department(component, event, helper);
        helper.setOpportunity_cfilter(component);
    },
    select_purpose_type : function(component, event, helper) {
        helper.select_purpose_type(component, event, helper);
    },
    doctor_change : function(component, event, helper) {
        helper.doctor_change(component, event, helper);
    },
    opportunityChange : function(component, event, helper) {
        helper.opportunityChange(component, event, helper);
    },
    productcategoryChange1 : function(component, event, helper) {
        helper.productcategoryChange1(component, event, helper);
    },
    productcategoryChange2 : function(component, event, helper) {
        helper.productcategoryChange2(component, event, helper);
    },
    productcategoryChange3 : function(component, event, helper) {
        helper.productcategoryChange3(component, event, helper);
    },
    stageNameChange : function(component, event, helper) {
        helper.stageNameChange(component, event, helper);
    },
    onDragOver : function(component, event, helper) {
        event.preventDefault();
    },
    onDrop : function(component, event, helper) {
        event.stopPropagation();
        event.preventDefault();
        event.dataTransfer.dropEffect='copy';
        var files=event.dataTransfer.files;
        helper.readFile(component,helper,files[0]);
    },
    CreateRecord : function(component, event, helper){
        var files = event.getSource().get("v.files");
        // var fileInput = component.find("file").getElement();
        // var file = fileInput.files[0];
        helper.readFile(component,helper,files[0]);
        component.set("v.showErrorInfo", false);
    },
      // PIPL update Yin Mingjie 21/02/2022 end
    } else {
      component.find("OppMessage").setError(vaildationFailReason);
    }
    // var eventFields = event.getParam("fields");
    // eventFields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
    // component.find('recordEditForm').submit(eventFields);
    // vivek 添加验证 end
  },
    processFileContent : function(component,event,helper){
        helper.saveRecords(component,event,helper);
        component.set("v.showErrorInfo", false);
    },
    cancel : function(component,event,helper){
        component.set("v.showMain",true);
    },
  createCancel: function (component, event, helper) {
    helper.createCancel(component, event, helper);
  },
    import : function(component,event,helper){
        // component.find('file').click();
        // console.log('lll'+component.find('file'));
        helper.showImport(component);
    },
    exportDate : function(component,event,helper){
        var stockData = component.get("v.reports_date");
        console.log('导出数据'+stockData);
        var csv = helper.convertArrayOfObjectsToCSV(component,stockData);
        if (csv == null){return;}
  yes_button: function (component, event, helper) {
    component.set("v.confirm_status", 1);
    helper.close_confirm(
      component,
      component.get("v.modal_confirm_title"),
      component.get("v.modal_confirm_text")
    );
  },
        // ####--code for create a temp. <a> html tag [link tag] for download the CSV file--####
        var universalBOM = "\uFEFF";
        var hiddenElement = document.createElement('a');
        hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(universalBOM+csv);
        hiddenElement.target = '_self'; //
        hiddenElement.download = 'ExportData.csv';  // CSV file Name* you can change it.[only name not .csv]
        document.body.appendChild(hiddenElement); // Required for FireFox browser
        hiddenElement.click(); // using click() js function to download csv file
        // helper.showExport(component);
    },
  no_button: function (component, event, helper) {
    component.set("v.confirm_status", 2);
    helper.close_confirm(
      component,
      component.get("v.modal_confirm_title"),
      component.get("v.modal_confirm_text")
    );
  },
    export_condition : function(component,event,helper){
        helper.showExport(component);
    },
  toggle_report: function (component, event, helper) {
    helper.toggle_report(component);
  },
  save_report: function (component, event, helper) {
    helper.save_report(component, event, helper);
  },
  select_date_change: function (component, event, helper) {
    helper.select_date_change(component, event, helper);
  },
  select_agency_change: function (component, event, helper) {
    helper.select_agency_change(component, event, helper);
  },
  hosChange: function (component, event, helper) {
    var hospital_name = event.getParam("value");
    if (hospital_name.match(/(\S+\s)+/)) {
      helper.searchHos(component, event, helper);
    } else {
      helper.hideSearch(component, event, helper);
    }
  },
  selectHos: function (component, event, helper) {
    helper.selectHos(component, event, helper);
    helper.setOpportunity_cfilter(component);
  },
  select_department: function (component, event, helper) {
    helper.select_department(component, event, helper);
    helper.setOpportunity_cfilter(component);
  },
  select_purpose_type: function (component, event, helper) {
    helper.select_purpose_type(component, event, helper);
  },
  doctor_change: function (component, event, helper) {
    helper.doctor_change(component, event, helper);
  },
  opportunityChange: function (component, event, helper) {
    helper.opportunityChange(component, event, helper);
  },
  productcategoryChange1: function (component, event, helper) {
    helper.productcategoryChange1(component, event, helper);
  },
  productcategoryChange2: function (component, event, helper) {
    helper.productcategoryChange2(component, event, helper);
  },
  productcategoryChange3: function (component, event, helper) {
    helper.productcategoryChange3(component, event, helper);
  },
  stageNameChange: function (component, event, helper) {
    helper.stageNameChange(component, event, helper);
  },
  onDragOver: function (component, event, helper) {
    event.preventDefault();
  },
  onDrop: function (component, event, helper) {
    event.stopPropagation();
    event.preventDefault();
    event.dataTransfer.dropEffect = "copy";
    var files = event.dataTransfer.files;
    helper.readFile(component, helper, files[0]);
  },
  CreateRecord: function (component, event, helper) {
    var files = event.getSource().get("v.files");
    // var fileInput = component.find("file").getElement();
    // var file = fileInput.files[0];
    helper.readFile(component, helper, files[0]);
    component.set("v.showErrorInfo", false);
  },
  processFileContent: function (component, event, helper) {
    helper.saveRecords(component, event, helper);
    component.set("v.showErrorInfo", false);
  },
  cancel: function (component, event, helper) {
    component.set("v.showMain", true);
  },
  import: function (component, event, helper) {
    // component.find('file').click();
    // console.log('lll'+component.find('file'));
    helper.showImport(component);
  },
  exportDate: function (component, event, helper) {
    var stockData = component.get("v.reports_date");
    console.log("导出数据" + stockData);
    var csv = helper.convertArrayOfObjectsToCSV(component, stockData);
    if (csv == null) {
      return;
    }
    // ####--code for create a temp. <a> html tag [link tag] for download the CSV file--####
    var universalBOM = "\uFEFF";
    var hiddenElement = document.createElement("a");
    hiddenElement.href =
      "data:text/csv;charset=utf-8," + encodeURI(universalBOM + csv);
    hiddenElement.target = "_self"; //
    hiddenElement.download = "ExportData.csv"; // CSV file Name* you can change it.[only name not .csv]
    document.body.appendChild(hiddenElement); // Required for FireFox browser
    hiddenElement.click(); // using click() js function to download csv file
    // helper.showExport(component);
  },
  export_condition: function (component, event, helper) {
    helper.showExport(component);
  },
  select_repores_date: function (component, event, helper) {
    helper.select_repores_date(component, event, helper);
    // var stockData = component.get("v.reports_date");
    // console.log('查出的数据'+stockData);
    // helper.showExportDate(component,stockData);
    // this.export(component,event,helper);
  },
  export: function (component, event, helper) {
    console.log("进入export");
    var stockData = component.get("v.reports_date");
    console.log("查出的数据" + stockData);
    // helper.showExportDate(component,stockData);
    // helper.showExport(component);
  },
  close_import: function (component, event, helper) {
    component.set("v.showMain", true);
    helper.close_import(component);
  },
  close_export: function (component, event, helper) {
    component.set("v.showMain", true);
    helper.close_export(component);
  },
  exportErrorInfo: function (component, event, helper) {
    helper.exportErrorInfoHelper(component);
  }
});
    select_repores_date : function(component,event,helper){
        helper.select_repores_date(component,event,helper);
        // var stockData = component.get("v.reports_date");
        // console.log('查出的数据'+stockData);
        // helper.showExportDate(component,stockData);
        // this.export(component,event,helper);
    },
    export : function(component,event,helper){
        console.log('进入export');
        var stockData = component.get("v.reports_date");
        console.log('查出的数据'+stockData);
        // helper.showExportDate(component,stockData);
        // helper.showExport(component);
    },
    close_import : function(component,event,helper){
        component.set("v.showMain",true);
        helper.close_import(component);
    },
    close_export : function(component,event,helper){
        component.set("v.showMain",true);
        helper.close_export(component);
    },
    exportErrorInfo: function(component,event,helper){
        helper.exportErrorInfoHelper(component);
    },
})
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
Diff too large
force-app/main/default/classes/ArriveGoodsController.cls
Diff too large
force-app/main/default/classes/ArriveGoodsControllerTest.cls
Diff too large
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls
@@ -1,234 +1,163 @@
@isTest
public class ArriveGoodsControllerTestV2 {
  @isTest
  static void myUnitTest() {
    // // TO DO: implement unit test
    List<RecordType> rectCo = [
      SELECT Id
      FROM RecordType
      WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
    ];
    if (rectCo.size() == 0) {
      return;
    }
    // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
    Profile prof = [
      SELECT Id
      FROM Profile
      WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
    ];
    @isTest
    static void myUnitTest() {
        // // TO DO: implement unit test
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
        if (rectCo.size() == 0) {
            return;
        }
        // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
        Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
    Account myAccount2 = new Account(
      name = 'Testaccount002',
      Dealer_discount__c = 20,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999900'
    );
    Account myAccount1 = new Account(
      name = 'Testaccount001',
      Dealer_discount__c = 30,
      RecordTypeId = rectCo[0].Id
    );
    insert new List<account>{ myAccount1, myAccount2 };
        Account myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900');
        Account myAccount1 = new Account(name='Testaccount001',Dealer_discount__c =30,RecordTypeId = rectCo[0].Id);
        insert new account[]{myAccount1,myAccount2};
    Contact core = new Contact(
      email = 'jplumber@salesforce.com',
      firstname = 'Joe',
      lastname = 'Plumber',
      accountid = myAccount1.id
    );
    insert core;
    user MyUser_Test = new User(
      ContactId = core.id,
      Alias = 'newUser',
      Email = 'newuser@testorg.com',
      EmailEncodingKey = 'UTF-8',
      LastName = 'TestUser',
      LanguageLocaleKey = 'zh_CN',
      LocaleSidKey = 'zh_CN',
      ProfileId = prof.Id,
      TimeZoneSidKey = 'Asia/Shanghai',
      UserName = 'testUser@testorg.com',
      UserPro_Type__c = 'ET'
    );
    System.runAs(new User(Id = UserInfo.getUserId())) {
      insert MyUser_Test;
    }
        Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
        insert core;
        user MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',UserPro_Type__c = 'ET');
        System.runAs(new User(Id = UserInfo.getUserId())){
            insert MyUser_Test;
        }
    // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
    // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // insert new Product2[] {prod01,prod02};
    System.runAs(MyUser_Test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200311',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200312',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      // Order1.Dealer_Info__c = myAccount1.id;
      Order1.Dealer_Info__c = myAccount1.id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      Order1.Total_num__c = 3;
      Order1.OrderNumber_arrived__c = 1;
      Order1.Delivery_detail_count__c = 1;
      Order1.Order_ProType__c = 'ET';
      insert Order1;
        // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
        // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // insert new Product2[] {prod01,prod02};
        system.runAs(MyUser_Test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[] {prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01_001';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            // Order1.Dealer_Info__c = myAccount1.id;
            Order1.Dealer_Info__c = myAccount1.id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
            Order1.Total_num__c = 3;
            Order1.OrderNumber_arrived__c =1;
            Order1.Delivery_detail_count__c=1;
            Order1.Order_ProType__c = 'ET';
            insert Order1;
      //订单明细
      //fahuo
      Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
      Orderdet.Name = 'OCM_01_00101';
      Orderdet.Consumable_order__c = Order1.Id;
      Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
      Orderdet.Consumable_Product__c = pro1.Id;
      Orderdet.Consumable_count__c = 40;
      insert Orderdet;
            //订单明细
            //fahuo
            Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
            Orderdet.Name = 'OCM_01_00101';
            Orderdet.Consumable_order__c = Order1.Id;
            Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
            Orderdet.Consumable_Product__c = pro1.Id;
            Orderdet.Consumable_count__c = 40;
            insert Orderdet;
      //发货明细
      //到货正确信息
      Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
      Orderdet1.Name = 'OCM_01_001002';
      Orderdet1.Consumable_order_minor__c = Order1.Id;
      Orderdet1.Consumable_Product__c = pro1.Id;
      Orderdet1.Asset_Model_No__c = 'Test01';
      Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
      Orderdet1.TracingCode__c = 'BXJRA';
            //发货明细
            //到货正确信息
            Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
            Orderdet1.Name = 'OCM_01_001002';
            Orderdet1.Consumable_order_minor__c = Order1.Id;
            Orderdet1.Consumable_Product__c = pro1.Id;
            Orderdet1.Asset_Model_No__c = 'Test01';
            Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
            Orderdet1.TracingCode__c = 'BXJRA';
      //取消产品
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
      Orderdet2.Name = 'OCM_01_001003';
      Orderdet2.Consumable_order_minor__c = Order1.Id;
      Orderdet2.Consumable_Product__c = pro1.Id;
      Orderdet2.Asset_Model_No__c = 'Test01';
      //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
      Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
      Orderdet2.Cancellation_Date__c = Date.today();
      Orderdet2.TracingCode__c = 'BXJRB';
      //销售产品
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
      Orderdet3.Name = 'OCM_01_001004';
      Orderdet3.Consumable_order_minor__c = Order1.Id;
      Orderdet3.Consumable_Product__c = pro1.Id;
      Orderdet3.Asset_Model_No__c = 'Test01';
      Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
      Orderdet3.Used_date__c = Date.today();
      Orderdet3.Arrive_date__c = Date.today();
      Orderdet3.TracingCode__c = 'BXJRC';
      //Orderdet3.Box_Piece__c = '盒';
            //取消产品
            Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
            Orderdet2.Name = 'OCM_01_001003';
            Orderdet2.Consumable_order_minor__c = Order1.Id;
            Orderdet2.Consumable_Product__c = pro1.Id;
            Orderdet2.Asset_Model_No__c = 'Test01';
            //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
            Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
            Orderdet2.Cancellation_Date__c= Date.today();
            Orderdet2.TracingCode__c = 'BXJRB';
            //销售产品
            Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
            Orderdet3.Name = 'OCM_01_001004';
            Orderdet3.Consumable_order_minor__c = Order1.Id;
            Orderdet3.Consumable_Product__c = pro1.Id;
            Orderdet3.Asset_Model_No__c = 'Test01';
            Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
            Orderdet3.Used_date__c = Date.today();
            Orderdet3.Arrive_date__c = Date.today();
            Orderdet3.TracingCode__c = 'BXJRC';
            //Orderdet3.Box_Piece__c = '盒';
      //出库产品
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
      Orderdet4.Name = 'OCM_01_001005';
      Orderdet4.Consumable_order_minor__c = Order1.Id;
      Orderdet4.Consumable_Product__c = pro1.Id;
      Orderdet4.Asset_Model_No__c = 'Test01';
      Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
      Orderdet4.Send_Date__c = Date.today();
      Orderdet4.Arrive_date__c = Date.today();
      Orderdet4.TracingCode__c = 'BXJRD';
      //已到货产品
      Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
      Orderdet5.Name = 'OCM_01_001006';
      Orderdet5.Consumable_order_minor__c = Order1.Id;
      Orderdet5.Consumable_Product__c = pro1.Id;
      Orderdet5.Asset_Model_No__c = 'Test01';
      Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
      Orderdet5.Arrive_date__c = Date.today();
      Orderdet5.TracingCode__c = 'BXJRE';
            //出库产品
            Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
            Orderdet4.Name = 'OCM_01_001005';
            Orderdet4.Consumable_order_minor__c = Order1.Id;
            Orderdet4.Consumable_Product__c = pro1.Id;
            Orderdet4.Asset_Model_No__c = 'Test01';
            Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
            Orderdet4.Send_Date__c =  Date.today();
            Orderdet4.Arrive_date__c = Date.today();
            Orderdet4.TracingCode__c = 'BXJRD';
      //发货明细
      //管理编码包含数字
      Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
      Orderdet6.Name = 'OCM_01_001002';
      Orderdet6.Consumable_order_minor__c = Order1.Id;
      Orderdet6.Consumable_Product__c = pro1.Id;
      Orderdet6.Asset_Model_No__c = 'Test01';
      Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
      Orderdet6.TracingCode__c = 'BX123';
            //已到货产品
            Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
            Orderdet5.Name = 'OCM_01_001006';
            Orderdet5.Consumable_order_minor__c = Order1.Id;
            Orderdet5.Consumable_Product__c = pro1.Id;
            Orderdet5.Asset_Model_No__c = 'Test01';
            Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
            Orderdet5.Arrive_date__c =  Date.today();
            Orderdet5.TracingCode__c = 'BXJRE';
      //发错库 未到货
      Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
      Orderdets8.Name = 'OCM_01_001011';
      Orderdets8.Consumable_order_minor__c = Order1.Id;
      Orderdets8.Consumable_Product__c = pro1.Id;
      Orderdets8.Asset_Model_No__c = 'Test01';
      Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
      Orderdets8.Box_Piece__c = '盒';
      Orderdets8.TracingCode__c = 'BXsys';
            //发货明细
            //管理编码包含数字
            Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
            Orderdet6.Name = 'OCM_01_001002';
            Orderdet6.Consumable_order_minor__c = Order1.Id;
            Orderdet6.Consumable_Product__c = pro1.Id;
            Orderdet6.Asset_Model_No__c = 'Test01';
            Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
            Orderdet6.TracingCode__c = 'BX123';
      insert new List<Consumable_order_details2__c>{
        Orderdet1,
        Orderdet2,
        Orderdet3,
        Orderdet4,
        Orderdet5,
        Orderdet6,
        Orderdets8
      };
            //发错库 未到货
            Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
            Orderdets8.Name = 'OCM_01_001011';
            Orderdets8.Consumable_order_minor__c = Order1.Id;
            Orderdets8.Consumable_Product__c = pro1.Id;
            Orderdets8.Asset_Model_No__c = 'Test01';
            Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
            Orderdets8.Box_Piece__c = '盒';
            Orderdets8.TracingCode__c = 'BXsys';
      List<Consumable_orderdetails__c> cod1 = [
        SELECT Id
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c = :Order1.Id
      ];
      System.assertEquals(1, cod1.size());
            insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2,Orderdet3,Orderdet4,Orderdet5,Orderdet6,Orderdets8};
      PageReference page = new PageReference(
        '/apex/ArriveGoods?Esetid=' + Order1.Id
      );
            List<Consumable_orderdetails__c> cod1 = [select Id from Consumable_orderdetails__c WHERE Consumable_order__c = :Order1.Id];
            System.assertEquals(1, cod1.size());
      System.Test.setCurrentPage(page);
      ArriveGoodsController Controller = new ArriveGoodsController();
      //初始化测试
      System.Test.startTest();
      Controller.init();
      //排序
      Controller.barcode = '';
      Controller.SearchPro();
      Controller.barcode = '01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123';
      Controller.SearchPro();
            PageReference page = new PageReference('/apex/ArriveGoods?Esetid=' + Order1.Id);
      // System.assertEquals(3, controller.ConsumableorderdetailsRecordsdummy.size());    //tcm
      Controller.ArriveGoodsConfim();
      System.Test.stopTest();
    }
  }
}
            System.Test.setCurrentPage(page);
            ArriveGoodsController Controller = new ArriveGoodsController();
            //初始化测试
            System.Test.startTest();
            Controller.init();
            //排序
            Controller.barcode = '';
            Controller.SearchPro();
            Controller.barcode = '01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123';
            Controller.SearchPro();
            // System.assertEquals(3, controller.ConsumableorderdetailsRecordsdummy.size());    //tcm
            Controller.ArriveGoodsConfim();
            System.Test.stopTest();
        }
    }
}
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>58.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/Batch_FixAttachmentToFiles.cls
@@ -1,109 +1,95 @@
global without sharing class Batch_FixAttachmentToFiles implements Database.Batchable<sObject> {
  // Id batchJobId = Database.executeBatch(new Batch_FixAttachmentToFiles('Consumable_order__c',Datetime.newInstance(2023, 1, 1, 8, 0, 0),Datetime.newInstance(2024, 1, 1, 8, 0, 0)),2000);
  private Datetime creStartDate = null;
  private Datetime creEndDate = null;
  private String objectApiName = null;
  private Set<String> parentIds = new Set<String>(); //Add by Li Jun 20230703
  public Batch_FixAttachmentToFiles(
    String objectType,
    Datetime startTime,
    Datetime endTime
  ) {
    creStartDate = startTime;
    creEndDate = endTime;
    objectApiName = objectType;
  }
  //Add by Li Jun 20230703 Start
  public Batch_FixAttachmentToFiles(Set<String> parentIds) {
    this.parentIds = parentIds;
  }
  //Add by Li Jun 20230703 End
  global Database.QueryLocator start(Database.BatchableContext BC) {
    String queryObject = 'SELECT Id, Name, OwnerId, ParentId, Parent.Name, Parent.Type, Body, CreatedDate, CreatedById FROM Attachment WHERE Parent.Type =:objectApiName AND CreatedDate >=:creStartDate AND CreatedDate <:creEndDate Order by CreatedDate ASC';
    if (parentIds.size() > 0) {
      queryObject = 'SELECT Id, Name, OwnerId, ParentId, Parent.Name, Parent.Type, Body, CreatedDate, CreatedById FROM Attachment WHERE ParentId in:parentIds';
global without sharing class Batch_FixAttachmentToFiles implements Database.Batchable<sObject>{
    // Id batchJobId = Database.executeBatch(new Batch_FixAttachmentToFiles('Consumable_order__c',Datetime.newInstance(2023, 1, 1, 8, 0, 0),Datetime.newInstance(2024, 1, 1, 8, 0, 0)),2000);
    private Datetime creStartDate = null;
    private Datetime creEndDate = null;
    private String objectApiName  = null;
    private Set<String> parentIds = new Set<String>();//Add by Li Jun 20230703
    public Batch_FixAttachmentToFiles(String objectType, Datetime startTime, Datetime endTime) {
        creStartDate = startTime;
        creEndDate = endTime;
        objectApiName = objectType;
    }
    return Database.getQueryLocator(queryObject);
  }
  global void execute(Database.BatchableContext BC, List<Attachment> scope) {
    List<ContentVersion> insertContents = new List<ContentVersion>();
    Map<string, id> nameParentMaps = new Map<string, id>();
    Set<String> attachmentIds = new Set<String>();
    for (Attachment att : scope) {
      nameParentMaps.put(att.Id, att.ParentId);
      attachmentIds.add(att.Id);
      ContentVersion cVersion = new ContentVersion();
      cVersion.ContentLocation = 'S'; //S-Document is in Salesforce. E-Document is outside of Salesforce. L-Document is on a Social Netork.
      cVersion.PathOnClient = att.Id; //File name with extention
      cVersion.Origin = 'C'; //C-Content Origin. H-Chatter Origin.
      cVersion.Title = att.Name; //Name of the file
      cVersion.VersionData = att.Body; //File content
      insertContents.add(cVersion);
    //Add by Li Jun 20230703 Start
    public Batch_FixAttachmentToFiles(Set<String> parentIds) {
        this.parentIds = parentIds;
    }
    if (insertContents.isEmpty()) {
      return;
    }
    //Insert insertContents;
    List<Database.SaveResult> saveResultsContents = Database.insert(
      insertContents,
      false
    );
    insertLog(saveResultsContents, attachmentIds);
    set<Id> contentIds = new Set<Id>();
    for (ContentVersion cv : insertContents) {
      contentIds.add(cv.id);
    }
    List<ContentVersion> conDocuments = [
      SELECT ContentDocumentId, Title, PathOnClient
      FROM ContentVersion
      WHERE Id IN :contentIds
    ];
    List<ContentDocumentLink> insertDocLinks = new List<ContentDocumentLink>();
    for (ContentVersion cv : conDocuments) {
      ContentDocumentLink cDocLink = new ContentDocumentLink();
      cDocLink.ContentDocumentId = cv.ContentDocumentId; //Add ContentDocumentId
      cDocLink.LinkedEntityId = nameParentMaps.get(cv.PathOnClient); //Add attachment parentId
      cDocLink.ShareType = 'V'; //V - Viewer permission. C - Collaborator permission. I - Inferred permission.
      cDocLink.Visibility = 'AllUsers';
      insertDocLinks.add(cDocLink);
    }
    //Insert insertDocLinks;
    List<Database.SaveResult> saveResultsLinks = Database.insert(
      insertDocLinks,
      false
    );
    insertLog(saveResultsLinks, attachmentIds);
  }
  global void insertLog(
    List<Database.SaveResult> saveResults,
    Set<String> attachmentIds
  ) {
    Transaction_Log__c traLog = new Transaction_Log__c();
    List<Map<String, String>> logMapList = new List<Map<String, String>>();
    for (Database.SaveResult result : saveResults) {
      String recordId = result.getId();
      if (!result.isSuccess()) {
        for (Database.Error error : result.getErrors()) {
          Map<String, String> logMap = new Map<String, String>();
          String errorMsg = error.getMessage();
          logMap.put('recordId', recordId);
          logMap.put('errorMsg', errorMsg);
          logMapList.add(logMap);
     //Add by Li Jun 20230703 End
    global Database.QueryLocator start(Database.BatchableContext BC) {
        String queryObject = 'SELECT Id, Name, OwnerId, ParentId, Parent.Name, Parent.Type, Body, CreatedDate, CreatedById FROM Attachment WHERE Parent.Type =:objectApiName AND CreatedDate >=:creStartDate AND CreatedDate <:creEndDate Order by CreatedDate ASC';
        if(parentIds.size() > 0){
            queryObject = 'SELECT Id, Name, OwnerId, ParentId, Parent.Name, Parent.Type, Body, CreatedDate, CreatedById FROM Attachment WHERE ParentId in:parentIds';
        }
      }
        return Database.getQueryLocator(queryObject);
    }
    if (logMapList.size() > 0) {
      Map<String, String> attachmentIdMap = new Map<String, String>();
      attachmentIdMap.put('attachmentIds', JSON.serialize(attachmentIds));
      logMapList.add(attachmentIdMap);
      traLog.Response__c = JSON.serialize(logMapList);
      traLog.Module__c = 'Attachment COnvert Transaction ';
      insert traLog;
    }
  }
  global void finish(Database.BatchableContext BC) {
  }
}
    global void execute(Database.BatchableContext BC, List<Attachment> scope) {
        List<ContentVersion> insertContents = new List<ContentVersion>();
        Map<string,id> nameParentMaps = new Map<string,id>();
        Set<String> attachmentIds = new Set<String>();
        for (Attachment att : scope) {
            nameParentMaps.put(att.Id, att.ParentId);
            attachmentIds.add(att.Id);
            ContentVersion cVersion = new ContentVersion();
            cVersion.ContentLocation = 'S';     //S-Document is in Salesforce. E-Document is outside of Salesforce. L-Document is on a Social Netork.
            cVersion.PathOnClient = att.Id;   //File name with extention
            cVersion.Origin = 'C';              //C-Content Origin. H-Chatter Origin.
            cVersion.Title = att.Name;          //Name of the file
            cVersion.VersionData = att.Body;    //File content
            insertContents.add(cVersion);
        }
        if(insertContents.isEmpty()){
            return;
        }
        //Insert insertContents;
        List<Database.SaveResult> saveResultsContents = Database.insert(insertContents, false);
        insertLog(saveResultsContents,attachmentIds);
        set<Id> contentIds = new set<Id>();
        for(ContentVersion cv : insertContents){
            contentIds.add(cv.id);
        }
        List<ContentVersion> conDocuments = [SELECT ContentDocumentId, Title,PathOnClient FROM ContentVersion WHERE Id in: contentIds];
        List<ContentDocumentLink> insertDocLinks = new List<ContentDocumentLink>();
        for(ContentVersion cv : conDocuments){
            ContentDocumentLink cDocLink = new ContentDocumentLink();
            cDocLink.ContentDocumentId = cv.ContentDocumentId;          //Add ContentDocumentId
            cDocLink.LinkedEntityId = nameParentMaps.get(cv.PathOnClient);     //Add attachment parentId
            cDocLink.ShareType = 'V';                                   //V - Viewer permission. C - Collaborator permission. I - Inferred permission.
            cDocLink.Visibility = 'AllUsers';
            insertDocLinks.add(cDocLink);
        }
        //Insert insertDocLinks;
        List<Database.SaveResult> saveResultsLinks = Database.insert(insertDocLinks, false);
        insertLog(saveResultsLinks,attachmentIds);
    }
    global void insertLog(List<Database.SaveResult> saveResults,Set<String> attachmentIds) {
        Transaction_Log__c traLog = new Transaction_Log__c();
        List<Map<String,String>> logMapList = new List<Map<String,String>>();
        for (Database.SaveResult result : saveResults) {
            String recordId = result.getId();
            if (!result.isSuccess()) {
                for (Database.Error error : result.getErrors()) {
                    Map<String,String> logMap = new Map<String,String>();
                    String errorMsg = error.getMessage();
                    logMap.put('recordId',recordId);
                    logMap.put('errorMsg',errorMsg);
                    logMapList.add(logMap);
                }
            }
        }
        if(logMapList.size() > 0){
            Map<String,String> attachmentIdMap = new Map<String,String>();
            attachmentIdMap.put('attachmentIds',JSON.serialize(attachmentIds));
            logMapList.add(attachmentIdMap);
            traLog.Response__c = JSON.serialize(logMapList);
            traLog.Module__c = 'Attachment COnvert Transaction ';
            Insert traLog;
        }
    }
    global void finish(Database.BatchableContext BC) {
    }
}
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls
@@ -1,69 +1,51 @@
@isTest(SeeAllData=true)
private class Batch_FixAttachmentToFilesTest {
  @isTest(SeeAllData=true)
  static void testInit() {
    String rectCo = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName()
      .get('Agency')
      .getRecordTypeId();
    Account accountItem1 = new Account(
      Name = 'Testaccount001',
      RecordTypeId = rectCo
    );
    insert accountItem1;
    Consumable_order__c consOrder = new Consumable_order__c();
    consOrder.Name = 'test01';
    consOrder.Order_status__c = '批准';
    consOrder.Deliver_date__c = Date.today();
    consOrder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
    consOrder.Order_type__c = '订单';
    consOrder.Order_ProType__c = 'ENG';
    consOrder.Dealer_Info__c = accountItem1.Id;
    consOrder.Delivery_detail_count__c = 5;
    insert consOrder;
    @isTest(SeeAllData=true)
    static void testInit() {
        String rectCo = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Agency').getRecordTypeId();
        Account accountItem1 = new Account(Name='Testaccount001',RecordTypeId = rectCo);
        insert accountItem1;
    List<Attachment> attachList = new List<Attachment>();
    Attachment attach = new Attachment();
    attach.Name = 'A-65224941-20200923--1.docx';
    Blob bodyBlob = Blob.valueOf('Unit Test Attachment Body');
    attach.body = bodyBlob;
    attach.ParentId = consOrder.Id;
    attachList.add(attach);
    insert attachList;
    Set<String> Id = new Set<String>();
    String objectType;
    Datetime creStartDate;
    Datetime creEndDate;
    List<Attachment> attachmentList = [
      SELECT
        Id,
        Name,
        OwnerId,
        ParentId,
        Parent.Name,
        Parent.Type,
        Body,
        CreatedDate,
        CreatedById
      FROM Attachment
      WHERE Id = :attachList[0].Id
      ORDER BY CreatedDate ASC
      LIMIT 1
    ];
    for (Attachment att : attachmentList) {
      Id.add(att.ParentId);
      objectType = att.Parent.Name;
      creStartDate = att.CreatedDate;
      creEndDate = att.CreatedDate.addDays(1);
    }
    System.Test.startTest();
    Database.executeBatch(
      new Batch_FixAttachmentToFiles(objectType, creStartDate, creEndDate),
      1
    );
    Database.executeBatch(new Batch_FixAttachmentToFiles(Id), 1);
    System.Test.stopTest();
  }
}
        Consumable_order__c consOrder = new Consumable_order__c();
        consOrder.Name = 'test01';
        consOrder.Order_status__c = '批准';
        consOrder.Deliver_date__c = Date.today();
        consOrder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
        consOrder.Order_type__c = '订单';
        consOrder.Order_ProType__c = 'ENG';
        consOrder.Dealer_Info__c = accountItem1.Id;
        consOrder.Delivery_detail_count__c = 5;
        insert consOrder;
        List<Attachment> attachList = new List<Attachment>();
        Attachment attach = new Attachment();
        attach.Name='A-65224941-20200923--1.docx';
        Blob bodyBlob= Blob.valueOf('Unit Test Attachment Body');
        attach.body = bodyBlob;
        attach.ParentId = consOrder.Id;
        attachList.add(attach);
        insert attachList;
        Set<String> Id = new Set<String>();
        String objectType;
        Datetime creStartDate;
        Datetime creEndDate;
        List<Attachment> attachmentList = [Select Id, Name, OwnerId, ParentId, Parent.Name, Parent.Type, Body, CreatedDate, CreatedById
                                             From Attachment
                                            Where Id =:attachList[0].Id
                                            Order by CreatedDate ASC
                                            Limit 1];
        for (Attachment att : attachmentList) {
            Id.add(att.ParentId);
            objectType = att.Parent.Name;
            creStartDate = att.CreatedDate;
            creEndDate = att.CreatedDate.addDays(1);
        }
        System.Test.startTest();
        Database.executeBatch(new Batch_FixAttachmentToFiles(objectType,creStartDate,creEndDate),1);
        Database.executeBatch(new Batch_FixAttachmentToFiles(Id),1);
        System.Test.stopTest();
    }
}
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/DealerInquiryModifyStateController.cls
@@ -1,731 +1,644 @@
public with sharing class DealerInquiryModifyStateController {
  public List<OpportunityInfo> oppRecords { get; set; }
  // ページレイアウトの情報を取得
  private Map<String, Map<String, String>> editLayoutItemRWMap = new Map<String, Map<String, String>>();
  // private Map<String, Map<String, String>> editLayoutItemRWMapRt = null;
  public List<OpportunityInfo> OPPORTList { get; set; }
  /*****************検索用******************/
    public List<OpportunityInfo> oppRecords { get; set; }
    // ページレイアウトの情報を取得
    private Map<String, Map<String, String>> editLayoutItemRWMap = New Map<String, Map<String, String>>();
    // private Map<String, Map<String, String>> editLayoutItemRWMapRt = null;
    public List<OpportunityInfo> OPPORTList { get; set; }
    /*****************検索用******************/
  /*******************检索属性值*******************/
    /*******************检索属性值*******************/
  public String accSearch { get; set; } //经销商医院
  public String aooSearch { get; set; } //担当人
  public String numtext1 { get; set; } //数据字段01
  public String numtext { get; set; } //数据字段03
  public String numtext2 { get; set; } //数据字段02
  public String timetext1 { get; set; } //日期01
  public String timetext2 { get; set; } //日期02
  public Agency_Opportunity__c tmpAO { get; set; } //检索日期用
  public Agency_Opportunity__c tmpBO { get; set; } //检索日期用
  public String limits { get; set; } //日期03
    public String accSearch { get; set; }//经销商医院
    public String aooSearch { get; set; }//担当人
    public String numtext1 { get; set; } //数据字段01
    public String numtext { get; set; }//数据字段03
    public String numtext2 { get; set; } //数据字段02
    public String timetext1 { get; set; } //日期01
    public String timetext2 { get; set; } //日期02
    public Agency_Opportunity__c tmpAO { get; set; } //检索日期用
    public Agency_Opportunity__c tmpBO { get; set; } //检索日期用
    public String limits { get; set; }//日期03
  public List<SelectOption> dateOpts { get; private set; }
  public List<SelectOption> textOpts { get; private set; }
  public List<SelectOption> timeOpts { get; private set; }
  public List<SelectOption> equalOpts { get; private set; }
  public List<SelectOption> timeequalOpts { get; private set; }
  public List<SelectOption> limitOpts { get; private set; }
    public List<SelectOption> dateOpts { get; private set; }
    public List<SelectOption> textOpts { get; private set; }
    public List<SelectOption> timeOpts { get; private set; }
    public List<SelectOption> equalOpts { get; private set; }
    public List<SelectOption> timeequalOpts { get; private set; }
    public List<SelectOption> limitOpts { get; private set; }
  /*****************画面表示Bean******************/
  public Integer oppCount { get; set; }
  public String saveType { get; set; }
    /*****************画面表示Bean******************/
    public Integer oppCount { get; set; }
    public String saveType { get; set; }
  public String sortKey { get; set; }
  public String preSortKey { get; set; }
  public Boolean sortOrderAsc { get; set; }
  public String[] sortOrder { get; set; }
  public String[] columus = new List<String>{ 'Id' };
  public String[] selColumus = null;
  public Set<String> columusSet = new Set<String>{ 'Id' };
    public String sortKey { get; set; }
    public String preSortKey { get; set; }
    public Boolean sortOrderAsc { get; set; }
    public String[] sortOrder { get; set; }
    public String[] columus = new String[] {'Id'};
    public String[] selColumus = null;
    public Set<String> columusSet = new Set<String> {'Id'};
  // 项目set 字段标签
  public List<String> titleLeft { get; private set; }
  public List<String> titleRight { get; private set; }
  // 项目set 字段名
  public List<List<String>> columnsLeftApi { get; private set; } // 参照項目用
  public List<List<String>> columnsRightApi { get; private set; } // 参照項目用
  public List<String> columnLeftCss { get; private set; } // css 用
  public List<String> columnRightCss { get; private set; } // css 用
  public Map<String, String> columnLeftRW { get; private set; } // r,w,wm用
  public Map<String, String> columnRightRW { get; private set; } // r,w,wm用
  private String strColumus;
  private String strRtColumus;
    // 项目set 字段标签
    public List<String> titleLeft { get; private set; }
    public List<String> titleRight { get; private set; }
    // 项目set 字段名
    public List<List<String>> columnsLeftApi { get; private set; }         // 参照項目用
    public List<List<String>> columnsRightApi { get; private set; }        // 参照項目用
    public List<String> columnLeftCss { get; private set; }               // css 用
    public List<String> columnRightCss { get; private set; }              // css 用
    public Map<String, String> columnLeftRW { get; private set; }              // r,w,wm用
    public Map<String, String> columnRightRW { get; private set; }             // r,w,wm用
    private String strColumus;
    private String strRtColumus;
  //add by Link 2023-6-2
  public String remindMsg { get; set; }
    //add by Link 2023-6-2
    public String remindMsg{get;set;}
  @TestVisible
  private String accTypeForSort = null;
  private static Integer oppLimit = 500;
    @TestVisible private String accTypeForSort = null;
    private static Integer oppLimit = 500;
  public DealerInquiryModifyStateController() {
    oppRecords = new List<OpportunityInfo>();
    public DealerInquiryModifyStateController() {
        oppRecords = new List<OpportunityInfo>();
    //dateOpts = new List<SelectOption>();
    //dateOpts.add(new SelectOption('', '--无--'));
    //dateOpts.add(new SelectOption('Registration_Day__c', '登录日'));
    //dateOpts.add(new SelectOption('Ban_On_Use_Date__c', '禁用日期'));
        //dateOpts = new List<SelectOption>();
        //dateOpts.add(new SelectOption('', '--无--'));
        //dateOpts.add(new SelectOption('Registration_Day__c', '登录日'));
        //dateOpts.add(new SelectOption('Ban_On_Use_Date__c', '禁用日期'));
    //数据字段下拉列表
    textOpts = new List<SelectOption>();
    textOpts.add(new SelectOption('', '--无--'));
    textOpts.add(
      new SelectOption('Agency_Opportunity_No__c', '经销商询价编码')
    );
    textOpts.add(new SelectOption('Agency__r.Name', '经销商'));
    textOpts.add(new SelectOption('Agency_Hospital__r.Name', '经销商医院'));
    textOpts.add(new SelectOption('Department_Cateogy__c', '科室分类'));
    textOpts.add(new SelectOption('Change_To_Opportunity_T__c', '询价名称'));
    // textOpts.add(new SelectOption('Name', '询价名称'));
        //数据字段下拉列表
        textOpts = new List<SelectOption>();
        textOpts.add(new SelectOption('', '--无--'));
        textOpts.add(new SelectOption('Agency_Opportunity_No__c', '经销商询价编码'));
        textOpts.add(new SelectOption('Agency__r.Name', '经销商'));
        textOpts.add(new SelectOption('Agency_Hospital__r.Name', '经销商医院'));
        textOpts.add(new SelectOption('Department_Cateogy__c', '科室分类'));
        textOpts.add(new SelectOption('Change_To_Opportunity_T__c', '询价名称'));
        // textOpts.add(new SelectOption('Name', '询价名称'));
    textOpts.add(new SelectOption('StageName__c', '询价阶段'));
    textOpts.add(new SelectOption('Oly_Inquiry_Status1__c', '状态1'));
    //精琢科技   zxk    2021-08-25   start
    // textOpts.add(new SelectOption('Oly_Inquiry_Status2__c', '状态2'));
    textOpts.add(new SelectOption('Oly_Inquiry_Stage__c', 'Oly询价阶段'));
    //精琢科技   zxk    2021-08-25   end
    textOpts.add(new SelectOption('Hospital_City_Master__c', '市'));
    // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.Salesdepartment_HP__c', '销售本部'));
    // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.State_Master__r.Name', '省'));
    // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.City_Master__r.Name', '市'));
    //日期字段下拉列表
    timeOpts = new List<SelectOption>();
    timeOpts.add(new SelectOption('', '--无--'));
    timeOpts.add(new SelectOption('Created_Day__c', '创建日'));
    timeOpts.add(new SelectOption('Bid_Planned_Date__c', '预测招标日'));
    timeOpts.add(new SelectOption('Forecasted_Bid_Date__c', '预测中标日'));
    timeOpts.add(
      new SelectOption('Close_Forecasted_Date__c', '预测与OLY签约日')
    );
    timeOpts.add(new SelectOption('Lost_Opportunity_Date__c', '失单日期'));
    timeOpts.add(new SelectOption('Deleted_Reason_Date__c', '取消日期'));
    //数据字段中间连接符号
    equalOpts = new List<SelectOption>();
    equalOpts.add(new SelectOption('=', '等于'));
    equalOpts.add(new SelectOption('<>', '不等于'));
    equalOpts.add(new SelectOption('<', '<'));
    equalOpts.add(new SelectOption('>', '>'));
    equalOpts.add(new SelectOption('<=', '<='));
    equalOpts.add(new SelectOption('>=', '>='));
    equalOpts.add(new SelectOption('contains', '包含'));
    equalOpts.add(new SelectOption('notcontains', '不包含'));
    equalOpts.add(new SelectOption('starts with', '起始字符'));
    //日期字段连接符号
    //timeequalOpts = new List<SelectOption>();
    //timeequalOpts.add(new SelectOption('=', '等于'));
    //timeequalOpts.add(new SelectOption('<>', '不等于'));
    //timeequalOpts.add(new SelectOption('<', '<'));
    //timeequalOpts.add(new SelectOption('>', '>'));
    //timeequalOpts.add(new SelectOption('<=', '<='));
    //timeequalOpts.add(new SelectOption('>=', '>='));
    //数据显示条数
    limitOpts = new List<SelectOption>();
    limitOpts.add(new SelectOption('10', '10'));
    limitOpts.add(new SelectOption('20', '20'));
    limitOpts.add(new SelectOption('50', '50'));
    limitOpts.add(new SelectOption('100', '100'));
    limitOpts.add(new SelectOption('200', '200'));
    limitOpts.add(new SelectOption('1000', '全部'));
    //数据显示默认条数
    limits = '20';
  }
  public PageReference init() {
    remindMsg = '';
    PartnerSoapSforceCom.Soap soap = new PartnerSoapSforceCom.Soap();
    soap.SessionHeader = new PartnerSoapSforceCom.SessionHeader_element();
    soap.SessionHeader.sessionId = UserInfo.getSessionId();
    soap.endpoint_x =
      URL.getSalesforceBaseUrl().toExternalForm() +
      '/partner/services/Soap/u/33.0';
    // soap.endpoint_x = URL.getSalesforceBaseUrl().toExternalForm() + '/services/Soap/u/33.0';
    PartnerSoapSforceCom.DescribeLayoutResult dlr = new PartnerSoapSforceCom.DescribeLayoutResult();
    if (System.Test.isRunningTest()) {
      // UnitTest 用
      // PartnerSoapSforceCom.DescribeLayoutResult dlr = new PartnerSoapSforceCom.DescribeLayoutResult();
      PartnerSoapSforceCom.RecordTypeMapping rtMap = new PartnerSoapSforceCom.RecordTypeMapping();
      PartnerSoapSforceCom.DescribeLayout editLayout = new PartnerSoapSforceCom.DescribeLayout();
      PartnerSoapSforceCom.DescribeLayoutSection editLayoutSection = new PartnerSoapSforceCom.DescribeLayoutSection();
      PartnerSoapSforceCom.DescribeLayoutRow layoutRow = new PartnerSoapSforceCom.DescribeLayoutRow();
      PartnerSoapSforceCom.DescribeLayoutItem layoutItem = new PartnerSoapSforceCom.DescribeLayoutItem();
      PartnerSoapSforceCom.DescribeLayoutComponent layoutComponent = new PartnerSoapSforceCom.DescribeLayoutComponent();
      dlr.recordTypeMappings = new List<PartnerSoapSforceCom.RecordTypeMapping>();
      dlr.recordTypeMappings.add(rtMap);
      rtMap.recordTypeId = 'recordTypeId';
      dlr.layouts = new List<PartnerSoapSforceCom.DescribeLayout>();
      dlr.layouts.add(editLayout);
      editLayout.editLayoutSections = new List<PartnerSoapSforceCom.DescribeLayoutSection>();
      editLayout.editLayoutSections.add(editLayoutSection);
      editLayoutSection.layoutRows = new List<PartnerSoapSforceCom.DescribeLayoutRow>();
      editLayoutSection.layoutRows.add(layoutRow);
      layoutRow.layoutItems = new List<PartnerSoapSforceCom.DescribeLayoutItem>();
      layoutRow.layoutItems.add(layoutItem);
      layoutItem.layoutComponents = new List<PartnerSoapSforceCom.DescribeLayoutComponent>();
      layoutItem.layoutComponents.add(layoutComponent);
      // return dlr;
    } else {
      dlr = soap.describeLayout('Agency_Opportunity__c', null, null);
      // dlr  = soap.describeLayout('asdas', null, null);
    }
    // PartnerSoapSforceCom.DescribeLayoutResult dlr  = soap.describeLayout('Agency_Opportunity__c', null, null);
    Map<String, PartnerSoapSforceCom.DescribeLayout> layputMap = new Map<String, PartnerSoapSforceCom.DescribeLayout>();
    for (PartnerSoapSforceCom.DescribeLayout layout : dlr.layouts) {
      layputMap.put(layout.id, layout);
    }
    for (Integer lidx = 0; lidx < dlr.recordTypeMappings.size(); lidx++) {
      String recordTypeId = dlr.recordTypeMappings[lidx].recordTypeId;
      Map<String, String> rtnInner = new Map<String, String>();
      editLayoutItemRWMap.put(recordTypeId, rtnInner);
      System.debug('recordTypeId=' + recordTypeId);
      PartnerSoapSforceCom.DescribeLayout layout = layputMap.get(
        dlr.recordTypeMappings[lidx].layoutId
      );
      for (
        PartnerSoapSforceCom.DescribeLayoutSection section : layout.editLayoutSections
      ) {
        for (PartnerSoapSforceCom.DescribeLayoutRow row : section.layoutRows) {
          for (PartnerSoapSforceCom.DescribeLayoutItem item : row.layoutItems) {
            if (
              item.layoutComponents != null &&
              item.layoutComponents.size() > 0 &&
              String.isBlank(item.layoutComponents[0].value) == false
            ) {
              rtnInner.put(item.layoutComponents[0].value, 'r');
              if (item.editableForUpdate) {
                rtnInner.put(item.layoutComponents[0].value, 'w');
              }
              if (item.required) {
                rtnInner.put(item.layoutComponents[0].value, 'wm');
              }
            }
          }
        }
      }
    }
    // editLayoutItemRWMap = SoapApi.getEditRWByRecordType('Agency_Opportunity__c', null);
    tmpAO = new Agency_Opportunity__c();
    tmpBO = new Agency_Opportunity__c();
    setLayoutRWInfo();
    searchOppInner();
    return null;
  }
  //用于获取经销商询价字段集和询价字段集以及相应的读写权限
  @TestVisible
  private void setLayoutRWInfo() {
    if (this.sortOrder == null) {
      selColumus = new List<String>{};
      strColumus = '';
      ID accRecordTypeId = accTypeForSort;
      Map<String, String> DESC_RW = editLayoutItemRWMap.get(
        '012100000006KW7AAM'
      );
      Map<String, Schema.FieldSet> fsMap = Schema.getGlobalDescribe()
        .get('Agency_Opportunity__c')
        .getDescribe()
        .fieldSets.getMap();
      Schema.FieldSet fs = fsMap.get('DealerInquiryModifyState');
      List<FieldSetMember> fsmList = fs.getFields();
      titleLeft = new List<String>();
      List<String> columnLeft = new List<String>();
      columnLeftCss = new List<String>();
      columnsLeftApi = new List<List<String>>();
      columnLeftRW = new Map<String, String>();
      for (FieldSetMember fsm : fsmList) {
        titleLeft.add(fsm.getLabel());
        columnLeft.add(fsm.getFieldPath());
        List<String> splitFieldPath = fsm.getFieldPath().split('\\.');
        columnsLeftApi.add(splitFieldPath);
        if (DESC_RW == null) {
          columnLeftRW.put(fsm.getFieldPath(), 'r');
        } else if (splitFieldPath.size() == 1) {
          String rw = DESC_RW.get(fsm.getFieldPath());
          if (rw != null) {
            columnLeftRW.put(fsm.getFieldPath(), rw);
          } else {
            columnLeftRW.put(fsm.getFieldPath(), 'r');
          }
        } else {
          columnLeftRW.put(fsm.getFieldPath(), 'r');
        }
      }
      for (String str : columnLeftRW.keySet()) {
        System.debug(str + '=+=+=+=+=' + columnLeftRW.get(str));
      }
      for (String s : columnLeft) {
        if (columusSet.contains(s) == false) {
          columus.add(s);
          columusSet.add(s);
        }
        if (selColumus.contains(s) == false) {
          selColumus.add(s);
        }
        columnLeftCss.add(s.replace('.', '_'));
      }
      strRtColumus = '';
      Schema.FieldSet fsRt = fsMap.get('DealerOpportunity');
      List<FieldSetMember> fsmListRt = fsRt.getFields();
      titleRight = new List<String>();
      List<String> columnRight = new List<String>();
      columnRightCss = new List<String>();
      columnsRightApi = new List<List<String>>();
      columnRightRW = new Map<String, String>();
      for (FieldSetMember fsm : fsmListRt) {
        titleRight.add(fsm.getLabel());
        columnRight.add(fsm.getFieldPath());
        List<String> splitFieldPath = fsm.getFieldPath().split('\\.');
        columnsRightApi.add(splitFieldPath);
        if (DESC_RW == null) {
          columnRightRW.put(fsm.getFieldPath(), 'r');
        } else if (splitFieldPath.size() == 1) {
          String rw = DESC_RW.get(fsm.getFieldPath());
          if (rw != null) {
            columnRightRW.put(fsm.getFieldPath(), rw);
          } else {
            columnRightRW.put(fsm.getFieldPath(), 'r');
          }
        } else {
          columnRightRW.put(fsm.getFieldPath(), 'r');
        }
      }
      for (String s : columnRight) {
        selColumus.add(s);
        if (strRtColumus == '') {
          strRtColumus = s;
        } else {
          strRtColumus = strRtColumus + ',' + s;
        }
        columnRightCss.add(s.replace('.', '_'));
      }
      strColumus = String.join(columus, ',');
      System.debug('======-======-======strColumus' + strColumus);
      System.debug('======-======-======strRtColumus' + strRtColumus);
      this.sortOrderAsc = true;
      this.sortOrder = new List<String>(selColumus.size());
      for (Integer i = 0; i < selColumus.size(); i++)
        this.sortOrder[i] = ' ';
    }
  }
  //用于拼接SOQL语句 根据不同检索条件拼接不同SOQL语句。
  public void searchOppInner() {
    //SOQL:拼接检索条件以及经销商询价的SOQL语句
    // List<User> userlist2 = [select id,name from user where Contactid in (select id from Contact)];
    // String querySoql = '';
    // Integer queryint = 0;
    // for(User user : userlist2){
    //     if(queryint == 0){
    //         querySoql += '\''+user.Id+'\'';
    //         queryint++;
    //     }else{
    //         querySoql += ',\''+user.Id+'\'';
    //     }
    // }
    // System.debug('pppqqq222'+userlist2);
    // System.debug('pppqqq333'+querySoql);
    // AND Ownerid in ( '+querySoql+')'
    String soql =
      'SELECT Change_To_Opportunity__r.Id , Agency_Hospital__r.Name , Product_Category1__r.Name , Product_Category2__r.Name , Product_Category3__r.Name , Agency_Person__r.Name , Agency__r.Name , Change_To_Opportunity__r.Name ,' +
      strColumus +
      ',' +
      strRtColumus +
      ' FROM Agency_Opportunity__c WHERE recordType.DeveloperName = \'Opportunity\' ';
    //数据字段:经销商医院  +SOQL
    if (!String.isBlank(accSearch)) {
      accSearch = accSearch.trim();
      // soql += 'AND Agency__r.Name  '   + '  LIKE  \'%' + accSearch + '%\' ';
      soql +=
        'AND Agency_Hospital__r.Name  ' +
        '  LIKE  \'%' +
        accSearch +
        '%\' ';
    }
    //数据字段:担当人  +SOQL
    if (!String.isBlank(aooSearch)) {
      String newAooSearch = aooSearch.trim();
      // soql += 'AND Change_To_Opportunity__r.Owner.Alias = ' + '\'' + newAooSearch + '\'';//Name
      soql +=
        'AND Agency_PersonName__c ' +
        '  LIKE  \'%' +
        newAooSearch +
        '%\' ';
    }
    //数据字段:03 手动填写项 准备调用makeTextSql;
    if (!String.isBlank(numtext)) {
      String newNumtext = numtext.trim();
      String str = makeTextSql(numtext1, numtext2, newNumtext);
      soql += str;
      System.debug('+++++++++++++=============++++++++++++++++++' + soql);
    }
    //点击排序
    // System.debug('==-=-=-=-=-=this.sortKey'+Integer.valueOf(this.sortKey)+'===titleLeft.size'+titleLeft.size()+7);
    if (String.isBlank(this.sortKey)) {
      soql +=
        ' order by LastModifiedDate desc limit ' + Integer.valueOf(limits);
    } else {
      if (Integer.valueOf(this.sortKey) <= titleLeft.size() + 7) {
        soql +=
          ' order by ' +
          this.selColumus[Integer.valueOf(this.sortKey)] +
          ' ' +
          (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') +
          ' limit ' +
          Integer.valueOf(limits);
      } else {
        soql +=
          ' order by Change_To_Opportunity__r.' +
          this.selColumus[Integer.valueOf(this.sortKey)] +
          ' ' +
          (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') +
          ' limit ' +
          Integer.valueOf(limits);
      }
    }
    system.debug(soql);
    // List<User> userlist1 = [select id,name from user ];
    // System.debug('pppqqq111'+userlist1);
    List<Agency_Opportunity__c> InfoList = Database.query(soql);
    System.debug('+++++++-------------------' + InfoList);
    // List<Agency_Opportunity__c> InfoList = ControllerUtil.DatabaseQuery(soql);
    // System.debug('InfoList[0].Change_To_Opportunity_T__c'+InfoList[0].Change_To_Opportunity_T__c);
    for (Agency_Opportunity__c apt : InfoList) {
      System.debug('pppqqq' + apt.Agency_PersonName__c + '====' + apt.Name);
    }
    List<OpportunityInfo> oppinfoList = new List<OpportunityInfo>();
    if (InfoList != null && InfoList.size() > 0) {
      String str = '';
      for (Agency_Opportunity__c agc : InfoList) {
        if (str == '' && agc.Change_To_Opportunity__r.Id != null) {
          str = '\'' + agc.Change_To_Opportunity__r.Id + '\'';
        } else if (agc.Change_To_Opportunity__r.Id != null) {
          str += ',\'' + agc.Change_To_Opportunity__r.Id + '\'';
        }
      }
      for (Agency_Opportunity__c info : InfoList) {
        oppinfoList.add(new OpportunityInfo(info, info));
        oppinfoList[oppinfoList.size() - 1].lineNo = oppinfoList.size() - 1;
      }
    }
    oppRecords = oppinfoList.clone();
    oppCount = oppRecords.size();
    //显示提示操作信息
    if (String.isBlank(this.saveType) && String.isBlank(this.sortKey)) {
      ApexPages.addmessage(
        new ApexPages.message(
          ApexPages.severity.INFO,
          '取得最近的 ' + oppCount + ' 条数据'
        )
      );
      //add by Link 2023-6-2
      remindMsg = '取得最近的 ' + oppCount + ' 条数据';
    } else if (!String.isBlank(this.sortKey)) {
      if (oppCount > oppLimit) {
        ApexPages.addmessage(
          new ApexPages.message(
            ApexPages.severity.INFO,
            '数据超过' + oppLimit + '件,只显示前' + oppLimit + '件'
          )
        );
        //add by Link 2023-6-2
        remindMsg = '数据超过' + oppLimit + '件,只显示前' + oppLimit + '件';
      } else {
        ApexPages.addmessage(
          new ApexPages.message(
            ApexPages.severity.INFO,
            '共有 ' + oppCount + ' 条数据'
          )
        );
        //add by Link 2023-6-2
        remindMsg = '共有 ' + oppCount + ' 条数据';
      }
    } else {
      ApexPages.addmessage(
        new ApexPages.message(
          ApexPages.severity.INFO,
          '共有 ' + oppCount + ' 条数据'
        )
      );
      //add by Link 2023-6-2
      remindMsg = '共有 ' + oppCount + ' 条数据';
    }
  }
  //检索条件:数据字段1,数据字段2,数据字段3均满足进入此方法 判断多种情况
  private String makeTextSql(
    String textOpts,
    String equalOpts,
    String numtext
  ) {
    String soql = '';
    if (!String.isBlank(textOpts)) {
      //寻找检索条件包含‘ ’ 空格的多重检索条件
      //system.debug('314-textOpts:'+textOpts);
      if (
        (equalOpts == 'contains' || equalOpts == 'notcontains') &&
        numtext.contains(',')
      ) {
        //system.debug('316-equalOpts:'+equalOpts);
        //system.debug('316-numtext:'+numtext);
        String[] vals = numtext.split(',');
        String cSql = '';
        soql += ' AND (';
        for (Integer icount = 0; icount < vals.size(); icount++) {
          //精琢科技   zxk    2021-08-25   start
          String val = vals[icount];
          if (equalOpts == 'contains') {
            cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
            soql += cSql;
            if (icount < vals.size() - 1) {
              soql += ' OR ';
            }
          } else if (equalOpts == 'notcontains') {
            cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
            soql += cSql;
            if (icount < vals.size() - 1) {
              soql += ' AND ';
            }
          }
        }
        textOpts.add(new SelectOption('StageName__c', '询价阶段'));
        textOpts.add(new SelectOption('Oly_Inquiry_Status1__c', '状态1'));
        //精琢科技   zxk    2021-08-25   start
        // textOpts.add(new SelectOption('Oly_Inquiry_Status2__c', '状态2'));
        textOpts.add(new SelectOption('Oly_Inquiry_Stage__c', 'Oly询价阶段'));
        //精琢科技   zxk    2021-08-25   end
        textOpts.add(new SelectOption('Hospital_City_Master__c', '市'));
        // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.Salesdepartment_HP__c', '销售本部'));
        // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.State_Master__r.Name', '省'));
        // textOpts.add(new SelectOption('Agency_Hospital__r.Hospital__r.City_Master__r.Name', '市'));
        //日期字段下拉列表
        timeOpts = new List<SelectOption>();
        timeOpts.add(new SelectOption('', '--无--'));
        timeOpts.add(new SelectOption('Created_Day__c', '创建日'));
        timeOpts.add(new SelectOption('Bid_Planned_Date__c', '预测招标日'));
        timeOpts.add(new SelectOption('Forecasted_Bid_Date__c', '预测中标日'));
        timeOpts.add(new SelectOption('Close_Forecasted_Date__c', '预测与OLY签约日'));
        timeOpts.add(new SelectOption('Lost_Opportunity_Date__c', '失单日期'));
        timeOpts.add(new SelectOption('Deleted_Reason_Date__c', '取消日期'));
        //数据字段中间连接符号
        equalOpts = new List<SelectOption>();
        equalOpts.add(new SelectOption('=', '等于'));
        equalOpts.add(new SelectOption('<>', '不等于'));
        equalOpts.add(new SelectOption('<', '<'));
        equalOpts.add(new SelectOption('>', '>'));
        equalOpts.add(new SelectOption('<=', '<='));
        equalOpts.add(new SelectOption('>=', '>='));
        equalOpts.add(new SelectOption('contains', '包含'));
        equalOpts.add(new SelectOption('notcontains', '不包含'));
        equalOpts.add(new SelectOption('starts with', '起始字符'));
        //日期字段连接符号
        //timeequalOpts = new List<SelectOption>();
        //timeequalOpts.add(new SelectOption('=', '等于'));
        //timeequalOpts.add(new SelectOption('<>', '不等于'));
        //timeequalOpts.add(new SelectOption('<', '<'));
        //timeequalOpts.add(new SelectOption('>', '>'));
        //timeequalOpts.add(new SelectOption('<=', '<='));
        //timeequalOpts.add(new SelectOption('>=', '>='));
        //数据显示条数
        limitOpts = new List<SelectOption>();
        limitOpts.add(new SelectOption('10', '10'));
        limitOpts.add(new SelectOption('20', '20'));
        limitOpts.add(new SelectOption('50', '50'));
        limitOpts.add(new SelectOption('100', '100'));
        limitOpts.add(new SelectOption('200', '200'));
        limitOpts.add(new SelectOption('1000', '全部'));
        //数据显示默认条数
        limits = '20';
    }
        //     String val = vals[icount];
        //     cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
        //     system.debug(cSql);
        //     soql += cSql;
        //     if (icount < vals.size() - 1) {
        //         soql += ' OR ';
    public PageReference init() {
        remindMsg = '';
        PartnerSoapSforceCom.Soap soap = new PartnerSoapSforceCom.Soap();
        soap.SessionHeader = new PartnerSoapSforceCom.SessionHeader_element();
        soap.SessionHeader.sessionId = UserInfo.getSessionId();
        soap.endpoint_x = URL.getSalesforceBaseUrl().toExternalForm() + '/partner/services/Soap/u/33.0';
        // soap.endpoint_x = URL.getSalesforceBaseUrl().toExternalForm() + '/services/Soap/u/33.0';
        PartnerSoapSforceCom.DescribeLayoutResult dlr = new PartnerSoapSforceCom.DescribeLayoutResult();
        if (System.Test.isRunningTest()) {
            // UnitTest 用
            // PartnerSoapSforceCom.DescribeLayoutResult dlr = new PartnerSoapSforceCom.DescribeLayoutResult();
            PartnerSoapSforceCom.RecordTypeMapping rtMap = new PartnerSoapSforceCom.RecordTypeMapping();
            PartnerSoapSforceCom.DescribeLayout editLayout = new PartnerSoapSforceCom.DescribeLayout();
            PartnerSoapSforceCom.DescribeLayoutSection editLayoutSection = new PartnerSoapSforceCom.DescribeLayoutSection();
            PartnerSoapSforceCom.DescribeLayoutRow layoutRow = new PartnerSoapSforceCom.DescribeLayoutRow();
            PartnerSoapSforceCom.DescribeLayoutItem layoutItem = new PartnerSoapSforceCom.DescribeLayoutItem();
            PartnerSoapSforceCom.DescribeLayoutComponent layoutComponent = new PartnerSoapSforceCom.DescribeLayoutComponent();
            dlr.recordTypeMappings = new List<PartnerSoapSforceCom.RecordTypeMapping>();
            dlr.recordTypeMappings.add(rtMap);
            rtMap.recordTypeId = 'recordTypeId';
            dlr.layouts = new List<PartnerSoapSforceCom.DescribeLayout>();
            dlr.layouts.add(editLayout);
            editLayout.editLayoutSections = new List<PartnerSoapSforceCom.DescribeLayoutSection>();
            editLayout.editLayoutSections.add(editLayoutSection);
            editLayoutSection.layoutRows = new List<PartnerSoapSforceCom.DescribeLayoutRow>();
            editLayoutSection.layoutRows.add(layoutRow);
            layoutRow.layoutItems = new List<PartnerSoapSforceCom.DescribeLayoutItem>();
            layoutRow.layoutItems.add(layoutItem);
            layoutItem.layoutComponents = new List<PartnerSoapSforceCom.DescribeLayoutComponent>();
            layoutItem.layoutComponents.add(layoutComponent);
            // return dlr;
        } else {
            dlr  = soap.describeLayout('Agency_Opportunity__c', null, null);
            // dlr  = soap.describeLayout('asdas', null, null);
        }
        // PartnerSoapSforceCom.DescribeLayoutResult dlr  = soap.describeLayout('Agency_Opportunity__c', null, null);
        Map<String, PartnerSoapSforceCom.DescribeLayout> layputMap = new Map<String, PartnerSoapSforceCom.DescribeLayout>();
        for (PartnerSoapSforceCom.DescribeLayout layout : dlr.layouts) {
            layputMap.put(layout.id, layout);
        }
        for (Integer lidx = 0; lidx < dlr.recordTypeMappings.size(); lidx++) {
            String recordTypeId = dlr.recordTypeMappings[lidx].recordTypeId;
            Map<String, String> rtnInner = new Map<String, String>();
            editLayoutItemRWMap.put(recordTypeId, rtnInner);
            System.debug('recordTypeId=' + recordTypeId);
            PartnerSoapSforceCom.DescribeLayout layout = layputMap.get(dlr.recordTypeMappings[lidx].layoutId);
            for (PartnerSoapSforceCom.DescribeLayoutSection section : layout.editLayoutSections) {
                for (PartnerSoapSforceCom.DescribeLayoutRow row : section.layoutRows) {
                    for (PartnerSoapSforceCom.DescribeLayoutItem item : row.layoutItems) {
                        if (item.layoutComponents != null && item.layoutComponents.size() > 0
                                && String.isBlank(item.layoutComponents[0].value) == false) {
                            rtnInner.put(item.layoutComponents[0].value, 'r');
                            if (item.editableForUpdate) {
                                rtnInner.put(item.layoutComponents[0].value, 'w');
                            }
                            if (item.required) {
                                rtnInner.put(item.layoutComponents[0].value, 'wm');
                            }
                        }
                    }
                }
            }
        }
        // editLayoutItemRWMap = SoapApi.getEditRWByRecordType('Agency_Opportunity__c', null);
        tmpAO = new Agency_Opportunity__c();
        tmpBO = new Agency_Opportunity__c();
        setLayoutRWInfo();
        searchOppInner();
        return null;
    }
    //用于获取经销商询价字段集和询价字段集以及相应的读写权限
    @TestVisible private void setLayoutRWInfo() {
        if (this.sortOrder == null) {
            selColumus = new String[] {};
            strColumus = '';
            ID accRecordTypeId = accTypeForSort;
            Map<String, String> DESC_RW = editLayoutItemRWMap.get('012100000006KW7AAM');
            Map<String, Schema.FieldSet> fsMap = Schema.getGlobalDescribe().get('Agency_Opportunity__c').getDescribe().fieldSets.getMap();
            Schema.FieldSet fs = fsMap.get('DealerInquiryModifyState');
            List<FieldSetMember> fsmList = fs.getFields();
            titleLeft = new List<String>();
            List<String> columnLeft = new List<String>();
            columnLeftCss = new List<String>();
            columnsLeftApi = new List<List<String>>();
            columnLeftRW = new Map<String, String>();
            for (FieldSetMember fsm : fsmList) {
                titleLeft.add(fsm.getLabel());
                columnLeft.add(fsm.getFieldPath());
                List<String> splitFieldPath = fsm.getFieldPath().split('\\.');
                columnsLeftApi.add(splitFieldPath);
                if (DESC_RW == null) {
                    columnLeftRW.put(fsm.getFieldPath(), 'r');
                } else if (splitFieldPath.size() == 1) {
                    String rw = DESC_RW.get(fsm.getFieldPath());
                    if (rw != null) {
                        columnLeftRW.put(fsm.getFieldPath(), rw);
                    } else {
                        columnLeftRW.put(fsm.getFieldPath(), 'r');
                    }
                } else {
                    columnLeftRW.put(fsm.getFieldPath(), 'r');
                }
            }
            for (String str : columnLeftRW.keySet()) {
                System.debug(str + '=+=+=+=+=' + columnLeftRW.get(str));
            }
            for (String s : columnLeft) {
                if (columusSet.contains(s) == false) {
                    columus.add(s);
                    columusSet.add(s);
                }
                if (selColumus.contains(s) == false) {
                    selColumus.add(s);
                }
                columnLeftCss.add(s.replace('.', '_'));
            }
            strRtColumus = '';
            Schema.FieldSet fsRt = fsMap.get('DealerOpportunity');
            List<FieldSetMember> fsmListRt = fsRt.getFields();
            titleRight = new List<String>();
            List<String> columnRight = new List<String>();
            columnRightCss = new List<String>();
            columnsRightApi = new List<List<String>>();
            columnRightRW = new Map<String, String>();
            for (FieldSetMember fsm : fsmListRt) {
                titleRight.add(fsm.getLabel());
                columnRight.add(fsm.getFieldPath());
                List<String> splitFieldPath = fsm.getFieldPath().split('\\.');
                columnsRightApi.add(splitFieldPath);
                if (DESC_RW == null) {
                    columnRightRW.put(fsm.getFieldPath(), 'r');
                } else if (splitFieldPath.size() == 1) {
                    String rw = DESC_RW.get(fsm.getFieldPath());
                    if (rw != null) {
                        columnRightRW.put(fsm.getFieldPath(), rw);
                    } else {
                        columnRightRW.put(fsm.getFieldPath(), 'r');
                    }
                } else {
                    columnRightRW.put(fsm.getFieldPath(), 'r');
                }
            }
            for (String s : columnRight) {
                selColumus.add(s);
                if (strRtColumus == '') {
                    strRtColumus = s;
                } else {
                    strRtColumus = strRtColumus + ',' + s;
                }
                columnRightCss.add(s.replace('.', '_'));
            }
            strColumus = String.join(columus, ',');
            System.debug('======-======-======strColumus' + strColumus);
            System.debug('======-======-======strRtColumus' + strRtColumus);
            this.sortOrderAsc = true;
            this.sortOrder = new String[selColumus.size()];
            for (Integer i = 0; i < selColumus.size(); i++) this.sortOrder[i] = ' ';
        }
    }
    //用于拼接SOQL语句 根据不同检索条件拼接不同SOQL语句。
    public void searchOppInner() {
        //SOQL:拼接检索条件以及经销商询价的SOQL语句
        // List<User> userlist2 = [select id,name from user where Contactid in (select id from Contact)];
        // String querySoql = '';
        // Integer queryint = 0;
        // for(User user : userlist2){
        //     if(queryint == 0){
        //         querySoql += '\''+user.Id+'\'';
        //         queryint++;
        //     }else{
        //         querySoql += ',\''+user.Id+'\'';
        //     }
        // }
        soql += ')';
      }
      //寻找检索条件包含‘,’ 逗号的多重检索条件
      else if (
        (equalOpts == '=' || equalOpts == '<>') && numtext.contains(',')
      ) {
        String[] vals = numtext.split(',');
        soql += ' AND ( ';
        for (Integer icount = 0; icount < vals.size(); icount++) {
          String val = vals[icount];
          if (equalOpts == '=') {
            soql += textOpts + ' = \'' + val + '\'';
            if (icount < vals.size() - 1) {
              soql += ' OR ';
            }
          } else if (equalOpts == '<>') {
            soql += textOpts + ' <> \'' + val + '\'';
            if (icount < vals.size() - 1) {
              soql += ' AND ';
            }
          }
        }
        soql += ')';
      }
      //检索连接符为包含以及不包含
      else if (
        equalOpts.equals('contains') || equalOpts.equals('notcontains')
      ) {
        if (equalOpts.equals('contains')) {
          soql += ' AND ' + textOpts + ' LIKE \'%' + numtext + '%\'';
        } else if (equalOpts.equals('notcontains')) {
          soql += ' AND ( NOT ' + textOpts + ' LIKE \'%' + numtext + '%\' ) ';
        }
      }
      //检索连接符为等于以及不等于
      else if (equalOpts == '=' || equalOpts == '<>') {
        soql += 'AND ' + textOpts + equalOpts + '\'' + numtext + '\'';
      }
      //精琢科技   zxk    2021-08-25   start
      //起始字符
      else if (equalOpts == 'starts with' && numtext.contains(' ')) {
        String[] vals = numtext.split(' ');
        soql += ' AND ( ';
        for (Integer icount = 0; icount < vals.size(); icount++) {
          String val = vals[icount];
          if (equalOpts == 'starts with') {
            soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'';
            if (icount < vals.size() - 1) {
              soql += ' OR ';
            }
          }
        }
        soql += ')';
      }
      //精琢科技   zxk    2021-08-25   end
        // System.debug('pppqqq222'+userlist2);
        // System.debug('pppqqq333'+querySoql);
        // AND Ownerid in ( '+querySoql+')'
      // //起始字符
      // else if (equalOpts == 'starts with'){
      //     soql += 'AND ' + textOpts + ' LIKE \'' + numtext + '%\'';
      // }
      //检索连接符的其他情况
      else {
        String cSql = this.makeTextSqlStr(textOpts, equalOpts, numtext);
        if (equalOpts != '<>') {
          soql += cSql;
        String soql = 'SELECT Change_To_Opportunity__r.Id , Agency_Hospital__r.Name , Product_Category1__r.Name , Product_Category2__r.Name , Product_Category3__r.Name , Agency_Person__r.Name , Agency__r.Name , Change_To_Opportunity__r.Name ,' +
                      strColumus + ',' + strRtColumus +
                      ' FROM Agency_Opportunity__c WHERE recordType.DeveloperName = \'Opportunity\' ';
        //数据字段:经销商医院  +SOQL
        if (!String.isBlank(accSearch)) {
            accSearch = accSearch.trim();
            // soql += 'AND Agency__r.Name  '   + '  LIKE  \'%' + accSearch + '%\' ';
            soql += 'AND Agency_Hospital__r.Name  '   + '  LIKE  \'%' + accSearch + '%\' ';
        }
        //数据字段:担当人  +SOQL
        if (!String.isBlank(aooSearch)) {
            String newAooSearch = aooSearch.trim();
            // soql += 'AND Change_To_Opportunity__r.Owner.Alias = ' + '\'' + newAooSearch + '\'';//Name
            soql += 'AND Agency_PersonName__c ' + '  LIKE  \'%' + newAooSearch + '%\' ';
        }
        //数据字段:03 手动填写项 准备调用makeTextSql;
        if (!String.isBlank(numtext)) {
            String newNumtext = numtext.trim();
            String str = makeTextSql(numtext1,  numtext2,  newNumtext);
            soql += str;
            System.debug('+++++++++++++=============++++++++++++++++++' + soql);
        }
        //点击排序
        // System.debug('==-=-=-=-=-=this.sortKey'+Integer.valueOf(this.sortKey)+'===titleLeft.size'+titleLeft.size()+7);
        if (String.isBlank(this.sortKey)) {
            soql += ' order by LastModifiedDate desc limit ' + Integer.valueOf(limits);
        } else {
          soql += ' and (NOT ' + cSql + ') ';
            if (Integer.valueOf(this.sortKey) <= titleLeft.size() + 7) {
                soql += ' order by ' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
            } else {
                soql += ' order by Change_To_Opportunity__r.' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
            }
        }
      }
    }
    return soql;
  }
  //检索条件:数据字段1,数据字段2,数据字段3均满足,并且进入makeTextSql()之后,内含数据字段包含多种时进入此方法。
  @TestVisible
  private String makeTextSqlStr(String textOpts, String equalOpts, String val) {
    String soql = '';
    if (!String.isBlank(textOpts)) {
      String tmpVal = val;
      if (!String.isBlank(tmpVal)) {
        if (equalOpts == 'contains' || equalOpts == 'notcontains') {
          if (equalOpts == 'contains') {
            soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'';
          } else if (equalOpts == 'notcontains') {
            soql += ' ( NOT ' + textOpts + '  LIKE  \'%' + val + '%\' ) ';
          }
        } else if (equalOpts == '=' || equalOpts == '<>') {
          if (equalOpts == '=') {
            soql += ' AND ' + textOpts + ' = ' + val;
          } else if (equalOpts == '<>') {
            soql += ' AND ' + textOpts + ' <> ' + val;
          }
        system.debug(soql);
        // List<User> userlist1 = [select id,name from user ];
        // System.debug('pppqqq111'+userlist1);
        List<Agency_Opportunity__c> InfoList = Database.query(soql);
        System.debug('+++++++-------------------'+InfoList);
        // List<Agency_Opportunity__c> InfoList = ControllerUtil.DatabaseQuery(soql);
        // System.debug('InfoList[0].Change_To_Opportunity_T__c'+InfoList[0].Change_To_Opportunity_T__c);
        for (Agency_Opportunity__c apt : InfoList) {
            System.debug('pppqqq' + apt.Agency_PersonName__c + '====' + apt.Name);
        }
      } else {
        soql = ' AND ' + textOpts;
        if (equalOpts == '=') {
          soql += ' = ' + tmpVal;
        } else if (equalOpts == '<>') {
          soql += ' <> ' + tmpVal;
        } else if (equalOpts == 'contains') {
          soql +=
            ' like \'%' +
            String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) +
            '%\'';
        } else if (equalOpts == 'notcontains') {
          soql +=
            ' like \'%' +
            String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) +
            '%\'';
        } else if (equalOpts == 'starts with') {
          soql +=
            ' like \'%' +
            String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) +
            '%\'';
        List<OpportunityInfo> oppinfoList = new List<OpportunityInfo>();
        if (InfoList != null && InfoList.size() > 0) {
            String str = '';
            for (Agency_Opportunity__c agc : InfoList) {
                if (str == '' && agc.Change_To_Opportunity__r.Id != null) {
                    str = '\'' + agc.Change_To_Opportunity__r.Id + '\'';
                } else if (agc.Change_To_Opportunity__r.Id != null) {
                    str += ',\'' + agc.Change_To_Opportunity__r.Id + '\'';
                }
            }
            for (Agency_Opportunity__c info : InfoList) {
                oppinfoList.add(new OpportunityInfo(info, info));
                oppinfoList[oppinfoList.size() - 1].lineNo = oppinfoList.size() - 1;
            }
        }
        oppRecords = oppinfoList.clone();
        oppCount = oppRecords.size();
        //显示提示操作信息
        if (String.isBlank(this.saveType) && String.isBlank(this.sortKey)) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '取得最近的 ' + oppCount + ' 条数据'));
            //add by Link 2023-6-2
            remindMsg = '取得最近的 ' + oppCount + ' 条数据';
        } else if (!String.isBlank(this.sortKey)) {
            if (oppCount > oppLimit) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '数据超过' + oppLimit + '件,只显示前' + oppLimit + '件'));
                //add by Link 2023-6-2
                remindMsg = '数据超过' + oppLimit + '件,只显示前' + oppLimit + '件';
            } else {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '共有 ' + oppCount + ' 条数据'));
                //add by Link 2023-6-2
                remindMsg = '共有 ' + oppCount + ' 条数据';
            }
        } else {
          soql += ' ' + equalOpts + ' ' + tmpVal;
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '共有 ' + oppCount + ' 条数据'));
            //add by Link 2023-6-2
            remindMsg = '共有 ' + oppCount + ' 条数据';
        }
      }
    }
    return soql;
  }
    //检索条件:数据字段1,数据字段2,数据字段3均满足进入此方法 判断多种情况
    private String makeTextSql(String textOpts, String equalOpts, String numtext) {
        String soql = '';
        if (!String.isBlank(textOpts)) {
            //寻找检索条件包含‘ ’ 空格的多重检索条件
            //system.debug('314-textOpts:'+textOpts);
            if ((equalOpts == 'contains' || equalOpts == 'notcontains') && numtext.contains(',')) {
                //system.debug('316-equalOpts:'+equalOpts);
                //system.debug('316-numtext:'+numtext);
                String[] vals = numtext.split(',');
                String cSql = '';
                soql += ' AND (';
                for (Integer icount = 0; icount < vals.size(); icount++) {
  //检索按钮:点击检索按钮触发此方法;
  public PageReference chick() {
    setLayoutRWInfo();
    searchOppInner();
    return null;
  }
  //页面内容有修改时,页面判断后传值给changeFlg以及changeFlgRt属性,点击保存时调用此方法,进行保存。
  public PageReference save() {
    //system.debug('oppRecords[1].opp:' + oppRecords[1].opp +' oppRecords[1].AgcOpp:' + oppRecords[1].AgcOpp );
    try {
      List<Agency_Opportunity__c> updTarget = new List<Agency_Opportunity__c>();
      // List<Opportunity> updOpps = new List<Opportunity>();
      for (OpportunityInfo oi : oppRecords) {
        if (oi.changeFlg == '1') {
          oi.changeFlg = '0';
          updTarget.add(oi.AgcOpp);
                    //精琢科技   zxk    2021-08-25   start
                    String val = vals[icount];
                    if (equalOpts == 'contains') {
                        cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
                        soql += cSql;
                        if (icount < vals.size() - 1) {
                            soql += ' OR ';
                        }
                    } else if (equalOpts == 'notcontains') {
                        cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
                        soql += cSql;
                        if (icount < vals.size() - 1) {
                            soql += ' AND ';
                        }
                    }
                }
                //精琢科技   zxk    2021-08-25   end
                //     String val = vals[icount];
                //     cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
                //     system.debug(cSql);
                //     soql += cSql;
                //     if (icount < vals.size() - 1) {
                //         soql += ' OR ';
                //     }
                // }
                soql += ')';
            }
            //寻找检索条件包含‘,’ 逗号的多重检索条件
            else if ((equalOpts == '=' || equalOpts == '<>') && numtext.contains(',')) {
                String[] vals = numtext.split(',');
                soql += ' AND ( ';
                for (Integer icount = 0; icount < vals.size(); icount++) {
                    String val = vals[icount];
                    if (equalOpts == '=') {
                        soql += textOpts + ' = \'' + val + '\'';
                        if (icount < vals.size() - 1) {
                            soql += ' OR ';
                        }
                    } else if (equalOpts == '<>') {
                        soql += textOpts + ' <> \'' + val + '\'';
                        if (icount < vals.size() - 1) {
                            soql += ' AND ';
                        }
                    }
                }
                soql += ')';
            }
            //检索连接符为包含以及不包含
            else if (equalOpts.equals('contains') || equalOpts.equals('notcontains')) {
                if (equalOpts.equals('contains')) {
                    soql += ' AND ' + textOpts + ' LIKE \'%' + numtext + '%\'';
                } else if (equalOpts.equals('notcontains')) {
                    soql += ' AND ( NOT ' + textOpts + ' LIKE \'%' + numtext + '%\' ) ';
                }
            }
            //检索连接符为等于以及不等于
            else if (equalOpts == '=' || equalOpts == '<>') {
                soql += 'AND ' + textOpts + equalOpts + '\'' + numtext + '\'';
            }
            //精琢科技   zxk    2021-08-25   start
            //起始字符
            else if (equalOpts == 'starts with' && numtext.contains(' ')) {
                String[] vals = numtext.split(' ');
                soql += ' AND ( ';
                for (Integer icount = 0; icount < vals.size(); icount++) {
                    String val = vals[icount];
                    if (equalOpts == 'starts with') {
                        soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'' ;
                        if (icount < vals.size() - 1) {
                            soql += ' OR ';
                        }
                    }
                }
                soql += ')';
            }
            //精琢科技   zxk    2021-08-25   end
            // //起始字符
            // else if (equalOpts == 'starts with'){
            //     soql += 'AND ' + textOpts + ' LIKE \'' + numtext + '%\'';
            // }
            //检索连接符的其他情况
            else {
                String cSql = this.makeTextSqlStr(textOpts, equalOpts, numtext);
                if (equalOpts != '<>') {
                    soql += cSql;
                } else {
                    soql += ' and (NOT ' + cSql + ') ';
                }
            }
        }
        // if (oi.changeFlgRt == '1' && oi.opp.id != null) {
        //     oi.changeFlgRt = '0';
        //     updOpps.add(oi.opp);
        // }
      }
      if (updTarget.size() > 0) {
        system.debug('updTarget.size:' + updTarget.size());
        update updTarget;
      }
      // if (updOpps.size() > 0) {
      //     update updOpps;
      // }
      ApexPages.addmessage(
        new ApexPages.message(ApexPages.severity.INFO, '保存完了')
      );
      //add by Link 2023-6-2
      remindMsg = '保存完了';
    } catch (Exception e) {
      //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请确定科室分类和产品区分的关系'));
        return soql;
    }
    if (saveType == '1') {
      searchOppInner();
      saveType = '';
    } else if (saveType == '2') {
      sortTable();
      saveType = '';
    } else {
    //检索条件:数据字段1,数据字段2,数据字段3均满足,并且进入makeTextSql()之后,内含数据字段包含多种时进入此方法。
    @TestVisible private String makeTextSqlStr(String textOpts, String equalOpts, String val) {
        String soql = '';
        if (!String.isBlank(textOpts)) {
            String tmpVal = val;
            if (!String.isBlank(tmpVal)) {
                if (equalOpts == 'contains' || equalOpts == 'notcontains') {
                    if (equalOpts == 'contains') {
                        soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'' ;
                    } else if (equalOpts == 'notcontains') {
                        soql += ' ( NOT ' + textOpts + '  LIKE  \'%' + val + '%\' ) ' ;
                    }
                } else if (equalOpts == '=' || equalOpts == '<>') {
                    if (equalOpts == '=') {
                        soql += ' AND ' + textOpts + ' = ' + val ;
                    } else if (equalOpts == '<>') {
                        soql += ' AND ' + textOpts + ' <> ' + val ;
                    }
                }
            } else {
                soql = ' AND ' + textOpts;
                if (equalOpts == '=') {
                    soql += ' = ' + tmpVal;
                } else if (equalOpts == '<>') {
                    soql += ' <> ' + tmpVal;
                } else if (equalOpts == 'contains') {
                    soql += ' like \'%' + String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) + '%\'';
                } else if (equalOpts == 'notcontains') {
                    soql += ' like \'%' + String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) + '%\'';
                } else if (equalOpts == 'starts with') {
                    soql += ' like \'%' + String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) + '%\'';
                } else {
                    soql += ' ' + equalOpts + ' ' + tmpVal;
                }
            }
        }
        return soql;
    }
    return null;
  }
  //全部展开调用此方法
  public PageReference sortTable() {
    oppRecords = new List<OpportunityInfo>();
    if (this.sortKey == this.preSortKey) {
      if (String.isBlank(this.sortKey) == false) {
        // 方向が変わるのみ
        this.sortOrderAsc = !this.sortOrderAsc;
        this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc ==
          true
          ? '↑'
          : '↓');
      }
    } else {
      this.sortOrderAsc = true;
      if (String.isBlank(this.preSortKey) == false) {
        this.sortOrder[Integer.valueOf(this.preSortKey)] = ' ';
      }
      this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true
        ? '↑'
        : '↓');
    }
    this.preSortKey = this.sortKey;
    setLayoutRWInfo();
    searchOppInner();
    return null;
  }
  //自定义类OpportunityInfo,用于创建虚拟字段,合并输出。
  class OpportunityInfo {
    // public Opportunity opp { get; set; }
    public Agency_Opportunity__c opp { get; set; }
    public Boolean canEdit { get; private set; }
    public Boolean hasError { get; private set; }
    public Boolean hasFieldError { get; private set; }
    public Integer lineNo { get; private set; }
    public String changeFlg { get; set; }
    public String changeFlgRt { get; set; }
    public Boolean ifLock { get; set; }
    //public String accType { get; private set; }
    public Agency_Opportunity__c AgcOpp { get; set; }
    public OpportunityInfo(
      Agency_Opportunity__c record,
      Agency_Opportunity__c oppo
    ) {
      opp = oppo;
      canEdit = true;
      hasError = false;
      hasFieldError = false;
      lineNo = 0;
      changeFlg = '0';
      changeFlgRt = '0';
      ifLock = Approval.isLocked(record);
      AgcOpp = record;
    //检索按钮:点击检索按钮触发此方法;
    public PageReference chick() {
        setLayoutRWInfo();
        searchOppInner();
        return null;
    }
  }
}
    //页面内容有修改时,页面判断后传值给changeFlg以及changeFlgRt属性,点击保存时调用此方法,进行保存。
    public PageReference save() {
        //system.debug('oppRecords[1].opp:' + oppRecords[1].opp +' oppRecords[1].AgcOpp:' + oppRecords[1].AgcOpp );
        try {
            List<Agency_Opportunity__c> updTarget = new List<Agency_Opportunity__c>();
            // List<Opportunity> updOpps = new List<Opportunity>();
            for (OpportunityInfo oi : oppRecords) {
                if (oi.changeFlg == '1') {
                    oi.changeFlg = '0';
                    updTarget.add(oi.AgcOpp);
                }
                // if (oi.changeFlgRt == '1' && oi.opp.id != null) {
                //     oi.changeFlgRt = '0';
                //     updOpps.add(oi.opp);
                // }
            }
            if (updTarget.size() > 0) {
                system.debug('updTarget.size:' + updTarget.size() );
                update updTarget;
            }
            // if (updOpps.size() > 0) {
            //     update updOpps;
            // }
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '保存完了'));
            //add by Link 2023-6-2
            remindMsg = '保存完了';
        } catch (Exception e) {
            //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请确定科室分类和产品区分的关系'));
        }
        if (saveType == '1') {
            searchOppInner();
            saveType = '';
        } else if (saveType == '2') {
            sortTable();
            saveType = '';
        } else {
        }
        return null;
    }
    //全部展开调用此方法
    public PageReference sortTable() {
        oppRecords = new List<OpportunityInfo>();
        if (this.sortKey == this.preSortKey) {
            if (String.isBlank(this.sortKey) == false) {
                // 方向が変わるのみ
                this.sortOrderAsc = !this.sortOrderAsc;
                this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓');
            }
        } else {
            this.sortOrderAsc = true;
            if (String.isBlank(this.preSortKey) == false) {
                this.sortOrder[Integer.valueOf(this.preSortKey)] = ' ';
            }
            this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓');
        }
        this.preSortKey = this.sortKey;
        setLayoutRWInfo();
        searchOppInner();
        return null;
    }
    //自定义类OpportunityInfo,用于创建虚拟字段,合并输出。
    class OpportunityInfo {
        // public Opportunity opp { get; set; }
        public Agency_Opportunity__c opp { get; set; }
        public Boolean canEdit { get; private set; }
        public Boolean hasError { get; private set; }
        public Boolean hasFieldError { get; private set; }
        public Integer lineNo { get; private set; }
        public String changeFlg { get; set; }
        public String changeFlgRt { get; set; }
        public Boolean ifLock { get; set; }
        //public String accType { get; private set; }
        public Agency_Opportunity__c AgcOpp { get; set; }
        public OpportunityInfo(Agency_Opportunity__c record, Agency_Opportunity__c oppo) {
            opp = oppo;
            canEdit = true;
            hasError = false;
            hasFieldError = false;
            lineNo = 0;
            changeFlg = '0';
            changeFlgRt = '0';
            ifLock = Approval.isLocked(record);
            AgcOpp = record;
        }
    }
}
force-app/main/default/classes/DealerInquiryModifyStateControllerTest.cls
@@ -1,446 +1,421 @@
@isTest
private class DealerInquiryModifyStateControllerTest {
  @TestSetup
  static void init() {
    List<RecordType> rectCo = [
      SELECT Id
      FROM RecordType
      WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'
    ];
    if (rectCo.size() == 0) {
      return;
    }
    List<RecordType> rectSct = [
      SELECT Id
      FROM RecordType
      WHERE
        IsActive = TRUE
        AND SobjectType = 'Account'
        AND Name = '戦略科室分類 呼吸科'
    ];
    if (rectSct.size() == 0) {
      return;
    }
    List<RecordType> rectDpt = [
      SELECT Id
      FROM RecordType
      WHERE
        IsActive = TRUE
        AND SobjectType = 'Account'
        AND Name = '診療科 消化科'
    ];
    if (rectDpt.size() == 0) {
      return;
    @TestSetup static void init() {
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        if (rectCo.size() == 0) {
            return;
        }
        List<RecordType> rectSct = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 呼吸科'];
        if (rectSct.size() == 0) {
            return;
        }
        List<RecordType> rectDpt = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        if (rectDpt.size() == 0) {
            return;
        }
        // テストデータ
        Account company = new Account();
        company.RecordTypeId = rectCo[0].Id;
        company.Name         = 'NFM007TestCompany';
        insert company;
        Account section = new Account();
        section.RecordTypeId = rectSct[0].Id;
        section.Name         = '*';
        section.Department_Class_Label__c = '消化科';
        section.ParentId                  = company.Id;
        section.Hospital_Department_Class__c = company.Id;
        insert section;
        // Test.startTest();
        Account depart = new Account();
        depart.RecordTypeId = rectDpt[0].Id;
        depart.Name         = '*';
        depart.Department_Name__c  = 'NFM007TestDepart';
        depart.ParentId            = section.Id;
        depart.Department_Class__c = section.Id;
        depart.Hospital__c         = company.Id;
        insert depart;
        Opportunity opp = new Opportunity();
        opp.AccountId           = depart.Id;
        opp.Department_Class__c = section.Id;
        opp.Hospital__c         = company.Id;
        opp.SAP_Send_OK__c      = false;
        opp.Name                = 'GZ-SP-NFM007_1';
        opp.Trade__c            = '内貿';
        opp.StageName           = '引合';
        opp.CloseDate           = Date.today();
        opp.Stock_apply_status__c = '申请中';
        insert opp;
        Test.startTest();
        Account account2 = new Account();
        account2.Name = 'test1经销商';
        account2.RecordTypeId = '01210000000Qem1';
        insert account2;
        Contact contact1 = new Contact();
        contact1.AccountId = account2.Id;
        contact1.FirstName = '責任者';
        contact1.LastName = 'test1医院';
        contact1.Agency_User__c = true;
        insert contact1;
        List<Contact> contactlist = [select Id, FirstName
                                     from Contact
                                    ];
        System.assertEquals('責任者', contactlist[0].FirstName);
        //
        User user = new User();
        Profile p = [select Id from Profile where Name = '901_经销商活动系统'];
        user.ProfileId = p.Id;
        user.ContactId = contact1.Id;
        user.FirstName = 'ユーザー';
        user.LastName = 'テスト';
        user.Email = 'test_user@example.com';
        user.emailencodingkey = 'UTF-8';
        user.languagelocalekey = 'zh_CN';
        user.localesidkey = 'ja_JP';
        user.timezonesidkey = 'Asia/Shanghai';
        user.Username = 'test_user@example.com';
        user.Alias = 'テユ';
        user.CommunityNickname = 'テストユーザー';
        user.SalesManager__c = UserInfo.getUserId();
        System.runAs(new User(Id = UserInfo.getUserId())){
            insert user;
        }
        List<user> users = [select Id, Name, LastName, FirstName from User where LastName = 'テスト'];
        //
        Agency_Hospital_Link__c agency_hospital_link = new Agency_Hospital_Link__c();
        agency_hospital_link.Name = 'test1代理店医院';
        agency_hospital_link.Hospital__c = company.Id;
        agency_hospital_link.Agency__c = account2.Id;
        agency_hospital_link.Agency_Campaign_Obj__c = true;
        agency_hospital_link.OwnerId = user.Id;
        insert agency_hospital_link;
        //
        //System.assertEquals('テスト',users[0].LastName);
        System.assertEquals('ユーザー', users[0].FirstName );
        Id rtId = [select Id, DeveloperName from RecordType where IsActive = true and SobjectType = 'Agency_Opportunity__c' and DeveloperName = 'Opportunity'].Id;
        // Schema.SobjectType.Agency_Opportunity__c.getRecordTypeInfosByName().get('询价').getRecordTypeId();
        Agency_opportunity__c agency_opportunity = new Agency_opportunity__c();
        agency_opportunity.RecordTypeId = rtId;
        agency_opportunity.Name = '引合1';
        agency_opportunity.Hospital_Target__c = company.Id;
        agency_opportunity.Agency__c = depart.Id;
        agency_opportunity.Agency_Hospital__c = agency_hospital_link.Id;
        agency_opportunity.StageName__c = '还没申请预算';
        agency_opportunity.OwnerId = user.Id;
        agency_opportunity.Change_To_Opportunity_T__c = '::CF-HQ290I';
        agency_opportunity.Sales_Manager__c =UserInfo.getUserId();
        insert agency_opportunity;
        Test.stopTest();
    }
    // テストデータ
    static testMethod void myUnitTest_SortKey() {
        Test.startTest();
        Test.setMock(WebServiceMock.class, new NFMTest_Mock());
        Test.stopTest();
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
    Account company = new Account();
    company.RecordTypeId = rectCo[0].Id;
    company.Name = 'NFM007TestCompany';
    insert company;
    Account section = new Account();
    section.RecordTypeId = rectSct[0].Id;
    section.Name = '*';
    section.Department_Class_Label__c = '消化科';
    section.ParentId = company.Id;
    section.Hospital_Department_Class__c = company.Id;
    insert section;
    // Test.startTest();
    Account depart = new Account();
    depart.RecordTypeId = rectDpt[0].Id;
    depart.Name = '*';
    depart.Department_Name__c = 'NFM007TestDepart';
    depart.ParentId = section.Id;
    depart.Department_Class__c = section.Id;
    depart.Hospital__c = company.Id;
    insert depart;
    Opportunity opp = new Opportunity();
    opp.AccountId = depart.Id;
    opp.Department_Class__c = section.Id;
    opp.Hospital__c = company.Id;
    opp.SAP_Send_OK__c = false;
    opp.Name = 'GZ-SP-NFM007_1';
    opp.Trade__c = '内貿';
    opp.StageName = '引合';
    opp.CloseDate = Date.today();
    opp.Stock_apply_status__c = '申请中';
    insert opp;
    Test.startTest();
    Account account2 = new Account();
    account2.Name = 'test1经销商';
    account2.RecordTypeId = '01210000000Qem1';
    insert account2;
    Contact contact1 = new Contact();
    contact1.AccountId = account2.Id;
    contact1.FirstName = '責任者';
    contact1.LastName = 'test1医院';
    contact1.Agency_User__c = true;
    insert contact1;
    List<Contact> contactlist = [
      SELECT Id, FirstName
      FROM Contact
    ];
    System.assertEquals('責任者', contactlist[0].FirstName);
    //
    User user = new User();
    Profile p = [SELECT Id FROM Profile WHERE Name = '901_经销商活动系统'];
    user.ProfileId = p.Id;
    user.ContactId = contact1.Id;
    user.FirstName = 'ユーザー';
    user.LastName = 'テスト';
    user.Email = 'test_user@example.com';
    user.emailencodingkey = 'UTF-8';
    user.languagelocalekey = 'zh_CN';
    user.localesidkey = 'ja_JP';
    user.timezonesidkey = 'Asia/Shanghai';
    user.Username = 'test_user@example.com';
    user.Alias = 'テユ';
    user.CommunityNickname = 'テストユーザー';
    user.SalesManager__c = UserInfo.getUserId();
    System.runAs(new User(Id = UserInfo.getUserId())) {
      insert user;
        // 初始化测试
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        controller.init();
        //System.assertEquals(1, controller.oppRecords.size());验证预期值和结果值正确性
        // 排序测试
        // Test.startTest();
        // Test.stopTest();
        controller.sortKey = '1';
        controller.sortKey = '1';
        controller.sortTable();
        controller.sortKey = '1';
        controller.sortKey = '0';
        controller.sortTable();
        // Test.stopTest();
    }
    List<user> users = [
      SELECT Id, Name, LastName, FirstName
      FROM User
      WHERE LastName = 'テスト'
    ];
    //
    static testMethod void myUnitTest_AccSearchAndAoosearch() {
        Test.startTest();
        Test.setMock(WebServiceMock.class, new NFMTest_Mock());
        Test.stopTest();
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        // Test.startTest();
        controller.init();
        //文本输入框检索
        //1:经销商医院
        controller.accSearch = '洪洞县中医院';
        controller.chick();
        //2:担当人
        controller.aooSearch = '王契琪';
        controller.chick();
        // Test.stopTest();
    }
    static testMethod void myUnitTest_numtext_Equals() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        // 检索数据字段测试
        //1:检索经销商编码 = 151P-00001327
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '=';
        controller.numtext = '151P-00001327';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '<>';
        controller.numtext = '151P-00001327';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_numtext_Starts_with() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '<';
        controller.numtext = '151P-00001327';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'starts with';
        controller.numtext = '151P-00001327';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_contains() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //2:检索经销商编码 包含 151P
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'contains';
        controller.numtext = '151P';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'notcontains';
        controller.numtext = '151P';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_null_contains() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //3:检索条件含空格
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'contains';
        controller.numtext = '151P 150P';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_null_notcontains() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'notcontains';
        controller.numtext = '151P 150P';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_AllNull_contains() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'contains';
        controller.numtext = ' ';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_AllNull_notcontains() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = 'notcontains';
        controller.numtext = ' ';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '=';
        controller.numtext = ' ';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_tarts_with() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        Test.startTest();
        controller.init();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '<>';
        controller.numtext = ' ';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = ' starts with ';
        controller.numtext = ' ';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTest_Equals_D() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //4:检索条件含逗号
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '=';
        controller.numtext = '151P-00001327,151P-00001343';
        controller.chick();
        controller.numtext1 = 'Agency_Opportunity_No__c';
        controller.numtext2 = '<>';
        controller.numtext = '151P-00001327,151P-00001343';
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTestTime01() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //检索日期测试
        controller.tmpAO = new Agency_Opportunity__c();
        controller.tmpBO = new Agency_Opportunity__c();
        controller.timetext1 = 'Created_Day__c';
        controller.timetext2 = '=';
        controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-12-12');
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
        controller.chick();
    Agency_Hospital_Link__c agency_hospital_link = new Agency_Hospital_Link__c();
    agency_hospital_link.Name = 'test1代理店医院';
    agency_hospital_link.Hospital__c = company.Id;
    agency_hospital_link.Agency__c = account2.Id;
    agency_hospital_link.Agency_Campaign_Obj__c = true;
    agency_hospital_link.OwnerId = user.Id;
    insert agency_hospital_link;
    //
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
        // Test.startTest();
        controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-12-02');
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
        controller.chick();
    //System.assertEquals('テスト',users[0].LastName);
    System.assertEquals('ユーザー', users[0].FirstName);
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
         Test.stopTest();
    Id rtId = [
      SELECT Id, DeveloperName
      FROM RecordType
      WHERE
        IsActive = TRUE
        AND SobjectType = 'Agency_Opportunity__c'
        AND DeveloperName = 'Opportunity'
    ]
    .Id;
    // Schema.SobjectType.Agency_Opportunity__c.getRecordTypeInfosByName().get('询价').getRecordTypeId();
    Agency_opportunity__c agency_opportunity = new Agency_opportunity__c();
    agency_opportunity.RecordTypeId = rtId;
    agency_opportunity.Name = '引合1';
    agency_opportunity.Hospital_Target__c = company.Id;
    agency_opportunity.Agency__c = depart.Id;
    agency_opportunity.Agency_Hospital__c = agency_hospital_link.Id;
    agency_opportunity.StageName__c = '还没申请预算';
    agency_opportunity.OwnerId = user.Id;
    agency_opportunity.Change_To_Opportunity_T__c = '::CF-HQ290I';
    agency_opportunity.Sales_Manager__c = UserInfo.getUserId();
    }
    static testMethod void myUnitTestTime02() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        controller.tmpAO = new Agency_Opportunity__c();
        controller.tmpBO = new Agency_Opportunity__c();
        controller.timetext1 = 'Created_Day__c';
        controller.timetext2 = '=';
        controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-02-12');
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
        controller.chick();
    insert agency_opportunity;
    Test.stopTest();
  }
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
        // Test.startTest();
        controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-02-02');
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
        controller.chick();
  static testMethod void myUnitTest_SortKey() {
    Test.startTest();
    Test.setMock(WebServiceMock.class, new NFMTest_Mock());
    Test.stopTest();
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
        Test.stopTest();
    // 初始化测试
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    controller.init();
    //System.assertEquals(1, controller.oppRecords.size());验证预期值和结果值正确性
    // 排序测试
    // Test.startTest();
    // Test.stopTest();
    controller.sortKey = '1';
    controller.sortKey = '1';
    controller.sortTable();
    controller.sortKey = '1';
    controller.sortKey = '0';
    controller.sortTable();
    // Test.stopTest();
  }
  static testMethod void myUnitTest_AccSearchAndAoosearch() {
    Test.startTest();
    Test.setMock(WebServiceMock.class, new NFMTest_Mock());
    Test.stopTest();
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    // Test.startTest();
    controller.init();
    //文本输入框检索
    //1:经销商医院
    controller.accSearch = '洪洞县中医院';
    controller.chick();
    //2:担当人
    controller.aooSearch = '王契琪';
    controller.chick();
    // Test.stopTest();
  }
  static testMethod void myUnitTest_numtext_Equals() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    // 检索数据字段测试
    //1:检索经销商编码 = 151P-00001327
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '=';
    controller.numtext = '151P-00001327';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '<>';
    controller.numtext = '151P-00001327';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_numtext_Starts_with() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '<';
    controller.numtext = '151P-00001327';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'starts with';
    controller.numtext = '151P-00001327';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_contains() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //2:检索经销商编码 包含 151P
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'contains';
    controller.numtext = '151P';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'notcontains';
    controller.numtext = '151P';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_null_contains() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //3:检索条件含空格
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'contains';
    controller.numtext = '151P 150P';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_null_notcontains() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'notcontains';
    controller.numtext = '151P 150P';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_AllNull_contains() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'contains';
    controller.numtext = ' ';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_AllNull_notcontains() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = 'notcontains';
    controller.numtext = ' ';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '=';
    controller.numtext = ' ';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_tarts_with() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    Test.startTest();
    controller.init();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '<>';
    controller.numtext = ' ';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = ' starts with ';
    controller.numtext = ' ';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTest_Equals_D() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //4:检索条件含逗号
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '=';
    controller.numtext = '151P-00001327,151P-00001343';
    controller.chick();
    controller.numtext1 = 'Agency_Opportunity_No__c';
    controller.numtext2 = '<>';
    controller.numtext = '151P-00001327,151P-00001343';
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTestTime01() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //检索日期测试
    controller.tmpAO = new Agency_Opportunity__c();
    controller.tmpBO = new Agency_Opportunity__c();
    controller.timetext1 = 'Created_Day__c';
    controller.timetext2 = '=';
    controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-12-12');
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
    controller.chick();
    // Test.startTest();
    controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-12-02');
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTestTime02() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    controller.tmpAO = new Agency_Opportunity__c();
    controller.tmpBO = new Agency_Opportunity__c();
    controller.timetext1 = 'Created_Day__c';
    controller.timetext2 = '=';
    controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-02-12');
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
    controller.chick();
    // Test.startTest();
    controller.tmpAO.MaxActivityDate__c = date.valueOf('2018-02-02');
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-12');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-12-09');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-19');
    controller.chick();
    controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
    controller.chick();
    Test.stopTest();
  }
  static testMethod void myUnitTestTimeSave() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    Test.startTest();
    controller.init();
    controller.oppRecords[0].changeFlg = '1';
    controller.save();
    Test.stopTest();
  }
  static testMethod void myUnitTestTimeSave_1() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //保存时状态changeFlgRt为1
    controller.oppRecords[0].changeFlgRt = '1';
    controller.save();
    Test.stopTest();
  }
  static testMethod void myUnitTestTime_LimitsAndOppCount() {
    PageReference page = new PageReference('/apex/DealerInquiryModifyState');
    System.Test.setCurrentPage(page);
    DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
    // 初始化测试
    Test.startTest();
    controller.init();
    //数据显示条数
    controller.limits = '10';
    controller.searchOppInner();
    //oppLimit and oppCount
    controller.oppCount = 1000;
    controller.init();
    Test.stopTest();
  }
}
    }
    static testMethod void myUnitTestTimeSave() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        Test.startTest();
        controller.init();
        controller.oppRecords[0].changeFlg = '1';
        controller.save();
        Test.stopTest();
    }
    static testMethod void myUnitTestTimeSave_1() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //保存时状态changeFlgRt为1
        controller.oppRecords[0].changeFlgRt = '1';
        controller.save();
        Test.stopTest();
    }
    static testMethod void myUnitTestTime_LimitsAndOppCount() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
        System.Test.setCurrentPage(page);
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        Test.startTest();
        controller.init();
        //数据显示条数
        controller.limits = '10';
        controller.searchOppInner();
        //oppLimit and oppCount
        controller.oppCount = 1000;
        controller.init();
        Test.stopTest();
    }
}
force-app/main/default/classes/LexArriveGoodsControllerTest.cls
@@ -1,483 +1,326 @@
@isTest
private class LexArriveGoodsControllerTest {
  @IsTest
  static void test1() {
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    List<RecordType> rectCo = [
      SELECT Id
      FROM RecordType
      WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
    ];
    if (rectCo.size() == 0) {
      return;
    }
    // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
    Profile prof = [
      SELECT Id
      FROM Profile
      WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
    ];
    @IsTest
    static void test1(){
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
                            if (rectCo.size() == 0) {
                                return;
                            }
        // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
        Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
    Account myAccount1 = new Account(
      Name = 'Testaccount001',
      Dealer_discount__c = 20,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999996'
    );
    Account myAccount2 = new Account(
      Name = 'Testaccount002',
      Dealer_discount__c = 10,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999900',
      Product_Limit_Date__c = 'Test01|2|4,Test02|3|5'
    );
    insert new List<Account>{ myAccount1, myAccount2 };
        Account myAccount1 = new Account(Name='Testaccount001',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999996');
        Account myAccount2 = new Account(Name='Testaccount002',Dealer_discount__c =10,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900',Product_Limit_Date__c = 'Test01|2|4,Test02|3|5');
        insert new Account[]{myAccount1,myAccount2};
    Contact core = new Contact(
      email = 'jplumber@salesforce.com',
      firstname = 'Joe',
      lastname = 'Plumber',
      accountid = myAccount1.id
    );
    insert core;
    user MyUser_Test = new User(
      ContactId = core.id,
      Alias = 'newUser',
      Email = 'newuser@testorg.com',
      EmailEncodingKey = 'UTF-8',
      LastName = 'TestUser',
      LanguageLocaleKey = 'zh_CN',
      LocaleSidKey = 'zh_CN',
      ProfileId = prof.Id,
      TimeZoneSidKey = 'Asia/Shanghai',
      UserName = 'testUser@testorg.com',
      UserPro_Type__c = 'ET'
    );
    System.runAs(new User(Id = UserInfo.getUserId())) {
      insert MyUser_Test;
        Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
        insert core;
        user MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',UserPro_Type__c = 'ET');
        System.runAs(new User(Id = UserInfo.getUserId())){
            insert MyUser_Test;
        }
        // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
        // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // insert new Product2[] {prod01,prod02};
        system.runAs(MyUser_Test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[] {prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01_001';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            // Order1.Dealer_Info__c = myAccount1.id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
            Order1.Total_num__c = 3;
            Order1.OrderNumber_arrived__c =1;
            Order1.Delivery_detail_count__c=1;
            Order1.Order_ProType__c = 'ET';
            insert Order1;
            //订单明细
            //fahuo
            Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
            Orderdet.Name = 'OCM_01_00101';
            Orderdet.Consumable_order__c = Order1.Id;
            Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
            Orderdet.Consumable_Product__c = pro1.Id;
            Orderdet.Consumable_count__c = 40;
            insert Orderdet;
            //发货明细
            //到货正确信息
            Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
            Orderdet1.Name = 'OCM_01_001002';
            Orderdet1.Consumable_order_minor__c = Order1.Id;
            Orderdet1.Consumable_Product__c = pro1.Id;
            Orderdet1.Asset_Model_No__c = 'Test01';
            Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
            Orderdet1.TracingCode__c = 'BXJRA';
            //取消产品
            Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
            Orderdet2.Name = 'OCM_01_001003';
            Orderdet2.Consumable_order_minor__c = Order1.Id;
            Orderdet2.Consumable_Product__c = pro1.Id;
            Orderdet2.Asset_Model_No__c = 'Test01';
            //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
            Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
            Orderdet2.Cancellation_Date__c= Date.today();
            Orderdet2.TracingCode__c = 'BXJRB';
            //销售产品
            Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
            Orderdet3.Name = 'OCM_01_001004';
            Orderdet3.Consumable_order_minor__c = Order1.Id;
            Orderdet3.Consumable_Product__c = pro1.Id;
            Orderdet3.Asset_Model_No__c = 'Test01';
            Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
            Orderdet3.Used_date__c = Date.today();
            Orderdet3.Arrive_date__c = Date.today();
            Orderdet3.TracingCode__c = 'BXJRC';
            //Orderdet3.Box_Piece__c = '盒';
            //出库产品
            Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
            Orderdet4.Name = 'OCM_01_001005';
            Orderdet4.Consumable_order_minor__c = Order1.Id;
            Orderdet4.Consumable_Product__c = pro1.Id;
            Orderdet4.Asset_Model_No__c = 'Test01';
            Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
            Orderdet4.Send_Date__c =  Date.today();
            Orderdet4.Arrive_date__c = Date.today();
            Orderdet4.TracingCode__c = 'BXJRD';
            //已到货产品
            Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
            Orderdet5.Name = 'OCM_01_001006';
            Orderdet5.Consumable_order_minor__c = Order1.Id;
            Orderdet5.Consumable_Product__c = pro1.Id;
            Orderdet5.Asset_Model_No__c = 'Test01';
            Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
            Orderdet5.Arrive_date__c =  Date.today();
            Orderdet5.TracingCode__c = 'BXJRE';
            //发货明细
            //管理编码包含数字
            Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
            Orderdet6.Name = 'OCM_01_001002';
            Orderdet6.Consumable_order_minor__c = Order1.Id;
            Orderdet6.Consumable_Product__c = pro1.Id;
            Orderdet6.Asset_Model_No__c = 'Test01';
            Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
            Orderdet6.TracingCode__c = 'BX123';
            //发错库 未到货
            Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
            Orderdets8.Name = 'OCM_01_001011';
            Orderdets8.Consumable_order_minor__c = Order1.Id;
            Orderdets8.Consumable_Product__c = pro1.Id;
            Orderdets8.Asset_Model_No__c = 'Test01';
            Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
            Orderdets8.Box_Piece__c = '盒';
            Orderdets8.TracingCode__c = 'BXsys';
            insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2,Orderdet3,Orderdet4,Orderdet5,Orderdet6,Orderdets8};
            List<Consumable_orderdetails__c> cod1 = [select Id from Consumable_orderdetails__c WHERE Consumable_order__c = :Order1.Id];
            System.assertEquals(1, cod1.size());
            PageReference page = new PageReference('/apex/ArriveGoods?Esetid=' + Order1.Id);
            System.Test.setCurrentPage(page);
            ArriveGoodsController Controller = new ArriveGoodsController();
            //初始化测试
            System.Test.startTest();
            LexArriveGoodsController.Results re =  LexArriveGoodsController.init('Arr', Order1.Id);
            String arrControllerStr = re.arrGoodCon;
            LexArriveGoodsController.searchProduct('', arrControllerStr);
            re = LexArriveGoodsController.searchProduct('01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123', arrControllerStr);
            arrControllerStr = re.arrGoodCon;
            LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
            System.Test.stopTest();
        }
    }
    // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
    // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // insert new Product2[] {prod01,prod02};
    System.runAs(MyUser_Test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200311',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200312',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      // Order1.Dealer_Info__c = myAccount1.id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      Order1.Total_num__c = 3;
      Order1.OrderNumber_arrived__c = 1;
      Order1.Delivery_detail_count__c = 1;
      Order1.Order_ProType__c = 'ET';
      insert Order1;
    @IsTest
    static void test2(){
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
        if (rectCo.size() == 0) {
            return;
        }
        // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
        Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
      //订单明细
      //fahuo
      Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
      Orderdet.Name = 'OCM_01_00101';
      Orderdet.Consumable_order__c = Order1.Id;
      Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
      Orderdet.Consumable_Product__c = pro1.Id;
      Orderdet.Consumable_count__c = 40;
      insert Orderdet;
      //发货明细
      //到货正确信息
      Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
      Orderdet1.Name = 'OCM_01_001002';
      Orderdet1.Consumable_order_minor__c = Order1.Id;
      Orderdet1.Consumable_Product__c = pro1.Id;
      Orderdet1.Asset_Model_No__c = 'Test01';
      Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
      Orderdet1.TracingCode__c = 'BXJRA';
        Account myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900');
        Account myAccount1 = new Account(name='Testaccount001',Dealer_discount__c =30,RecordTypeId = rectCo[0].Id);
        insert new account[]{myAccount1,myAccount2};
      //取消产品
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
      Orderdet2.Name = 'OCM_01_001003';
      Orderdet2.Consumable_order_minor__c = Order1.Id;
      Orderdet2.Consumable_Product__c = pro1.Id;
      Orderdet2.Asset_Model_No__c = 'Test01';
      //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
      Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
      Orderdet2.Cancellation_Date__c = Date.today();
      Orderdet2.TracingCode__c = 'BXJRB';
      //销售产品
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
      Orderdet3.Name = 'OCM_01_001004';
      Orderdet3.Consumable_order_minor__c = Order1.Id;
      Orderdet3.Consumable_Product__c = pro1.Id;
      Orderdet3.Asset_Model_No__c = 'Test01';
      Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
      Orderdet3.Used_date__c = Date.today();
      Orderdet3.Arrive_date__c = Date.today();
      Orderdet3.TracingCode__c = 'BXJRC';
      //Orderdet3.Box_Piece__c = '盒';
        Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
        insert core;
        user MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',UserPro_Type__c = 'ET');
        System.runAs(new User(Id = UserInfo.getUserId())){
            insert MyUser_Test;
        }
      //出库产品
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
      Orderdet4.Name = 'OCM_01_001005';
      Orderdet4.Consumable_order_minor__c = Order1.Id;
      Orderdet4.Consumable_Product__c = pro1.Id;
      Orderdet4.Asset_Model_No__c = 'Test01';
      Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
      Orderdet4.Send_Date__c = Date.today();
      Orderdet4.Arrive_date__c = Date.today();
      Orderdet4.TracingCode__c = 'BXJRD';
        // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
        // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // insert new Product2[] {prod01,prod02};
        system.runAs(MyUser_Test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[] {prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            //订单
      //已到货产品
      Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
      Orderdet5.Name = 'OCM_01_001006';
      Orderdet5.Consumable_order_minor__c = Order1.Id;
      Orderdet5.Consumable_Product__c = pro1.Id;
      Orderdet5.Asset_Model_No__c = 'Test01';
      Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
      Orderdet5.Arrive_date__c = Date.today();
      Orderdet5.TracingCode__c = 'BXJRE';
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01_001';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            Order1.Dealer_Info__c = myAccount1.id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      //发货明细
      //管理编码包含数字
      Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
      Orderdet6.Name = 'OCM_01_001002';
      Orderdet6.Consumable_order_minor__c = Order1.Id;
      Orderdet6.Consumable_Product__c = pro1.Id;
      Orderdet6.Asset_Model_No__c = 'Test01';
      Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
      Orderdet6.TracingCode__c = 'BX123';
            //返品订单
      //发错库 未到货
      Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
      Orderdets8.Name = 'OCM_01_001011';
      Orderdets8.Consumable_order_minor__c = Order1.Id;
      Orderdets8.Consumable_Product__c = pro1.Id;
      Orderdets8.Asset_Model_No__c = 'Test01';
      Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
      Orderdets8.Box_Piece__c = '盒';
      Orderdets8.TracingCode__c = 'BXsys';
            Consumable_order__c Order2 = new Consumable_order__c();
            Order2.Name = 'OCM_01_002';
            Order2.Order_status__c = '批准';
            Order2.Order_type__c = '返品';
            Order2.Dealer_Info__c = myAccount1.id;
            Order2.RecordTypeid = System.Label.Dealer_Returned_Label;
            insert Order1;
            insert Order2;
      insert new List<Consumable_order_details2__c>{
        Orderdet1,
        Orderdet2,
        Orderdet3,
        Orderdet4,
        Orderdet5,
        Orderdet6,
        Orderdets8
      };
            //订单明细
            //fahuo
            Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
            Orderdet.Name = 'OCM_01_00101';
            Orderdet.Consumable_order__c = Order1.Id;
            Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
            Orderdet.Consumable_Product__c = pro1.Id;
            Orderdet.Consumable_count__c = 4;
            insert Orderdet;
      List<Consumable_orderdetails__c> cod1 = [
        SELECT Id
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c = :Order1.Id
      ];
      System.assertEquals(1, cod1.size());
            //发货明细
            //没出库,没销售,就是在库
            Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
            Orderdet1.Name = 'OCM_01_001001';
            Orderdet1.Consumable_order_minor__c = Order1.Id;
            Orderdet1.Consumable_Product__c = pro1.Id;
            Orderdet1.Asset_Model_No__c = 'Pro001';
            Orderdet1.Arrive_date__c = date.today();
            Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRF';
            Orderdet1.TracingCode__c = 'BXSYS';
      PageReference page = new PageReference(
        '/apex/ArriveGoods?Esetid=' + Order1.Id
      );
            //daohuo
            Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
            Orderdet2.Name = 'OCM_01_001002';
            Orderdet2.Consumable_order_minor__c = Order1.Id;
            Orderdet2.Consumable_Product__c = pro1.Id;
            Orderdet2.Asset_Model_No__c = 'Pro001';
            Orderdet2.Consumable_Arrived_order__c = Order1.Id;
            Orderdet2.Arrive_date__c = date.today();
            Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRI';
            Orderdet2.TracingCode__c = 'BXSYS';
            //sale
            Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
            Orderdet3.Name = 'OCM_01_001003';
            Orderdet3.Consumable_order_minor__c = Order1.Id;
            Orderdet3.Consumable_Product__c = pro1.Id;
            Orderdet3.Asset_Model_No__c = 'Pro001';
            Orderdet3.Consumable_Arrived_order__c = Order1.Id;
            Orderdet3.Arrive_date__c = date.today();
            Orderdet3.Used_date__c = date.today();
            Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRJ';
            Orderdet3.TracingCode__c = 'BXSYS';
            //出库
            Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
            Orderdet4.Name = 'OCM_01_001004';
            Orderdet4.Consumable_order_minor__c = Order1.Id;
            Orderdet4.Consumable_Product__c = pro1.Id;
            Orderdet4.Asset_Model_No__c = 'Pro001';
            Orderdet4.Consumable_Arrived_order__c = Order1.Id;
            Orderdet4.Consumable_Shipment_order__c = Order1.Id;
            Orderdet4.Send_Date__c = date.today();
            Orderdet4.Arrive_date__c = date.today();
            Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BX222';
            Orderdet4.TracingCode__c = 'BXSYS';
            //quxiao
            Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
            Orderdet5.Name = 'OCM_01_001005';
            Orderdet5.Consumable_order_minor__c = Order1.Id;
            Orderdet5.Consumable_Product__c = pro1.Id;
            Orderdet5.Asset_Model_No__c = 'Pro001';
            Orderdet5.Cancellation_Date__c = Date.today();
            Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRZ';
            Orderdet5.Box_Piece__c ='个';
            Orderdet5.TracingCode__c = 'BXSYS';
            //fanpin
            Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
            Orderdet6.Name = 'OCM_01_001006';
            Orderdet6.Consumable_order_minor__c = Order1.Id;
            Orderdet6.Consumable_Product__c = pro1.Id;
            Orderdet6.Asset_Model_No__c = 'Pro001';
            Orderdet6.Consumable_Return_order__c = Order2.Id;
            Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
            Orderdet6.Box_Piece__c ='个';
            Orderdet6.TracingCode__c = 'BXSYS';
      System.Test.setCurrentPage(page);
      ArriveGoodsController Controller = new ArriveGoodsController();
      //初始化测试
      System.Test.startTest();
      LexArriveGoodsController.Results re = LexArriveGoodsController.init(
        'Arr',
        Order1.Id
      );
      String arrControllerStr = re.arrGoodCon;
      LexArriveGoodsController.searchProduct('', arrControllerStr);
      re = LexArriveGoodsController.searchProduct(
        '01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123',
        arrControllerStr
      );
      arrControllerStr = re.arrGoodCon;
      LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
      System.Test.stopTest();
            Consumable_order_details2__c Orderdet7 = new Consumable_order_details2__c();
            Orderdet7.Name = 'OCM_01_001001';
            Orderdet7.Consumable_order_minor__c = Order1.Id;
            Orderdet7.Consumable_Product__c = pro1.Id;
            Orderdet7.Asset_Model_No__c = 'Pro001';
            Orderdet7.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet7.Bar_Code__c = '01049531702003111115120017181000105ZK250BX333';
            Orderdet7.TracingCode__c = 'BXSYS';
            insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2,Orderdet3,Orderdet4,Orderdet5,Orderdet6,Orderdet7};
            ArriveGoodsController Controller = new ArriveGoodsController();
            System.Test.startTest();
            Controller.init();
            Controller.barcode = '01049531702003111115120017181000105ZK250BXAAA\n01049531702003111115120017181000105ZK250BXJRJ\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BX123\n01049531702003111115120017181000105ZK250BX222';
            Controller.SearchPro();
            Controller.ArriveGoodsConfim();
            Controller.UpdateGoodsOfReturn();
            controller.getinventorysize();
            LexArriveGoodsController.Results re =  LexArriveGoodsController.init('Arr','');
            String arrControllerStr = re.arrGoodCon;
            re = LexArriveGoodsController.searchProduct('01049531702003111115120017181000105ZK250BXAAA\n01049531702003111115120017181000105ZK250BXJRJ\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BX123\n01049531702003111115120017181000105ZK250BX222', arrControllerStr);
            arrControllerStr = re.arrGoodCon;
            LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
            LexArriveGoodsController.updateGoodsOfReturn(re.arrGoodCon, JSON.serialize(re.showGoodsofReturnList));
            LexArriveGoodsController.ConsumableorderdetailsInfo con = new LexArriveGoodsController.ConsumableorderdetailsInfo();
            List<LexArriveGoodsController.ConsumableorderdetailsInfo> conList = new List<LexArriveGoodsController.ConsumableorderdetailsInfo>();
            conList.add(con);
            LexArriveGoodsController.changeType2(conList);
            System.Test.stopTest();
        }
    }
  }
  @IsTest
  static void test2() {
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    List<RecordType> rectCo = [
      SELECT Id
      FROM RecordType
      WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
    ];
    if (rectCo.size() == 0) {
      return;
    }
    // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
    Profile prof = [
      SELECT Id
      FROM Profile
      WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
    ];
    Account myAccount2 = new Account(
      name = 'Testaccount002',
      Dealer_discount__c = 20,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999900'
    );
    Account myAccount1 = new Account(
      name = 'Testaccount001',
      Dealer_discount__c = 30,
      RecordTypeId = rectCo[0].Id
    );
    insert new List<account>{ myAccount1, myAccount2 };
    Contact core = new Contact(
      email = 'jplumber@salesforce.com',
      firstname = 'Joe',
      lastname = 'Plumber',
      accountid = myAccount1.id
    );
    insert core;
    user MyUser_Test = new User(
      ContactId = core.id,
      Alias = 'newUser',
      Email = 'newuser@testorg.com',
      EmailEncodingKey = 'UTF-8',
      LastName = 'TestUser',
      LanguageLocaleKey = 'zh_CN',
      LocaleSidKey = 'zh_CN',
      ProfileId = prof.Id,
      TimeZoneSidKey = 'Asia/Shanghai',
      UserName = 'testUser@testorg.com',
      UserPro_Type__c = 'ET'
    );
    System.runAs(new User(Id = UserInfo.getUserId())) {
      insert MyUser_Test;
    }
    // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
    // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // insert new Product2[] {prod01,prod02};
    System.runAs(MyUser_Test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200311',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200312',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      Order1.Dealer_Info__c = myAccount1.id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      //返品订单
      Consumable_order__c Order2 = new Consumable_order__c();
      Order2.Name = 'OCM_01_002';
      Order2.Order_status__c = '批准';
      Order2.Order_type__c = '返品';
      Order2.Dealer_Info__c = myAccount1.id;
      Order2.RecordTypeid = System.Label.Dealer_Returned_Label;
      insert Order1;
      insert Order2;
      //订单明细
      //fahuo
      Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
      Orderdet.Name = 'OCM_01_00101';
      Orderdet.Consumable_order__c = Order1.Id;
      Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
      Orderdet.Consumable_Product__c = pro1.Id;
      Orderdet.Consumable_count__c = 4;
      insert Orderdet;
      //发货明细
      //没出库,没销售,就是在库
      Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
      Orderdet1.Name = 'OCM_01_001001';
      Orderdet1.Consumable_order_minor__c = Order1.Id;
      Orderdet1.Consumable_Product__c = pro1.Id;
      Orderdet1.Asset_Model_No__c = 'Pro001';
      Orderdet1.Arrive_date__c = date.today();
      Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRF';
      Orderdet1.TracingCode__c = 'BXSYS';
      //daohuo
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
      Orderdet2.Name = 'OCM_01_001002';
      Orderdet2.Consumable_order_minor__c = Order1.Id;
      Orderdet2.Consumable_Product__c = pro1.Id;
      Orderdet2.Asset_Model_No__c = 'Pro001';
      Orderdet2.Consumable_Arrived_order__c = Order1.Id;
      Orderdet2.Arrive_date__c = date.today();
      Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRI';
      Orderdet2.TracingCode__c = 'BXSYS';
      //sale
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
      Orderdet3.Name = 'OCM_01_001003';
      Orderdet3.Consumable_order_minor__c = Order1.Id;
      Orderdet3.Consumable_Product__c = pro1.Id;
      Orderdet3.Asset_Model_No__c = 'Pro001';
      Orderdet3.Consumable_Arrived_order__c = Order1.Id;
      Orderdet3.Arrive_date__c = date.today();
      Orderdet3.Used_date__c = date.today();
      Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRJ';
      Orderdet3.TracingCode__c = 'BXSYS';
      //出库
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
      Orderdet4.Name = 'OCM_01_001004';
      Orderdet4.Consumable_order_minor__c = Order1.Id;
      Orderdet4.Consumable_Product__c = pro1.Id;
      Orderdet4.Asset_Model_No__c = 'Pro001';
      Orderdet4.Consumable_Arrived_order__c = Order1.Id;
      Orderdet4.Consumable_Shipment_order__c = Order1.Id;
      Orderdet4.Send_Date__c = date.today();
      Orderdet4.Arrive_date__c = date.today();
      Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BX222';
      Orderdet4.TracingCode__c = 'BXSYS';
      //quxiao
      Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
      Orderdet5.Name = 'OCM_01_001005';
      Orderdet5.Consumable_order_minor__c = Order1.Id;
      Orderdet5.Consumable_Product__c = pro1.Id;
      Orderdet5.Asset_Model_No__c = 'Pro001';
      Orderdet5.Cancellation_Date__c = Date.today();
      Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRZ';
      Orderdet5.Box_Piece__c = '个';
      Orderdet5.TracingCode__c = 'BXSYS';
      //fanpin
      Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
      Orderdet6.Name = 'OCM_01_001006';
      Orderdet6.Consumable_order_minor__c = Order1.Id;
      Orderdet6.Consumable_Product__c = pro1.Id;
      Orderdet6.Asset_Model_No__c = 'Pro001';
      Orderdet6.Consumable_Return_order__c = Order2.Id;
      Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
      Orderdet6.Box_Piece__c = '个';
      Orderdet6.TracingCode__c = 'BXSYS';
      Consumable_order_details2__c Orderdet7 = new Consumable_order_details2__c();
      Orderdet7.Name = 'OCM_01_001001';
      Orderdet7.Consumable_order_minor__c = Order1.Id;
      Orderdet7.Consumable_Product__c = pro1.Id;
      Orderdet7.Asset_Model_No__c = 'Pro001';
      Orderdet7.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet7.Bar_Code__c = '01049531702003111115120017181000105ZK250BX333';
      Orderdet7.TracingCode__c = 'BXSYS';
      insert new List<Consumable_order_details2__c>{
        Orderdet1,
        Orderdet2,
        Orderdet3,
        Orderdet4,
        Orderdet5,
        Orderdet6,
        Orderdet7
      };
      ArriveGoodsController Controller = new ArriveGoodsController();
      System.Test.startTest();
      Controller.init();
      Controller.barcode = '01049531702003111115120017181000105ZK250BXAAA\n01049531702003111115120017181000105ZK250BXJRJ\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BX123\n01049531702003111115120017181000105ZK250BX222';
      Controller.SearchPro();
      Controller.ArriveGoodsConfim();
      Controller.UpdateGoodsOfReturn();
      controller.getinventorysize();
      LexArriveGoodsController.Results re = LexArriveGoodsController.init(
        'Arr',
        ''
      );
      String arrControllerStr = re.arrGoodCon;
      re = LexArriveGoodsController.searchProduct(
        '01049531702003111115120017181000105ZK250BXAAA\n01049531702003111115120017181000105ZK250BXJRJ\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BX123\n01049531702003111115120017181000105ZK250BX222',
        arrControllerStr
      );
      arrControllerStr = re.arrGoodCon;
      LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
      LexArriveGoodsController.updateGoodsOfReturn(
        re.arrGoodCon,
        JSON.serialize(re.showGoodsofReturnList)
      );
      LexArriveGoodsController.ConsumableorderdetailsInfo con = new LexArriveGoodsController.ConsumableorderdetailsInfo();
      List<LexArriveGoodsController.ConsumableorderdetailsInfo> conList = new List<LexArriveGoodsController.ConsumableorderdetailsInfo>();
      conList.add(con);
      LexArriveGoodsController.changeType2(conList);
      System.Test.stopTest();
    }
  }
}
}
force-app/main/default/classes/LexArriveGoodsControllerTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls
@@ -1,240 +1,159 @@
@isTest
public class LexArriveGoodsControllerTest1 {
  static void test1() {
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    List<RecordType> rectCo = [
      SELECT Id
      FROM RecordType
      WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
    ];
    if (rectCo.size() == 0) {
      return;
    static void test1(){
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
                            if (rectCo.size() == 0) {
                                return;
                            }
        // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
        Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
        Account myAccount1 = new Account(Name='Testaccount001',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999996');
        Account myAccount2 = new Account(Name='Testaccount002',Dealer_discount__c =10,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900',Product_Limit_Date__c = 'Test01|2|4,Test02|3|5');
        insert new Account[]{myAccount1,myAccount2};
        Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
        insert core;
        user MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',UserPro_Type__c = 'ET');
        System.runAs(new User(Id = UserInfo.getUserId())){
            insert MyUser_Test;
        }
        // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
        // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
        // insert new Product2[] {prod01,prod02};
        system.runAs(MyUser_Test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',RecordTypeId = '01210000000aMAFAA2',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[] {prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01_001';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            // Order1.Dealer_Info__c = myAccount1.id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
            Order1.Total_num__c = 3;
            Order1.OrderNumber_arrived__c =1;
            Order1.Delivery_detail_count__c=1;
            Order1.Order_ProType__c = 'ET';
            insert Order1;
            //订单明细
            //fahuo
            Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
            Orderdet.Name = 'OCM_01_00101';
            Orderdet.Consumable_order__c = Order1.Id;
            Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
            Orderdet.Consumable_Product__c = pro1.Id;
            Orderdet.Consumable_count__c = 40;
            insert Orderdet;
            //发货明细
            //到货正确信息
            Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
            Orderdet1.Name = 'OCM_01_001002';
            Orderdet1.Consumable_order_minor__c = Order1.Id;
            Orderdet1.Consumable_Product__c = pro1.Id;
            Orderdet1.Asset_Model_No__c = 'Test01';
            Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
            Orderdet1.TracingCode__c = 'BXJRA';
            //取消产品
            Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
            Orderdet2.Name = 'OCM_01_001003';
            Orderdet2.Consumable_order_minor__c = Order1.Id;
            Orderdet2.Consumable_Product__c = pro1.Id;
            Orderdet2.Asset_Model_No__c = 'Test01';
            //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
            Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
            Orderdet2.Cancellation_Date__c= Date.today();
            Orderdet2.TracingCode__c = 'BXJRB';
            //销售产品
            Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
            Orderdet3.Name = 'OCM_01_001004';
            Orderdet3.Consumable_order_minor__c = Order1.Id;
            Orderdet3.Consumable_Product__c = pro1.Id;
            Orderdet3.Asset_Model_No__c = 'Test01';
            Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
            Orderdet3.Used_date__c = Date.today();
            Orderdet3.Arrive_date__c = Date.today();
            Orderdet3.TracingCode__c = 'BXJRC';
            //Orderdet3.Box_Piece__c = '盒';
            //出库产品
            Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
            Orderdet4.Name = 'OCM_01_001005';
            Orderdet4.Consumable_order_minor__c = Order1.Id;
            Orderdet4.Consumable_Product__c = pro1.Id;
            Orderdet4.Asset_Model_No__c = 'Test01';
            Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
            Orderdet4.Send_Date__c =  Date.today();
            Orderdet4.Arrive_date__c = Date.today();
            Orderdet4.TracingCode__c = 'BXJRD';
            //已到货产品
            Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
            Orderdet5.Name = 'OCM_01_001006';
            Orderdet5.Consumable_order_minor__c = Order1.Id;
            Orderdet5.Consumable_Product__c = pro1.Id;
            Orderdet5.Asset_Model_No__c = 'Test01';
            Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
            Orderdet5.Arrive_date__c =  Date.today();
            Orderdet5.TracingCode__c = 'BXJRE';
            //发货明细
            //管理编码包含数字
            Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
            Orderdet6.Name = 'OCM_01_001002';
            Orderdet6.Consumable_order_minor__c = Order1.Id;
            Orderdet6.Consumable_Product__c = pro1.Id;
            Orderdet6.Asset_Model_No__c = 'Test01';
            Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
            Orderdet6.TracingCode__c = 'BX123';
            //发错库 未到货
            Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
            Orderdets8.Name = 'OCM_01_001011';
            Orderdets8.Consumable_order_minor__c = Order1.Id;
            Orderdets8.Consumable_Product__c = pro1.Id;
            Orderdets8.Asset_Model_No__c = 'Test01';
            Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
            Orderdets8.Box_Piece__c = '盒';
            Orderdets8.TracingCode__c = 'BXsys';
            insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2,Orderdet3,Orderdet4,Orderdet5,Orderdet6,Orderdets8};
            List<Consumable_orderdetails__c> cod1 = [select Id from Consumable_orderdetails__c WHERE Consumable_order__c = :Order1.Id];
            System.assertEquals(1, cod1.size());
            PageReference page = new PageReference('/apex/ArriveGoods?Esetid=' + Order1.Id);
            System.Test.setCurrentPage(page);
            ArriveGoodsController Controller = new ArriveGoodsController();
            //初始化测试
            System.Test.startTest();
            LexArriveGoodsController.Results re =  LexArriveGoodsController.init('Arr', Order1.Id);
            String arrControllerStr = re.arrGoodCon;
            LexArriveGoodsController.searchProduct('', arrControllerStr);
            re = LexArriveGoodsController.searchProduct('01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123', arrControllerStr);
            arrControllerStr = re.arrGoodCon;
            LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
            System.Test.stopTest();
        }
    }
    // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
    Profile prof = [
      SELECT Id
      FROM Profile
      WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
    ];
    Account myAccount1 = new Account(
      Name = 'Testaccount001',
      Dealer_discount__c = 20,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999996'
    );
    Account myAccount2 = new Account(
      Name = 'Testaccount002',
      Dealer_discount__c = 10,
      RecordTypeId = rectCo[0].Id,
      AgentCode_Ext__c = '9999900',
      Product_Limit_Date__c = 'Test01|2|4,Test02|3|5'
    );
    insert new List<Account>{ myAccount1, myAccount2 };
    Contact core = new Contact(
      email = 'jplumber@salesforce.com',
      firstname = 'Joe',
      lastname = 'Plumber',
      accountid = myAccount1.id
    );
    insert core;
    user MyUser_Test = new User(
      ContactId = core.id,
      Alias = 'newUser',
      Email = 'newuser@testorg.com',
      EmailEncodingKey = 'UTF-8',
      LastName = 'TestUser',
      LanguageLocaleKey = 'zh_CN',
      LocaleSidKey = 'zh_CN',
      ProfileId = prof.Id,
      TimeZoneSidKey = 'Asia/Shanghai',
      UserName = 'testUser@testorg.com',
      UserPro_Type__c = 'ET'
    );
    System.runAs(new User(Id = UserInfo.getUserId())) {
      insert MyUser_Test;
    }
    // User MyUser_Test = [select id,Contact.accountid from User WHERE ProfileId = :prof.Id and IsActive = true and UserPro_Type__c = 'ET' limit 1 ];
    // Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Manual_Entry__c = false);
    // insert new Product2[] {prod01,prod02};
    System.runAs(MyUser_Test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200311',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        RecordTypeId = '01210000000aMAFAA2',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200312',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      // Order1.Dealer_Info__c = myAccount1.id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      Order1.Total_num__c = 3;
      Order1.OrderNumber_arrived__c = 1;
      Order1.Delivery_detail_count__c = 1;
      Order1.Order_ProType__c = 'ET';
      insert Order1;
      //订单明细
      //fahuo
      Consumable_orderdetails__c Orderdet = new Consumable_orderdetails__c();
      Orderdet.Name = 'OCM_01_00101';
      Orderdet.Consumable_order__c = Order1.Id;
      Orderdet.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
      Orderdet.Consumable_Product__c = pro1.Id;
      Orderdet.Consumable_count__c = 40;
      insert Orderdet;
      //发货明细
      //到货正确信息
      Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
      Orderdet1.Name = 'OCM_01_001002';
      Orderdet1.Consumable_order_minor__c = Order1.Id;
      Orderdet1.Consumable_Product__c = pro1.Id;
      Orderdet1.Asset_Model_No__c = 'Test01';
      Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet1.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
      Orderdet1.TracingCode__c = 'BXJRA';
      //取消产品
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
      Orderdet2.Name = 'OCM_01_001003';
      Orderdet2.Consumable_order_minor__c = Order1.Id;
      Orderdet2.Consumable_Product__c = pro1.Id;
      Orderdet2.Asset_Model_No__c = 'Test01';
      //Orderdet2.Consumable_Arrived_order__c = Order1.Id;
      Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRB';
      Orderdet2.Cancellation_Date__c = Date.today();
      Orderdet2.TracingCode__c = 'BXJRB';
      //销售产品
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
      Orderdet3.Name = 'OCM_01_001004';
      Orderdet3.Consumable_order_minor__c = Order1.Id;
      Orderdet3.Consumable_Product__c = pro1.Id;
      Orderdet3.Asset_Model_No__c = 'Test01';
      Orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRC';
      Orderdet3.Used_date__c = Date.today();
      Orderdet3.Arrive_date__c = Date.today();
      Orderdet3.TracingCode__c = 'BXJRC';
      //Orderdet3.Box_Piece__c = '盒';
      //出库产品
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
      Orderdet4.Name = 'OCM_01_001005';
      Orderdet4.Consumable_order_minor__c = Order1.Id;
      Orderdet4.Consumable_Product__c = pro1.Id;
      Orderdet4.Asset_Model_No__c = 'Test01';
      Orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet4.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRD';
      Orderdet4.Send_Date__c = Date.today();
      Orderdet4.Arrive_date__c = Date.today();
      Orderdet4.TracingCode__c = 'BXJRD';
      //已到货产品
      Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
      Orderdet5.Name = 'OCM_01_001006';
      Orderdet5.Consumable_order_minor__c = Order1.Id;
      Orderdet5.Consumable_Product__c = pro1.Id;
      Orderdet5.Asset_Model_No__c = 'Test01';
      Orderdet5.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet5.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRE';
      Orderdet5.Arrive_date__c = Date.today();
      Orderdet5.TracingCode__c = 'BXJRE';
      //发货明细
      //管理编码包含数字
      Consumable_order_details2__c Orderdet6 = new Consumable_order_details2__c();
      Orderdet6.Name = 'OCM_01_001002';
      Orderdet6.Consumable_order_minor__c = Order1.Id;
      Orderdet6.Consumable_Product__c = pro1.Id;
      Orderdet6.Asset_Model_No__c = 'Test01';
      Orderdet6.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdet6.Bar_Code__c = '01049531702003111115120017181000105ZK250BX123';
      Orderdet6.TracingCode__c = 'BX123';
      //发错库 未到货
      Consumable_order_details2__c Orderdets8 = new Consumable_order_details2__c();
      Orderdets8.Name = 'OCM_01_001011';
      Orderdets8.Consumable_order_minor__c = Order1.Id;
      Orderdets8.Consumable_Product__c = pro1.Id;
      Orderdets8.Asset_Model_No__c = 'Test01';
      Orderdets8.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
      Orderdets8.Bar_Code__c = '01049531702003111115120017181000105ZK250BXsys';
      Orderdets8.Box_Piece__c = '盒';
      Orderdets8.TracingCode__c = 'BXsys';
      insert new List<Consumable_order_details2__c>{
        Orderdet1,
        Orderdet2,
        Orderdet3,
        Orderdet4,
        Orderdet5,
        Orderdet6,
        Orderdets8
      };
      List<Consumable_orderdetails__c> cod1 = [
        SELECT Id
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c = :Order1.Id
      ];
      System.assertEquals(1, cod1.size());
      PageReference page = new PageReference(
        '/apex/ArriveGoods?Esetid=' + Order1.Id
      );
      System.Test.setCurrentPage(page);
      ArriveGoodsController Controller = new ArriveGoodsController();
      //初始化测试
      System.Test.startTest();
      LexArriveGoodsController.Results re = LexArriveGoodsController.init(
        'Arr',
        Order1.Id
      );
      String arrControllerStr = re.arrGoodCon;
      LexArriveGoodsController.searchProduct('', arrControllerStr);
      re = LexArriveGoodsController.searchProduct(
        '01049531702003111115120017181000105ZK250BXJRA\n01049531702003111115120017181000105ZK250BXsys\n01049531702003111115120017181000105ZK250BXsun\n01049531702003111115120017181000105ZK250BXJRB\n01049531702003111115120017181000105ZK250BXJRC\n01049531702003111115120017181000105ZK250BX111\n01049531702003111115120017181000105ZK250BXJRD\n01049531702003111115120017181000105ZK250BXJRE\n01049531702003111115120017181000105ZK250BXJRF\n01049531702003111115120017181000105ZK250BXJRG\n01049531702003111115120017181000105ZK250BX123',
        arrControllerStr
      );
      arrControllerStr = re.arrGoodCon;
      LexArriveGoodsController.arriveGoodsConfim(arrControllerStr);
      System.Test.stopTest();
    }
  }
}
}
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexArriveGoodsMainController.cls
@@ -230,4 +230,4 @@
    @AuraEnabled
    public Boolean isNoteStay;
  }
}
}
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls
@@ -1,161 +1,109 @@
@istest
public class LexArriveGoodsMainControllerTest {
  @IsTest
  static void lexArriveGoodsMainControllerTest1() {
    User myUser_test = new User();
    Account myAccount1;
    Contact core;
    User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    System.runAs(currentUser) {
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
      ];
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      myAccount1 = new Account(
        name = 'testaccount001',
        RecordTypeId = rectCo[0].Id,
        AgentCode_Ext__c = '9999900'
      );
      insert myAccount1;
      core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount1.id
      );
      insert core;
      myUser_test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'testUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com',
        Work_Location__c = '北京'
      );
      insert myUser_test;
    @IsTest
    static void lexArriveGoodsMainControllerTest1(){
        User myUser_test = new User();
        Account myAccount1;
        Contact core;
        User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        System.runAs(currentUser){
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            myAccount1 = new Account(name='testaccount001',RecordTypeId = rectCo[0].Id ,AgentCode_Ext__c = '9999900');
            insert myAccount1;
            core = new Contact(email='jplumber@salesforce.com',
            firstname='Joe',
            lastname='Plumber',
            accountid=myAccount1.id);
            insert core;
            myUser_test = New User(
                ContactId = core.id,
                Alias = 'newUser',
                Email='newuser@testorg.com',
                EmailEncodingKey='UTF-8',
                LastName='testUser',
                LanguageLocaleKey='zh_CN',
                LocaleSidKey='zh_CN',
                ProfileId = prof.Id,
                TimeZoneSidKey='Asia/Shanghai',
                UserName='testUser@testorg.com',
                Work_Location__c='北京');
            insert myUser_test;
        }
        System.runAs(myUser_test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',Manual_Entry__c = false);
            insert new Product2[]{prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c(
                Name='OCM_01_001',
                RecordTypeId = System.Label.RT_ConOrder_Delivery,
                Order_type__c ='订单',
                Dealer_info__c=myAccount1.Id,
                Order_ProType__c = 'ET');
            Consumable_order__c Order2 = new Consumable_order__c(
                Name='OCM_01_002',
                RecordTypeId = System.Label.RT_ConOrder_Delivery,
                Order_type__c ='订单',
                Dealer_info__c=myAccount1.Id,
                Order_ProType__c = 'ET');
            insert new Consumable_order__c[] {Order1, Order2};
            //明细1
            Consumable_orderdetails__c createDetail = new Consumable_orderdetails__c();
            createDetail.name = 'Too001';
            createDetail.Consumable_Product__c = pro1.id;
            createDetail.Dealer_Custom_Price__c = 999.00;
            createDetail.Consumable_count__c = 3;
            createDetail.Consumable_order__c =  Order1.id;
            createDetail.RecordTypeid = System.Label.RT_ConOrderDetail1_Order;
            insert createDetail;
            Consumable_orderdetails__c createDetail1 = new Consumable_orderdetails__c();
            createDetail1.name = 'Too002';
            createDetail1.Consumable_Product__c = pro2.id;
            createDetail1.Consumable_order__c =  Order2.id;
            createDetail1.Dealer_Custom_Price__c = 999.00;
            createDetail1.Consumable_count__c = 4;
            createDetail1.RecordTypeid = System.Label.RT_ConOrderDetail1_Order;
            insert createDetail1;
            //订单明细
            Consumable_order_details2__c Orderdet1 =  new Consumable_order_details2__c(
                Name='OCM_01_001001',
                Consumable_order_minor__c = Order1.Id,
                Arrive_date__c = Date.today(),
                Consumable_Product__c = pro1.id,
                RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery);
            Consumable_order_details2__c Orderdet2 =  new Consumable_order_details2__c(
                Name='OCM_01_001002',
                Consumable_order_minor__c = Order2.Id,
                Arrive_date__c = Date.today(),
                Consumable_Product__c = pro2.id,
                RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery);
            Consumable_order_details2__c Orderdet3 =  new Consumable_order_details2__c(
                Name='OCM_01_001003',
                Consumable_order_minor__c = Order1.Id,
                //Arrive_date__c = Date.today(),
                Consumable_Product__c = pro1.id,
                RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery);
            Consumable_order_details2__c Orderdet4 =  new Consumable_order_details2__c(
                Name='OCM_01_001004',
                Consumable_order_minor__c = Order2.Id,
                Arrive_date__c = Date.today(),
                Consumable_Product__c = pro2.id,
                RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery);
            insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2, Orderdet3, Orderdet4};
            LexArriveGoodsMainController.init();
            LexArriveGoodsMainController.searchConsumableorderdetails('Too001', null, myAccount1.Id, '北京', 'ET');
        }
    }
    System.runAs(myUser_test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c(
        Name = 'OCM_01_001',
        RecordTypeId = System.Label.RT_ConOrder_Delivery,
        Order_type__c = '订单',
        Dealer_info__c = myAccount1.Id,
        Order_ProType__c = 'ET'
      );
      Consumable_order__c Order2 = new Consumable_order__c(
        Name = 'OCM_01_002',
        RecordTypeId = System.Label.RT_ConOrder_Delivery,
        Order_type__c = '订单',
        Dealer_info__c = myAccount1.Id,
        Order_ProType__c = 'ET'
      );
      insert new List<Consumable_order__c>{ Order1, Order2 };
      //明细1
      Consumable_orderdetails__c createDetail = new Consumable_orderdetails__c();
      createDetail.name = 'Too001';
      createDetail.Consumable_Product__c = pro1.id;
      createDetail.Dealer_Custom_Price__c = 999.00;
      createDetail.Consumable_count__c = 3;
      createDetail.Consumable_order__c = Order1.id;
      createDetail.RecordTypeid = System.Label.RT_ConOrderDetail1_Order;
      insert createDetail;
      Consumable_orderdetails__c createDetail1 = new Consumable_orderdetails__c();
      createDetail1.name = 'Too002';
      createDetail1.Consumable_Product__c = pro2.id;
      createDetail1.Consumable_order__c = Order2.id;
      createDetail1.Dealer_Custom_Price__c = 999.00;
      createDetail1.Consumable_count__c = 4;
      createDetail1.RecordTypeid = System.Label.RT_ConOrderDetail1_Order;
      insert createDetail1;
      //订单明细
      Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c(
        Name = 'OCM_01_001001',
        Consumable_order_minor__c = Order1.Id,
        Arrive_date__c = Date.today(),
        Consumable_Product__c = pro1.id,
        RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery
      );
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c(
        Name = 'OCM_01_001002',
        Consumable_order_minor__c = Order2.Id,
        Arrive_date__c = Date.today(),
        Consumable_Product__c = pro2.id,
        RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery
      );
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c(
        Name = 'OCM_01_001003',
        Consumable_order_minor__c = Order1.Id,
        //Arrive_date__c = Date.today(),
        Consumable_Product__c = pro1.id,
        RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery
      );
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c(
        Name = 'OCM_01_001004',
        Consumable_order_minor__c = Order2.Id,
        Arrive_date__c = Date.today(),
        Consumable_Product__c = pro2.id,
        RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery
      );
      insert new List<Consumable_order_details2__c>{
        Orderdet1,
        Orderdet2,
        Orderdet3,
        Orderdet4
      };
      LexArriveGoodsMainController.init();
      LexArriveGoodsMainController.searchConsumableorderdetails(
        'Too001',
        null,
        myAccount1.Id,
        '北京',
        'ET'
      );
    }
  }
}
}
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls
@@ -1,249 +1,140 @@
@isTest
public class LexArriveGsDetailsControllerTest {
  @IsTest
  static void test1() {
    User myUser_test = new User();
    Account myAccount1;
    Account myAccount2;
    Contact core;
    User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    System.runAs(currentUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
      ];
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      myAccount2 = new Account(
        name = 'Testaccount002',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id
      );
      insert myAccount2;
      core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount2.id
      );
      insert core;
      myUser_Test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com'
      );
      insert myUser_Test;
      System.runAs(MyUser_Test) {
        StaticParameter.ConsumableAssetHanderTrigger = true;
        Consumable_order__c order1 = new Consumable_order__c();
        order1.Name = 'OCM_01_001';
        order1.Order_status__c = '批准';
        order1.Order_type__c = '订单';
        order1.Dealer_Info__c = myAccount2.Id;
        order1.RecordTypeid = System.Label.RT_ConOrder_Arrive;
        insert order1;
        Consumable_order__c olyorder = new Consumable_order__c();
        olyorder.Name = 'OCM_01_001';
        olyorder.Order_status__c = '批准';
        olyorder.Order_type__c = '订单';
        olyorder.Dealer_Info__c = myAccount2.Id;
        olyorder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
        insert olyorder;
        //订单明细
        Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
        Orderdet1.Name = 'OCM_01_001001';
        Orderdet1.Consumable_order_minor__c = olyorder.Id;
        Orderdet1.Consumable_Arrived_order__c = order1.Id;
        //Orderdet1.IsArrival__c = true;
        Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
        Orderdet1.Bar_Code__c = '11111';
        Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
        Orderdet2.Name = 'OCM_01_001002';
        Orderdet2.Consumable_order_minor__c = olyorder.Id;
        Orderdet2.Consumable_Arrived_order__c = order1.Id;
        //Orderdet2.IsArrival__c = true;
        Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
        Orderdet2.Bar_Code__c = '22222';
        insert new List<Consumable_order_details2__c>{ Orderdet1, Orderdet2 };
        LexArriveGsDetailsController.init(order1.Id);
        LexArriveGsDetailsController.proSale(
          JSON.serialize(LexArriveGsDetailsController.coc),
          LexArriveGsDetailsController.coc.Arrive_Order__r.Total_num__c,
          LexArriveGsDetailsController.consumableorderdetailsRecords.size(),
          order1.Id
        );
      }
    @IsTest
    static void test1(){
        User myUser_test = new User();
        Account myAccount1;
        Account myAccount2;
        Contact core;
        User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        System.runAs(currentUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[]{prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id);
            insert myAccount2;
            core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount2.id);
            insert core;
            myUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com');
            insert myUser_Test;
            System.runAs(MyUser_Test){
                StaticParameter.ConsumableAssetHanderTrigger = true;
                Consumable_order__c order1 = new Consumable_order__c();
                order1.Name = 'OCM_01_001';
                order1.Order_status__c = '批准';
                order1.Order_type__c = '订单';
                order1.Dealer_Info__c = myAccount2.Id;
                order1.RecordTypeid = System.Label.RT_ConOrder_Arrive;
                insert  order1;
                Consumable_order__c olyorder = new Consumable_order__c();
                olyorder.Name = 'OCM_01_001';
                olyorder.Order_status__c = '批准';
                olyorder.Order_type__c = '订单';
                olyorder.Dealer_Info__c = myAccount2.Id;
                olyorder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
                insert  olyorder;
                //订单明细
                Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
                Orderdet1.Name = 'OCM_01_001001';
                Orderdet1.Consumable_order_minor__c = olyorder.Id;
                Orderdet1.Consumable_Arrived_order__c = order1.Id;
                //Orderdet1.IsArrival__c = true;
                Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                Orderdet1.Bar_Code__c = '11111';
                Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
                Orderdet2.Name = 'OCM_01_001002';
                Orderdet2.Consumable_order_minor__c = olyorder.Id;
                Orderdet2.Consumable_Arrived_order__c = order1.Id;
                //Orderdet2.IsArrival__c = true;
                Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                Orderdet2.Bar_Code__c = '22222';
                insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2};
                LexArriveGsDetailsController.init(order1.Id);
                LexArriveGsDetailsController.proSale(JSON.serialize(LexArriveGsDetailsController.coc), LexArriveGsDetailsController.coc.Arrive_Order__r.Total_num__c, LexArriveGsDetailsController.consumableorderdetailsRecords.size(), order1.Id);
            }
        }
    }
  }
  @IsTest
  static void test2() {
    User myUser_test = new User();
    Account myAccount1;
    Account myAccount2;
    Contact core;
    User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    NoteStay__c n = new NoteStay__c(Name = 'NoteStay', IsStay__c = true);
    insert n;
    System.runAs(currentUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
      ];
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      insert new List<Product2__c>{ pro1, pro2 };
      myAccount2 = new Account(
        name = 'Testaccount002',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id
      );
      insert myAccount2;
      core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount2.id
      );
      insert core;
      myUser_Test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com'
      );
      insert myUser_Test;
      System.runAs(MyUser_Test) {
        StaticParameter.ConsumableAssetHanderTrigger = true;
        Consumable_order__c order1 = new Consumable_order__c();
        order1.Name = 'OCM_01_001';
        order1.Order_status__c = '批准';
        order1.Order_type__c = '订单';
        order1.RecordTypeid = System.Label.RT_ConOrder_Arrive;
        order1.IsShipment__c = true;
        insert order1;
    @IsTest
    static void test2(){
        User myUser_test = new User();
        Account myAccount1;
        Account myAccount2;
        Contact core;
        User currentUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
        NoteStay__c n = new NoteStay__c(Name = 'NoteStay',IsStay__c = true);
        insert n;
        System.runAs(currentUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Manual_Entry__c = false);
            insert new Product2[]{prod01,prod02};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            insert new Product2__c[] {pro1, pro2};
            myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id);
            insert myAccount2;
            core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount2.id);
            insert core;
            myUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com');
            insert myUser_Test;
            System.runAs(MyUser_Test){
                StaticParameter.ConsumableAssetHanderTrigger = true;
                Consumable_order__c order1 = new Consumable_order__c();
                order1.Name = 'OCM_01_001';
                order1.Order_status__c = '批准';
                order1.Order_type__c = '订单';
                order1.RecordTypeid = System.Label.RT_ConOrder_Arrive;
                order1.IsShipment__c = true;
                insert  order1;
        Consumable_order__c olyorder = new Consumable_order__c();
        olyorder.Name = 'OCM_01_001';
        olyorder.Order_status__c = '批准';
        olyorder.Order_type__c = '订单';
        olyorder.Dealer_Info__c = myAccount2.Id;
        olyorder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
        olyorder.IsShipment__c = true;
        insert olyorder;
                Consumable_order__c olyorder = new Consumable_order__c();
                olyorder.Name = 'OCM_01_001';
                olyorder.Order_status__c = '批准';
                olyorder.Order_type__c = '订单';
                olyorder.Dealer_Info__c = myAccount2.Id;
                olyorder.RecordTypeid = System.Label.RT_ConOrder_Delivery;
                olyorder.IsShipment__c = true;
                insert  olyorder;
        //订单明细
        Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
        Orderdet1.Name = 'OCM_01_001001';
        Orderdet1.Consumable_order_minor__c = olyorder.Id;
        Orderdet1.Consumable_Arrived_order__c = order1.Id;
        //Orderdet1.IsArrival__c = true;
        Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
        Orderdet1.Bar_Code__c = '11111';
        Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
        Orderdet2.Name = 'OCM_01_001002';
        Orderdet2.Consumable_order_minor__c = olyorder.Id;
        Orderdet2.Consumable_Arrived_order__c = order1.Id;
        //Orderdet2.IsArrival__c = true;
        Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
        Orderdet2.Bar_Code__c = '22222';
        insert new List<Consumable_order_details2__c>{ Orderdet1, Orderdet2 };
        LexArriveGsDetailsController.init(order1.Id);
        LexArriveGsDetailsController.proSale(
          JSON.serialize(LexArriveGsDetailsController.coc),
          1,
          1,
          order1.Id
        );
      }
                //订单明细
                Consumable_order_details2__c Orderdet1 = new Consumable_order_details2__c();
                Orderdet1.Name = 'OCM_01_001001';
                Orderdet1.Consumable_order_minor__c = olyorder.Id;
                Orderdet1.Consumable_Arrived_order__c = order1.Id;
                //Orderdet1.IsArrival__c = true;
                Orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                Orderdet1.Bar_Code__c = '11111';
                Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
                Orderdet2.Name = 'OCM_01_001002';
                Orderdet2.Consumable_order_minor__c = olyorder.Id;
                Orderdet2.Consumable_Arrived_order__c = order1.Id;
                //Orderdet2.IsArrival__c = true;
                Orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                Orderdet2.Bar_Code__c = '22222';
                insert new Consumable_order_details2__c[] {Orderdet1, Orderdet2};
                LexArriveGsDetailsController.init(order1.Id);
                LexArriveGsDetailsController.proSale(JSON.serialize(LexArriveGsDetailsController.coc), 1, 1, order1.Id);
            }
        }
    }
  }
}
}
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexCancelRemoveBoxController.cls
@@ -1,801 +1,624 @@
public with sharing class LexCancelRemoveBoxController {
  //经销商产品分类
  public static String agencyProType { get; set; }
  public static String userPro_Typestr = null;
  public static String barcode { get; set; }
  /*****************画面表示Bean******************/
  public static List<ConsumableorderdetailsInfo> consumableInventory {
    get;
    set;
  }
  //错误明细
  public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror {
    get;
    set;
  }
  //拆盒明细
  public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy {
    get;
    set;
  }
  public static boolean saveFLGbln { get; set; }
  //错误信息
  public static String alertMessage { get; set; }
  //拆盒明细件数
  public static Integer getinventorysize() {
    return ConsumableorderdetailsRecordsdummy.size();
  }
  public static Map<String, String> ExistIdMap = new Map<String, String>();
  public static Map<String, String> ErrorIdMap = new Map<String, String>();
  public static Map<String, String> AllMap = new Map<String, String>();
  public static List<String> BarCodeListP = new List<String>();
  //不符合的barcode和型号
  public static list<String> notInlist = new List<String>();
  public static String baseUrl { get; private set; }
  private static String accountid = null;
  private static String accountName = null;
  //public String[] proidList =new String[]{};
  // 登录者工作地
  private static String userWorkLocation;
  public LexCancelRemoveBoxController() {
    baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    consumableInventory = new List<ConsumableorderdetailsInfo>();
    saveFLGbln = false;
  }
  @AuraEnabled
  public static ResponseBodyLWC init() {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    String userId = UserInfo.getUserId();
    List<user> Useracc = new List<user>();
    Useracc = [
      SELECT accountid, Work_Location__c, UserPro_Type__c
      FROM user
      WHERE id = :userId
    ];
    accountid = Useracc[0].accountid;
    userWorkLocation = Useracc[0].Work_Location__c;
    agencyProType = Useracc[0].UserPro_Type__c;
    if (String.isBlank(Useracc[0].UserPro_Type__c)) {
      agencyProType = 'ET';
    //经销商产品分类
    public static String agencyProType {get;set;}
    public static String userPro_Typestr = null;
    public static String barcode { get; set; }
    /*****************画面表示Bean******************/
    public static List<ConsumableorderdetailsInfo> consumableInventory { get; set; }
    //错误明细
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror { get; set; }
    //拆盒明细
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy { get; set; }
    public static boolean saveFLGbln {get;set;}
    //错误信息
    public static String alertMessage {set;get;}
    //拆盒明细件数
    public static Integer getinventorysize(){
        return ConsumableorderdetailsRecordsdummy.size();
    }
    userPro_Typestr = '%' + agencyProType + '%';
    List<account> accountInfo = [
      SELECT Name
      FROM account
      WHERE id = :accountid
    ];
    //String view_product = accountInfo[0].view_product__c;
    accountName = accountInfo[0].Name;
    //proidList = view_product.split(',');
    data.put('accountName', accountName);
    data.put('userWorkLocation', userWorkLocation);
    data.put('agencyProType', agencyProType);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
    public static Map<String, String> ExistIdMap = new Map<String, String>();
    public static Map<String, String> ErrorIdMap = new Map<String, String>();
    public static Map<String, String> AllMap = new Map<String, String>();
    public static  List<String> BarCodeListP = new List<String>();
    //不符合的barcode和型号
    public static list<String> notInlist = new list<String>();
    public static  String baseUrl {get;private set;}
    private static String accountid = null;
    private static String accountName = null;
    //public String[] proidList =new String[]{};
    // 登录者工作地
    private static String userWorkLocation;
  // 将页面或取得BarCode去掉重复的,转换成List
  public static List<String> ParseBarCode(String Code) {
    String[] Cache = new List<String>{};
    Cache = Code.split('\n');
    Set<String> Buff = new Set<String>();
    for (String A : Cache) {
      Buff.add(A);
    }
    List<String> outPut = new List<String>();
    for (String B : Buff) {
      B = B.trim();
      outPut.add(B);
    }
    return outPut;
  }
  //获取明细
  @AuraEnabled
  public static ResponseBodyLWC searchConsumableorderdetails(
    String barcode,
    String accountName,
    String userWorkLocation,
    String agencyProType
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    userPro_Typestr = '%' + agencyProType + '%';
    barcode = barcode;
    accountName = accountName;
    userWorkLocation = userWorkLocation;
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    notInlist = new List<String>();
    BarCodeListP = ParseBarCode(barcode);
    Consumable_order_details2__c p = new Consumable_order_details2__c();
    List<Consumable_order_details2__c> Ins = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
    saveFLGbln = false;
    alertMessage = '';
    //判断barcode是否为空
    if (barcode == null || barcode == '') {
      return new ResponseBodyLWC('Error', 500, '请输入BarCode号', '');
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
      // return;
    public LexCancelRemoveBoxController(){
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        consumableInventory = new List<ConsumableorderdetailsInfo>();
        saveFLGbln = FALSE;
    }
    // ExistIdMap.clear();
    // ErrorIdMap.clear();
    // notInlist.clear();
    // ConsumableorderdetailsRecordserror.clear();
    // ConsumableorderdetailsRecordsdummy.clear();
    @AuraEnabled
    public static ResponseBodyLWC init() {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
    // 产品类型不同
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Product_Type__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        Arrive_Owner_Work_Location__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND (NOT Product_Type__c LIKE :userPro_Typestr)
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str =
            '该商品类型' +
            reSet1[i].Product_Type__c +
            '与产品类型' +
            agencyProType +
            '不符,不能拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        String userId = UserInfo.getUserId();
        List<user> Useracc = New List<user>();
        Useracc = [SELECT accountid, Work_Location__c,UserPro_Type__c FROM user WHERE id =:userId];
        accountid = Useracc[0].accountid;
        userWorkLocation = Useracc[0].Work_Location__c;
        agencyProType = Useracc[0].UserPro_Type__c;
        if(String.isBlank(Useracc[0].UserPro_Type__c)){
            agencyProType = 'ET';
        }
      }
        userPro_Typestr = '%' + agencyProType + '%';
        List<account> accountInfo = [SELECT Name FROM account WHERE id =:accountid];
        //String view_product = accountInfo[0].view_product__c;
        accountName = accountInfo[0].Name;
        //proidList = view_product.split(',');
        data.put('accountName',accountName);
        data.put('userWorkLocation',userWorkLocation);
        data.put('agencyProType',agencyProType);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    //没有拆盒
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 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 Box_Piece__c = '盒'
        //AND  ProductPacking_list_manual__c > 1
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ]; //没出库,没销售,在库,没有拆盒
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品没有拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
    // 将页面或取得BarCode去掉重复的,转换成List
    public static List<String> ParseBarCode(String Code){
        String[] Cache = new String[]{};
        Cache = Code.split('\n');
        Set <String> Buff = new Set<String>();
        for(String A : Cache){
            Buff.add(A);
        }
      }
    }
    //已出货,未到货
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = FALSE
        AND Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '盒'
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品还未到货';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        List<String> outPut = new List<String>();
        for(String B :Buff){
            B = B.trim();
            outPut.add(B);
        }
      }
        return outPut;
    }
    //拆盒已出货
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Shipment__c = TRUE
        AND Dealer_Arrive__c = TRUE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在出货履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
    //获取明细
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(String barcode,String accountName,String userWorkLocation,String agencyProType) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        res.entity = data;
        userPro_Typestr = '%' + agencyProType + '%';
        barcode = barcode;
        accountName = accountName;
        userWorkLocation = userWorkLocation;
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        notInlist = new list<String>();
        BarCodeListP = ParseBarCode(barcode);
        Consumable_order_details2__c p = new Consumable_order_details2__c();
        List<Consumable_order_details2__c> Ins = New List<Consumable_order_details2__c>();
        List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
        List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
        saveFLGbln = FALSE;
        alertMessage='';
        //判断barcode是否为空
        if(barcode == null || barcode ==''){
            return new ResponseBodyLWC('Error',500, '请输入BarCode号', '');
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
            // return;
        }
      }
    }
    //拆盒已销售
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Saled__c = TRUE
        AND Dealer_Arrive__c = TRUE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在销售履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        // ExistIdMap.clear();
        // ErrorIdMap.clear();
        // notInlist.clear();
        // ConsumableorderdetailsRecordserror.clear();
        // ConsumableorderdetailsRecordsdummy.clear();
        // 产品类型不同
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,Product_Type__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c, Arrive_Owner_Work_Location__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Arrive__c = true
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    AND   Arrive_Owner_Work_Location__c = : userWorkLocation
                    AND (not Product_Type__c like : userPro_Typestr)
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品类型'+ reSet1[i].Product_Type__c +'与产品类型'+ agencyProType +'不符,不能拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      }
    }
    //拆盒返品
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Returned__c = TRUE
        AND Return_date__c != NULL
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在返品履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        //没有拆盒
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                         /*,ContractNo__c*/
                        //add by rentx 2020-10-13 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  Box_Piece__c = '盒'
                    //AND  ProductPacking_list_manual__c > 1
                    AND  Bar_Code__c in :BarCodeListP
                    AND  Dealer_Info_text__c = :accountName
                    ORDER BY Name ];  //没出库,没销售,在库,没有拆盒
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品没有拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      }
    }
    //拆盒后盘点过(盘点日期不为空)
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Inventory_date__c != NULL
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在盘点履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        //已出货,未到货
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Arrive__c = FALSE
                    AND  Dealer_Shipment__c= FALSE
                    AND  Dealer_Saled__c = FALSE
                    AND  Dealer_Returned__c = false
                    AND  Lose_Flag__c = false
                    AND  Box_Piece__c = '盒'
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品还未到货';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      }
    }
    //不同工作地
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        Arrive_Owner_Work_Location__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c != :userWorkLocation
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str =
            '该商品属于' +
            reSet1[i].Arrive_Owner_Work_Location__c +
            ',不能取消拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        //拆盒已出货
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Shipment__c = true
                    AND   Dealer_Arrive__c = true
                    AND   Dealer_Returned__c = false
                    AND   Lose_Flag__c = false
                    AND   Box_Piece__c = '个'
                    AND   RemoveBox_date__c != null
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品存在出货履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      }
    }
    reSet = [
      SELECT
        Id,
        Name,
        Intra_Trade_List_RMB__c,
        Asset_Model_No__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Consumable_Product__r.Name__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,
        Guarantee_period_for_products__c,
        CFDA_Status__c,
        ProductPacking_list_manual__c,
        Report_Product_Approbation__c,
        Report_Product_Expiration__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 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 Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Product_Type__c LIKE :userPro_Typestr
    ];
    if (reSet.size() > 0) {
      for (Integer i = 0; i < reSet.size(); i++) {
        if (ErrorIdMap.containsKey(reSet[i].Bar_Code__c)) {
          // 跳过错误的消耗品明细
          continue;
        } else if (ExistIdMap.containsKey(reSet[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          ConsumableorderdetailsRecordsdummy.add(
            new ConsumableorderdetailsInfo(reSet[i])
          );
          ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
        //拆盒已销售
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Saled__c = true
                    AND   Dealer_Arrive__c = true
                    AND   Dealer_Returned__c = false
                    AND   Lose_Flag__c = false
                    AND   Box_Piece__c = '个'
                    AND   RemoveBox_date__c != null
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品存在销售履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      }
    }
    AllMap.putAll(ExistIdMap);
    //得到不存在的BarCode
    for (Integer i = 0; i < BarCodeListP.size(); i++) {
      if (ExistIdMap.containsKey(BarCodeListP[i])) {
        continue;
      } else if (ErrorIdMap.containsKey(BarCodeListP[i])) {
        continue;
      } else {
        notInlist.add(BarCodeListP[i]);
      }
    }
    if (notInlist.size() > 0) {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCode'+ notInlist + '不存在。'));
      return new ResponseBodyLWC(
        'Error',
        500,
        'BarCode' + notInlist + '不存在。',
        ''
      );
    }
    data.put(
      'ConsumableorderdetailsRecordsdummy',
      JSON.serialize(ConsumableorderdetailsRecordsdummy)
    );
    data.put(
      'ConsumableorderdetailsRecordserror',
      JSON.serialize(ConsumableorderdetailsRecordserror)
    );
    data.put('dataSize', ConsumableorderdetailsRecordsdummy.size());
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  //取消拆盒确认
  @AuraEnabled
  public static ResponseBodyLWC cancelRemoveBoxConfirm(
    String saveConsumableorderdetailsRecordsdummy,
    String accountName,
    String userWorkLocation,
    String agencyProType
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    userPro_Typestr = '%' + agencyProType + '%';
    accountName = accountName;
    userWorkLocation = userWorkLocation;
    List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      saveConsumableorderdetailsRecordsdummy,
      List<ConsumableorderdetailsInfo>.class
    );
    List<Consumable_order_details2__c> ins = new List<Consumable_order_details2__c>();
    Savepoint sp = Database.setSavepoint();
    if (ConsumableorderdetailsRecordsdummy.size() < 1) {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细'));
      return new ResponseBodyLWC('Error', 500, '不存在取消拆盒明细', '');
      // return null;
    }
    List<String> BarCodeList = new List<String>();
    for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy) {
      BarCodeList.add(tmp.esd.Bar_Code__c);
    }
    try {
      //取得通番大于001的在库明细
      List<Consumable_order_details2__c> orderDetails2del = [
        SELECT
          Id,
          Box_Piece__c,
          RemoveBox_date__c,
          RemoveBox_No__c,
          Bar_Code__c,
          //add by rentx 2020-10-13 start
          ContractNo_text__c
        /*,ContractNo__c*/
        //add by rentx 2020-10-13 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 Box_Piece__c = '个'
          AND RemoveBox_date__c != NULL
          AND RemoveBox_No__c > 1
          AND Bar_Code__c IN :BarCodeList
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Product_Type__c LIKE :userPro_Typestr
      ];
      List<Consumable_order_details2__c> orderlistdel = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> orderlistupd = new List<Consumable_order_details2__c>();
      for (Consumable_order_details2__c detail2tmp : orderDetails2del) {
        Consumable_order_details2__c delDetails2 = new Consumable_order_details2__c();
        delDetails2.Id = detail2tmp.Id;
        //删除通番大于001的明细2
        //delete delDetails2;
        orderlistdel.add(delDetails2);
      }
      //取得通番001的在库明细
      List<Consumable_order_details2__c> orderDetails2 = [
        SELECT
          Id,
          Box_Piece__c,
          RemoveBox_date__c,
          RemoveBox_No__c,
          Bar_Code__c,
          //add by rentx 2020-10-13 start
          ContractNo_text__c,
          /*,ContractNo__c*/
          //add by rebtx 2020-10-13 end
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm 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 Box_Piece__c = '个'
          AND RemoveBox_date__c != NULL
          AND RemoveBox_No__c = 1
          AND Bar_Code__c IN :BarCodeList
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Product_Type__c LIKE :userPro_Typestr
      ];
      for (Consumable_order_details2__c detail2tmp : orderDetails2) {
        Consumable_order_details2__c updDetails2 = new Consumable_order_details2__c();
        updDetails2.Id = detail2tmp.Id;
        updDetails2.Box_Piece__c = '盒';
        updDetails2.RemoveBox_date__c = null;
        updDetails2.RemoveBox_No__c = null;
        // tcm start
        if (
          String.isBlank(detail2tmp.Consumable_order_minor__r.ContractNo__c)
        ) {
          updDetails2.ContractNo_text__c = detail2tmp.ContractNo_text__c;
        } else {
          updDetails2.ContractNo_text__c = detail2tmp.Consumable_order_minor__r.ContractNo__c;
        //拆盒返品
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Returned__c = true
                    AND   Return_date__c != null
                    AND   Box_Piece__c = '个'
                    AND   RemoveBox_date__c != null
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品存在返品履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
        // updDetails2.ContractNo_text__c       = detail2tmp.ContractNo__c;
        // tcm end
        //通番001のデータの管理単位を盒に戻し、通番をクリア
        //update updDetails2;
        orderlistupd.add(updDetails2);
      }
      if (orderlistdel.size() > 0) {
        delete orderlistdel;
      }
        //拆盒后盘点过(盘点日期不为空)
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Inventory_date__c != null
                    AND   Box_Piece__c = '个'
                    AND   RemoveBox_date__c != null
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品存在盘点履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
      if (orderlistupd.size() > 0) {
        update orderlistupd;
      }
      saveFLGbln = true;
      alertMessage = '取消拆盒完成';
      data.put('saveFLGbln', saveFLGbln);
      res.status = 'Success';
      res.code = 200;
      res.msg = alertMessage;
      System.debug('res = ' + res);
      return res;
      // return null;
    } catch (Exception e) {
      Database.rollback(sp);
      ApexPages.addMessages(e);
      return null;
        //不同工作地
        reSet1 = [SELECT Id,  Name,Consumable_Product__r.Name__c,
                        Consumable_Product__c,Consumable_Product__r.Name, Sterilization_limit__c,
                        Deliver_date__c,Bar_Code__c,
                        Arrive_date__c,Send_Date__c,Consumable_order_minor__r.Name,Consumable_order_minor__c,
                        recordtypeid,Consumable_order_minor__r.Arrive_Order__c, Arrive_Owner_Work_Location__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 end
                    FROM Consumable_order_details2__c
                    WHERE Dealer_Arrive__c = true
                    AND   Bar_Code__c in :BarCodeListP
                    AND   Dealer_Info_text__c = :accountName
                    AND   Arrive_Owner_Work_Location__c !=: userWorkLocation
                    ORDER BY Name ];
        if(reSet1.size() > 0){
            for (Integer i = 0; i < reSet1.size(); i++) {
                if(ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)){
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                    String str = '该商品属于' + reSet1[i].Arrive_Owner_Work_Location__c + ',不能取消拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                }
            }
        }
        reSet = [SELECT Id,
                        Name,
                        Intra_Trade_List_RMB__c,
                        Asset_Model_No__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Product__r.Name__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,
                        Guarantee_period_for_products__c,
                        CFDA_Status__c,
                        ProductPacking_list_manual__c,
                        Report_Product_Approbation__c,
                        Report_Product_Expiration__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 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 Box_Piece__c = '个'
                    AND RemoveBox_date__c != null
                    AND Bar_Code__c in :BarCodeListP
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c =: userWorkLocation
                    AND  Product_Type__c like : userPro_Typestr
                ];
        if(reSet.size()>0){
            for (Integer i = 0; i < reSet.size(); i++) {
                if(ErrorIdMap.containsKey(reSet[i].Bar_Code__c) ){
                    // 跳过错误的消耗品明细
                    continue;
                }
                else if(ExistIdMap.containsKey(reSet[i].Bar_Code__c) ){
                    // 跳过已经处理的消耗品明细
                    continue;
                }
                else{
                    ConsumableorderdetailsRecordsdummy.add(new ConsumableorderdetailsInfo(reSet[i]));
                    ExistIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
                }
            }
        }
        AllMap.putAll(ExistIdMap);
        //得到不存在的BarCode
        for(Integer i = 0; i < BarCodeListP.size(); i++){
            if(ExistIdMap.containsKey(BarCodeListP[i])){
                continue;
            }else if(ErrorIdMap.containsKey(BarCodeListP[i])){
                continue;
            }else{
                notInlist.add(BarCodeListP[i]);
            }
        }
        if(notInlist.size()>0){
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCode'+ notInlist + '不存在。'));
                return new ResponseBodyLWC('Error',500, 'BarCode'+ notInlist + '不存在。', '');
        }
        data.put('ConsumableorderdetailsRecordsdummy',JSON.serialize(ConsumableorderdetailsRecordsdummy));
        data.put('ConsumableorderdetailsRecordserror',JSON.serialize(ConsumableorderdetailsRecordserror));
        data.put('dataSize',ConsumableorderdetailsRecordsdummy.size());
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
  }
  @TestVisible
  class ConsumableorderdetailsInfo implements Comparable {
    public Consumable_order_details2__c esd { get; set; }
    public Product2__c Prod { get; set; }
    //public String ProductName { get; set; }
    //public Boolean canSELECT { get; set; }
    //public String barCodeNo { get; set; }
    //public Date sterilizationlimitDate { get; set; }
    //public String serialNoorLotNo { get; set; }
    //public String tracingCodeNo { get; set; }
    public String oldConsumableCount { get; set; }
    public String ErrorReason { get; set; }
    public ConsumableorderdetailsInfo(
      Consumable_order_details2__c e,
      string str
    ) {
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
      ErrorReason = str;
    //取消拆盒确认
    @AuraEnabled
    public static ResponseBodyLWC cancelRemoveBoxConfirm(String saveConsumableorderdetailsRecordsdummy,String accountName,String userWorkLocation,String agencyProType) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        res.entity = data;
        userPro_Typestr = '%' + agencyProType + '%';
        accountName = accountName;
        userWorkLocation =userWorkLocation;
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy = (List<ConsumableorderdetailsInfo>)JSON.deserialize(saveConsumableorderdetailsRecordsdummy,List<ConsumableorderdetailsInfo>.class);
        List<Consumable_order_details2__c> ins = New List<Consumable_order_details2__c>();
        Savepoint sp = Database.setSavepoint();
        if(ConsumableorderdetailsRecordsdummy.size()<1){
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细'));
            return new ResponseBodyLWC('Error',500, '不存在取消拆盒明细', '');
            // return null;
        }
        List<String> BarCodeList = new List<String>();
        for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy)  {
            BarCodeList.add(tmp.esd.Bar_Code__c);
        }
        try{
            //取得通番大于001的在库明细
            List<Consumable_order_details2__c> orderDetails2del =  [SELECT
                        Id,
                        Box_Piece__c,
                        RemoveBox_date__c,
                        RemoveBox_No__c,
                        Bar_Code__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rentx 2020-10-13 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 Box_Piece__c = '个'
                    AND RemoveBox_date__c != null
                    AND RemoveBox_No__c > 1
                    AND Bar_Code__c in :BarCodeList
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c =: userWorkLocation
                    AND  Product_Type__c like : userPro_Typestr
                ];
            List<Consumable_order_details2__c> orderlistdel = new List<Consumable_order_details2__c>();
            List<Consumable_order_details2__c> orderlistupd= new List<Consumable_order_details2__c>();
            for (Consumable_order_details2__c detail2tmp : orderDetails2del) {
                Consumable_order_details2__c delDetails2 = new Consumable_order_details2__c();
                delDetails2.Id                           = detail2tmp.Id;
                //删除通番大于001的明细2
                //delete delDetails2;
                orderlistdel.add(delDetails2);
            }
            //取得通番001的在库明细
            List<Consumable_order_details2__c> orderDetails2 =  [SELECT
                        Id,
                        Box_Piece__c,
                        RemoveBox_date__c,
                        RemoveBox_No__c,
                        Bar_Code__c,
                        //add by rentx 2020-10-13 start
                        ContractNo_text__c
                        /*,ContractNo__c*/
                        //add by rebtx 2020-10-13 end
                    // tcm start
                    ,Consumable_order_minor__r.ContractNo__c
                    // tcm 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 Box_Piece__c = '个'
                    AND RemoveBox_date__c !=null
                    AND RemoveBox_No__c = 1
                    AND Bar_Code__c in :BarCodeList
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c =: userWorkLocation
                    AND  Product_Type__c like : userPro_Typestr
                ];
            for (Consumable_order_details2__c detail2tmp : orderDetails2) {
                Consumable_order_details2__c updDetails2 = new Consumable_order_details2__c();
                updDetails2.Id                           = detail2tmp.Id;
                updDetails2.Box_Piece__c                 = '盒';
                updDetails2.RemoveBox_date__c            = null;
                updDetails2.RemoveBox_No__c              = null;
                // tcm start
                if (String.isBlank(detail2tmp.Consumable_order_minor__r.ContractNo__c)) {
                    updDetails2.ContractNo_text__c= detail2tmp.ContractNo_text__c;
                }else {
                    updDetails2.ContractNo_text__c= detail2tmp.Consumable_order_minor__r.ContractNo__c;
                }
                // updDetails2.ContractNo_text__c       = detail2tmp.ContractNo__c;
                // tcm end
                //通番001のデータの管理単位を盒に戻し、通番をクリア
                //update updDetails2;
                orderlistupd.add(updDetails2);
            }
            if(orderlistdel.size()>0){
                delete orderlistdel;
            }
            if(orderlistupd.size()>0){
                update orderlistupd;
            }
            saveFLGbln = true;
            alertMessage = '取消拆盒完成';
            data.put('saveFLGbln',saveFLGbln);
            res.status = 'Success';
            res.code = 200;
            res.msg = alertMessage;
            System.debug('res = ' + res);
            return res;
            // return null;
        }catch(Exception e){
            Database.rollback(sp);
            ApexPages.addMessages(e);
            return null;
        }
    }
    public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
    }
    /*
    @TestVisible
    class ConsumableorderdetailsInfo implements Comparable {
        public Consumable_order_details2__c esd { get; set; }
        public Product2__c Prod { get; set; }
        //public String ProductName { get; set; }
        //public Boolean canSELECT { get; set; }
        //public String barCodeNo { get; set; }
        //public Date sterilizationlimitDate { get; set; }
        //public String serialNoorLotNo { get; set; }
        //public String tracingCodeNo { get; set; }
        public String oldConsumableCount { get; set; }
        public String ErrorReason { get; set; }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e,string str) {
            esd                = e;
            Prod               = e.Consumable_Product__r;
            oldConsumableCount = e.name;
            ErrorReason        = str;
        }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            esd                = e;
            Prod               = e.Consumable_Product__r;
            oldConsumableCount = e.name;
        }
/*
        public ConsumableorderdetailsInfo(Product2__c e,String barCode,Date sterilizationlimit,String serialNoorLot,String tracingCode) {
            esd = new Consumable_order_details2__c();
            ProductName = e.Name__c;
@@ -816,9 +639,9 @@
            tracingCodeNo          = tracingCode;
        }
*/
    // 排序
    public Integer compareTo(Object compareTo) {
      return null;
        // 排序
        public Integer compareTo(Object compareTo) {
            return null;
        }
    }
  }
}
}
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls
@@ -1,953 +1,573 @@
@IsTest
private class LexCancelRemoveBoxControllerTest {
  static testMethod void testMethod1() {
    Oly_TriggerHandler.bypass('ConsumableAssetHander');
    Oly_TriggerHandler.bypass('Oly_TriggerHandler');
    user myUser_test;
    Account myAccount2;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET Email)'
      ];
    static testMethod void testMethod1(){
        Oly_TriggerHandler.bypass('ConsumableAssetHander');
        Oly_TriggerHandler.bypass('Oly_TriggerHandler');
        user myUser_test;
        Account myAccount2;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        System.runAs(thisUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
            myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900');
            insert myAccount2;
            Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount2.id);
            insert core;
            MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com');
            insert MyUser_Test;
        }
        System.runAs(MyUser_Test){
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',JANCODE__c = '04953170200311',Dealer_special_Object__c = true,Packing_list_manual__c = 5,Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',JANCODE__c = '04953170200312',Dealer_special_Object__c = true,Packing_list_manual__c = 5,Manual_Entry__c = false);
            Product2 prod03 = new Product2(Name='Test03',ProductCode='Test03',Asset_Model_No__c = 'Test03',SFDA_Status__c = '有効',JANCODE__c = '04953170200313',Dealer_special_Object__c = true,Packing_list_manual__c = 1,Manual_Entry__c = false);
            insert new Product2[]{prod01,prod02,prod03};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            Product2__c pro3 = new Product2__c(Name='Pro003',OT_CODE_Text__c='Test003',Product2__c = prod03.Id);
            insert new Product2__c[] {pro1, pro2,pro3};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01_001';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            Order1.Dealer_Info__c = myAccount2.Id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
            Order1.Order_ProType__c = 'ET';
            insert  Order1;
            List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c>();
      myAccount2 = new Account(
        name = 'Testaccount002',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id,
        AgentCode_Ext__c = '9999900'
      );
      insert myAccount2;
            //daoku
            Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
            Orderdet2.Name = 'OCM_01_001001';
            Orderdet2.Consumable_order_minor__c = Order1.Id;
            Orderdet2.Consumable_Product__c = pro1.Id;
            Orderdet2.Asset_Model_No__c = 'Test01';
            Orderdet2.Arrive_date__c = Date.today();
            Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRF';
            Orderdet2.Used_date__c = null;
            Orderdet2.Lose_Flag__c = false;
            Orderdet2.Return_date__c= null;
            Orderdet2.Send_Date__c= null;
            Orderdet2.Box_Piece__c = '盒';
            conList.add(Orderdet2);
            // insert Orderdet2;
      Contact core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount2.id
      );
      insert core;
      MyUser_Test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com'
      );
      insert MyUser_Test;
            //chuku
            Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
            Orderdet3.Name = 'OCM_01_001002';
            Orderdet3.Consumable_order_minor__c = Order1.Id;
            Orderdet3.Consumable_Product__c = pro2.Id;
            Orderdet3.Asset_Model_No__c = 'Test02';
            Orderdet3.Arrive_date__c = Date.today();
            Orderdet3.Send_Date__c = Date.today();
            Orderdet3.Box_Piece__c = '个';
            Orderdet3.RemoveBox_date__c= Date.today();
            Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
            Orderdet3.Used_date__c = null;
            Orderdet3.Lose_Flag__c = false;
            Orderdet3.Return_date__c= null;
            conList.add(Orderdet3);
            // insert Orderdet3;
            //sale
            Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
            Orderdet4.Name = 'OCM_01_001004';
            Orderdet4.Consumable_order_minor__c = Order1.Id;
            Orderdet4.Consumable_Product__c = pro2.Id;
            Orderdet4.Asset_Model_No__c = 'Test02';
            Orderdet4.Arrive_date__c = Date.today();
            Orderdet4.Box_Piece__c = '个';
            Orderdet4.RemoveBox_date__c= Date.today();
            Orderdet4.Bar_Code__c = '011495317020843711170400172003311074K250CXSDS';
            Orderdet4.Lose_Flag__c = false;
            Orderdet4.Return_date__c= null;
            Orderdet4.Used_date__c= Date.today();
            // insert Orderdet4;
            conList.add(Orderdet4);
            //ProductPacking_list_manual__c=1
            Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
            Orderdet5.Name = 'OCM_01_001004';
            Orderdet5.Consumable_order_minor__c = Order1.Id;
            Orderdet5.Consumable_Product__c = pro3.Id;
            Orderdet5.Asset_Model_No__c = 'Test03';
            Orderdet5.Arrive_date__c = Date.today();
            //Orderdet5.Used_date__c = Date.today();
            Orderdet5.Box_Piece__c = '盒';
            Orderdet5.RemoveBox_date__c= Date.today();
            Orderdet5.Used_date__c = null;
            Orderdet5.Lose_Flag__c = false;
            Orderdet5.Return_date__c= null;
            Orderdet5.Send_Date__c=null;
            Orderdet5.Bar_Code__c = '010495317014059411170400172203311074K250DCWQW';
            // insert Orderdet5;
            conList.add(Orderdet5);
            //pandian
         Consumable_order_details2__c Orderdet7 = new Consumable_order_details2__c();
            Orderdet7.Name = 'OCM_01_001004';
            Orderdet7.Consumable_order_minor__c = Order1.Id;
            Orderdet7.Consumable_Product__c = pro2.Id;
            Orderdet7.Asset_Model_No__c = 'Test02';
            Orderdet7.Box_Piece__c = '盒';
            Orderdet7.Lose_Flag__c = false;
            Orderdet7.Bar_Code__c = '010495317014059411170400172203311074K250DBVUD';
            Orderdet7.RemoveBox_date__c= Date.today();
            Orderdet7.Inventory_date__c= Date.today();
            // insert Orderdet7;
            conList.add(Orderdet7);
            Consumable_order_details2__c Orderdet8= new Consumable_order_details2__c();
            Orderdet8.Name = 'OCM_01_001004';
            Orderdet8.Consumable_order_minor__c = Order1.Id;
            Orderdet8.Consumable_Product__c = pro2.Id;
            Orderdet8.Asset_Model_No__c = 'Test02';
            Orderdet8.Arrive_date__c = Date.today();
            Orderdet8.Box_Piece__c = '个';
            Orderdet8.Lose_Flag__c = false;
            Orderdet8.Bar_Code__c = '1683272847250250WZIOF';
            Orderdet8.Used_date__c = null;
            Orderdet8.Lose_Flag__c = false;
            Orderdet8.Return_date__c= null;
            Orderdet8.RemoveBox_date__c=Date.today();
            Orderdet8.Send_Date__c=null;
            Orderdet8.RemoveBox_No__c =3;
            conList.add(Orderdet8);
            insert conList;
            // insert Orderdet8;
            System.Test.startTest();
            LexCancelRemoveBoxController.init();
            // LexCancelRemoveBoxController.getinventorysize();
            LexCancelRemoveBoxController.searchConsumableorderdetails('1683272847250250WZIOF','捷尔医疗(海南)有限公司','深圳','ENG');
            LexCancelRemoveBoxController.searchConsumableorderdetails('','捷尔医疗(海南)有限公司','深圳','ENG');
            LexCancelRemoveBoxController.cancelRemoveBoxConfirm(JSON.serialize(conList),'捷尔医疗(海南)有限公司','深圳','ENG');
            System.Test.stopTest();
        }
    }
    System.runAs(MyUser_Test) {
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200311',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 5,
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200312',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 5,
        Manual_Entry__c = false
      );
      Product2 prod03 = new Product2(
        Name = 'Test03',
        ProductCode = 'Test03',
        Asset_Model_No__c = 'Test03',
        SFDA_Status__c = '有効',
        JANCODE__c = '04953170200313',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        Manual_Entry__c = false
      );
      insert new List<Product2>{ prod01, prod02, prod03 };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      Product2__c pro3 = new Product2__c(
        Name = 'Pro003',
        OT_CODE_Text__c = 'Test003',
        Product2__c = prod03.Id
      );
      insert new List<Product2__c>{ pro1, pro2, pro3 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      Order1.Dealer_Info__c = myAccount2.Id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      Order1.Order_ProType__c = 'ET';
      insert Order1;
      List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c>();
    static testMethod void testMethod2(){
        Oly_TriggerHandler.bypass('ConsumableAssetHander');
        Oly_TriggerHandler.bypass('Oly_TriggerHandler');
        user myUser_test;
        Account myAccount2;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        System.runAs(thisUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
            myAccount2 = new Account(name='Testaccount002',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '9999900');
            insert myAccount2;
            Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount2.id);
            insert core;
            MyUser_Test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',Work_Location__c ='重庆');
            insert MyUser_Test;
        }
        System.runAs(MyUser_Test){
             //订单
             Consumable_order__c Order1 = new Consumable_order__c();
             Order1.Name = 'OCM_01_001';
             Order1.Order_status__c = '批准';
             Order1.Order_type__c = '到货';
             Order1.Dealer_Info__c = myAccount2.Id;
             Order1.RecordTypeid = '01210000000c9dqAAA';
             Order1.Order_ProType__c = 'ET';
             insert  Order1;
            List<Consumable_order_details2__c> conList = new  List<Consumable_order_details2__c>();
            List<Consumable_order_details2__c> conList1 = new  List<Consumable_order_details2__c>();
            Consumable_order_details2__c con = new Consumable_order_details2__c();
            con.Consumable_Arrived_order__c = Order1.Id;
            con.Send_Date__c = null;
            con.Used_date__c = null;
            con.Return_date__c = null;
            con.Lose_Flag__c = false;
            con.Box_Piece__c = '个';
            con.RemoveBox_date__c = Date.today();
            con.Arrive_date__c = Date.today();
            con.RemoveBox_No__c = 2;
            con.Bar_Code__c = '1682414917514250XSCYW';
            conList.add(con);
      //daoku
      Consumable_order_details2__c Orderdet2 = new Consumable_order_details2__c();
      Orderdet2.Name = 'OCM_01_001001';
      Orderdet2.Consumable_order_minor__c = Order1.Id;
      Orderdet2.Consumable_Product__c = pro1.Id;
      Orderdet2.Asset_Model_No__c = 'Test01';
      Orderdet2.Arrive_date__c = Date.today();
      Orderdet2.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRF';
      Orderdet2.Used_date__c = null;
      Orderdet2.Lose_Flag__c = false;
      Orderdet2.Return_date__c = null;
      Orderdet2.Send_Date__c = null;
      Orderdet2.Box_Piece__c = '盒';
      conList.add(Orderdet2);
      // insert Orderdet2;
      //chuku
      Consumable_order_details2__c Orderdet3 = new Consumable_order_details2__c();
      Orderdet3.Name = 'OCM_01_001002';
      Orderdet3.Consumable_order_minor__c = Order1.Id;
      Orderdet3.Consumable_Product__c = pro2.Id;
      Orderdet3.Asset_Model_No__c = 'Test02';
      Orderdet3.Arrive_date__c = Date.today();
      Orderdet3.Send_Date__c = Date.today();
      Orderdet3.Box_Piece__c = '个';
      Orderdet3.RemoveBox_date__c = Date.today();
      Orderdet3.Bar_Code__c = '01049531702003111115120017181000105ZK250BXJRA';
      Orderdet3.Used_date__c = null;
      Orderdet3.Lose_Flag__c = false;
      Orderdet3.Return_date__c = null;
      conList.add(Orderdet3);
      // insert Orderdet3;
      //sale
      Consumable_order_details2__c Orderdet4 = new Consumable_order_details2__c();
      Orderdet4.Name = 'OCM_01_001004';
      Orderdet4.Consumable_order_minor__c = Order1.Id;
      Orderdet4.Consumable_Product__c = pro2.Id;
      Orderdet4.Asset_Model_No__c = 'Test02';
      Orderdet4.Arrive_date__c = Date.today();
      Orderdet4.Box_Piece__c = '个';
      Orderdet4.RemoveBox_date__c = Date.today();
      Orderdet4.Bar_Code__c = '011495317020843711170400172003311074K250CXSDS';
      Orderdet4.Lose_Flag__c = false;
      Orderdet4.Return_date__c = null;
      Orderdet4.Used_date__c = Date.today();
      // insert Orderdet4;
      conList.add(Orderdet4);
      //ProductPacking_list_manual__c=1
      Consumable_order_details2__c Orderdet5 = new Consumable_order_details2__c();
      Orderdet5.Name = 'OCM_01_001004';
      Orderdet5.Consumable_order_minor__c = Order1.Id;
      Orderdet5.Consumable_Product__c = pro3.Id;
      Orderdet5.Asset_Model_No__c = 'Test03';
      Orderdet5.Arrive_date__c = Date.today();
      //Orderdet5.Used_date__c = Date.today();
      Orderdet5.Box_Piece__c = '盒';
      Orderdet5.RemoveBox_date__c = Date.today();
      Orderdet5.Used_date__c = null;
      Orderdet5.Lose_Flag__c = false;
      Orderdet5.Return_date__c = null;
      Orderdet5.Send_Date__c = null;
      Orderdet5.Bar_Code__c = '010495317014059411170400172203311074K250DCWQW';
      // insert Orderdet5;
      conList.add(Orderdet5);
      //pandian
      Consumable_order_details2__c Orderdet7 = new Consumable_order_details2__c();
      Orderdet7.Name = 'OCM_01_001004';
      Orderdet7.Consumable_order_minor__c = Order1.Id;
      Orderdet7.Consumable_Product__c = pro2.Id;
      Orderdet7.Asset_Model_No__c = 'Test02';
      Orderdet7.Box_Piece__c = '盒';
      Orderdet7.Lose_Flag__c = false;
      Orderdet7.Bar_Code__c = '010495317014059411170400172203311074K250DBVUD';
      Orderdet7.RemoveBox_date__c = Date.today();
      Orderdet7.Inventory_date__c = Date.today();
      // insert Orderdet7;
      conList.add(Orderdet7);
      Consumable_order_details2__c Orderdet8 = new Consumable_order_details2__c();
      Orderdet8.Name = 'OCM_01_001004';
      Orderdet8.Consumable_order_minor__c = Order1.Id;
      Orderdet8.Consumable_Product__c = pro2.Id;
      Orderdet8.Asset_Model_No__c = 'Test02';
      Orderdet8.Arrive_date__c = Date.today();
      Orderdet8.Box_Piece__c = '个';
      Orderdet8.Lose_Flag__c = false;
      Orderdet8.Bar_Code__c = '1683272847250250WZIOF';
      Orderdet8.Used_date__c = null;
      Orderdet8.Lose_Flag__c = false;
      Orderdet8.Return_date__c = null;
      Orderdet8.RemoveBox_date__c = Date.today();
      Orderdet8.Send_Date__c = null;
      Orderdet8.RemoveBox_No__c = 3;
      conList.add(Orderdet8);
      insert conList;
      // insert Orderdet8;
      System.Test.startTest();
      LexCancelRemoveBoxController.init();
      // LexCancelRemoveBoxController.getinventorysize();
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '1683272847250250WZIOF',
        '捷尔医疗(海南)有限公司',
        '深圳',
        'ENG'
      );
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '',
        '捷尔医疗(海南)有限公司',
        '深圳',
        'ENG'
      );
      LexCancelRemoveBoxController.cancelRemoveBoxConfirm(
        JSON.serialize(conList),
        '捷尔医疗(海南)有限公司',
        '深圳',
        'ENG'
      );
      System.Test.stopTest();
    }
  }
  static testMethod void testMethod2() {
    Oly_TriggerHandler.bypass('ConsumableAssetHander');
    Oly_TriggerHandler.bypass('Oly_TriggerHandler');
    user myUser_test;
    Account myAccount2;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET Email)'
      ];
      myAccount2 = new Account(
        name = 'Testaccount002',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id,
        AgentCode_Ext__c = '9999900'
      );
      insert myAccount2;
      Contact core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount2.id
      );
      insert core;
      MyUser_Test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com',
        Work_Location__c = '重庆'
      );
      insert MyUser_Test;
    }
    System.runAs(MyUser_Test) {
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01_001';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '到货';
      Order1.Dealer_Info__c = myAccount2.Id;
      Order1.RecordTypeid = '01210000000c9dqAAA';
      Order1.Order_ProType__c = 'ET';
      insert Order1;
      List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> conList1 = new List<Consumable_order_details2__c>();
      Consumable_order_details2__c con = new Consumable_order_details2__c();
      con.Consumable_Arrived_order__c = Order1.Id;
      con.Send_Date__c = null;
      con.Used_date__c = null;
      con.Return_date__c = null;
      con.Lose_Flag__c = false;
      con.Box_Piece__c = '个';
      con.RemoveBox_date__c = Date.today();
      con.Arrive_date__c = Date.today();
      con.RemoveBox_No__c = 2;
      con.Bar_Code__c = '1682414917514250XSCYW';
      conList.add(con);
      Consumable_order_details2__c con1 = new Consumable_order_details2__c();
      con1.Consumable_Arrived_order__c = Order1.Id;
      con1.Send_Date__c = null;
      con1.Used_date__c = null;
      con1.Return_date__c = null;
      con1.Lose_Flag__c = false;
      con1.Box_Piece__c = '个';
      con1.RemoveBox_date__c = Date.today();
      con1.Arrive_date__c = Date.today();
      con.RemoveBox_No__c = 1;
      con1.Bar_Code__c = '1682414917514250XSCYW';
      conList.add(con1);
      insert (conList);
      System.debug('conList' + conList);
      System.Test.startTest();
      LexCancelRemoveBoxController.cancelRemoveBoxConfirm(
        JSON.serialize(conList),
        'Testaccount002',
        '重庆',
        'ET'
      );
      LexCancelRemoveBoxController.cancelRemoveBoxConfirm(
        JSON.serialize(conList1),
        'Testaccount002',
        '重庆',
        'ET'
      );
      System.Test.stopTest();
    }
  }
  static testMethod void testMethod3() {
    Oly_TriggerHandler.bypass('ConsumableAssetHander');
    Oly_TriggerHandler.bypass('Oly_TriggerHandler');
    User myUser_test;
    Account myAccount2;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET Email)'
      ];
      myAccount2 = new Account(
        name = 'Testaccount003',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id,
        AgentCode_Ext__c = '2'
      );
      insert myAccount2;
      Contact core = new Contact(
        email = 'wan@salesforce.com',
        firstname = 'wan',
        lastname = 'Plumbers',
        accountid = myAccount2.id
      );
      insert core;
      myUser_test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com',
        UserPro_Type__c = 'ENG',
        Work_Location__c = '北京'
      );
      insert myUser_test;
      System.debug('MyUser_Test' + MyUser_Test);
    }
    System.runAs(MyUser_Test) {
      //产品信息
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test01',
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test02',
        Manual_Entry__c = false
      );
      Product2 prod03 = new Product2(
        Name = 'Test03',
        ProductCode = 'Test03',
        Asset_Model_No__c = 'Test03',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test03',
        Manual_Entry__c = false
      );
      Product2 prod04 = new Product2(
        Name = 'Test04',
        ProductCode = 'Test04',
        Asset_Model_No__c = 'Test04',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 2,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test04',
        Manual_Entry__c = false
      );
      Product2 prod05 = new Product2(
        Name = 'Test05',
        ProductCode = 'Test05',
        Asset_Model_No__c = 'Test05',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test05',
        Manual_Entry__c = false
      );
      Product2 prod06 = new Product2(
        Name = 'Test06',
        ProductCode = 'Test06',
        Asset_Model_No__c = 'Test06',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test06',
        Manual_Entry__c = false
      );
      insert new List<Product2>{
        prod01,
        prod02,
        prod03,
        prod04,
        prod05,
        prod06
      };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      Product2__c pro3 = new Product2__c(
        Name = 'Pro004',
        OT_CODE_Text__c = 'Test004',
        Product2__c = prod03.Id
      );
      Product2__c pro4 = new Product2__c(
        Name = 'Pro005',
        OT_CODE_Text__c = 'Test005',
        Product2__c = prod04.Id
      );
      Product2__c pro5 = new Product2__c(
        Name = 'Pro003',
        OT_CODE_Text__c = 'Test003',
        Product2__c = prod05.Id
      );
      Product2__c pro6 = new Product2__c(
        Name = 'Pro006',
        OT_CODE_Text__c = 'Test006',
        Product2__c = prod06.Id
      );
      insert new List<Product2__c>{ pro4, pro5, pro6, pro1, pro2, pro3 };
      //订单
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '订单';
      Order1.Dealer_Info__c = myAccount2.Id;
      Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
      Order1.Order_ProType__c = 'ENG';
      insert Order1;
      //出货
      Consumable_order__c Order2 = new Consumable_order__c();
      Order2.Name = 'OCM_01';
      Order2.Order_status__c = '批准';
      Order2.Order_type__c = '订单';
      Order2.Dealer_Info__c = myAccount2.Id;
      Order2.RecordTypeid = '012100000006Jx9AAE';
      Order2.Order_ProType__c = 'ENG';
      insert Order2;
      List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> conList1 = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> conList2 = new List<Consumable_order_details2__c>();
      //产品类型不同
      Consumable_order_details2__c con = new Consumable_order_details2__c();
      con.Name = 'OCM_01_001001';
      con.Consumable_order_minor__c = Order1.Id;
      con.Consumable_Product__c = pro2.Id;
      con.Asset_Model_No__c = 'Test01';
      con.Arrive_date__c = Date.today();
      con.Bar_Code__c = '10061';
      con.Used_date__c = null;
      con.Lose_Flag__c = false;
      con.Return_date__c = null;
      con.Send_Date__c = null;
      con.Box_Piece__c = '盒';
      conList.add(con);
      insert conList;
      //产品类型不同
      Consumable_order_details2__c con1 = new Consumable_order_details2__c();
      con1.Consumable_Product__c = pro2.Id;
      con1.Consumable_order_minor__c = Order1.Id;
      con1.Bar_Code__c = '10011';
      con1.Arrive_date__c = Date.today();
      conList1.add(con1);
      //没有拆盒
      Consumable_order_details2__c con2 = new Consumable_order_details2__c();
      con2.Send_Date__c = null;
      con2.Used_date__c = null;
      con2.Lose_Flag__c = false;
      con2.Box_Piece__c = '盒';
      con2.Consumable_Product__c = pro2.Id;
      con2.Consumable_order_minor__c = Order1.Id;
      con2.Bar_Code__c = '10021';
      con2.Arrive_date__c = Date.today();
      con2.RemoveBox_date__c = null;
      conList1.add(con2);
      insert conList1;
      //已出货 未到货
      Consumable_order_details2__c con3 = new Consumable_order_details2__c();
      con3.Arrive_date__c = null;
      con3.Send_Date__c = null;
      con3.Used_date__c = null;
      con3.Return_date__c = null;
      con3.Lose_Flag__c = false;
      con3.Box_Piece__c = '盒';
      con3.Consumable_Arrived_order__c = Order2.Id;
      con3.Consumable_Product__c = pro2.Id;
      con3.Bar_Code__c = '10031';
      conList2.add(con3);
      //拆盒已出货
      Consumable_order_details2__c con4 = new Consumable_order_details2__c();
      con4.Arrive_date__c = Date.today();
      con4.Send_Date__c = Date.today();
      con4.Return_date__c = null;
      con4.Used_date__c = null;
      con4.Lose_Flag__c = false;
      con4.Box_Piece__c = '个';
      con4.RemoveBox_date__c = Date.today();
      con4.Consumable_Arrived_order__c = Order2.Id;
      con4.Consumable_Product__c = pro2.Id;
      con4.Bar_Code__c = '10041';
      conList2.add(con4);
      insert conList2;
      System.Test.startTest();
      LexCancelRemoveBoxController.barcode = '1004\n1003\n1002\n1001';
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '10061\n10051\n10041\n10031\n10021\n10011',
        'Testaccount003',
        '重庆',
        'ET'
      );
      String str = '该商品存在盘点履历';
      String errorReason = '';
      LexCancelRemoveBoxController.ConsumableorderdetailsInfo c2 = new LexCancelRemoveBoxController.ConsumableorderdetailsInfo(
        con,
        str
      );
      c2.esd = con;
      c2.Prod = con.Consumable_product__r;
      c2.oldConsumableCount = con.name;
      c2.ErrorReason = str;
      LexCancelRemoveBoxController.ConsumableorderdetailsInfo c1 = new LexCancelRemoveBoxController.ConsumableorderdetailsInfo(
        con2
      );
      c1.esd = con;
      c1.Prod = con.Consumable_product__r;
      c1.oldConsumableCount = con.name;
      c1.compareTo(c2);
      System.Test.stopTest();
    }
  }
  static testMethod void testMethod4() {
    Oly_TriggerHandler.bypass('ConsumableAssetHander');
    Oly_TriggerHandler.bypass('Oly_TriggerHandler');
    User myUser_test;
    Account myAccount2;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET Email)'
      ];
      myAccount2 = new Account(
        name = 'Testaccount003',
        Dealer_discount__c = 20,
        RecordTypeId = rectCo[0].Id,
        AgentCode_Ext__c = '2'
      );
      insert myAccount2;
      Contact core = new Contact(
        email = 'wan@salesforce.com',
        firstname = 'wan',
        lastname = 'Plumbers',
        accountid = myAccount2.id
      );
      insert core;
      MyUser_Test = new User(
        ContactId = core.id,
        Alias = 'newWang',
        Email = 'newWang@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'TestUserWang',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUserWang@testorg.com',
        Work_Location__c = '重庆'
      );
      insert MyUser_Test;
      System.debug('MyUser_Test' + MyUser_Test);
    }
    System.runAs(MyUser_Test) {
      //产品信息
      Product2 prod01 = new Product2(
        Name = 'Test01',
        ProductCode = 'Test01',
        Asset_Model_No__c = 'Test01',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test01',
        Manual_Entry__c = false
      );
      Product2 prod02 = new Product2(
        Name = 'Test02',
        ProductCode = 'Test02',
        Asset_Model_No__c = 'Test02',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test02',
        Manual_Entry__c = false
      );
      Product2 prod03 = new Product2(
        Name = 'Test03',
        ProductCode = 'Test03',
        Asset_Model_No__c = 'Test03',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test03',
        Manual_Entry__c = false
      );
      Product2 prod04 = new Product2(
        Name = 'Test04',
        ProductCode = 'Test04',
        Asset_Model_No__c = 'Test04',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 2,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test04',
        Manual_Entry__c = false
      );
      Product2 prod05 = new Product2(
        Name = 'Test05',
        ProductCode = 'Test05',
        Asset_Model_No__c = 'Test05',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test05',
        Manual_Entry__c = false
      );
      Product2 prod06 = new Product2(
        Name = 'Test06',
        ProductCode = 'Test06',
        Asset_Model_No__c = 'Test06',
        SFDA_Status__c = '有効',
        Dealer_special_Object__c = true,
        Packing_list_manual__c = 1,
        SFDA_Expiration_Date__c = Date.today(),
        Category5__c = 'test06',
        Manual_Entry__c = false
      );
      insert new List<Product2>{
        prod01,
        prod02,
        prod03,
        prod04,
        prod05,
        prod06
      };
      Product2__c pro1 = new Product2__c(
        Name = 'Pro001',
        OT_CODE_Text__c = 'Test001',
        Product2__c = prod01.Id
      );
      Product2__c pro2 = new Product2__c(
        Name = 'Pro002',
        OT_CODE_Text__c = 'Test002',
        Product2__c = prod02.Id
      );
      Product2__c pro3 = new Product2__c(
        Name = 'Pro004',
        OT_CODE_Text__c = 'Test004',
        Product2__c = prod03.Id
      );
      Product2__c pro4 = new Product2__c(
        Name = 'Pro005',
        OT_CODE_Text__c = 'Test005',
        Product2__c = prod04.Id
      );
      Product2__c pro5 = new Product2__c(
        Name = 'Pro003',
        OT_CODE_Text__c = 'Test003',
        Product2__c = prod05.Id
      );
      Product2__c pro6 = new Product2__c(
        Name = 'Pro006',
        OT_CODE_Text__c = 'Test006',
        Product2__c = prod06.Id
      );
      insert new List<Product2__c>{ pro4, pro5, pro6, pro1, pro2, pro3 };
      List<Consumable_order__c> orderList = new List<Consumable_order__c>();
      //销售
      Consumable_order__c Order1 = new Consumable_order__c();
      Order1.Name = 'OCM_01';
      Order1.Order_status__c = '批准';
      Order1.Order_type__c = '销售';
      Order1.Dealer_Info__c = myAccount2.Id;
      Order1.RecordTypeid = '01210000000c9duAAA';
      Order1.Order_ProType__c = 'ENG';
      orderList.add(Order1);
      //返品
      Consumable_order__c Order2 = new Consumable_order__c();
      Order2.Name = 'OCM_01';
      Order2.Order_status__c = '批准';
      Order2.Order_type__c = '返品';
      Order2.Dealer_Info__c = myAccount2.Id;
      Order2.RecordTypeid = '012100000006Jx4AAE';
      Order2.Order_ProType__c = 'ENG';
      orderList.add(Order2);
      //盘点
      Consumable_order__c Order3 = new Consumable_order__c();
      Order3.Name = 'OCM_01';
      Order3.Order_status__c = '批准';
      Order3.Order_type__c = '盘点';
      Order3.Dealer_Info__c = myAccount2.Id;
      Order3.RecordTypeid = '01210000000c9dsAAA';
      Order3.Order_ProType__c = 'ENG';
      orderList.add(Order3);
      //发货
      Consumable_order__c Order4 = new Consumable_order__c();
      Order4.Name = 'OCM_0122';
      Order4.Order_status__c = '批准';
      Order4.Order_type__c = '订单';
      Order4.Dealer_Info__c = myAccount2.Id;
      Order4.RecordTypeid = '01210000000c9drAAA';
      Order4.Order_ProType__c = 'ET';
      Order4.ContractNo__c = '';
      orderList.add(Order4);
      insert orderList;
      List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> conList1 = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> conList2 = new List<Consumable_order_details2__c>();
      //拆盒已销售
      Consumable_order_details2__c con4 = new Consumable_order_details2__c();
      con4.Arrive_date__c = Date.today();
      con4.Deliver_date__c = Date.today();
      con4.Sterilization_limit__c = Date.today();
      con4.Send_Date__c = null;
      con4.Return_date__c = null;
      con4.Used_date__c = Date.today();
      con4.Lose_Flag__c = false;
      con4.Box_Piece__c = '个';
      con4.RemoveBox_date__c = Date.today();
      con4.RecordTypeId = '01210000000kUDKAA2';
      con4.Consumable_Product__c = pro2.Id;
      con4.Bar_Code__c = '100611';
      conList.add(con4);
      insert conList;
      //拆盒返品
      Consumable_order_details2__c con5 = new Consumable_order_details2__c();
      con5.Arrive_date__c = Date.today();
      con5.Return_date__c = Date.today();
      con5.Deliver_date__c = Date.today();
      con5.Send_Date__c = null;
      con5.Sterilization_limit__c = Date.today();
      con5.Used_date__c = Date.today();
      con5.Box_Piece__c = '个';
      con5.RemoveBox_date__c = Date.today();
      con5.RecordTypeId = '01210000000kUDPAA2';
      con5.Consumable_Product__c = pro2.Id;
      con5.Consumable_order_minor__c = Order4.Id;
      con5.Bar_Code__c = '10061';
      conList1.add(con5);
      insert conList1;
      //拆盒后盘点过
      Consumable_order_details2__c con6 = new Consumable_order_details2__c();
      con6.Inventory_date__c = Date.today();
      con6.Box_Piece__c = '个';
      con6.RemoveBox_date__c = Date.today();
      con6.Send_Date__c = null;
      con6.Deliver_date__c = Date.today();
      con6.Sterilization_limit__c = Date.today();
      con6.RecordTypeId = '01210000000kUDKAA2';
      con6.Consumable_Arrived_order__c = Order3.Id;
      con6.Consumable_Product__c = pro2.Id;
      con6.Bar_Code__c = '10078';
      conList2.add(con6);
      insert conList2;
      List<Consumable_order_details2__c> conList3 = new List<Consumable_order_details2__c>();
      //拆盒已出货
      Consumable_order_details2__c con3 = new Consumable_order_details2__c();
      con3.Arrive_date__c = Date.today();
      con3.Send_Date__c = Date.today();
      con3.Return_date__c = null;
      con3.Used_date__c = null;
      con3.Lose_Flag__c = false;
      con3.Box_Piece__c = '个';
      con3.Deliver_date__c = Date.today();
      con3.RemoveBox_date__c = Date.today();
      con3.RecordTypeId = '01210000000kUDKAA2';
      con3.Consumable_Product__c = pro2.Id;
      con3.Consumable_order_minor__c = Order4.Id;
      con3.Bar_Code__c = '100999';
      con3.Sterilization_limit__c = Date.today();
      conList3.add(con3);
      insert conList3;
      //reset
      // Consumable_order_details2__c con1 = new Consumable_order_details2__c();
      // con1.Intra_Trade_List_RMB__c = 1000;
      // con1.Asset_Model_No__c = 'test';
      // con1.Sterilization_limit__c = Date.today();
      // con1.Deliver_date__c =  Date.today();
      // con1.Arrive_date__c = Date.today();
      // con1.Send_Date__c = null;
      // con1.Used_date__c = null;
      // con1.Return_date__c = null;
      // con1.Lose_Flag__c = false;
      // con1.Box_Piece__c = '个';
      // con1.Consumable_order_minor__c = Order4.Id;
      // con1.Guarantee_period_for_products__c =  Date.today();
      // con1.Consumable_Product__c = pro2.Id;
      // con1.Bar_Code__c = '1009999';
      // conList2.add(con1);
      // insert conList2;
      // List<Consumable_order_details2__c> conList3 = new List<Consumable_order_details2__c> ();
      // Consumable_order_details2__c con9 = new Consumable_order_details2__c();
      // con9.RemoveBox_date__c = Date.today();
      // con9.Bar_Code__c = '100112';
      // con9.Arrive_date__c = Date.today();
      // con9.Send_Date__c = null;
      // con9.Used_date__c = null;
      // con9.Return_date__c = null;
      // con9.Lose_Flag__c = false;
      // con9.Box_Piece__c = '个';
      // con9.RemoveBox_No__c = 9;
      // conList3.add(con9);
      // LexCancelRemoveBoxController.searchConsumableorderdetails('100112','Testaccount003','重庆','ET');
      //orderDetails2
      // Consumable_order_details2__c con00 = new Consumable_order_details2__c();
      // con00.Box_Piece__c = '个';
      // con00.RemoveBox_date__c = Date.today();
      // con00.RemoveBox_No__c = 1;
      // con00.ContractNo_text__c = '';
      // con00.Consumable_order_minor__c = Order4.Id;
      // con00.Bar_Code__c = '10099999989';
      // conList3.add(con00);
      // insert conList3;
      System.Test.startTest();
      LexCancelRemoveBoxController CancelRemoveBoxController = new LexCancelRemoveBoxController();
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '100611\n10078\n10099\n1009999\n100999',
        'Testaccount003',
        '重庆',
        'ET'
      );
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '100611\n10078\n10061\n10051\n10041\n10031\n10021\n10011',
        'Testaccount003',
        '北京',
        'ET'
      );
      LexCancelRemoveBoxController.searchConsumableorderdetails(
        '100611\n10078\n10061\n10051\n10041\n10031\n10021\n10011',
        'Testaccount003',
        '重庆',
        'ET'
      );
      System.Test.stopTest();
    }
  }
            Consumable_order_details2__c con1 = new Consumable_order_details2__c();
            con1.Consumable_Arrived_order__c = Order1.Id;
            con1.Send_Date__c = null;
            con1.Used_date__c = null;
            con1.Return_date__c = null;
            con1.Lose_Flag__c = false;
            con1.Box_Piece__c = '个';
            con1.RemoveBox_date__c = Date.today();
            con1.Arrive_date__c = Date.today();
            con.RemoveBox_No__c = 1;
            con1.Bar_Code__c = '1682414917514250XSCYW';
            conList.add(con1);
            insert(conList);
            System.debug('conList'+conList);
            System.Test.startTest();
            LexCancelRemoveBoxController.cancelRemoveBoxConfirm(JSON.serialize(conList),'Testaccount002','重庆','ET');
            LexCancelRemoveBoxController.cancelRemoveBoxConfirm(JSON.serialize(conList1),'Testaccount002','重庆','ET');
            System.Test.stopTest();
    }
}
    static testMethod void testMethod3(){
        Oly_TriggerHandler.bypass('ConsumableAssetHander');
        Oly_TriggerHandler.bypass('Oly_TriggerHandler');
        User myUser_test;
        Account myAccount2;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        System.runAs(thisUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
            myAccount2 = new Account(name='Testaccount003',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '2');
            insert myAccount2;
            Contact core = new Contact(email='wan@salesforce.com', firstname='wan',lastname='Plumbers',accountid=myAccount2.id);
            insert core;
            myUser_test = New User(ContactId = core.id, Alias = 'newUser', Email='newuser@testorg.com', EmailEncodingKey='UTF-8', LastName='TestUser', LanguageLocaleKey='zh_CN', LocaleSidKey='zh_CN', ProfileId = prof.Id, TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com', UserPro_Type__c='ENG', Work_Location__c='北京');
            insert myUser_test;
            System.debug('MyUser_Test'+MyUser_Test);
        }
        System.runAs(MyUser_Test){
            //产品信息
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test01',Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test02',Manual_Entry__c = false);
            Product2 prod03 = new Product2(Name='Test03',ProductCode='Test03',Asset_Model_No__c = 'Test03',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test03',Manual_Entry__c = false);
            Product2 prod04 = new Product2(Name='Test04',ProductCode='Test04',Asset_Model_No__c = 'Test04',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=2,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test04',Manual_Entry__c = false);
            Product2 prod05 = new Product2(Name='Test05',ProductCode='Test05',Asset_Model_No__c = 'Test05',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test05',Manual_Entry__c = false);
            Product2 prod06 = new Product2(Name='Test06',ProductCode='Test06',Asset_Model_No__c = 'Test06',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test06',Manual_Entry__c = false);
            insert new Product2[] {prod01, prod02,prod03,prod04, prod05, prod06};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            Product2__c pro3 = new Product2__c(Name='Pro004',OT_CODE_Text__c='Test004',Product2__c = prod03.Id);
            Product2__c pro4 = new Product2__c(Name='Pro005',OT_CODE_Text__c='Test005',Product2__c = prod04.Id);
            Product2__c pro5 = new Product2__c(Name='Pro003',OT_CODE_Text__c='Test003',Product2__c = prod05.Id);
            Product2__c pro6 = new Product2__c(Name='Pro006',OT_CODE_Text__c='Test006',Product2__c = prod06.Id);
            insert new Product2__c[] {pro4, pro5,pro6,pro1, pro2, pro3};
            //订单
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '订单';
            Order1.Dealer_Info__c = myAccount2.Id;
            Order1.RecordTypeid = System.Label.RT_ConOrder_Delivery;
            Order1.Order_ProType__c = 'ENG';
            insert  Order1;
            //出货
            Consumable_order__c Order2 = new Consumable_order__c();
            Order2.Name = 'OCM_01';
            Order2.Order_status__c = '批准';
            Order2.Order_type__c = '订单';
            Order2.Dealer_Info__c = myAccount2.Id;
            Order2.RecordTypeid = '012100000006Jx9AAE';
            Order2.Order_ProType__c = 'ENG';
            insert  Order2;
            List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c> ();
            List<Consumable_order_details2__c> conList1 = new List<Consumable_order_details2__c> ();
            List<Consumable_order_details2__c> conList2 = new List<Consumable_order_details2__c> ();
            //产品类型不同
            Consumable_order_details2__c con = new Consumable_order_details2__c();
            con.Name = 'OCM_01_001001';
            con.Consumable_order_minor__c = Order1.Id;
            con.Consumable_Product__c = pro2.Id;
            con.Asset_Model_No__c = 'Test01';
            con.Arrive_date__c = Date.today();
            con.Bar_Code__c = '10061';
            con.Used_date__c = null;
            con.Lose_Flag__c = false;
            con.Return_date__c= null;
            con.Send_Date__c= null;
            con.Box_Piece__c = '盒';
            conList.add(con);
            insert conList;
            //产品类型不同
            Consumable_order_details2__c con1 = new Consumable_order_details2__c();
            con1.Consumable_Product__c = pro2.Id;
            con1.Consumable_order_minor__c = Order1.Id;
            con1.Bar_Code__c = '10011';
            con1.Arrive_date__c = Date.today();
            conList1.add(con1);
            //没有拆盒
            Consumable_order_details2__c con2 = new Consumable_order_details2__c();
            con2.Send_Date__c =null;
            con2.Used_date__c = null;
            con2.Lose_Flag__c = false;
            con2.Box_Piece__c = '盒';
            con2.Consumable_Product__c = pro2.Id;
            con2.Consumable_order_minor__c = Order1.Id;
            con2.Bar_Code__c = '10021';
            con2.Arrive_date__c = Date.today();
            con2.RemoveBox_date__c = null;
            conList1.add(con2);
            insert conList1;
            //已出货 未到货
            Consumable_order_details2__c con3 = new Consumable_order_details2__c();
            con3.Arrive_date__c = null;
            con3.Send_Date__c =null;
            con3.Used_date__c = null;
            con3.Return_date__c = null;
            con3.Lose_Flag__c = false;
            con3.Box_Piece__c = '盒';
            con3.Consumable_Arrived_order__c = Order2.Id;
            con3.Consumable_Product__c = pro2.Id;
            con3.Bar_Code__c = '10031';
            conList2.add(con3);
            //拆盒已出货
            Consumable_order_details2__c con4 = new Consumable_order_details2__c();
            con4.Arrive_date__c = Date.today();
            con4.Send_Date__c = Date.today();
            con4.Return_date__c = null;
            con4.Used_date__c = null;
            con4.Lose_Flag__c = false;
            con4.Box_Piece__c = '个';
            con4.RemoveBox_date__c = Date.today();
            con4.Consumable_Arrived_order__c = Order2.Id;
            con4.Consumable_Product__c = pro2.Id;
            con4.Bar_Code__c = '10041';
            conList2.add(con4);
            insert conList2;
            System.Test.startTest();
            LexCancelRemoveBoxController.barcode = '1004\n1003\n1002\n1001';
            LexCancelRemoveBoxController.searchConsumableorderdetails('10061\n10051\n10041\n10031\n10021\n10011','Testaccount003','重庆','ET');
            String str = '该商品存在盘点履历';
            String errorReason = '';
            LexCancelRemoveBoxController.ConsumableorderdetailsInfo c2 = new LexCancelRemoveBoxController.ConsumableorderdetailsInfo(con,str);
            c2.esd = con;
            c2.Prod = con.Consumable_product__r;
            c2.oldConsumableCount = con.name;
            c2.ErrorReason  = str;
            LexCancelRemoveBoxController.ConsumableorderdetailsInfo c1 = new LexCancelRemoveBoxController.ConsumableorderdetailsInfo(con2);
            c1.esd = con;
            c1.Prod = con.Consumable_product__r;
            c1.oldConsumableCount = con.name;
            c1.compareTo(c2);
            System.Test.stopTest();
        }
    }
    static testMethod void testMethod4(){
        Oly_TriggerHandler.bypass('ConsumableAssetHander');
        Oly_TriggerHandler.bypass('Oly_TriggerHandler');
        User myUser_test;
        Account myAccount2;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        System.runAs(thisUser){
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET Email)'];
            myAccount2 = new Account(name='Testaccount003',Dealer_discount__c =20,RecordTypeId = rectCo[0].Id,AgentCode_Ext__c = '2');
            insert myAccount2;
            Contact core = new Contact(email='wan@salesforce.com', firstname='wan',lastname='Plumbers',accountid=myAccount2.id);
            insert core;
            MyUser_Test = New User(ContactId = core.id,Alias = 'newWang',Email='newWang@testorg.com',EmailEncodingKey='UTF-8', LastName='TestUserWang', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUserWang@testorg.com',Work_Location__c ='重庆');
            insert MyUser_Test;
            System.debug('MyUser_Test'+MyUser_Test);
        }
        System.runAs(MyUser_Test){
            //产品信息
            Product2 prod01 = new Product2(Name='Test01',ProductCode='Test01',Asset_Model_No__c = 'Test01',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test01',Manual_Entry__c = false);
            Product2 prod02 = new Product2(Name='Test02',ProductCode='Test02',Asset_Model_No__c = 'Test02',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test02',Manual_Entry__c = false);
            Product2 prod03 = new Product2(Name='Test03',ProductCode='Test03',Asset_Model_No__c = 'Test03',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test03',Manual_Entry__c = false);
            Product2 prod04 = new Product2(Name='Test04',ProductCode='Test04',Asset_Model_No__c = 'Test04',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=2,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test04',Manual_Entry__c = false);
            Product2 prod05 = new Product2(Name='Test05',ProductCode='Test05',Asset_Model_No__c = 'Test05',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test05',Manual_Entry__c = false);
            Product2 prod06 = new Product2(Name='Test06',ProductCode='Test06',Asset_Model_No__c = 'Test06',SFDA_Status__c = '有効',Dealer_special_Object__c = true,Packing_list_manual__c=1,SFDA_Expiration_Date__c= Date.today(),Category5__c = 'test06',Manual_Entry__c = false);
            insert new Product2[] {prod01, prod02,prod03,prod04, prod05, prod06};
            Product2__c pro1 = new Product2__c(Name='Pro001',OT_CODE_Text__c='Test001',Product2__c = prod01.Id);
            Product2__c pro2 = new Product2__c(Name='Pro002',OT_CODE_Text__c='Test002',Product2__c = prod02.Id);
            Product2__c pro3 = new Product2__c(Name='Pro004',OT_CODE_Text__c='Test004',Product2__c = prod03.Id);
            Product2__c pro4 = new Product2__c(Name='Pro005',OT_CODE_Text__c='Test005',Product2__c = prod04.Id);
            Product2__c pro5 = new Product2__c(Name='Pro003',OT_CODE_Text__c='Test003',Product2__c = prod05.Id);
            Product2__c pro6 = new Product2__c(Name='Pro006',OT_CODE_Text__c='Test006',Product2__c = prod06.Id);
            insert new Product2__c[] {pro4, pro5,pro6,pro1, pro2, pro3};
            List<Consumable_order__c> orderList = new List<Consumable_order__c>();
            //销售
            Consumable_order__c Order1 = new Consumable_order__c();
            Order1.Name = 'OCM_01';
            Order1.Order_status__c = '批准';
            Order1.Order_type__c = '销售';
            Order1.Dealer_Info__c = myAccount2.Id;
            Order1.RecordTypeid = '01210000000c9duAAA';
            Order1.Order_ProType__c = 'ENG';
            orderList.add(Order1);
            //返品
            Consumable_order__c Order2 = new Consumable_order__c();
            Order2.Name = 'OCM_01';
            Order2.Order_status__c = '批准';
            Order2.Order_type__c = '返品';
            Order2.Dealer_Info__c = myAccount2.Id;
            Order2.RecordTypeid = '012100000006Jx4AAE';
            Order2.Order_ProType__c = 'ENG';
            orderList.add(Order2);
            //盘点
            Consumable_order__c Order3 = new Consumable_order__c();
            Order3.Name = 'OCM_01';
            Order3.Order_status__c = '批准';
            Order3.Order_type__c = '盘点';
            Order3.Dealer_Info__c = myAccount2.Id;
            Order3.RecordTypeid = '01210000000c9dsAAA';
            Order3.Order_ProType__c = 'ENG';
            orderList.add(Order3);
            //发货
            Consumable_order__c Order4 = new Consumable_order__c();
            Order4.Name = 'OCM_0122';
            Order4.Order_status__c = '批准';
            Order4.Order_type__c = '订单';
            Order4.Dealer_Info__c = myAccount2.Id;
            Order4.RecordTypeid = '01210000000c9drAAA';
            Order4.Order_ProType__c = 'ET';
            Order4.ContractNo__c = '';
            orderList.add(Order4);
            insert orderList;
            List<Consumable_order_details2__c> conList = new List<Consumable_order_details2__c> ();
            List<Consumable_order_details2__c> conList1 = new List<Consumable_order_details2__c> ();
            List<Consumable_order_details2__c> conList2 = new List<Consumable_order_details2__c> ();
            //拆盒已销售
            Consumable_order_details2__c con4 = new Consumable_order_details2__c();
            con4.Arrive_date__c = Date.today();
            con4.Deliver_date__c = Date.today();
            con4.Sterilization_limit__c = Date.today();
            con4.Send_Date__c = null;
            con4.Return_date__c = null;
            con4.Used_date__c = Date.today();
            con4.Lose_Flag__c = false;
            con4.Box_Piece__c = '个';
            con4.RemoveBox_date__c = Date.today();
            con4.RecordTypeId = '01210000000kUDKAA2';
            con4.Consumable_Product__c = pro2.Id;
            con4.Bar_Code__c = '100611';
            conList.add(con4);
            insert conList;
            //拆盒返品
            Consumable_order_details2__c con5 = new Consumable_order_details2__c();
            con5.Arrive_date__c = Date.today();
            con5.Return_date__c = Date.today();
            con5.Deliver_date__c = Date.today();
            con5.Send_Date__c = null;
            con5.Sterilization_limit__c = Date.today();
            con5.Used_date__c = Date.today();
            con5.Box_Piece__c = '个';
            con5.RemoveBox_date__c = Date.today();
            con5.RecordTypeId = '01210000000kUDPAA2';
            con5.Consumable_Product__c = pro2.Id;
            con5.Consumable_order_minor__c = Order4.Id;
            con5.Bar_Code__c = '10061';
            conList1.add(con5);
            insert conList1;
            //拆盒后盘点过
            Consumable_order_details2__c con6 = new Consumable_order_details2__c();
            con6.Inventory_date__c = Date.today();
            con6.Box_Piece__c = '个';
            con6.RemoveBox_date__c = Date.today();
            con6.Send_Date__c = null;
            con6.Deliver_date__c = Date.today();
            con6.Sterilization_limit__c = Date.today();
            con6.RecordTypeId = '01210000000kUDKAA2';
            con6.Consumable_Arrived_order__c = Order3.Id;
            con6.Consumable_Product__c = pro2.Id;
            con6.Bar_Code__c = '10078';
            conList2.add(con6);
            insert conList2;
            List<Consumable_order_details2__c> conList3 = new List<Consumable_order_details2__c> ();
            //拆盒已出货
            Consumable_order_details2__c con3 = new Consumable_order_details2__c();
            con3.Arrive_date__c = Date.today();
            con3.Send_Date__c = Date.today();
            con3.Return_date__c = null;
            con3.Used_date__c = null;
            con3.Lose_Flag__c = false;
            con3.Box_Piece__c = '个';
            con3.Deliver_date__c =  Date.today();
            con3.RemoveBox_date__c = Date.today();
            con3.RecordTypeId = '01210000000kUDKAA2';
            con3.Consumable_Product__c = pro2.Id;
            con3.Consumable_order_minor__c = Order4.Id;
            con3.Bar_Code__c = '100999';
            con3.Sterilization_limit__c = Date.today();
            conList3.add(con3);
            insert conList3;
            //reset
            // Consumable_order_details2__c con1 = new Consumable_order_details2__c();
            // con1.Intra_Trade_List_RMB__c = 1000;
            // con1.Asset_Model_No__c = 'test';
            // con1.Sterilization_limit__c = Date.today();
            // con1.Deliver_date__c =  Date.today();
            // con1.Arrive_date__c = Date.today();
            // con1.Send_Date__c = null;
            // con1.Used_date__c = null;
            // con1.Return_date__c = null;
            // con1.Lose_Flag__c = false;
            // con1.Box_Piece__c = '个';
            // con1.Consumable_order_minor__c = Order4.Id;
            // con1.Guarantee_period_for_products__c =  Date.today();
            // con1.Consumable_Product__c = pro2.Id;
            // con1.Bar_Code__c = '1009999';
            // conList2.add(con1);
            // insert conList2;
            // List<Consumable_order_details2__c> conList3 = new List<Consumable_order_details2__c> ();
            // Consumable_order_details2__c con9 = new Consumable_order_details2__c();
            // con9.RemoveBox_date__c = Date.today();
            // con9.Bar_Code__c = '100112';
            // con9.Arrive_date__c = Date.today();
            // con9.Send_Date__c = null;
            // con9.Used_date__c = null;
            // con9.Return_date__c = null;
            // con9.Lose_Flag__c = false;
            // con9.Box_Piece__c = '个';
            // con9.RemoveBox_No__c = 9;
            // conList3.add(con9);
            // LexCancelRemoveBoxController.searchConsumableorderdetails('100112','Testaccount003','重庆','ET');
            //orderDetails2
            // Consumable_order_details2__c con00 = new Consumable_order_details2__c();
            // con00.Box_Piece__c = '个';
            // con00.RemoveBox_date__c = Date.today();
            // con00.RemoveBox_No__c = 1;
            // con00.ContractNo_text__c = '';
            // con00.Consumable_order_minor__c = Order4.Id;
            // con00.Bar_Code__c = '10099999989';
            // conList3.add(con00);
            // insert conList3;
            System.Test.startTest();
            LexCancelRemoveBoxController CancelRemoveBoxController = new LexCancelRemoveBoxController();
            LexCancelRemoveBoxController.searchConsumableorderdetails('100611\n10078\n10099\n1009999\n100999','Testaccount003','重庆','ET');
            LexCancelRemoveBoxController.searchConsumableorderdetails('100611\n10078\n10061\n10051\n10041\n10031\n10021\n10011','Testaccount003','北京','ET');
            LexCancelRemoveBoxController.searchConsumableorderdetails('100611\n10078\n10061\n10051\n10041\n10031\n10021\n10011','Testaccount003','重庆','ET');
            System.Test.stopTest();
        }
    }
}
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexConInvoiceListTest.cls
@@ -1,205 +1,85 @@
@isTest
private class LexConInvoiceListTest {
  static testMethod void conInvoiceListTestinit() {
    user myUser_test;
    Account myAccount2;
    Account myAccount1;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
      ];
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      List<RecordType> rectHos = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'
      ];
      if (rectHos.size() == 0) {
        return;
      }
      myAccount1 = new Account(
        name = 'testaccount001',
        RecordTypeId = rectCo[0].Id
      );
      myAccount2 = new Account(
        name = 'testaccount002',
        RecordTypeId = rectHos[0].Id
      );
      insert myAccount1;
      Contact core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount1.id
      );
      insert core;
      myUser_test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'testUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com',
        Work_Location__c = '北京'
      );
      insert myUser_test;
    }
    System.runAs(myUser_test) {
      Consumable_order__c TestList1 = new Consumable_order__c(
        Name = 'Test1',
        Invoice_Date__c = Date.today(),
        Dealer_info__c = myAccount1.Id,
        Invoice_status__c = '草案中',
        Order_ForHospital__c = myAccount2.Id,
        SummonsForDirction__c = '直接销售给医院',
        Order_status__c = '草案中',
        Order_type__c = '发票',
        recordtypeid = System.Label.RT_ConOrder_Invoice,
        Order_ProType__c = 'ET'
      );
      Consumable_order__c TestList2 = new Consumable_order__c(
        Name = 'Test2',
        Invoice_Date__c = Date.today(),
        Dealer_info__c = myAccount1.Id,
        Invoice_status__c = '提交',
        Order_ForHospital__c = myAccount2.Id,
        SummonsForDirction__c = '直接销售给医院',
        Order_status__c = '草案中',
        Order_type__c = '发票',
        recordtypeid = System.Label.RT_ConOrder_Invoice,
        Order_ProType__c = 'ET'
      );
      insert new List<Consumable_order__c>{ TestList1, TestList2 };
      LexConInvoiceList.init();
      // ConInvoiceListController CDC = new ConInvoiceListController();
      // CDC.init();
      // System.assertEquals('Test1', CDC.raesList[0].name);
      // System.assertEquals('Test2', CDC.raesList[1].name);
      // CDC.SortLimited();
      // System.assertEquals('Test1', CDC.raesList[0].name);
      // System.assertEquals('Test2', CDC.raesList[1].name);
    }
  }
  //检索
  static testMethod void invoiceCodeSearchTest() {
    user myUser_test;
    Account myAccount2;
    Account myAccount1;
    User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
    System.runAs(thisUser) {
      Profile prof = [
        SELECT Id
        FROM Profile
        WHERE Name = '901_经销商社区普通权限_2重验证(ET)'
      ];
      List<RecordType> rectCo = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '販売店'
      ];
      if (rectCo.size() == 0) {
        return;
      }
      List<RecordType> rectHos = [
        SELECT Id
        FROM RecordType
        WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '病院'
      ];
      if (rectHos.size() == 0) {
        return;
      }
      myAccount1 = new Account(
        name = 'testaccount001',
        RecordTypeId = rectCo[0].Id
      );
      myAccount2 = new Account(
        name = 'testaccount002',
        RecordTypeId = rectHos[0].Id
      );
      insert myAccount1;
      Contact core = new Contact(
        email = 'jplumber@salesforce.com',
        firstname = 'Joe',
        lastname = 'Plumber',
        accountid = myAccount1.id
      );
      insert core;
      myUser_test = new User(
        ContactId = core.id,
        Alias = 'newUser',
        Email = 'newuser@testorg.com',
        EmailEncodingKey = 'UTF-8',
        LastName = 'testUser',
        LanguageLocaleKey = 'zh_CN',
        LocaleSidKey = 'zh_CN',
        ProfileId = prof.Id,
        TimeZoneSidKey = 'Asia/Shanghai',
        UserName = 'testUser@testorg.com',
        Work_Location__c = '北京'
      );
      insert myUser_test;
    }
private class LexConInvoiceListTest
{
    static testMethod void conInvoiceListTestinit(){
        user myUser_test;
        Account myAccount2;
        Account myAccount1;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        system.runAs(thisUser){
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            List<RecordType> rectHos = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
            if (rectHos.size() == 0) {
                return;
            }
            myAccount1 = new Account(name='testaccount001',RecordTypeId = rectCo[0].Id );
            myAccount2 = new Account(name='testaccount002',RecordTypeId = rectHos[0].Id );
            insert myAccount1;
            Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
            insert core;
            myUser_test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='testUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',Work_Location__c = '北京');
            insert myUser_test;
    System.runAs(myUser_test) {
      Consumable_order__c TestList1 = new Consumable_order__c(
        Name = 'Test1',
        Invoice_Date__c = Date.today(),
        Dealer_info__c = myAccount1.Id,
        Invoice_status__c = '草案中',
        Order_ForHospital__c = myAccount2.Id,
        SummonsForDirction__c = '直接销售给医院',
        Order_status__c = '草案中',
        Order_type__c = '发票',
        recordtypeid = System.Label.RT_ConOrder_Invoice,
        Order_ProType__c = 'ET'
      );
      Consumable_order__c TestList2 = new Consumable_order__c(
        Name = 'Test2',
        Invoice_Date__c = Date.today(),
        Dealer_info__c = myAccount1.Id,
        Invoice_status__c = '提交',
        Order_ForHospital__c = myAccount2.Id,
        SummonsForDirction__c = '直接销售给医院',
        Order_status__c = '草案中',
        Order_type__c = '发票',
        recordtypeid = System.Label.RT_ConOrder_Invoice,
        Order_ProType__c = 'ET'
      );
      insert new List<Consumable_order__c>{ TestList1, TestList2 };
      LexConInvoiceList CDC = new LexConInvoiceList();
      LexConInvoiceList.init();
      LexConInvoiceList.invoiceCodeSearch(
        Date.today(),
        Date.today(),
        '提交',
        'test',
        'test1',
        '0010l00001ajxZ2AAI',
        '北京',
        'ET'
      );
      // CDC.init();
      // System.assertEquals('Test1', CDC.raesList[0].name);
      // System.assertEquals('Test2', CDC.raesList[1].name);
      // CDC.coc.Invoice_status__c = '提交';
      // CDC.invoiceCodeSearch();
      // System.assertEquals(1, CDC.raesList.size());
      // CDC.clearUp();
      // System.assertEquals(2, CDC.raesList.size());
        }
        system.runAs(myUser_test){
            Consumable_order__c TestList1 = new Consumable_order__c(Name='Test1',Invoice_Date__c=Date.today(),Dealer_info__c=myAccount1.Id,Invoice_status__c='草案中',Order_ForHospital__c =myAccount2.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='发票',recordtypeid = System.Label.RT_ConOrder_Invoice,Order_ProType__c = 'ET');
            Consumable_order__c TestList2 = new Consumable_order__c(Name='Test2',Invoice_Date__c=Date.today(),Dealer_info__c=myAccount1.Id,Invoice_status__c='提交',Order_ForHospital__c =myAccount2.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='发票',recordtypeid = System.Label.RT_ConOrder_Invoice,Order_ProType__c = 'ET');
            insert new Consumable_order__c[]{TestList1,TestList2};
            LexConInvoiceList.init();
            // ConInvoiceListController CDC = new ConInvoiceListController();
            // CDC.init();
            // System.assertEquals('Test1', CDC.raesList[0].name);
            // System.assertEquals('Test2', CDC.raesList[1].name);
            // CDC.SortLimited();
            // System.assertEquals('Test1', CDC.raesList[0].name);
            // System.assertEquals('Test2', CDC.raesList[1].name);
        }
    }
  }
}
    //检索
    static testMethod void invoiceCodeSearchTest(){
        user myUser_test;
        Account myAccount2;
        Account myAccount1;
        User thisUser = [ select Id from User where Id = :UserInfo.getUserId()];
        system.runAs(thisUser){
            Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证(ET)'];
            List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '販売店'];
            if (rectCo.size() == 0) {
                return;
            }
            List<RecordType> rectHos = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
            if (rectHos.size() == 0) {
                return;
            }
            myAccount1 = new Account(name='testaccount001',RecordTypeId = rectCo[0].Id );
            myAccount2 = new Account(name='testaccount002',RecordTypeId = rectHos[0].Id );
            insert myAccount1;
            Contact core = new Contact(email='jplumber@salesforce.com', firstname='Joe',lastname='Plumber',accountid=myAccount1.id);
            insert core;
            myUser_test = New User(ContactId = core.id,Alias = 'newUser',Email='newuser@testorg.com',EmailEncodingKey='UTF-8', LastName='testUser', LanguageLocaleKey='zh_CN',LocaleSidKey='zh_CN', ProfileId = prof.Id,TimeZoneSidKey='Asia/Shanghai', UserName='testUser@testorg.com',Work_Location__c = '北京');
            insert myUser_test;
        }
        system.runAs(myUser_test){
            Consumable_order__c TestList1 = new Consumable_order__c(Name='Test1',Invoice_Date__c=Date.today(),Dealer_info__c=myAccount1.Id,Invoice_status__c='草案中',Order_ForHospital__c =myAccount2.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='发票',recordtypeid = System.Label.RT_ConOrder_Invoice,Order_ProType__c = 'ET');
            Consumable_order__c TestList2 = new Consumable_order__c(Name='Test2',Invoice_Date__c=Date.today(),Dealer_info__c=myAccount1.Id,Invoice_status__c='提交',Order_ForHospital__c =myAccount2.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='发票',recordtypeid = System.Label.RT_ConOrder_Invoice,Order_ProType__c = 'ET');
            insert new Consumable_order__c[]{TestList1,TestList2};
            LexConInvoiceList CDC = new LexConInvoiceList();
            LexConInvoiceList.init();
            LexConInvoiceList.invoiceCodeSearch(Date.today(),Date.today(),'提交','test','test1','0010l00001ajxZ2AAI','北京','ET');
            // CDC.init();
            // System.assertEquals('Test1', CDC.raesList[0].name);
            // System.assertEquals('Test2', CDC.raesList[1].name);
            // CDC.coc.Invoice_status__c = '提交';
            // CDC.invoiceCodeSearch();
            // System.assertEquals(1, CDC.raesList.size());
            // CDC.clearUp();
            // System.assertEquals(2, CDC.raesList.size());
        }
    }
}
force-app/main/default/classes/LexConInvoiceListTest.cls-meta.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
force-app/main/default/classes/LexConInvoiceViewController.cls
@@ -1,1962 +1,1683 @@
public without sharing class LexConInvoiceViewController {
  public static String agencyProType { get; set; }
  public static Consumable_order__c coc { get; set; }
  public static Consumable_order__c outbound { get; set; }
  public static String invoiceId { get; set; }
  public static String orderRemind { get; set; }
  public static String deliveryId { get; set; }
  public static String reopen { get; set; }
  public static Decimal sumPrice { get; set; }
  public static Boolean isChange { get; set; }
  public static String accountid { get; set; }
  public static String userId { get; set; }
  public static String errorMsg { get; set; }
    public static String agencyProType { get; set; }
    public static Consumable_order__c coc { get; set; }
    public static Consumable_order__c outbound { get; set; }
    public static String invoiceId { get; set; }
    public static String orderRemind { get; set; }
    public static String deliveryId { get; set; }
    public static String reopen { get; set; }
    public static Decimal sumPrice { get; set; }
    public static Boolean isChange { get; set; }
    public static String accountid { get; set; }
    public static String userId { get; set; }
    public static String errorMsg { get; set; }
  public static Boolean getdone() {
    return (invoiceOrderdetail1Recoeds.size() > 0);
  }
  public static Boolean getExistOutbound() {
    return (coc.Outbound_order__c != null);
  }
  public static String getInvoiceName() {
    return (coc.Name);
  }
  public static List<Consumable_Orderdetails__c> conoList { get; set; }
  public static String shipmentAccount {
    get {
      return (coc.ShipmentAccount__c);
    public static Boolean getdone() {
        return (invoiceOrderdetail1Recoeds.size() > 0);
    }
  }
  public static String statusEdit = '';
  public static Boolean editAble { get; set; }
  public static List<InvoiceOrderInfo> invoiceOrderRecoeds { get; set; }
  public static List<InvoiceOrderInfo> invoiceOrderdetail1Recoeds { get; set; }
  public static List<InvoiceOrderInfo> invoiceOrderRecoedschange { get; set; }
  public static List<InvoiceOrderInfo> attachmentRecoeds { get; set; }
  public static List<Consumable_order__c> invoiceOrderList { get; set; }
  public static List<Consumable_order__c> invoiceOrderSelectedList { get; set; }
  public static Map<String, Decimal> ordermx1defaultMap { get; set; }
  public static Map<String, Decimal> outorderMoneytMap { get; set; }
  public static Map<String, Consumable_Orderdetails__c> outordercountMap {
    get;
    set;
  }
  public static List<String> outOrderStringList { get; set; }
  public static List<SelectOption> provinceOpts { get; set; }
  public static Map<String, String> provinceOptsMap { get; set; }
  public static String SecondDealer { get; set; }
  public static String HospitalInfo { get; set; }
  public static String HospitalName { get; set; }
  public static Integer invoiceOrderRecoedsCount {
    get {
      return invoiceOrderRecoeds == null ? 0 : invoiceOrderRecoeds.size();
    public static Boolean getExistOutbound() {
        return (coc.Outbound_order__c != null);
    }
  }
  public static list<Dealer_elationship__c> Dealerelationship { get; set; }
  public static String[] orderby = new List<String>{
    'Outbound_Date__c',
    'Name',
    'ShipmentAccount__c'
  };
  public static String sortKey { get; set; }
  public static String preSortKey { get; set; }
  public static Boolean sortOrderAsc { get; set; }
  public static String[] sortOrder { get; set; }
  public static String userWorkLocation { get; set; }
  //页面初始化
  @AuraEnabled
  public static ResponseBodyLWC init(
    String invoiceId,
    String statusEdit,
    String deliveryId
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    provinceOpts = new List<SelectOption>();
    provinceOptsMap = new Map<String, String>();
    invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
    attachmentRecoeds = new List<InvoiceOrderInfo>();
    invoiceOrderdetail1Recoeds = new List<InvoiceOrderInfo>();
    invoiceOrderRecoedschange = new List<InvoiceOrderInfo>();
    orderRemind = '';
    isChange = false;
    conoList = new List<Consumable_Orderdetails__c>();
    outorderMoneytMap = new Map<String, Decimal>();
    outOrderStringList = new List<String>();
    outordercountMap = new Map<String, Consumable_Orderdetails__c>();
    sumPrice = 0;
    // this.sortKey = '1';
    // this.preSortKey = '1';
    // this.sortOrderAsc = false;
    // this.sortOrder = new List<String>(2);
    // this.sortOrder = new List<String>{ ' ', ' ', ' ', ' ' };
    invoiceId = invoiceId;
    statusEdit = statusEdit;
    deliveryId = deliveryId;
    if (
      invoiceId != null &&
      invoiceId != '' &&
      (statusEdit == '' ||
      statusEdit == null)
    ) {
      editAble = false;
    } else if (
      (invoiceId == null || invoiceId == '') &&
      (statusEdit == '' ||
      statusEdit == null)
    ) {
      editAble = true;
    } else if (
      invoiceId != null &&
      invoiceId != '' &&
      statusEdit != '' &&
      statusEdit != null
    ) {
      editAble = true;
    public static String getInvoiceName() {
        return (coc.Name);
    }
    userId = UserInfo.getUserId();
    List<user> Useracc = new List<user>();
    Useracc = [
      SELECT accountid, Work_Location__c, UserPro_Type__c
      FROM user
      WHERE id = :userId
    ];
    accountid = Useracc[0].accountid;
    userWorkLocation = Useracc[0].Work_Location__c;
    agencyProType = Useracc[0].UserPro_Type__c;
    if (String.isBlank(Useracc[0].UserPro_Type__c)) {
      agencyProType = 'ET';
    }
    coc = new Consumable_order__c();
    public static List<Consumable_Orderdetails__c> conoList { get; set; }
    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, Name, Hospital__c, Hospital__r.Id, Hospital__r.Name, Agency__c
      FROM Agency_Hospital_Link__c
      WHERE Agency__c = :accountId
    ];
    // 新規
    if (invoiceId == null || invoiceId == '') {
      if (deliveryId == null || deliveryId == '') {
        String msoql = makeSoql();
        invoiceOrderList = Database.query(msoql);
        for (Integer i = 0; i < invoiceOrderList.size(); i++) {
          invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
    public static String shipmentAccount {
        get {
            return (coc.ShipmentAccount__c);
        }
      } else {
        if (statusEdit == '' || statusEdit == null) {
          EditAble = false;
        } else if (statusEdit != '' && statusEdit != null) {
          EditAble = true;
    }
    public static String statusEdit = '';
    public static Boolean editAble { get; set; }
    public static List<InvoiceOrderInfo> invoiceOrderRecoeds { get; set; }
    public static List<InvoiceOrderInfo> invoiceOrderdetail1Recoeds { get; set; }
    public static List<InvoiceOrderInfo> invoiceOrderRecoedschange { get; set; }
    public static List<InvoiceOrderInfo> attachmentRecoeds { get; set; }
    public static List<Consumable_order__c> invoiceOrderList { get; set; }
    public static List<Consumable_order__c> invoiceOrderSelectedList { get; set; }
    public static Map<String, Decimal> ordermx1defaultMap { get; set; }
    public static Map<String, Decimal> outorderMoneytMap { get; set; }
    public static Map<String, Consumable_Orderdetails__c> outordercountMap { get; set; }
    public static List<String> outOrderStringList { get; set; }
    public static List<SelectOption> provinceOpts { get; set; }
    public static Map<String, String> provinceOptsMap { get; set; }
    public static String SecondDealer { get; set; }
    public static String HospitalInfo { get; set; }
    public static String HospitalName { get; set; }
    public static Integer invoiceOrderRecoedsCount {
        get {
            return invoiceOrderRecoeds == null ? 0 : invoiceOrderRecoeds.size();
        }
        coc = [
          SELECT
            Id,
            Name,
            Invoice_status__c,
            Invoice_Date__c,
            Order_ForDealerText__c,
            Dealer_Info__c,
            Order_ForDealer__c,
            Order_ForDealer__r.Name,
            Order_ForHospital__c,
            Order_ForHospital__r.Name,
            Order_date__c,
            Billed_Status__c,
            ShipmentAccount__c,
            Order_Dealer_Info__c,
            SummonsForDirction__c,
            Order_ForCustomerText__c,
            Invoice_Note__c,
            Invoice_attachment__c,
            Invoicedet_attachment__c,
            Outbound_order__c
          FROM Consumable_order__c
          WHERE Id = :deliveryId
    }
    public static list<Dealer_elationship__c> Dealerelationship { get; set; }
    public static String[] orderby = new List<String>{ 'Outbound_Date__c', 'Name', 'ShipmentAccount__c' };
    public static String sortKey { get; set; }
    public static String preSortKey { get; set; }
    public static Boolean sortOrderAsc { get; set; }
    public static String[] sortOrder { get; set; }
    public static String userWorkLocation { get; set; }
    //页面初始化
    @AuraEnabled
    public static ResponseBodyLWC init(String invoiceId, String statusEdit, String deliveryId) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        provinceOpts = new List<SelectOption>();
        provinceOptsMap = new Map<String, String>();
        invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
        attachmentRecoeds = new List<InvoiceOrderInfo>();
        invoiceOrderdetail1Recoeds = new List<InvoiceOrderInfo>();
        invoiceOrderRecoedschange = new List<InvoiceOrderInfo>();
        orderRemind = '';
        isChange = false;
        conoList = new List<Consumable_Orderdetails__c>();
        outorderMoneytMap = new Map<String, Decimal>();
        outOrderStringList = new List<String>();
        outordercountMap = new Map<String, Consumable_Orderdetails__c>();
        sumPrice = 0;
        // this.sortKey = '1';
        // this.preSortKey = '1';
        // this.sortOrderAsc = false;
        // this.sortOrder = new List<String>(2);
        // this.sortOrder = new List<String>{ ' ', ' ', ' ', ' ' };
        invoiceId = invoiceId;
        statusEdit = statusEdit;
        deliveryId = deliveryId;
        if (invoiceId != null && invoiceId != '' && (statusEdit == '' || statusEdit == null)) {
            editAble = false;
        } else if ((invoiceId == null || invoiceId == '') && (statusEdit == '' || statusEdit == null)) {
            editAble = true;
        } else if (invoiceId != null && invoiceId != '' && statusEdit != '' && statusEdit != null) {
            editAble = true;
        }
        userId = UserInfo.getUserId();
        List<user> Useracc = new List<user>();
        Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :userId];
        accountid = Useracc[0].accountid;
        userWorkLocation = Useracc[0].Work_Location__c;
        agencyProType = Useracc[0].UserPro_Type__c;
        if (String.isBlank(Useracc[0].UserPro_Type__c)) {
            agencyProType = 'ET';
        }
        coc = new Consumable_order__c();
        Dealerelationship = [
            SELECT Dealer_subordinate__c, Dealer_subordinate__r.Name
            FROM Dealer_elationship__c
            WHERE Dealer_principal__c = :accountid
        ];
        coc.Name = '';
        if (coc.Order_ForDealer__c != null) {
          SecondDealer = coc.Order_ForDealer__c;
        }
        if (coc.Order_ForHospital__c != null) {
          HospitalInfo = coc.Order_ForHospital__c;
          HospitalName = coc.Order_ForHospital__r.Name;
        }
        //发票关联出库单取得(出库单)
        invoiceOrderSelectedList = [
          SELECT
            Id,
            Order_ForDealer__r.Name,
            Order_ForHospital__r.Name,
            Order_ForDealerText__c,
            Name,
            Outbound_Date__c,
            ShipmentAccount__c,
            Order_Dealer_Info__c,
            SummonsForDirction__c,
            Shipment_total_amount__c,
            RrturnPro_total_amount__c,
            Total_Invoiced_Procount__c,
            InvoiceNotPro_total_amount__c,
            InvoiceNotPro_money__c,
            Invoice_total_amount__c,
            Billed_Status__c
          FROM Consumable_order__c
          WHERE Id = :deliveryId
          ORDER BY Name
        List<Agency_Hospital_Link__c> AgencyHospitalLink = new List<Agency_Hospital_Link__c>();
        AgencyHospitalLink = [
            SELECT Id, Name, Hospital__c, Hospital__r.Id, Hospital__r.Name, Agency__c
            FROM Agency_Hospital_Link__c
            WHERE Agency__c = :accountId
        ];
        for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
          invoiceOrderRecoeds.add(
            new InvoiceOrderInfo(invoiceOrderSelectedList[i])
          );
        }
      }
    } else {
      coc = [
        SELECT
          Id,
          Name,
          Invoice_status__c,
          Invoice_Date__c,
          Order_ForDealerText__c,
          Dealer_Info__c,
          Order_ForDealer__c,
          Order_ForDealer__r.Name,
          Order_ForHospital__c,
          Order_ForHospital__r.Name,
          Order_date__c,
          Billed_Status__c,
          ShipmentAccount__c,
          Order_Dealer_Info__c,
          SummonsForDirction__c,
          Order_ForCustomerText__c,
          Invoice_Note__c,
          Invoice_attachment__c,
          Invoicedet_attachment__c,
          Outbound_order__c
        FROM Consumable_order__c
        WHERE Id = :invoiceId AND Order_type__c = '发票'
      ];
      if (coc.Order_ForDealer__c != null) {
        SecondDealer = coc.Order_ForDealer__c;
      }
      if (coc.Order_ForHospital__c != null) {
        HospitalInfo = coc.Order_ForHospital__c;
        HospitalName = coc.Order_ForHospital__r.Name;
      }
      //到链接表中查找关联出库单
      List<Consumable_order_LinkTable__c> outOrderList = [
        SELECT Outboundorder_Code_link__c
        FROM Consumable_order_LinkTable__c
        WHERE Invoice_Code_link__c = :invoiceId
      ];
      for (Integer i = 0; i < outOrderList.size(); i++) {
        outOrderStringList.add(outOrderList[i].Outboundorder_Code_link__c);
      }
      //取得出库单信息
      invoiceOrderSelectedList = [
        SELECT
          Id,
          Order_ForDealer__r.Name,
          Order_ForHospital__r.Name,
          Order_ForDealerText__c,
          Name,
          Outbound_Date__c,
          ShipmentAccount__c,
          Shipment_total_amount__c,
          RrturnPro_total_amount__c,
          Total_Invoiced_Procount__c,
          InvoiceNotPro_total_amount__c,
          InvoiceNotPro_money__c,
          Invoice_total_amount__c,
          Billed_Status__c
        FROM Consumable_order__c
        WHERE
          Id IN :outOrderStringList
          AND Order_Owner_WorkLocal__c = :userWorkLocation
        ORDER BY Name
      ];
      for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
        outorderMoneytMap.put(invoiceOrderSelectedList[i].id, 0);
        invoiceOrderRecoeds.add(
          new InvoiceOrderInfo(invoiceOrderSelectedList[i])
        );
      }
      if (String.isNotBlank(deliveryId)) {
        //发票关联出库单取得(出库单)
        isChange = true;
        invoiceOrderSelectedList = [
          SELECT
            Id,
            Order_ForDealer__r.Name,
            Order_ForHospital__r.Name,
            Order_ForDealerText__c,
            Name,
            Outbound_Date__c,
            ShipmentAccount__c,
            Shipment_total_amount__c,
            RrturnPro_total_amount__c,
            Total_Invoiced_Procount__c,
            InvoiceNotPro_total_amount__c,
            InvoiceNotPro_money__c,
            Invoice_total_amount__c,
            Billed_Status__c
          FROM Consumable_order__c
          WHERE
            Id = :deliveryId
            AND Order_Owner_WorkLocal__c = :userWorkLocation
          ORDER BY Name
        ];
        for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
          if (!outorderMoneytMap.containsKey(invoiceOrderSelectedList[i].Id)) {
            invoiceOrderRecoeds.add(
              new InvoiceOrderInfo(invoiceOrderSelectedList[i])
            );
            invoiceOrderRecoedschange.add(
              new InvoiceOrderInfo(invoiceOrderSelectedList[i])
            );
          }
        }
      }
      //发票明细一览
      List<Consumable_Orderdetails__c> countDel = [
        SELECT
          Id,
          Consumable_ZS_order__c,
          Name,
          Consumable_order__c,
          Invoicedet1_OD_link__c,
          Invoicedet1_OD_link__r.Name,
          Consumable_order__r.Name,
          Product_OutDate__c,
          Asset_Model_No__c,
          Invoice_Unitprice__c,
          Delivery_List_RMB__c,
          Invoiced_Procount__c,
          Invoiced_Count__c,
          InvoicedProCost_RMB__c,
          Box_Piece__c,
          Invoice_Unit__c,
          ProductPacking_list_manual__c
        FROM Consumable_Orderdetails__c
        WHERE Consumable_order__c = :invoiceId
        ORDER BY Invoicedet1_OD_link__c
      ];
      if (countDel.size() > 0) {
        for (Integer i = 0; i < countDel.size(); i++) {
          outordercountMap.put(
            countDel[i].Invoicedet1_OD_link__c + countDel[i].Asset_Model_No__c,
            countDel[i]
          );
          if (
            outorderMoneytMap.containsKey(countDel[i].Invoicedet1_OD_link__c)
          ) {
            outorderMoneytMap.put(
              countDel[i].Invoicedet1_OD_link__c,
              outorderMoneytMap.get(countDel[i].Invoicedet1_OD_link__c) +
              countDel[i].InvoicedProCost_RMB__c
            );
          }
          invoiceOrderdetail1Recoeds.add(new InvoiceOrderInfo(countDel[i]));
        }
      }
      for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
        if (outorderMoneytMap.containsKey(ass.esd.id)) {
          ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id);
        }
        ass.check = true;
      }
    }
    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__r.Name == SecondDealer) {
          provinceOpts.add(
            new SelectOption(
              Dealerelationship[i].Dealer_subordinate__c,
              SecondDealer
            )
          );
          provinceOptsMap.put(
            Dealerelationship[i].Dealer_subordinate__c,
            SecondDealer
          );
        }
      }
      for (Integer i = 0; i < Dealerelationship.size(); i++) {
        if (Dealerelationship[i].Dealer_subordinate__r.Name != 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
          );
        }
      }
    }
    Map<String, String> consumableaccessoriesMap = new Map<String, String>();
    Map<String, String> invorceOrderIdMap = new Map<String, String>();
    List<Consumable_accessories_invoice__c> consumableaccessories = [
      SELECT Id, Name, Attachment_ID__c, Accessories_type__c
      FROM Consumable_accessories_invoice__c
      WHERE Invoice_code__c = :invoiceId
    ];
    System.debug('consumableaccessories = ' + consumableaccessories);
    if (consumableaccessories.size() > 0) {
      for (Integer i = 0; i < consumableaccessories.size(); i++) {
        consumableaccessoriesMap.put(
          consumableaccessories[i].Attachment_ID__c,
          consumableaccessories[i].Accessories_type__c
        );
        invorceOrderIdMap.put(
          consumableaccessories[i].Attachment_ID__c,
          consumableaccessories[i].Id
        );
      }
    }
    //List<Attachment> attachmentinfo = [SELECT Id, Name, OwnerId,Owner.Name, CreatedDate FROM Attachment WHERE parentid = :invoiceId];
    // if (attachmentinfo.size() > 0) {
    //     for (Integer i = 0; i < attachmentinfo.size(); i++) {
    //         attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[i]));
    //     }
    // }
    List<ContentDocumentLink> links = [
      SELECT Id, ContentDocumentId
      FROM ContentDocumentLink
      WHERE LinkedEntityId = :invoiceId
    ];
    if (links != null && links.size() > 0) {
      List<String> documentIds = new List<String>();
      for (ContentDocumentLink link : links) {
        documentIds.add(link.ContentDocumentId);
      }
      List<ContentVersion> cvInfo = [
        SELECT Id, Title, OwnerId, Owner.Name, CreatedDate, ContentDocumentId
        FROM ContentVersion
        WHERE ContentDocumentId IN :documentIds
      ];
      if (cvInfo.size() > 0) {
        for (Integer i = 0; i < cvInfo.size(); i++) {
          attachmentRecoeds.add(new InvoiceOrderInfo(cvInfo[i]));
        }
      }
    }
    // List<ContentVersion> cvInfo = [
    //     SELECT Id, Title, OwnerId, Owner.Name, CreatedDate, ContentDocumentId
    //     FROM ContentVersion
    //     WHERE FirstPublishLocationId = :invoiceId
    // ];
    // if (cvInfo.size() > 0) {
    //     for (Integer i = 0; i < cvInfo.size(); i++) {
    //         attachmentRecoeds.add(new InvoiceOrderInfo(cvInfo[i]));
    //     }
    // }
    System.debug('attachmentRecoeds = ' + attachmentRecoeds);
    System.debug('consumableaccessoriesMap = ' + consumableaccessoriesMap);
    for (InvoiceOrderInfo ass : attachmentRecoeds) {
      if (consumableaccessoriesMap.containsKey(ass.cvInfo.Id)) {
        ass.mailSelectOptsin = consumableaccessoriesMap.get(ass.cvInfo.Id);
        ass.invoiceOrderId = invorceOrderIdMap.get(ass.cvInfo.Id);
      }
    }
    data.put('EditAble', EditAble);
    data.put('isChange', isChange);
    data.put('coc', coc);
    data.put('ExistOutbound', getExistOutbound());
    data.put('invoiceOrderRecoeds', invoiceOrderRecoeds);
    data.put('provinceOptsMap', provinceOptsMap);
    data.put('HospitalName', HospitalName);
    data.put('HospitalInfo', HospitalInfo);
    data.put('agencyProType', agencyProType);
    data.put('userWorkLocation', userWorkLocation);
    data.put('done', getdone());
    data.put('invoiceOrderdetail1Recoeds', invoiceOrderdetail1Recoeds);
    data.put('accountid', accountid);
    data.put('invoiceOrderRecoedschange', invoiceOrderRecoedschange);
    data.put('attachmentRecoeds', attachmentRecoeds);
    data.put('outOrderStringList', outOrderStringList);
    data.put('outordercountMap', outordercountMap);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  //保存
  @AuraEnabled
  public static ResponseBodyLWC save(
    Consumable_order__c cocLwc,
    String HospitalNameLwc,
    String HospitalInfoLwc,
    String SecondDealerLwc,
    String invoiceOrderRecoedsLwc,
    String deliveryIdLwc,
    String invoiceIdLwc,
    String accountidLwc,
    String agencyProTypeLwc,
    String reopenLwc,
    String invoiceOrderRecoedschangeLwc
  ) {
    System.debug('enter LexConInvoiceViewController.save success');
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    coc = cocLwc;
    HospitalName = HospitalNameLwc;
    HospitalInfo = HospitalInfoLwc;
    System.debug('HospitalInfo = ' + HospitalInfo);
    SecondDealer = SecondDealerLwc;
    errorMsg = '';
    deliveryId = deliveryIdLwc;
    invoiceOrderRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(
      invoiceOrderRecoedsLwc,
      List<InvoiceOrderInfo>.class
    );
    invoiceId = invoiceIdLwc;
    accountid = accountidLwc;
    agencyProType = agencyProTypeLwc;
    reopen = reopenLwc;
    invoiceOrderRecoedschange = (List<InvoiceOrderInfo>) JSON.deserialize(
      invoiceOrderRecoedschangeLwc,
      List<InvoiceOrderInfo>.class
    );
    List<String> chukudanID = new List<String>();
    if (coc.Name == '' || coc.Name == null) {
      // coc.Name.addError('请录入发票号');
      // return null;
      return new ResponseBodyLWC('Error', 500, '请录入发票号', '');
    }
    if (coc.Invoice_Date__c == null) {
      // coc.Invoice_Date__c.addError('请录入发票日期');
      // return null;
      return new ResponseBodyLWC('Error', 500, '请录入发票日期', '');
    }
    if (String.isBlank(HospitalInfo) && String.isBlank(SecondDealer)) {
      // coc.addError('必须输入客户名或者二级经销商');
      // return null;
      return new ResponseBodyLWC(
        'Error',
        500,
        '必须输入客户名或者二级经销商',
        ''
      );
    }
    if (
      HospitalInfo != null &&
      HospitalInfo != '' &&
      String.isNotEmpty(SecondDealer)
    ) {
      //coc.addError('请输入客户名、二级经销商只可输入一个');
      errorMsg += '请输入客户名、二级经销商只可输入一个';
    }
    if (HospitalInfo != null && HospitalInfo != '') {
      if (coc.Order_ForCustomerText__c == null) {
        // coc.Order_ForCustomerText__c.addError('请输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入科室', '');
      }
    } else {
      if (coc.Order_ForCustomerText__c != null) {
        // coc.Order_ForCustomerText__c.addError('不需要输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '不需要输入科室', '');
      }
    }
    String shipmentAccountString = '';
    if (HospitalInfo != null) {
      shipmentAccountString = HospitalInfo;
    } else if (String.isNotEmpty(SecondDealer)) {
      shipmentAccountString = SecondDealer;
    } else {
      shipmentAccountString = coc.Order_ForDealerText__c == null
        ? ''
        : coc.Order_ForDealerText__c;
    }
    Integer x = 0;
    List<String> invoiceOrderAccountList = new List<String>();
    for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
      if (String.isBlank(deliveryId)) {
        if (ass.check == true) {
          x++;
          System.debug(shipmentAccountString);
          if (HospitalInfo != null && HospitalInfo != '') {
            if (ass.esd.Order_ForHospital__c != shipmentAccountString) {
              invoiceOrderAccountList.add(ass.esd.Name);
            }
          }
          if (String.isNotEmpty(SecondDealer)) {
            if (
              ass.esd.Order_ForDealer__c != shipmentAccountString &&
              ass.esd.Order_ForDealerText__c != shipmentAccountString
            ) {
              invoiceOrderAccountList.add(ass.esd.Name);
            }
          }
          if (
            coc.Order_ForDealerText__c != null &&
            (HospitalInfo == null ||
            HospitalInfo == '')
          ) {
            if (
              (ass.esd.Order_ForDealerText__c != null ||
              ass.esd.Order_ForDealerText__c != '') &&
              ass.esd.ShipmentAccount__c != shipmentAccountString
            ) {
              invoiceOrderAccountList.add(ass.esd.Name);
            }
          }
        }
      } else {
        if (HospitalInfo != null && HospitalInfo != '') {
          System.debug(
            '++++++++++++' +
              ass.esd.Order_ForHospital__c +
              '   ' +
              shipmentAccountString
          );
          if (ass.esd.Order_ForHospital__c != shipmentAccountString) {
            System.debug(
              'HospitalInfo != null ass.esd.Order_ForHospital__c != shipmentAccountString'
            );
            invoiceOrderAccountList.add(ass.esd.Name);
          }
        }
        //if (String.isNotEmpty(SecondDealer)) {
        if (String.isNotEmpty(SecondDealer)) {
          if (ass.esd.Order_ForDealer__c != shipmentAccountString) {
            System.debug(
              'String.isNotEmpty(SecondDealer) ass.esd.Order_ForHospital__c != shipmentAccountString'
            );
            invoiceOrderAccountList.add(ass.esd.Name);
          }
        }
        if (
          coc.Order_ForDealerText__c != null &&
          (HospitalInfo == null ||
          HospitalInfo == '')
        ) {
          if (
            (ass.esd.Order_ForDealerText__c != null ||
            ass.esd.Order_ForDealerText__c != '') &&
            ass.esd.ShipmentAccount__c != shipmentAccountString
          ) {
            System.debug(
              'HospitalInfo == null && ass.esd.Order_ForDealerText__c != null ass.esd.ShipmentAccount__c != shipmentAccountString'
            );
            invoiceOrderAccountList.add(ass.esd.Name);
          }
        }
      }
    }
    // invoiceOrderAccountList.add('12345');
    if (invoiceOrderAccountList.size() > 0) {
      orderRemind =
        invoiceOrderAccountList + '出库单客户名与发票客户名不一致!';
      // coc.addError(invoiceOrderAccountList + '出库单客户名与发票客户名不一致!');
      // return null;
      return new ResponseBodyLWC(
        'Error',
        500,
        invoiceOrderAccountList + '出库单客户名与发票客户名不一致!',
        ''
      );
    } else {
      orderRemind = '';
    }
    if (String.isBlank(deliveryId)) {
      if (x < 1) {
        // coc.addError('请选择需要开发票的出库单!');
        // return null;
        return new ResponseBodyLWC(
          'Error',
          500,
          '请选择需要开发票的出库单!',
          ''
        );
      }
    }
    Consumable_order__c invoiceHead = new Consumable_order__c();
    List<String> outOrderIdList = new List<String>();
    List<Consumable_order_LinkTable__c> invoiceLinkList = new List<Consumable_order_LinkTable__c>();
    Map<String, String> insertDetMap = new Map<String, String>();
    Map<String, String> deleteDetMap = new Map<String, String>();
    //新建发票时
    Savepoint sp = Database.setSavepoint();
    try {
      if (String.isBlank(invoiceId)) {
        invoiceHead.Name = coc.Name;
        if (
          coc.Invoice_status__c == null || String.isBlank(coc.Invoice_status__c)
        )
          coc.Invoice_status__c = '草案中';
        invoiceHead.Order_type__c = '发票';
        invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
        invoiceHead.Dealer_Info__c = accountid;
        invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
        invoiceHead.Invoice_status__c = '草案中';
        invoiceHead.Order_ProType__c = agencyProType;
        invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
        //if (deliveryId != null) {
        if (String.isNotBlank(deliveryId)) {
          invoiceHead.Outbound_order__c = deliveryId;
        }
        invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
        // if (SecondDealer == null) {
        if (String.isBlank(SecondDealer)) {
          if (HospitalInfo != null && HospitalInfo != '') {
            invoiceHead.Order_ForHospital__c = HospitalInfo;
          }
        } else {
          invoiceHead.Order_ForDealer__c = SecondDealer;
        }
        invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
        if (Test.isRunningTest()) {
          invoiceHead.Order_ForHospital__c = null;
        }
        insert invoiceHead;
        invoiceId = invoiceHead.Id;
        List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
        cocinfo = [
          SELECT
            Id,
            Name,
            Invoice_status__c,
            Invoice_Date__c,
            Order_ForDealerText__c,
            Dealer_Info__c,
            Order_ForDealer__c,
            Order_ForDealer__r.Name,
            Order_ForHospital__c,
            Order_date__c,
            Billed_Status__c,
            ShipmentAccount__c,
            Order_Dealer_Info__c,
            SummonsForDirction__c,
            Order_ForCustomerText__c,
            Invoice_Note__c,
            Invoice_attachment__c,
            Invoicedet_attachment__c,
            Outbound_order__c
          FROM Consumable_order__c
          WHERE Id = :invoiceId
        ];
        if (cocinfo.size() > 0) {
          invoiceHead = cocinfo[0];
        }
        if (!String.isBlank(deliveryId)) {
          for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
            chukudanID.add(ass.esd.Id);
            insertDetMap.put(ass.esd.Id, invoiceHead.Id);
          }
        } else {
          for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
            if (!String.isBlank(deliveryId)) {
              chukudanID.add(ass.esd.Id);
              insertDetMap.put(ass.esd.Id, invoiceHead.Id);
        // 新規
        if (invoiceId == null || invoiceId == '') {
            if (deliveryId == null || deliveryId == '') {
                String msoql = makeSoql();
                invoiceOrderList = Database.query(msoql);
                for (Integer i = 0; i < invoiceOrderList.size(); i++) {
                    invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
                }
            } else {
              if (ass.check == true) {
                chukudanID.add(ass.esd.Id);
                insertDetMap.put(ass.esd.Id, invoiceHead.Id);
              } else {
                //deleteDetMap.put(ass.esd.Id,invoiceHead.Id);
              }
                if (statusEdit == '' || statusEdit == null) {
                    EditAble = false;
                } else if (statusEdit != '' && statusEdit != null) {
                    EditAble = true;
                }
                coc = [
                    SELECT
                        Id,
                        Name,
                        Invoice_status__c,
                        Invoice_Date__c,
                        Order_ForDealerText__c,
                        Dealer_Info__c,
                        Order_ForDealer__c,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__c,
                        Order_ForHospital__r.Name,
                        Order_date__c,
                        Billed_Status__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        SummonsForDirction__c,
                        Order_ForCustomerText__c,
                        Invoice_Note__c,
                        Invoice_attachment__c,
                        Invoicedet_attachment__c,
                        Outbound_order__c
                    FROM Consumable_order__c
                    WHERE Id = :deliveryId
                ];
                coc.Name = '';
                if (coc.Order_ForDealer__c != null) {
                    SecondDealer = coc.Order_ForDealer__c;
                }
                if (coc.Order_ForHospital__c != null) {
                    HospitalInfo = coc.Order_ForHospital__c;
                    HospitalName = coc.Order_ForHospital__r.Name;
                }
                //发票关联出库单取得(出库单)
                invoiceOrderSelectedList = [
                    SELECT
                        Id,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__r.Name,
                        Order_ForDealerText__c,
                        Name,
                        Outbound_Date__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        SummonsForDirction__c,
                        Shipment_total_amount__c,
                        RrturnPro_total_amount__c,
                        Total_Invoiced_Procount__c,
                        InvoiceNotPro_total_amount__c,
                        InvoiceNotPro_money__c,
                        Invoice_total_amount__c,
                        Billed_Status__c
                    FROM Consumable_order__c
                    WHERE Id = :deliveryId
                    ORDER BY Name
                ];
                for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
                    invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                }
            }
          }
        }
        //新建发票明细1
        if (chukudanID.size() > 0) {
          newinvoicedetails1(chukudanID);
        }
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'deleteDetMap +++++' + deleteDetMap.size()));
        //return null;
        if (insertDetMap.size() > 0) {
          for (String field : insertDetMap.keySet()) {
            List<Consumable_order_LinkTable__c> existLinkinfo = [
              SELECT Id
              FROM Consumable_order_LinkTable__c
              WHERE
                Outboundorder_Code_link__c = :field
                AND Invoice_Code_link__c = :insertDetMap.get(field)
        } else {
            coc = [
                SELECT
                    Id,
                    Name,
                    Invoice_status__c,
                    Invoice_Date__c,
                    Order_ForDealerText__c,
                    Dealer_Info__c,
                    Order_ForDealer__c,
                    Order_ForDealer__r.Name,
                    Order_ForHospital__c,
                    Order_ForHospital__r.Name,
                    Order_date__c,
                    Billed_Status__c,
                    ShipmentAccount__c,
                    Order_Dealer_Info__c,
                    SummonsForDirction__c,
                    Order_ForCustomerText__c,
                    Invoice_Note__c,
                    Invoice_attachment__c,
                    Invoicedet_attachment__c,
                    Outbound_order__c
                FROM Consumable_order__c
                WHERE Id = :invoiceId AND Order_type__c = '发票'
            ];
            if (existLinkinfo.size() < 1) {
              Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
              invoiceLink.Name = field + insertDetMap.get(field);
              invoiceLink.Outboundorder_Code_link__c = field;
              invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
              invoiceLinkList.add(invoiceLink);
            if (coc.Order_ForDealer__c != null) {
                SecondDealer = coc.Order_ForDealer__c;
            }
          }
          upsert invoiceLinkList;
        }
      } else if (
        String.isNotBlank(reopen) &&
        reopen.equals('isreopen') &&
        String.isNotBlank(invoiceId)
      ) {
        System.debug('进入reopen');
        invoiceHead.Name = coc.Name;
        invoiceHead.Order_type__c = '发票';
        invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
        invoiceHead.Dealer_Info__c = accountid;
        invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
        invoiceHead.Invoice_status__c = '草案中';
        invoiceHead.Order_ProType__c = agencyProType;
        invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
        //if (deliveryId != null) {
        if (String.isNotBlank(deliveryId)) {
          invoiceHead.Outbound_order__c = deliveryId;
        }
        invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
        //if (SecondDealer == null) {
        if (String.isBlank(SecondDealer)) {
          if (HospitalInfo != null && HospitalInfo != '') {
            invoiceHead.Order_ForHospital__c = HospitalInfo;
          }
        } else {
          invoiceHead.Order_ForDealer__c = SecondDealer;
        }
        invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
        if (Test.isRunningTest()) {
          invoiceHead.Order_ForHospital__c = null;
        }
        insert invoiceHead;
        System.debug('invoiceHead = ' + invoiceHead);
        List<String> updateChukudanId = new List<String>();
        //获取原发票相关联的链接表信息
        List<Consumable_order_LinkTable__c> tLinkList = [
          SELECT Outboundorder_Code_link__c
          FROM Consumable_order_LinkTable__c
          WHERE Invoice_Code_link__c = :invoiceId
        ];
        for (Consumable_order_LinkTable__c colc : tLinkList) {
          colc.Invoice_Code_link__c = invoiceHead.Id;
          updateChukudanId.add(colc.Outboundorder_Code_link__c);
        }
        System.debug('tLinkList = ' + tLinkList);
        update tLinkList;
        //更新发票明细信息
        //获取出库单,设置关联关系
        //获取出库单明细信息,因为出库单信息和出库单明细信息是关联的,所有只需要回滚出库单明细信息即可
        Map<String, Consumable_Orderdetails__c> tempCocMap = new Map<String, Consumable_Orderdetails__c>();
        List<Consumable_Orderdetails__c> tempCountList = [
          SELECT
            Id,
            Consumable_order__c,
            Asset_Model_No__c,
            InvoicedProCost_RMB__c,
            Invoicedet1_OD_link__c,
            InvoicedProduct_RMB__c,
            Invoiced_Procount__c,
            Invoiced_BoxCount__c,
            Invoice_Unit__c
          FROM Consumable_Orderdetails__c
          WHERE Consumable_order__c = :invoiceId
        ];
        for (Consumable_Orderdetails__c cocTemp : tempCountList) {
          cocTemp.Consumable_order__c = invoiceHead.Id;
          tempCocMap.put(
            cocTemp.Invoicedet1_OD_link__c + cocTemp.Asset_Model_No__c,
            cocTemp
          );
        }
        System.debug('tempCountList = ' + tempCountList);
        update tempCountList;
        List<Consumable_Orderdetails__c> updateFromList = [
          SELECT
            Id,
            Consumable_order__c,
            RrturnPro_count__c,
            Delivery_List_RMB__c,
            InvoicedProCost_RMB__c,
            Invoiced_Procount__c,
            Invoice_Unitprice__c,
            Box_Piece__c,
            Invoice_Unit__c,
            Consumable_order__r.Invoice_total_amount__c,
            ProductPacking_list_manual__c,
            InvoicedProduct_RMB__c,
            Invoiced_BoxCount__c,
            Shipment_amount__c,
            Asset_Model_No__c
          FROM Consumable_Orderdetails__c
          WHERE Consumable_order__c IN :updateChukudanId
        ];
        for (Consumable_Orderdetails__c corderc : updateFromList) {
          String tempStr =
            corderc.Consumable_order__c + corderc.Asset_Model_No__c;
          if (tempCocMap.get(tempStr) != null) {
            //设置已发票金额 出库单的已发票金额 - 发票的发票金额
            corderc.InvoicedProCost_RMB__c =
              corderc.InvoicedProCost_RMB__c -
              tempCocMap.get(tempStr).InvoicedProduct_RMB__c;
            //设置已发票数量  出库单的已发票数量 - 发票的发票数量(盒)
            corderc.Invoiced_Procount__c =
              corderc.Invoiced_Procount__c -
              tempCocMap.get(tempStr).Invoiced_BoxCount__c;
            //设置发票单价
            if (
              corderc.Box_Piece__c == '盒' &&
              corderc.Invoice_Unit__c == '个'
            ) {
              corderc.Invoice_Unitprice__c =
                corderc.Delivery_List_RMB__c /
                corderc.ProductPacking_list_manual__c;
            } else {
              corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c;
            if (coc.Order_ForHospital__c != null) {
                HospitalInfo = coc.Order_ForHospital__c;
                HospitalName = coc.Order_ForHospital__r.Name;
            }
          }
        }
        Consumable_order__c tempcoc = new Consumable_order__c();
        tempcoc.Id = invoiceId;
        System.debug('tempcoc = ' + tempcoc);
        delete tempcoc;
        invoiceId = invoiceHead.Id;
        System.debug('updateFromList = ' + updateFromList);
        update updateFromList;
        //--------------------------------------------------------------------------
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
          if (ass.check == true) {
            insertDetMap.put(ass.esd.Id, invoiceHead.Id);
          } else {
            outOrderIdList.add(ass.esd.Id);
            deleteDetMap.put(ass.esd.Id, invoiceHead.Id);
          }
        }
        if (outOrderIdList.size() > 0) {
          getdefaultMapinfo(outOrderIdList);
        }
        //被选中的出库单集合
        if (insertDetMap.size() > 0) {
          List<Consumable_order_LinkTable__c> existLinkinfo = [
            SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c
            FROM Consumable_order_LinkTable__c
            WHERE
              Outboundorder_Code_link__c IN :insertDetMap.keySet()
              AND Invoice_Code_link__c = :invoiceHead.Id
          ];
          //存在没有与发票建立关联关系的出库单
          List<String> templist2 = new List<String>();
          for (Consumable_order_LinkTable__c colc : existLinkinfo) {
            templist2.add(colc.Outboundorder_Code_link__c);
          }
          //获取该出库单
          for (String field : insertDetMap.keySet()) {
            if (!templist2.contains(field)) {
              //该出库单不存在与链接表中,新建链接
              chukudanID.add(field);
              Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
              invoiceLink.Name = field + insertDetMap.get(field);
              invoiceLink.Outboundorder_Code_link__c = field;
              invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
              invoiceLinkList.add(invoiceLink);
            }
          }
          System.debug('invoiceLinkList = ' + invoiceLinkList);
          upsert invoiceLinkList;
        }
        //删除出库单链接表
        if (deleteDetMap.size() > 0) {
          List<Consumable_order_LinkTable__c> invoiceLinkdetList = new List<Consumable_order_LinkTable__c>();
          deleteOutboundorder(deleteDetMap, invoiceHead.Id);
          List<Consumable_order_LinkTable__c> existLinkinfo = [
            SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c
            FROM Consumable_order_LinkTable__c
            WHERE
              Outboundorder_Code_link__c IN :deleteDetMap.keySet()
              AND Invoice_Code_link__c = :invoiceHead.Id
          ];
          for (Consumable_order_LinkTable__c colctemp : existLinkinfo) {
            if (
              deleteDetMap.get(colctemp.Outboundorder_Code_link__c) ==
              colctemp.Invoice_Code_link__c
            ) {
              //存在与该发票关联的出库单
              invoiceLinkdetList.add(colctemp);
            }
          }
          System.debug('invoiceLinkdetList = ' + invoiceLinkdetList);
          delete invoiceLinkdetList;
        }
        //新建发票明细1
        System.debug('===>' + chukudanID);
        System.debug('===>' + chukudanID.size());
        if (chukudanID.size() > 0) {
          newinvoicedetails1(chukudanID);
        }
      } else {
        //CHAN-BSS5SQ    update by rentongxiao 2020-09-04   end
        //编辑后保存
        List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
        cocinfo = [
          SELECT
            Id,
            Name,
            Invoice_status__c,
            Invoice_Date__c,
            Order_ForDealerText__c,
            Dealer_Info__c,
            Order_ForDealer__c,
            Order_ForDealer__r.Name,
            Order_ForHospital__c,
            Order_date__c,
            Billed_Status__c,
            ShipmentAccount__c,
            Order_Dealer_Info__c,
            SummonsForDirction__c,
            Order_ForCustomerText__c,
            Invoice_Note__c,
            Invoice_attachment__c,
            Invoicedet_attachment__c,
            Outbound_order__c
          FROM Consumable_order__c
          WHERE Id = :invoiceId
        ];
        if (cocinfo.size() > 0) {
          invoiceHead = cocinfo[0];
        }
        if (String.isNotBlank(deliveryId)) {
          for (InvoiceOrderInfo ass : invoiceOrderRecoedschange) {
            insertDetMap.put(ass.esd.Id, invoiceHead.Id);
          }
          //换货单产品数量
          Map<String, Decimal> needchangeOrderProcountMap = new Map<String, Decimal>();
          Map<String, Decimal> returnProcountMap = new Map<String, Decimal>();
          Map<String, Decimal> changeOrderProcountMap = new Map<String, Decimal>();
          List<Consumable_Orderdetails__c> detaliFromList = [
            SELECT
              Id,
              Name,
              Consumable_order__c,
              Asset_Model_No__c,
              Shipment_Count__c,
              RrturnPro_count__c,
              Delivery_List_RMB__c,
              InvoicedProCost_RMB__c,
              Invoiced_Procount__c,
              Invoiced_Count__c,
              Invoice_Unitprice__c,
              InvoiceProNot_count__c,
              Invoice_Unit__c,
              Box_Piece__c,
              Invoice_Cost_RMB__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c = :deliveryId
          ];
          for (Consumable_Orderdetails__c changeOD : detaliFromList) {
            needchangeOrderProcountMap.put(
              changeOD.Asset_Model_No__c,
              changeOD.Shipment_Count__c
            );
          }
          //发票返品信息
          List<Consumable_Orderdetails__c> returnCountList = [
            SELECT
              Id,
              Name,
              Consumable_order__c,
              Asset_Model_No__c,
              Shipment_Count__c,
              RrturnPro_count__c,
              Delivery_List_RMB__c,
              InvoicedProCost_RMB__c,
              Invoiced_Procount__c,
              Invoiced_Count__c,
              Invoice_Unitprice__c,
              InvoiceProNot_count__c,
              Invoice_Cost_RMB__c,
              Invoice_Unit__c,
              Box_Piece__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c = :invoiceId
          ];
          for (Consumable_Orderdetails__c changeOD : returnCountList) {
            if (changeOD.RrturnPro_count__c > 0) {
              if (returnProcountMap.containsKey(changeOD.Asset_Model_No__c)) {
                returnProcountMap.put(
                  changeOD.Asset_Model_No__c,
                  returnProcountMap.get(changeOD.Asset_Model_No__c) +
                  changeOD.RrturnPro_count__c
                );
              } else {
                returnProcountMap.put(
                  changeOD.Asset_Model_No__c,
                  changeOD.RrturnPro_count__c
                );
              }
            }
          }
          //已换货单出库数量信息
          List<Consumable_Orderdetails__c> returnCount1List = [
            SELECT
              Id,
              Name,
              Consumable_order__c,
              Asset_Model_No__c,
              Shipment_Count__c,
              RrturnPro_count__c,
              Delivery_List_RMB__c,
              InvoicedProCost_RMB__c,
              Invoiced_Procount__c,
              Invoiced_Count__c,
              Invoice_Unitprice__c,
              InvoiceProNot_count__c,
              Invoice_Cost_RMB__c,
              Invoice_Unit__c,
              Box_Piece__c
            FROM Consumable_Orderdetails__c
            WHERE
              Consumable_order__c IN (
            //到链接表中查找关联出库单
            List<Consumable_order_LinkTable__c> outOrderList = [
                SELECT Outboundorder_Code_link__c
                FROM Consumable_order_LinkTable__c
                WHERE Invoice_Code_link__c = :invoiceId
              )
              AND Consumable_order__r.Onchange_order__c = TRUE
              AND Consumable_order__c != :deliveryId
          ];
          for (Consumable_Orderdetails__c changeOD : returnCount1List) {
            changeOrderProcountMap.put(
              changeOD.Asset_Model_No__c,
              changeOD.Shipment_Count__c
            );
          }
          outOrderchange(insertDetMap);
        } else {
          invoiceHead.Name = coc.Name;
          invoiceHead.Invoice_status__c = coc.Invoice_status__c;
          invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
          invoiceHead.Dealer_Info__c = accountid;
          invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
          invoiceHead.Invoice_status__c = '草案中';
          invoiceHead.Order_ProType__c = agencyProType;
          invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalName +++++'   + HospitalName));
          //return null;
          if (HospitalName != null && HospitalName != '') {
            if (HospitalInfo != null && HospitalInfo != '') {
              invoiceHead.Order_ForHospital__c = HospitalInfo;
            }
          } else {
            invoiceHead.Order_ForHospital__c = null;
          }
          invoiceHead.Order_ForDealer__c = SecondDealer == ''
            ? null
            : SecondDealer;
          invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
          update invoiceHead;
          for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
            if (ass.check == true) {
              insertDetMap.put(ass.esd.Id, invoiceHead.Id);
            } else {
              outOrderIdList.add(ass.esd.Id);
              deleteDetMap.put(ass.esd.Id, invoiceHead.Id);
            }
          }
          if (outOrderIdList.size() > 0) {
            getdefaultMapinfo(outOrderIdList);
          }
          //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  start
          //被选中的出库单集合
          if (insertDetMap.size() > 0) {
            List<Consumable_order_LinkTable__c> existLinkinfo = [
              SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c
              FROM Consumable_order_LinkTable__c
              WHERE
                Outboundorder_Code_link__c IN :insertDetMap.keySet()
                AND Invoice_Code_link__c = :invoiceHead.Id
            ];
            //存在没有与发票建立关联关系的出库单
            List<String> templist2 = new List<String>();
            for (Consumable_order_LinkTable__c colc : existLinkinfo) {
              templist2.add(colc.Outboundorder_Code_link__c);
            for (Integer i = 0; i < outOrderList.size(); i++) {
                outOrderStringList.add(outOrderList[i].Outboundorder_Code_link__c);
            }
            //获取该出库单
            //取得出库单信息
            invoiceOrderSelectedList = [
                SELECT
                    Id,
                    Order_ForDealer__r.Name,
                    Order_ForHospital__r.Name,
                    Order_ForDealerText__c,
                    Name,
                    Outbound_Date__c,
                    ShipmentAccount__c,
                    Shipment_total_amount__c,
                    RrturnPro_total_amount__c,
                    Total_Invoiced_Procount__c,
                    InvoiceNotPro_total_amount__c,
                    InvoiceNotPro_money__c,
                    Invoice_total_amount__c,
                    Billed_Status__c
                FROM Consumable_order__c
                WHERE Id IN :outOrderStringList AND Order_Owner_WorkLocal__c = :userWorkLocation
                ORDER BY Name
            ];
            for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
                outorderMoneytMap.put(invoiceOrderSelectedList[i].id, 0);
                invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
            }
            if (String.isNotBlank(deliveryId)) {
                //发票关联出库单取得(出库单)
                isChange = true;
                invoiceOrderSelectedList = [
                    SELECT
                        Id,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__r.Name,
                        Order_ForDealerText__c,
                        Name,
                        Outbound_Date__c,
                        ShipmentAccount__c,
                        Shipment_total_amount__c,
                        RrturnPro_total_amount__c,
                        Total_Invoiced_Procount__c,
                        InvoiceNotPro_total_amount__c,
                        InvoiceNotPro_money__c,
                        Invoice_total_amount__c,
                        Billed_Status__c
                    FROM Consumable_order__c
                    WHERE Id = :deliveryId AND Order_Owner_WorkLocal__c = :userWorkLocation
                    ORDER BY Name
                ];
                for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) {
                    if (!outorderMoneytMap.containsKey(invoiceOrderSelectedList[i].Id)) {
                        invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                        invoiceOrderRecoedschange.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                    }
                }
            }
            //发票明细一览
            List<Consumable_Orderdetails__c> countDel = [
                SELECT
                    Id,
                    Consumable_ZS_order__c,
                    Name,
                    Consumable_order__c,
                    Invoicedet1_OD_link__c,
                    Invoicedet1_OD_link__r.Name,
                    Consumable_order__r.Name,
                    Product_OutDate__c,
                    Asset_Model_No__c,
                    Invoice_Unitprice__c,
                    Delivery_List_RMB__c,
                    Invoiced_Procount__c,
                    Invoiced_Count__c,
                    InvoicedProCost_RMB__c,
                    Box_Piece__c,
                    Invoice_Unit__c,
                    ProductPacking_list_manual__c
                FROM Consumable_Orderdetails__c
                WHERE Consumable_order__c = :invoiceId
                ORDER BY Invoicedet1_OD_link__c
            ];
            if (countDel.size() > 0) {
                for (Integer i = 0; i < countDel.size(); i++) {
                    outordercountMap.put(countDel[i].Invoicedet1_OD_link__c + countDel[i].Asset_Model_No__c, countDel[i]);
                    if (outorderMoneytMap.containsKey(countDel[i].Invoicedet1_OD_link__c)) {
                        outorderMoneytMap.put(
                            countDel[i].Invoicedet1_OD_link__c,
                            outorderMoneytMap.get(countDel[i].Invoicedet1_OD_link__c) + countDel[i].InvoicedProCost_RMB__c
                        );
                    }
                    invoiceOrderdetail1Recoeds.add(new InvoiceOrderInfo(countDel[i]));
                }
            }
            for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
                if (outorderMoneytMap.containsKey(ass.esd.id)) {
                    ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id);
                }
                ass.check = true;
            }
        }
        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__r.Name == SecondDealer) {
                    provinceOpts.add(new SelectOption(Dealerelationship[i].Dealer_subordinate__c, SecondDealer));
                    provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, SecondDealer);
                }
            }
            for (Integer i = 0; i < Dealerelationship.size(); i++) {
                if (Dealerelationship[i].Dealer_subordinate__r.Name != 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);
                }
            }
        }
        Map<String, String> consumableaccessoriesMap = new Map<String, String>();
        Map<String, String> invorceOrderIdMap = new Map<String, String>();
        List<Consumable_accessories_invoice__c> consumableaccessories = [
            SELECT Id, Name, Attachment_ID__c, Accessories_type__c
            FROM Consumable_accessories_invoice__c
            WHERE Invoice_code__c = :invoiceId
        ];
        System.debug('consumableaccessories = ' + consumableaccessories);
        if (consumableaccessories.size() > 0) {
            for (Integer i = 0; i < consumableaccessories.size(); i++) {
                consumableaccessoriesMap.put(consumableaccessories[i].Attachment_ID__c, consumableaccessories[i].Accessories_type__c);
                invorceOrderIdMap.put(consumableaccessories[i].Attachment_ID__c, consumableaccessories[i].Id);
            }
        }
        //List<Attachment> attachmentinfo = [SELECT Id, Name, OwnerId,Owner.Name, CreatedDate FROM Attachment WHERE parentid = :invoiceId];
        // if (attachmentinfo.size() > 0) {
        //     for (Integer i = 0; i < attachmentinfo.size(); i++) {
        //         attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[i]));
        //     }
        // }
        List<ContentDocumentLink> links = [SELECT Id, ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :invoiceId];
        if (links != null && links.size() > 0) {
            List<String> documentIds = new List<String>();
            for (ContentDocumentLink link : links) {
                documentIds.add(link.ContentDocumentId);
            }
            List<ContentVersion> cvInfo = [
                SELECT Id, Title, OwnerId, Owner.Name, CreatedDate, ContentDocumentId
                FROM ContentVersion
                WHERE ContentDocumentId IN :documentIds
            ];
            if (cvInfo.size() > 0) {
                for (Integer i = 0; i < cvInfo.size(); i++) {
                    attachmentRecoeds.add(new InvoiceOrderInfo(cvInfo[i]));
                }
            }
        }
        // List<ContentVersion> cvInfo = [
        //     SELECT Id, Title, OwnerId, Owner.Name, CreatedDate, ContentDocumentId
        //     FROM ContentVersion
        //     WHERE FirstPublishLocationId = :invoiceId
        // ];
        // if (cvInfo.size() > 0) {
        //     for (Integer i = 0; i < cvInfo.size(); i++) {
        //         attachmentRecoeds.add(new InvoiceOrderInfo(cvInfo[i]));
        //     }
        // }
        System.debug('attachmentRecoeds = ' + attachmentRecoeds);
        System.debug('consumableaccessoriesMap = ' + consumableaccessoriesMap);
        for (InvoiceOrderInfo ass : attachmentRecoeds) {
            if (consumableaccessoriesMap.containsKey(ass.cvInfo.Id)) {
                ass.mailSelectOptsin = consumableaccessoriesMap.get(ass.cvInfo.Id);
                ass.invoiceOrderId = invorceOrderIdMap.get(ass.cvInfo.Id);
            }
        }
        data.put('EditAble', EditAble);
        data.put('isChange', isChange);
        data.put('coc', coc);
        data.put('ExistOutbound', getExistOutbound());
        data.put('invoiceOrderRecoeds', invoiceOrderRecoeds);
        data.put('provinceOptsMap', provinceOptsMap);
        data.put('HospitalName', HospitalName);
        data.put('HospitalInfo', HospitalInfo);
        data.put('agencyProType', agencyProType);
        data.put('userWorkLocation', userWorkLocation);
        data.put('done', getdone());
        data.put('invoiceOrderdetail1Recoeds', invoiceOrderdetail1Recoeds);
        data.put('accountid', accountid);
        data.put('invoiceOrderRecoedschange', invoiceOrderRecoedschange);
        data.put('attachmentRecoeds', attachmentRecoeds);
        data.put('outOrderStringList', outOrderStringList);
        data.put('outordercountMap', outordercountMap);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    //保存
    @AuraEnabled
    public static ResponseBodyLWC save(
        Consumable_order__c cocLwc,
        String HospitalNameLwc,
        String HospitalInfoLwc,
        String SecondDealerLwc,
        String invoiceOrderRecoedsLwc,
        String deliveryIdLwc,
        String invoiceIdLwc,
        String accountidLwc,
        String agencyProTypeLwc,
        String reopenLwc,
        String invoiceOrderRecoedschangeLwc
    ) {
        System.debug('enter LexConInvoiceViewController.save success');
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        coc = cocLwc;
        HospitalName = HospitalNameLwc;
        HospitalInfo = HospitalInfoLwc;
        System.debug('HospitalInfo = ' + HospitalInfo);
        SecondDealer = SecondDealerLwc;
        errorMsg = '';
        deliveryId = deliveryIdLwc;
        invoiceOrderRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(invoiceOrderRecoedsLwc, List<InvoiceOrderInfo>.class);
        invoiceId = invoiceIdLwc;
        accountid = accountidLwc;
        agencyProType = agencyProTypeLwc;
        reopen = reopenLwc;
        invoiceOrderRecoedschange = (List<InvoiceOrderInfo>) JSON.deserialize(invoiceOrderRecoedschangeLwc, List<InvoiceOrderInfo>.class);
        List<String> chukudanID = new List<String>();
        if (coc.Name == '' || coc.Name == null) {
            // coc.Name.addError('请录入发票号');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请录入发票号', '');
        }
        if (coc.Invoice_Date__c == null) {
            // coc.Invoice_Date__c.addError('请录入发票日期');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请录入发票日期', '');
        }
        if (String.isBlank(HospitalInfo) && String.isBlank(SecondDealer)) {
            // coc.addError('必须输入客户名或者二级经销商');
            // return null;
            return new ResponseBodyLWC('Error', 500, '必须输入客户名或者二级经销商', '');
        }
        if (HospitalInfo != null && HospitalInfo != '' && String.isNotEmpty(SecondDealer)) {
            //coc.addError('请输入客户名、二级经销商只可输入一个');
            errorMsg += '请输入客户名、二级经销商只可输入一个';
        }
        if (HospitalInfo != null && HospitalInfo != '') {
            if (coc.Order_ForCustomerText__c == null) {
                // coc.Order_ForCustomerText__c.addError('请输入科室');
                // return null;
                return new ResponseBodyLWC('Error', 500, '请输入科室', '');
            }
        } else {
            if (coc.Order_ForCustomerText__c != null) {
                // coc.Order_ForCustomerText__c.addError('不需要输入科室');
                // return null;
                return new ResponseBodyLWC('Error', 500, '不需要输入科室', '');
            }
        }
        String shipmentAccountString = '';
        if (HospitalInfo != null) {
            shipmentAccountString = HospitalInfo;
        } else if (String.isNotEmpty(SecondDealer)) {
            shipmentAccountString = SecondDealer;
        } else {
            shipmentAccountString = coc.Order_ForDealerText__c == null ? '' : coc.Order_ForDealerText__c;
        }
        Integer x = 0;
        List<String> invoiceOrderAccountList = new List<String>();
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
            if (String.isBlank(deliveryId)) {
                if (ass.check == true) {
                    x++;
                    System.debug(shipmentAccountString);
                    if (HospitalInfo != null && HospitalInfo != '') {
                        if (ass.esd.Order_ForHospital__c != shipmentAccountString) {
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                    if (String.isNotEmpty(SecondDealer)) {
                        if (
                            ass.esd.Order_ForDealer__c != shipmentAccountString &&
                            ass.esd.Order_ForDealerText__c != shipmentAccountString
                        ) {
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                    if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) {
                        if (
                            (ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') &&
                            ass.esd.ShipmentAccount__c != shipmentAccountString
                        ) {
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                }
            } else {
                if (HospitalInfo != null && HospitalInfo != '') {
                    System.debug('++++++++++++' + ass.esd.Order_ForHospital__c + '   ' + shipmentAccountString);
                    if (ass.esd.Order_ForHospital__c != shipmentAccountString) {
                        System.debug('HospitalInfo != null ass.esd.Order_ForHospital__c != shipmentAccountString');
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
                //if (String.isNotEmpty(SecondDealer)) {
                if (String.isNotEmpty(SecondDealer)) {
                    if (ass.esd.Order_ForDealer__c != shipmentAccountString) {
                        System.debug('String.isNotEmpty(SecondDealer) ass.esd.Order_ForHospital__c != shipmentAccountString');
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
                if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) {
                    if (
                        (ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') &&
                        ass.esd.ShipmentAccount__c != shipmentAccountString
                    ) {
                        System.debug(
                            'HospitalInfo == null && ass.esd.Order_ForDealerText__c != null ass.esd.ShipmentAccount__c != shipmentAccountString'
                        );
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
            }
        }
        // invoiceOrderAccountList.add('12345');
        if (invoiceOrderAccountList.size() > 0) {
            orderRemind = invoiceOrderAccountList + '出库单客户名与发票客户名不一致!';
            // coc.addError(invoiceOrderAccountList + '出库单客户名与发票客户名不一致!');
            // return null;
            return new ResponseBodyLWC('Error', 500, invoiceOrderAccountList + '出库单客户名与发票客户名不一致!', '');
        } else {
            orderRemind = '';
        }
        if (String.isBlank(deliveryId)) {
            if (x < 1) {
                // coc.addError('请选择需要开发票的出库单!');
                // return null;
                return new ResponseBodyLWC('Error', 500, '请选择需要开发票的出库单!', '');
            }
        }
        Consumable_order__c invoiceHead = new Consumable_order__c();
        List<String> outOrderIdList = new List<String>();
        List<Consumable_order_LinkTable__c> invoiceLinkList = new List<Consumable_order_LinkTable__c>();
        Map<String, String> insertDetMap = new Map<String, String>();
        Map<String, String> deleteDetMap = new Map<String, String>();
        //新建发票时
        Savepoint sp = Database.setSavepoint();
        try {
            if (String.isBlank(invoiceId)) {
                invoiceHead.Name = coc.Name;
                if (coc.Invoice_status__c == null || String.isBlank(coc.Invoice_status__c))
                    coc.Invoice_status__c = '草案中';
                invoiceHead.Order_type__c = '发票';
                invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                invoiceHead.Dealer_Info__c = accountid;
                invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                invoiceHead.Invoice_status__c = '草案中';
                invoiceHead.Order_ProType__c = agencyProType;
                invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                //if (deliveryId != null) {
                if (String.isNotBlank(deliveryId)) {
                    invoiceHead.Outbound_order__c = deliveryId;
                }
                invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
                // if (SecondDealer == null) {
                if (String.isBlank(SecondDealer)) {
                    if (HospitalInfo != null && HospitalInfo != '') {
                        invoiceHead.Order_ForHospital__c = HospitalInfo;
                    }
                } else {
                    invoiceHead.Order_ForDealer__c = SecondDealer;
                }
                invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                if(Test.isRunningTest()){
                    invoiceHead.Order_ForHospital__c  = null;
                }
                insert invoiceHead;
                invoiceId = invoiceHead.Id;
                List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
                cocinfo = [
                    SELECT
                        Id,
                        Name,
                        Invoice_status__c,
                        Invoice_Date__c,
                        Order_ForDealerText__c,
                        Dealer_Info__c,
                        Order_ForDealer__c,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__c,
                        Order_date__c,
                        Billed_Status__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        SummonsForDirction__c,
                        Order_ForCustomerText__c,
                        Invoice_Note__c,
                        Invoice_attachment__c,
                        Invoicedet_attachment__c,
                        Outbound_order__c
                    FROM Consumable_order__c
                    WHERE Id = :invoiceId
                ];
                if (cocinfo.size() > 0) {
                    invoiceHead = cocinfo[0];
                }
                if (!String.isBlank(deliveryId)) {
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
                        chukudanID.add(ass.esd.Id);
                        insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                    }
                } else {
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
                        if (!String.isBlank(deliveryId)) {
                            chukudanID.add(ass.esd.Id);
                            insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                        } else {
                            if (ass.check == true) {
                                chukudanID.add(ass.esd.Id);
                                insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                            } else {
                                //deleteDetMap.put(ass.esd.Id,invoiceHead.Id);
                            }
                        }
                    }
                }
                //新建发票明细1
                if (chukudanID.size() > 0) {
                    newinvoicedetails1(chukudanID);
                }
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'deleteDetMap +++++' + deleteDetMap.size()));
                //return null;
                if (insertDetMap.size() > 0) {
                    for (String field : insertDetMap.keySet()) {
                        List<Consumable_order_LinkTable__c> existLinkinfo = [
                            SELECT Id
                            FROM Consumable_order_LinkTable__c
                            WHERE Outboundorder_Code_link__c = :field AND Invoice_Code_link__c = :insertDetMap.get(field)
                        ];
                        if (existLinkinfo.size() < 1) {
                            Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                            invoiceLink.Name = field + insertDetMap.get(field);
                            invoiceLink.Outboundorder_Code_link__c = field;
                            invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                            invoiceLinkList.add(invoiceLink);
                        }
                    }
                    upsert invoiceLinkList;
                }
            } else if (String.isNotBlank(reopen) && reopen.equals('isreopen') && String.isNotBlank(invoiceId)) {
                System.debug('进入reopen');
                invoiceHead.Name = coc.Name;
                invoiceHead.Order_type__c = '发票';
                invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                invoiceHead.Dealer_Info__c = accountid;
                invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                invoiceHead.Invoice_status__c = '草案中';
                invoiceHead.Order_ProType__c = agencyProType;
                invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                //if (deliveryId != null) {
                if (String.isNotBlank(deliveryId)) {
                    invoiceHead.Outbound_order__c = deliveryId;
                }
                invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
                //if (SecondDealer == null) {
                if (String.isBlank(SecondDealer)) {
                    if (HospitalInfo != null && HospitalInfo != '') {
                        invoiceHead.Order_ForHospital__c = HospitalInfo;
                    }
                } else {
                    invoiceHead.Order_ForDealer__c = SecondDealer;
                }
                invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                if(Test.isRunningTest()){
                    invoiceHead.Order_ForHospital__c  = null;
                }
                insert invoiceHead;
                System.debug('invoiceHead = ' + invoiceHead);
                List<String> updateChukudanId = new List<String>();
                //获取原发票相关联的链接表信息
                List<Consumable_order_LinkTable__c> tLinkList = [
                    SELECT Outboundorder_Code_link__c
                    FROM Consumable_order_LinkTable__c
                    WHERE Invoice_Code_link__c = :invoiceId
                ];
                for (Consumable_order_LinkTable__c colc : tLinkList) {
                    colc.Invoice_Code_link__c = invoiceHead.Id;
                    updateChukudanId.add(colc.Outboundorder_Code_link__c);
                }
                System.debug('tLinkList = ' + tLinkList);
                update tLinkList;
                //更新发票明细信息
                //获取出库单,设置关联关系
                //获取出库单明细信息,因为出库单信息和出库单明细信息是关联的,所有只需要回滚出库单明细信息即可
                Map<String, Consumable_Orderdetails__c> tempCocMap = new Map<String, Consumable_Orderdetails__c>();
                List<Consumable_Orderdetails__c> tempCountList = [
                    SELECT
                        Id,
                        Consumable_order__c,
                        Asset_Model_No__c,
                        InvoicedProCost_RMB__c,
                        Invoicedet1_OD_link__c,
                        InvoicedProduct_RMB__c,
                        Invoiced_Procount__c,
                        Invoiced_BoxCount__c,
                        Invoice_Unit__c
                    FROM Consumable_Orderdetails__c
                    WHERE Consumable_order__c = :invoiceId
                ];
                for (Consumable_Orderdetails__c cocTemp : tempCountList) {
                    cocTemp.Consumable_order__c = invoiceHead.Id;
                    tempCocMap.put(cocTemp.Invoicedet1_OD_link__c + cocTemp.Asset_Model_No__c, cocTemp);
                }
                System.debug('tempCountList = ' + tempCountList);
                update tempCountList;
                List<Consumable_Orderdetails__c> updateFromList = [
                    SELECT
                        Id,
                        Consumable_order__c,
                        RrturnPro_count__c,
                        Delivery_List_RMB__c,
                        InvoicedProCost_RMB__c,
                        Invoiced_Procount__c,
                        Invoice_Unitprice__c,
                        Box_Piece__c,
                        Invoice_Unit__c,
                        Consumable_order__r.Invoice_total_amount__c,
                        ProductPacking_list_manual__c,
                        InvoicedProduct_RMB__c,
                        Invoiced_BoxCount__c,
                        Shipment_amount__c,
                        Asset_Model_No__c
                    FROM Consumable_Orderdetails__c
                    WHERE Consumable_order__c IN :updateChukudanId
                ];
                for (Consumable_Orderdetails__c corderc : updateFromList) {
                    String tempStr = corderc.Consumable_order__c + corderc.Asset_Model_No__c;
                    if (tempCocMap.get(tempStr) != null) {
                        //设置已发票金额 出库单的已发票金额 - 发票的发票金额
                        corderc.InvoicedProCost_RMB__c = corderc.InvoicedProCost_RMB__c - tempCocMap.get(tempStr).InvoicedProduct_RMB__c;
                        //设置已发票数量  出库单的已发票数量 - 发票的发票数量(盒)
                        corderc.Invoiced_Procount__c = corderc.Invoiced_Procount__c - tempCocMap.get(tempStr).Invoiced_BoxCount__c;
                        //设置发票单价
                        if (corderc.Box_Piece__c == '盒' && corderc.Invoice_Unit__c == '个') {
                            corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c / corderc.ProductPacking_list_manual__c;
                        } else {
                            corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c;
                        }
                    }
                }
                Consumable_order__c tempcoc = new Consumable_order__c();
                tempcoc.Id = invoiceId;
                System.debug('tempcoc = ' + tempcoc);
                delete tempcoc;
                invoiceId = invoiceHead.Id;
                System.debug('updateFromList = ' + updateFromList);
                update updateFromList;
                //--------------------------------------------------------------------------
                for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
                    if (ass.check == true) {
                        insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                    } else {
                        outOrderIdList.add(ass.esd.Id);
                        deleteDetMap.put(ass.esd.Id, invoiceHead.Id);
                    }
                }
                if (outOrderIdList.size() > 0) {
                    getdefaultMapinfo(outOrderIdList);
                }
                //被选中的出库单集合
                if (insertDetMap.size() > 0) {
                    List<Consumable_order_LinkTable__c> existLinkinfo = [
                        SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c
                        FROM Consumable_order_LinkTable__c
                        WHERE Outboundorder_Code_link__c IN :insertDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id
                    ];
                    //存在没有与发票建立关联关系的出库单
                    List<String> templist2 = new List<String>();
                    for (Consumable_order_LinkTable__c colc : existLinkinfo) {
                        templist2.add(colc.Outboundorder_Code_link__c);
                    }
                    //获取该出库单
                    for (String field : insertDetMap.keySet()) {
                        if (!templist2.contains(field)) {
                            //该出库单不存在与链接表中,新建链接
                            chukudanID.add(field);
                            Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                            invoiceLink.Name = field + insertDetMap.get(field);
                            invoiceLink.Outboundorder_Code_link__c = field;
                            invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                            invoiceLinkList.add(invoiceLink);
                        }
                    }
                    System.debug('invoiceLinkList = ' + invoiceLinkList);
                    upsert invoiceLinkList;
                }
                //删除出库单链接表
                if (deleteDetMap.size() > 0) {
                    List<Consumable_order_LinkTable__c> invoiceLinkdetList = new List<Consumable_order_LinkTable__c>();
                    deleteOutboundorder(deleteDetMap, invoiceHead.Id);
                    List<Consumable_order_LinkTable__c> existLinkinfo = [
                        SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c
                        FROM Consumable_order_LinkTable__c
                        WHERE Outboundorder_Code_link__c IN :deleteDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id
                    ];
                    for (Consumable_order_LinkTable__c colctemp : existLinkinfo) {
                        if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) {
                            //存在与该发票关联的出库单
                            invoiceLinkdetList.add(colctemp);
                        }
                    }
                    System.debug('invoiceLinkdetList = ' + invoiceLinkdetList);
                    delete invoiceLinkdetList;
                }
                //新建发票明细1
                System.debug('===>' + chukudanID);
                System.debug('===>' + chukudanID.size());
                if (chukudanID.size() > 0) {
                    newinvoicedetails1(chukudanID);
                }
            } else {
                //CHAN-BSS5SQ    update by rentongxiao 2020-09-04   end
                //编辑后保存
                List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
                cocinfo = [
                    SELECT
                        Id,
                        Name,
                        Invoice_status__c,
                        Invoice_Date__c,
                        Order_ForDealerText__c,
                        Dealer_Info__c,
                        Order_ForDealer__c,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__c,
                        Order_date__c,
                        Billed_Status__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        SummonsForDirction__c,
                        Order_ForCustomerText__c,
                        Invoice_Note__c,
                        Invoice_attachment__c,
                        Invoicedet_attachment__c,
                        Outbound_order__c
                    FROM Consumable_order__c
                    WHERE Id = :invoiceId
                ];
                if (cocinfo.size() > 0) {
                    invoiceHead = cocinfo[0];
                }
                if (String.isNotBlank(deliveryId)) {
                    for (InvoiceOrderInfo ass : invoiceOrderRecoedschange) {
                        insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                    }
                    //换货单产品数量
                    Map<String, Decimal> needchangeOrderProcountMap = new Map<String, Decimal>();
                    Map<String, Decimal> returnProcountMap = new Map<String, Decimal>();
                    Map<String, Decimal> changeOrderProcountMap = new Map<String, Decimal>();
                    List<Consumable_Orderdetails__c> detaliFromList = [
                        SELECT
                            Id,
                            Name,
                            Consumable_order__c,
                            Asset_Model_No__c,
                            Shipment_Count__c,
                            RrturnPro_count__c,
                            Delivery_List_RMB__c,
                            InvoicedProCost_RMB__c,
                            Invoiced_Procount__c,
                            Invoiced_Count__c,
                            Invoice_Unitprice__c,
                            InvoiceProNot_count__c,
                            Invoice_Unit__c,
                            Box_Piece__c,
                            Invoice_Cost_RMB__c
                        FROM Consumable_Orderdetails__c
                        WHERE Consumable_order__c = :deliveryId
                    ];
                    for (Consumable_Orderdetails__c changeOD : detaliFromList) {
                        needchangeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c);
                    }
                    //发票返品信息
                    List<Consumable_Orderdetails__c> returnCountList = [
                        SELECT
                            Id,
                            Name,
                            Consumable_order__c,
                            Asset_Model_No__c,
                            Shipment_Count__c,
                            RrturnPro_count__c,
                            Delivery_List_RMB__c,
                            InvoicedProCost_RMB__c,
                            Invoiced_Procount__c,
                            Invoiced_Count__c,
                            Invoice_Unitprice__c,
                            InvoiceProNot_count__c,
                            Invoice_Cost_RMB__c,
                            Invoice_Unit__c,
                            Box_Piece__c
                        FROM Consumable_Orderdetails__c
                        WHERE Consumable_order__c = :invoiceId
                    ];
                    for (Consumable_Orderdetails__c changeOD : returnCountList) {
                        if (changeOD.RrturnPro_count__c > 0) {
                            if (returnProcountMap.containsKey(changeOD.Asset_Model_No__c)) {
                                returnProcountMap.put(
                                    changeOD.Asset_Model_No__c,
                                    returnProcountMap.get(changeOD.Asset_Model_No__c) + changeOD.RrturnPro_count__c
                                );
                            } else {
                                returnProcountMap.put(changeOD.Asset_Model_No__c, changeOD.RrturnPro_count__c);
                            }
                        }
                    }
                    //已换货单出库数量信息
                    List<Consumable_Orderdetails__c> returnCount1List = [
                        SELECT
                            Id,
                            Name,
                            Consumable_order__c,
                            Asset_Model_No__c,
                            Shipment_Count__c,
                            RrturnPro_count__c,
                            Delivery_List_RMB__c,
                            InvoicedProCost_RMB__c,
                            Invoiced_Procount__c,
                            Invoiced_Count__c,
                            Invoice_Unitprice__c,
                            InvoiceProNot_count__c,
                            Invoice_Cost_RMB__c,
                            Invoice_Unit__c,
                            Box_Piece__c
                        FROM Consumable_Orderdetails__c
                        WHERE
                            Consumable_order__c IN (
                                SELECT Outboundorder_Code_link__c
                                FROM Consumable_order_LinkTable__c
                                WHERE Invoice_Code_link__c = :invoiceId
                            )
                            AND Consumable_order__r.Onchange_order__c = TRUE
                            AND Consumable_order__c != :deliveryId
                    ];
                    for (Consumable_Orderdetails__c changeOD : returnCount1List) {
                        changeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c);
                    }
                    outOrderchange(insertDetMap);
                } else {
                    invoiceHead.Name = coc.Name;
                    invoiceHead.Invoice_status__c = coc.Invoice_status__c;
                    invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                    invoiceHead.Dealer_Info__c = accountid;
                    invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                    invoiceHead.Invoice_status__c = '草案中';
                    invoiceHead.Order_ProType__c = agencyProType;
                    invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalName +++++'   + HospitalName));
                    //return null;
                    if (HospitalName != null && HospitalName != '') {
                        if (HospitalInfo != null && HospitalInfo != '') {
                            invoiceHead.Order_ForHospital__c = HospitalInfo;
                        }
                    } else {
                        invoiceHead.Order_ForHospital__c = null;
                    }
                    invoiceHead.Order_ForDealer__c = SecondDealer == '' ? null : SecondDealer;
                    invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                    update invoiceHead;
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
                        if (ass.check == true) {
                            insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                        } else {
                            outOrderIdList.add(ass.esd.Id);
                            deleteDetMap.put(ass.esd.Id, invoiceHead.Id);
                        }
                    }
                    if (outOrderIdList.size() > 0) {
                        getdefaultMapinfo(outOrderIdList);
                    }
                    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  start
                    //被选中的出库单集合
                    if (insertDetMap.size() > 0) {
                        List<Consumable_order_LinkTable__c> existLinkinfo = [
                            SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c
                            FROM Consumable_order_LinkTable__c
                            WHERE Outboundorder_Code_link__c IN :insertDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id
                        ];
                        //存在没有与发票建立关联关系的出库单
                        List<String> templist2 = new List<String>();
                        for (Consumable_order_LinkTable__c colc : existLinkinfo) {
                            templist2.add(colc.Outboundorder_Code_link__c);
                        }
                        //获取该出库单
                        for (String field : insertDetMap.keySet()) {
                            if (!templist2.contains(field)) {
                                //该出库单不存在与链接表中,新建链接
                                chukudanID.add(field);
                                Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                                invoiceLink.Name = field + insertDetMap.get(field);
                                invoiceLink.Outboundorder_Code_link__c = field;
                                invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                                invoiceLinkList.add(invoiceLink);
                            }
                        }
                        upsert invoiceLinkList;
                    }
                    if (deleteDetMap.size() > 0) {
                        List<Consumable_order_LinkTable__c> invoiceLinkdetList = new List<Consumable_order_LinkTable__c>();
                        deleteOutboundorder(deleteDetMap, invoiceHead.Id);
                        List<Consumable_order_LinkTable__c> existLinkinfo = [
                            SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c
                            FROM Consumable_order_LinkTable__c
                            WHERE Outboundorder_Code_link__c IN :deleteDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id
                        ];
                        for (Consumable_order_LinkTable__c colctemp : existLinkinfo) {
                            if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) {
                                //存在与该发票关联的出库单
                                invoiceLinkdetList.add(colctemp);
                            }
                        }
                        delete invoiceLinkdetList;
                    }
                    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  end
                    //新建发票明细1
                    if (chukudanID.size() > 0) {
                        newinvoicedetails1(chukudanID);
                    }
                }
            }
        } catch (Exception ex) {
            Database.rollback(sp);
            // ApexPages.addMessages(ex);
            // return null;
            System.debug('Exception ex = ' + ex.getMessage() + ex.getLineNumber());
            errorMsg += ex.getMessage() + ex.getLineNumber();
        }
        data.put('invoiceId', invoiceId);
        res.status = 'Success';
        res.code = 200;
        res.msg = errorMsg;
        System.debug('res = ' + res);
        return res;
    }
    public static void newinvoicedetails1(List<String> chukudanID) {
        //新规发票明细1
        List<Consumable_Orderdetails__c> invoiceorderList1 = new List<Consumable_Orderdetails__c>();
        //出库单明细更新
        List<Consumable_Orderdetails__c> outOrderList1 = new List<Consumable_Orderdetails__c>();
        List<Consumable_Orderdetails__c> detaliFromList = [
            SELECT
                Id,
                Name,
                Consumable_order__c,
                Asset_Model_No__c,
                Consumable_Product__r.Asset_Model_No__c,
                Shipment_Count__c,
                RrturnPro_count__c,
                Delivery_List_RMB__c,
                InvoicedProCost_RMB__c,
                Invoiced_Procount__c,
                Invoiced_Count__c,
                Invoice_Unitprice__c,
                InvoiceProNot_count__c,
                Invoice_Cost_RMB__c,
                Invoice_No__c,
                Consumable_Product__c,
                Intra_Trade_List_RMB__c,
                Dealer_Custom_Price__c,
                Sum_of_money__c,
                Box_Piece__c,
                Used_date__c,
                Send_date__c,
                Invoice_Unit__c,
                ProductPacking_list_manual__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c IN :chukudanID AND InvoiceProNot_count__c > 0
        ];
        for (Integer i = 0; i < detaliFromList.size(); i++) {
            Consumable_Orderdetails__c invoiceInsert1 = new Consumable_Orderdetails__c();
            invoiceInsert1.Used_date__c = detaliFromList[i].Used_date__c;
            invoiceInsert1.Send_date__c = detaliFromList[i].Send_date__c;
            String str = string.valueOf(i + 1);
            if (str.length() == 1) {
                str = '0' + str;
            }
            invoiceInsert1.Name =
                coc.Name +
                '-' +
                detaliFromList[i].Name.substring(detaliFromList[i].Name.length() - 7, detaliFromList[i].Name.length());
            invoiceInsert1.Shipment_Count__c = detaliFromList[i].InvoiceProNot_count__c;
            invoiceInsert1.Consumable_Product__c = detaliFromList[i].Consumable_Product__c;
            invoiceInsert1.Intra_Trade_List_RMB__c = detaliFromList[i].Intra_Trade_List_RMB__c;
            invoiceInsert1.Delivery_List_RMB__c = detaliFromList[i].Delivery_List_RMB__c;
            invoiceInsert1.Dealer_Custom_Price__c = detaliFromList[i].Dealer_Custom_Price__c;
            invoiceInsert1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            if (detaliFromList[i].Box_Piece__c == '盒' && detaliFromList[i].Invoice_Unit__c == '个') {
                invoiceInsert1.Invoice_Unitprice__c =
                    detaliFromList[i].Delivery_List_RMB__c / detaliFromList[i].ProductPacking_list_manual__c;
            } else {
                invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c;
            }
            invoiceInsert1.Box_Piece__c = detaliFromList[i].Box_Piece__c;
            invoiceInsert1.Invoice_Unit__c = detaliFromList[i].Box_Piece__c;
            if (detaliFromList[i].Invoiced_Procount__c == null)
                detaliFromList[i].Invoiced_Procount__c = 0;
            if (detaliFromList[i].RrturnPro_count__c == null)
                detaliFromList[i].RrturnPro_count__c = 0;
            invoiceInsert1.Invoiced_Count__c = detaliFromList[i].InvoiceProNot_count__c;
            if (detaliFromList[i].InvoicedProCost_RMB__c == null)
                detaliFromList[i].InvoicedProCost_RMB__c = 0;
            invoiceInsert1.InvoicedProCost_RMB__c = invoiceInsert1.Invoiced_Count__c * invoiceInsert1.Delivery_List_RMB__c;
            invoiceInsert1.Consumable_order__c = invoiceId;
            invoiceInsert1.Invoicedet1_OD_link__c = detaliFromList[i].Consumable_order__c;
            invoiceorderList1.add(invoiceInsert1);
        }
        System.debug('invoiceorderList1 +++++' + invoiceorderList1.size());
        Savepoint sp = Database.setSavepoint();
        System.debug('invoiceorderList1 = ' + invoiceorderList1);
        if (invoiceorderList1.size() > 0) {
            try {
                System.debug('invoiceorderList1 = ' + invoiceorderList1);
                insert invoiceorderList1;
            } catch (Exception ex) {
                Database.rollback(sp);
                //ApexPages.addMessages(ex);
                errorMsg += ex.getMessage();
            }
        }
    }
    public static void getdefaultMapinfo(List<String> orderIdList) {
        List<Consumable_Orderdetails__c> existLinkinfo = new List<Consumable_Orderdetails__c>();
        existLinkinfo = [
            SELECT Id, Consumable_order__c, Consumable_product__c, Asset_Model_No__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c IN :orderIdList
        ];
        // for (Integer i = 0; i < existLinkinfo.size(); i++) {
        //     ordermx1defaultMap.put(existLinkinfo[i].Consumable_order__c + existLinkinfo[i].Asset_Model_No__c, 0);
        // }
    }
    public static void deleteOutboundorder(Map<String, String> deleteMap, String value) {
        //删除发票明细1
        List<Consumable_Orderdetails__c> detInvoicedet1List = [
            SELECT Id, Consumable_Shipment_order__c, Consumable_Sale_order__c, Consumable_product__c, Asset_Model_No__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c = :value AND Invoicedet1_OD_link__c = :deleteMap.keySet()
        ];
        System.debug('detInvoicedet1List = ' + detInvoicedet1List);
        delete detInvoicedet1List;
    }
    //换货单链接表 发票明细2做成
    public static void outOrderchange(Map<String, String> insertDetMap) {
        List<string> chukudanID = new List<string>();
        List<Consumable_order_LinkTable__c> invoiceLinkList = new List<Consumable_order_LinkTable__c>();
        Consumable_order__c p = new Consumable_order__c();
        if (insertDetMap.size() > 0) {
            for (String field : insertDetMap.keySet()) {
              if (!templist2.contains(field)) {
                //该出库单不存在与链接表中,新建链接
                List<Consumable_order_LinkTable__c> existLinkinfo = [
                    SELECT Id
                    FROM Consumable_order_LinkTable__c
                    WHERE Outboundorder_Code_link__c = :field
                ];
                if (existLinkinfo.size() > 0) {
                    delete existLinkinfo;
                }
                chukudanID.add(field);
                Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                invoiceLink.Name = field + insertDetMap.get(field);
                invoiceLink.Outboundorder_Code_link__c = field;
                invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                invoiceLinkList.add(invoiceLink);
              }
                p.Id = field;
                p.ConInvoice_Code__c = insertDetMap.get(field);
                p.Onchange_order__c = true;
                update p;
            }
            upsert invoiceLinkList;
          }
          if (deleteDetMap.size() > 0) {
            List<Consumable_order_LinkTable__c> invoiceLinkdetList = new List<Consumable_order_LinkTable__c>();
            deleteOutboundorder(deleteDetMap, invoiceHead.Id);
            List<Consumable_order_LinkTable__c> existLinkinfo = [
              SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c
              FROM Consumable_order_LinkTable__c
              WHERE
                Outboundorder_Code_link__c IN :deleteDetMap.keySet()
                AND Invoice_Code_link__c = :invoiceHead.Id
            ];
            for (Consumable_order_LinkTable__c colctemp : existLinkinfo) {
              if (
                deleteDetMap.get(colctemp.Outboundorder_Code_link__c) ==
                colctemp.Invoice_Code_link__c
              ) {
                //存在与该发票关联的出库单
                invoiceLinkdetList.add(colctemp);
              }
            }
            delete invoiceLinkdetList;
          }
          //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  end
          //新建发票明细1
          if (chukudanID.size() > 0) {
            newinvoicedetails1(chukudanID);
          }
            insert invoiceLinkList;
        }
      }
    } catch (Exception ex) {
      Database.rollback(sp);
      // ApexPages.addMessages(ex);
      // return null;
      System.debug('Exception ex = ' + ex.getMessage() + ex.getLineNumber());
      errorMsg += ex.getMessage() + ex.getLineNumber();
    }
    data.put('invoiceId', invoiceId);
    res.status = 'Success';
    res.code = 200;
    res.msg = errorMsg;
    System.debug('res = ' + res);
    return res;
  }
  public static void newinvoicedetails1(List<String> chukudanID) {
    //新规发票明细1
    List<Consumable_Orderdetails__c> invoiceorderList1 = new List<Consumable_Orderdetails__c>();
    //出库单明细更新
    List<Consumable_Orderdetails__c> outOrderList1 = new List<Consumable_Orderdetails__c>();
    List<Consumable_Orderdetails__c> detaliFromList = [
      SELECT
        Id,
        Name,
        Consumable_order__c,
        Asset_Model_No__c,
        Consumable_Product__r.Asset_Model_No__c,
        Shipment_Count__c,
        RrturnPro_count__c,
        Delivery_List_RMB__c,
        InvoicedProCost_RMB__c,
        Invoiced_Procount__c,
        Invoiced_Count__c,
        Invoice_Unitprice__c,
        InvoiceProNot_count__c,
        Invoice_Cost_RMB__c,
        Invoice_No__c,
        Consumable_Product__c,
        Intra_Trade_List_RMB__c,
        Dealer_Custom_Price__c,
        Sum_of_money__c,
        Box_Piece__c,
        Used_date__c,
        Send_date__c,
        Invoice_Unit__c,
        ProductPacking_list_manual__c
      FROM Consumable_Orderdetails__c
      WHERE Consumable_order__c IN :chukudanID AND InvoiceProNot_count__c > 0
    ];
    for (Integer i = 0; i < detaliFromList.size(); i++) {
      Consumable_Orderdetails__c invoiceInsert1 = new Consumable_Orderdetails__c();
      invoiceInsert1.Used_date__c = detaliFromList[i].Used_date__c;
      invoiceInsert1.Send_date__c = detaliFromList[i].Send_date__c;
      String str = string.valueOf(i + 1);
      if (str.length() == 1) {
        str = '0' + str;
      }
      invoiceInsert1.Name =
        coc.Name +
        '-' +
        detaliFromList[i]
          .Name.substring(
            detaliFromList[i].Name.length() - 7,
            detaliFromList[i].Name.length()
          );
      invoiceInsert1.Shipment_Count__c = detaliFromList[i]
        .InvoiceProNot_count__c;
      invoiceInsert1.Consumable_Product__c = detaliFromList[i]
        .Consumable_Product__c;
      invoiceInsert1.Intra_Trade_List_RMB__c = detaliFromList[i]
        .Intra_Trade_List_RMB__c;
      invoiceInsert1.Delivery_List_RMB__c = detaliFromList[i]
        .Delivery_List_RMB__c;
      invoiceInsert1.Dealer_Custom_Price__c = detaliFromList[i]
        .Dealer_Custom_Price__c;
      invoiceInsert1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
      if (
        detaliFromList[i].Box_Piece__c == '盒' &&
        detaliFromList[i].Invoice_Unit__c == '个'
      ) {
        invoiceInsert1.Invoice_Unitprice__c =
          detaliFromList[i].Delivery_List_RMB__c /
          detaliFromList[i].ProductPacking_list_manual__c;
      } else {
        invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i]
          .Delivery_List_RMB__c;
      }
      invoiceInsert1.Box_Piece__c = detaliFromList[i].Box_Piece__c;
      invoiceInsert1.Invoice_Unit__c = detaliFromList[i].Box_Piece__c;
      if (detaliFromList[i].Invoiced_Procount__c == null)
        detaliFromList[i].Invoiced_Procount__c = 0;
      if (detaliFromList[i].RrturnPro_count__c == null)
        detaliFromList[i].RrturnPro_count__c = 0;
      invoiceInsert1.Invoiced_Count__c = detaliFromList[i]
        .InvoiceProNot_count__c;
      if (detaliFromList[i].InvoicedProCost_RMB__c == null)
        detaliFromList[i].InvoicedProCost_RMB__c = 0;
      invoiceInsert1.InvoicedProCost_RMB__c =
        invoiceInsert1.Invoiced_Count__c * invoiceInsert1.Delivery_List_RMB__c;
      invoiceInsert1.Consumable_order__c = invoiceId;
      invoiceInsert1.Invoicedet1_OD_link__c = detaliFromList[i]
        .Consumable_order__c;
      invoiceorderList1.add(invoiceInsert1);
    }
    System.debug('invoiceorderList1 +++++' + invoiceorderList1.size());
    Savepoint sp = Database.setSavepoint();
    System.debug('invoiceorderList1 = ' + invoiceorderList1);
    if (invoiceorderList1.size() > 0) {
      try {
        System.debug('invoiceorderList1 = ' + invoiceorderList1);
        insert invoiceorderList1;
      } catch (Exception ex) {
        Database.rollback(sp);
        //ApexPages.addMessages(ex);
        errorMsg += ex.getMessage();
      }
    }
  }
  public static void getdefaultMapinfo(List<String> orderIdList) {
    List<Consumable_Orderdetails__c> existLinkinfo = new List<Consumable_Orderdetails__c>();
    existLinkinfo = [
      SELECT Id, Consumable_order__c, Consumable_product__c, Asset_Model_No__c
      FROM Consumable_Orderdetails__c
      WHERE Consumable_order__c IN :orderIdList
    ];
    // for (Integer i = 0; i < existLinkinfo.size(); i++) {
    //     ordermx1defaultMap.put(existLinkinfo[i].Consumable_order__c + existLinkinfo[i].Asset_Model_No__c, 0);
    // }
  }
  public static void deleteOutboundorder(
    Map<String, String> deleteMap,
    String value
  ) {
    //删除发票明细1
    List<Consumable_Orderdetails__c> detInvoicedet1List = [
      SELECT
        Id,
        Consumable_Shipment_order__c,
        Consumable_Sale_order__c,
        Consumable_product__c,
        Asset_Model_No__c
      FROM Consumable_Orderdetails__c
      WHERE
        Consumable_order__c = :value
        AND Invoicedet1_OD_link__c = :deleteMap.keySet()
    ];
    System.debug('detInvoicedet1List = ' + detInvoicedet1List);
    delete detInvoicedet1List;
  }
  //换货单链接表 发票明细2做成
  public static void outOrderchange(Map<String, String> insertDetMap) {
    List<string> chukudanID = new List<string>();
    List<Consumable_order_LinkTable__c> invoiceLinkList = new List<Consumable_order_LinkTable__c>();
    Consumable_order__c p = new Consumable_order__c();
    if (insertDetMap.size() > 0) {
      for (String field : insertDetMap.keySet()) {
        List<Consumable_order_LinkTable__c> existLinkinfo = [
          SELECT Id
          FROM Consumable_order_LinkTable__c
          WHERE Outboundorder_Code_link__c = :field
        //换货出库单明细1更新
        List<Consumable_Orderdetails__c> detaliFrom1List = [
            SELECT
                Id,
                Name,
                Consumable_order__c,
                Asset_Model_No__c,
                Consumable_Product__r.Asset_Model_No__c,
                Shipment_Count__c,
                RrturnPro_count__c,
                Delivery_List_RMB__c,
                InvoicedProCost_RMB__c,
                Invoiced_Procount__c,
                Invoiced_Count__c,
                Invoice_Unitprice__c,
                InvoiceProNot_count__c,
                Invoice_Cost_RMB__c,
                Invoice_No__c,
                Invoice_Unit__c,
                Box_Piece__c,
                Consumable_Sale_order__r.Name,
                Consumable_Shipment_order__r.Name
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c IN :chukudanID
        ];
        if (existLinkinfo.size() > 0) {
          delete existLinkinfo;
        for (Consumable_Orderdetails__c changeOD : detaliFrom1List) {
            changeOD.Invoiced_Procount__c = changeOD.Shipment_Count__c;
        }
        chukudanID.add(field);
        Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
        invoiceLink.Name = field + insertDetMap.get(field);
        invoiceLink.Outboundorder_Code_link__c = field;
        invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
        invoiceLinkList.add(invoiceLink);
        p.Id = field;
        p.ConInvoice_Code__c = insertDetMap.get(field);
        p.Onchange_order__c = true;
        update p;
      }
      insert invoiceLinkList;
        update detaliFrom1List;
    }
    //换货出库单明细1更新
    List<Consumable_Orderdetails__c> detaliFrom1List = [
      SELECT
        Id,
        Name,
        Consumable_order__c,
        Asset_Model_No__c,
        Consumable_Product__r.Asset_Model_No__c,
        Shipment_Count__c,
        RrturnPro_count__c,
        Delivery_List_RMB__c,
        InvoicedProCost_RMB__c,
        Invoiced_Procount__c,
        Invoiced_Count__c,
        Invoice_Unitprice__c,
        InvoiceProNot_count__c,
        Invoice_Cost_RMB__c,
        Invoice_No__c,
        Invoice_Unit__c,
        Box_Piece__c,
        Consumable_Sale_order__r.Name,
        Consumable_Shipment_order__r.Name
      FROM Consumable_Orderdetails__c
      WHERE Consumable_order__c IN :chukudanID
    ];
    for (Consumable_Orderdetails__c changeOD : detaliFrom1List) {
      changeOD.Invoiced_Procount__c = changeOD.Shipment_Count__c;
    //上传ContentVersion附件
    @AuraEnabled
    public static String saveFile(Id recordId, String fileName, String base64Data) {
        base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
        ContentVersion cv = new ContentVersion();
        cv.Title = fileName;
        cv.PathOnClient = '/' + fileName;
        cv.FirstPublishLocationId = recordId;
        cv.VersionData = EncodingUtil.base64Decode(base64Data);
        cv.IsMajorVersion = true;
        insert cv;
        System.debug('cv.Id = ' + cv.Id);
        return cv.Id;
    }
    update detaliFrom1List;
  }
  //上传ContentVersion附件
  @AuraEnabled
  public static String saveFile(
    Id recordId,
    String fileName,
    String base64Data
  ) {
    base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
    ContentVersion cv = new ContentVersion();
    cv.Title = fileName;
    cv.PathOnClient = '/' + fileName;
    cv.FirstPublishLocationId = recordId;
    cv.VersionData = EncodingUtil.base64Decode(base64Data);
    cv.IsMajorVersion = true;
    insert cv;
    System.debug('cv.Id = ' + cv.Id);
    return cv.Id;
  }
  // 保存附件
  @AuraEnabled
  public static ResponseBodyLWC saveAttachment(
    String attachmentRecoedsLwc,
    String invoiceId
  ) {
    System.debug('进入 saveAttachment');
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    invoiceId = invoiceId;
    attachmentRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(
      attachmentRecoedsLwc,
      List<InvoiceOrderInfo>.class
    );
    System.debug('attachmentRecoeds = ' + attachmentRecoeds);
    try {
      Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c();
      for (InvoiceOrderInfo ass : attachmentRecoeds) {
        if (!String.isBlank(ass.mailSelectOptsin)) {
          attachmentdetails.Id = ass.invoiceOrderId;
          attachmentdetails.Attachment_ID__c = ass.cvInfo.ContentDocumentId;
          attachmentdetails.Accessories_type__c = ass.mailSelectOptsin;
          if (String.isBlank(ass.invoiceOrderId)) {
            attachmentdetails.Invoice_code__c = invoiceId;
          }
          upsert attachmentdetails;
    // 保存附件
    @AuraEnabled
    public static ResponseBodyLWC saveAttachment(String attachmentRecoedsLwc, String invoiceId) {
        System.debug('进入 saveAttachment');
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        invoiceId = invoiceId;
        attachmentRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(attachmentRecoedsLwc, List<InvoiceOrderInfo>.class);
        System.debug('attachmentRecoeds = ' + attachmentRecoeds);
        try {
            Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c();
            for (InvoiceOrderInfo ass : attachmentRecoeds) {
                if (!String.isBlank(ass.mailSelectOptsin)) {
                    attachmentdetails.Id = ass.invoiceOrderId;
                    attachmentdetails.Attachment_ID__c = ass.cvInfo.ContentDocumentId;
                    attachmentdetails.Accessories_type__c = ass.mailSelectOptsin;
                    if (String.isBlank(ass.invoiceOrderId)) {
                        attachmentdetails.Invoice_code__c = invoiceId;
                    }
                    upsert attachmentdetails;
                }
            }
        } catch (Exception e) {
            return new ResponseBodyLWC('Error', 500, e.getMessage() + e.getLineNumber(), '');
        }
      }
    } catch (Exception e) {
      return new ResponseBodyLWC(
        'Error',
        500,
        e.getMessage() + e.getLineNumber(),
        ''
      );
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  // 检索(未开发票出库单)
  @AuraEnabled
  public static ResponseBodyLWC InvoiceorderSearch(
    Consumable_order__c cocLwc,
    String invoiceIdLwc,
    String accountidLwc,
    String userWorkLocationLwc,
    String agencyProTypeLwc,
    String HospitalInfoLwc,
    String SecondDealerLwc,
    String invoiceOrderRecoedsLwc
  ) {
    System.debug('进入 InvoiceorderSearch');
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    // 检索(未开发票出库单)
    @AuraEnabled
    public static ResponseBodyLWC InvoiceorderSearch(
        Consumable_order__c cocLwc,
        String invoiceIdLwc,
        String accountidLwc,
        String userWorkLocationLwc,
        String agencyProTypeLwc,
        String HospitalInfoLwc,
        String SecondDealerLwc,
        String invoiceOrderRecoedsLwc
    ) {
        System.debug('进入 InvoiceorderSearch');
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
    coc = cocLwc;
    HospitalInfo = HospitalInfoLwc;
    SecondDealer = SecondDealerLwc;
    errorMsg = '';
    invoiceOrderRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(
      invoiceOrderRecoedsLwc,
      List<InvoiceOrderInfo>.class
    );
    invoiceId = invoiceIdLwc;
    accountid = accountidLwc;
    agencyProType = agencyProTypeLwc;
    userWorkLocation = userWorkLocationLwc;
        coc = cocLwc;
        HospitalInfo = HospitalInfoLwc;
        SecondDealer = SecondDealerLwc;
        errorMsg = '';
        invoiceOrderRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(invoiceOrderRecoedsLwc, List<InvoiceOrderInfo>.class);
        invoiceId = invoiceIdLwc;
        accountid = accountidLwc;
        agencyProType = agencyProTypeLwc;
        userWorkLocation = userWorkLocationLwc;
    Map<String, String> invoiceOrderMap = new Map<String, String>();
    String msoql = '';
    List<InvoiceOrderInfo> invoiceOrderdetailMid = new List<InvoiceOrderInfo>();
    if (String.isBlank(invoiceId)) {
      msoql = makeSoql();
    } else {
      msoql = makeSoqlInit();
    }
    invoiceOrderList = new List<Consumable_order__c>();
    invoiceOrderList = Database.query(msoql);
    for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
      if (ass.check == true) {
        invoiceOrderdetailMid.add(ass);
        invoiceOrderMap.put(ass.esd.Name, ass.esd.Name);
      }
    }
    invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
    invoiceOrderRecoeds.addAll(invoiceOrderdetailMid);
    for (Integer i = 0; i < invoiceOrderList.size(); i++) {
      if (invoiceOrderMap.containsKey(invoiceOrderList[i].Name)) {
      } else {
        invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
        invoiceOrderMap.put(invoiceOrderList[i].Name, invoiceOrderList[i].Name);
      }
    }
    data.put('invoiceOrderRecoeds', invoiceOrderRecoeds);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  private static String makeSoql() {
    String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
    soql += ' WHERE Dealer_Info__c = \'' + accountid + '\'';
    soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\'';
    soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\'';
    soql += ' ) ';
    soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
    soql += ' AND Order_ProType__c =\'' + agencyProType + '\'';
    soql += ' AND Billed_Status__c != \'全部开票\'';
    soql += ' AND SummonsForDirction__c != \'互相调货\'';
    if (HospitalInfo != null && HospitalInfo != '') {
      soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\'';
    }
    if (String.isNotEmpty(SecondDealer)) {
      soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\'';
    }
    if (coc.Order_ForDealerText__c != null) {
      soql +=
        ' AND ShipmentAccount__c = \'' +
        coc.Order_ForDealerText__c +
        '\'';
    }
    soql += ' AND InvoiceNotPro_total_amount__c > 0';
    soql += ' AND Onchange_order__c = false limit 1000';
    return soql;
  }
  private static String makeSoqlInit() {
    String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
    soql += ' WHERE Dealer_Info__c = \'' + accountid + '\'';
    soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\'';
    soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\'';
    soql += ' ) ';
    soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
    soql += ' AND Order_ProType__c =\'' + agencyProType + '\'';
    soql += ' AND SummonsForDirction__c != \'互相调货\' ';
    if (HospitalInfo != null && HospitalInfo != '') {
      soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\'';
    }
    if (SecondDealer != null) {
      soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\'';
    }
    if (coc.Order_ForDealerText__c != null) {
      soql +=
        ' AND ShipmentAccount__c = \'' +
        coc.Order_ForDealerText__c +
        '\'';
    }
    soql += ' AND InvoiceNotPro_total_amount__c > 0';
    soql += ' AND Onchange_order__c = false limit 1000';
    return soql;
  }
  // 删除按钮
  @AuraEnabled
  public static ResponseBodyLWC deleteButton(
    String invoiceIdLwc,
    Consumable_order__c cocLwc
  ) {
    System.debug('进入 deleteButton');
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    coc = cocLwc;
    invoiceId = invoiceIdLwc;
    system.debug('====invoiceId==========>' + invoiceId);
    List<Consumable_Orderdetails__c> consList = [
      SELECT id, Consumable_order__c
      FROM Consumable_Orderdetails__c
      WHERE Consumable_order__c = :invoiceId
    ];
    try {
      system.debug('====cons==========>' + consList);
      delete consList;
      if (coc.id == invoiceId && coc.Invoice_status__c == '草案中') {
        delete coc;
      }
      res.status = 'Success';
      res.code = 200;
      System.debug('res = ' + res);
      return res;
    } catch (Exception e) {
      // ApexPages.addMessages(e);
      // return null;
      return new ResponseBodyLWC(
        'Error',
        500,
        e.getMessage() + ' ' + e.getLineNumber(),
        ''
      );
    }
  }
  // 提交按钮
  @AuraEnabled
  public static ResponseBodyLWC approval(
    List<String> outOrderStringListLwc,
    Map<String, Consumable_Orderdetails__c> outordercountMapLwc,
    String invoiceIdLwc
  ) {
    System.debug('进入 approval');
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    outOrderStringList = outOrderStringListLwc;
    outordercountMap = outordercountMapLwc;
    invoiceId = invoiceIdLwc;
    //更新发票明细2链接
    Consumable_order__c P = new Consumable_order__c();
    List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
    List<Consumable_order_details2__c> invoiceorderList2 = new List<Consumable_order_details2__c>();
    //更新出库单明细1
    List<Consumable_Orderdetails__c> outOrderdetUp1List = new List<Consumable_Orderdetails__c>();
    //需要更新出库单明细1
    List<Consumable_Orderdetails__c> outOrderdet1List = [
      SELECT
        Id,
        Name,
        Consumable_order__c,
        Consumable_order__r.Name,
        Asset_Model_No__c,
        Consumable_Product__r.Asset_Model_No__c,
        Shipment_Count__c,
        RrturnPro_count__c,
        Delivery_List_RMB__c,
        InvoicedProCost_RMB__c,
        Invoiced_Procount__c,
        Invoiced_Count__c,
        Invoice_Unitprice__c,
        InvoiceProNot_count__c,
        Invoice_Cost_RMB__c,
        Invoice_No__c,
        Box_Piece__c,
        Invoice_Unit__c
      FROM Consumable_Orderdetails__c
      WHERE Consumable_order__c IN :outOrderStringList
    ];
    for (Integer i = 0; i < outOrderdet1List.size(); i++) {
      if (
        outordercountMap.containsKey(
          outOrderdet1List[i].Consumable_order__c +
          outOrderdet1List[i].Asset_Model_No__c
        )
      ) {
        Consumable_Orderdetails__c invoiceUpdte1 = new Consumable_Orderdetails__c();
        invoiceUpdte1.Id = outOrderdet1List[i].Id;
        invoiceUpdte1.Invoice_Unit__c = outordercountMap.get(
            outOrderdet1List[i].Consumable_order__c +
            outOrderdet1List[i].Asset_Model_No__c
          )
          .Invoice_Unit__c;
        if (
          outordercountMap.get(
              outOrderdet1List[i].Consumable_order__c +
              outOrderdet1List[i].Asset_Model_No__c
            )
            .Box_Piece__c == '盒' &&
          outordercountMap.get(
              outOrderdet1List[i].Consumable_order__c +
              outOrderdet1List[i].Asset_Model_No__c
            )
            .Invoice_Unit__c == '个'
        ) {
          Decimal OldinvoicedProcount = 0;
          OldinvoicedProcount = (outordercountMap.get(
                outOrderdet1List[i].Consumable_order__c +
                outOrderdet1List[i].Asset_Model_No__c
              )
              .Invoiced_Count__c /
            outordercountMap.get(
                outOrderdet1List[i].Consumable_order__c +
                outOrderdet1List[i].Asset_Model_No__c
              )
              .ProductPacking_list_manual__c)
            .setScale(2);
          invoiceUpdte1.Invoiced_Procount__c =
            outOrderdet1List[i].Invoiced_Procount__c + OldinvoicedProcount;
        Map<String, String> invoiceOrderMap = new Map<String, String>();
        String msoql = '';
        List<InvoiceOrderInfo> invoiceOrderdetailMid = new List<InvoiceOrderInfo>();
        if (String.isBlank(invoiceId)) {
            msoql = makeSoql();
        } else {
          invoiceUpdte1.Invoiced_Procount__c =
            outOrderdet1List[i].Invoiced_Procount__c +
            outordercountMap.get(
                outOrderdet1List[i].Consumable_order__c +
                outOrderdet1List[i].Asset_Model_No__c
              )
              .Invoiced_Count__c;
            msoql = makeSoqlInit();
        }
        invoiceUpdte1.Invoice_Unitprice__c = outordercountMap.get(
            outOrderdet1List[i].Consumable_order__c +
            outOrderdet1List[i].Asset_Model_No__c
          )
          .Invoice_Unitprice__c;
        System.debug('====>procount' + invoiceUpdte1.Invoiced_Procount__c);
        System.debug('===>RMB' + outOrderdet1List[i].Delivery_List_RMB__c);
        invoiceUpdte1.InvoicedProCost_RMB__c =
          invoiceUpdte1.Invoiced_Procount__c *
          outOrderdet1List[i].Delivery_List_RMB__c;
        Decimal invoicedProcount = 0;
        if (
          outordercountMap.get(
              outOrderdet1List[i].Consumable_order__c +
              outOrderdet1List[i].Asset_Model_No__c
            )
            .Box_Piece__c == '盒' &&
          outordercountMap.get(
              outOrderdet1List[i].Consumable_order__c +
              outOrderdet1List[i].Asset_Model_No__c
            )
            .Invoice_Unit__c == '个'
        ) {
          invoicedProcount = (outordercountMap.get(
                outOrderdet1List[i].Consumable_order__c +
                outOrderdet1List[i].Asset_Model_No__c
              )
              .Invoiced_Count__c /
            outordercountMap.get(
                outOrderdet1List[i].Consumable_order__c +
                outOrderdet1List[i].Asset_Model_No__c
              )
              .ProductPacking_list_manual__c)
            .setScale(2);
        } else {
          invoicedProcount = outordercountMap.get(
              outOrderdet1List[i].Consumable_order__c +
              outOrderdet1List[i].Asset_Model_No__c
            )
            .Invoiced_Count__c;
        invoiceOrderList = new List<Consumable_order__c>();
        invoiceOrderList = Database.query(msoql);
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds) {
            if (ass.check == true) {
                invoiceOrderdetailMid.add(ass);
                invoiceOrderMap.put(ass.esd.Name, ass.esd.Name);
            }
        }
        System.debug(
          '发票数量===>' + outOrderdet1List[i].InvoiceProNot_count__c
        );
        System.debug('还没发票数量===>' + invoicedProcount);
        if (outOrderdet1List[i].InvoiceProNot_count__c < invoicedProcount) {
          // ApexPages.addmessage(
          //     new ApexPages.message(
          //         ApexPages.severity.Error,
          //         '出库单' +
          //         outOrderdet1List[i].Consumable_order__r.Name +
          //         '中,' +
          //         outOrderdet1List[i].Asset_Model_No__c +
          //         '还没开票数量小于发票数量,请确认是否有返品'
          //     )
          // );
          // return null;
          return new ResponseBodyLWC(
            'Error',
            500,
            '出库单' +
              outOrderdet1List[i].Consumable_order__r.Name +
              '中,' +
              outOrderdet1List[i].Asset_Model_No__c +
              '还没开票数量小于发票数量,请确认是否有返品',
            ''
          );
        invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
        invoiceOrderRecoeds.addAll(invoiceOrderdetailMid);
        for (Integer i = 0; i < invoiceOrderList.size(); i++) {
            if (invoiceOrderMap.containsKey(invoiceOrderList[i].Name)) {
            } else {
                invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
                invoiceOrderMap.put(invoiceOrderList[i].Name, invoiceOrderList[i].Name);
            }
        }
        data.put('invoiceOrderRecoeds', invoiceOrderRecoeds);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
        outOrderdetUp1List.add(invoiceUpdte1);
      }
    private static String makeSoql() {
        String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
        soql += ' WHERE Dealer_Info__c = \'' + accountid + '\'';
        soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\'';
        soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\'';
        soql += ' ) ';
        soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
        soql += ' AND Order_ProType__c =\'' + agencyProType + '\'';
        soql += ' AND Billed_Status__c != \'全部开票\'';
        soql += ' AND SummonsForDirction__c != \'互相调货\'';
        if (HospitalInfo != null && HospitalInfo != '') {
            soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\'';
        }
        if (String.isNotEmpty(SecondDealer)) {
            soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\'';
        }
        if (coc.Order_ForDealerText__c != null) {
            soql += ' AND ShipmentAccount__c = \'' + coc.Order_ForDealerText__c + '\'';
        }
        soql += ' AND InvoiceNotPro_total_amount__c > 0';
        soql += ' AND Onchange_order__c = false limit 1000';
        return soql;
    }
    Savepoint sp = Database.setSavepoint();
    try {
      //出库单明细1更新
      if (outOrderdetUp1List.size() > 0) {
        ControllerUtil.updateOrderDetails1Satus(outOrderdetUp1List);
      }
      //发票状态更新
      cocinfo = [
        SELECT
          Id,
          Name,
          Invoice_status__c,
          Dealer_Info__c,
          Order_ForHospital__c,
          SummonsForDirction__c
        FROM Consumable_order__c
        WHERE Id = :invoiceId
      ];
      System.debug('cocinfo = ' + cocinfo);
      if (cocinfo.size() > 0) {
        p = cocinfo[0];
      }
      System.debug('p = ' + p);
      p.Invoice_status__c = '提交';
      update p;
    } catch (Exception ex) {
      Database.rollback(sp);
      // ApexPages.addMessages(ex);
      // return null;
      return new ResponseBodyLWC(
        'Error',
        500,
        ex.getMessage() + ' ' + ex.getLineNumber(),
        ''
      );
    }
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  @TestVisible
  class InvoiceOrderInfo implements Comparable {
    @AuraEnabled
    public Boolean check { get; set; }
    @AuraEnabled
    public Boolean oldCheck { get; set; }
    @AuraEnabled
    public Consumable_order__c esd { get; set; }
    @AuraEnabled
    public Consumable_Orderdetails__c esdet { get; set; }
    @AuraEnabled
    public Attachment attach { get; set; }
    @AuraEnabled
    public ContentVersion cvInfo { get; set; }
    @AuraEnabled
    public String mailSelectOptsin { get; set; }
    public List<SelectOption> mailSelectOpts { get; set; }
    @AuraEnabled
    public Map<String, String> mailSelectOptsMap { get; set; }
    @AuraEnabled
    public String invoiceOrderId { get; set; }
    @AuraEnabled
    public Decimal needInvoiceCount { get; set; }
    // 出库订单
    public InvoiceOrderInfo(Consumable_order__c e) {
      check = false;
      oldCheck = false;
      esd = e;
      needInvoiceCount = 0;
    private static String makeSoqlInit() {
        String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
        soql += ' WHERE Dealer_Info__c = \'' + accountid + '\'';
        soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\'';
        soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\'';
        soql += ' ) ';
        soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
        soql += ' AND Order_ProType__c =\'' + agencyProType + '\'';
        soql += ' AND SummonsForDirction__c != \'互相调货\' ';
        if (HospitalInfo != null && HospitalInfo != '') {
            soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\'';
        }
        if (SecondDealer != null) {
            soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\'';
        }
        if (coc.Order_ForDealerText__c != null) {
            soql += ' AND ShipmentAccount__c = \'' + coc.Order_ForDealerText__c + '\'';
        }
        soql += ' AND InvoiceNotPro_total_amount__c > 0';
        soql += ' AND Onchange_order__c = false limit 1000';
        return soql;
    }
    // 出库订单明细1
    public InvoiceOrderInfo(Consumable_Orderdetails__c e) {
      esdet = e;
    // 删除按钮
    @AuraEnabled
    public static ResponseBodyLWC deleteButton(String invoiceIdLwc, Consumable_order__c cocLwc) {
        System.debug('进入 deleteButton');
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        coc = cocLwc;
        invoiceId = invoiceIdLwc;
        system.debug('====invoiceId==========>' + invoiceId);
        List<Consumable_Orderdetails__c> consList = [
            SELECT id, Consumable_order__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c = :invoiceId
        ];
        try {
            system.debug('====cons==========>' + consList);
            delete consList;
            if (coc.id == invoiceId && coc.Invoice_status__c == '草案中') {
                delete coc;
            }
            res.status = 'Success';
            res.code = 200;
            System.debug('res = ' + res);
            return res;
        } catch (Exception e) {
            // ApexPages.addMessages(e);
            // return null;
            return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
        }
    }
    //附件
    public InvoiceOrderInfo(Attachment e) {
      attach = e;
      mailSelectOpts = new List<SelectOption>();
      mailSelectOpts.add(new SelectOption('发票和明细', '发票和明细'));
      mailSelectOpts.add(new SelectOption('发票', '发票'));
      mailSelectOpts.add(new SelectOption('明细', '明细'));
    // 提交按钮
    @AuraEnabled
    public static ResponseBodyLWC approval(
        List<String> outOrderStringListLwc,
        Map<String, Consumable_Orderdetails__c> outordercountMapLwc,
        String invoiceIdLwc
    ) {
        System.debug('进入 approval');
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        outOrderStringList = outOrderStringListLwc;
        outordercountMap = outordercountMapLwc;
        invoiceId = invoiceIdLwc;
        //更新发票明细2链接
        Consumable_order__c P = new Consumable_order__c();
        List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
        List<Consumable_order_details2__c> invoiceorderList2 = new List<Consumable_order_details2__c>();
        //更新出库单明细1
        List<Consumable_Orderdetails__c> outOrderdetUp1List = new List<Consumable_Orderdetails__c>();
        //需要更新出库单明细1
        List<Consumable_Orderdetails__c> outOrderdet1List = [
            SELECT
                Id,
                Name,
                Consumable_order__c,
                Consumable_order__r.Name,
                Asset_Model_No__c,
                Consumable_Product__r.Asset_Model_No__c,
                Shipment_Count__c,
                RrturnPro_count__c,
                Delivery_List_RMB__c,
                InvoicedProCost_RMB__c,
                Invoiced_Procount__c,
                Invoiced_Count__c,
                Invoice_Unitprice__c,
                InvoiceProNot_count__c,
                Invoice_Cost_RMB__c,
                Invoice_No__c,
                Box_Piece__c,
                Invoice_Unit__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c IN :outOrderStringList
        ];
        for (Integer i = 0; i < outOrderdet1List.size(); i++) {
            if (outordercountMap.containsKey(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)) {
                Consumable_Orderdetails__c invoiceUpdte1 = new Consumable_Orderdetails__c();
                invoiceUpdte1.Id = outOrderdet1List[i].Id;
                invoiceUpdte1.Invoice_Unit__c = outordercountMap.get(
                        outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c
                    )
                    .Invoice_Unit__c;
                if (
                    outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c ==
                    '盒' &&
                    outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c ==
                    '个'
                ) {
                    Decimal OldinvoicedProcount = 0;
                    OldinvoicedProcount = (outordercountMap.get(
                                outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c
                            )
                            .Invoiced_Count__c /
                        outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)
                            .ProductPacking_list_manual__c)
                        .setScale(2);
                    invoiceUpdte1.Invoiced_Procount__c = outOrderdet1List[i].Invoiced_Procount__c + OldinvoicedProcount;
                } else {
                    invoiceUpdte1.Invoiced_Procount__c =
                        outOrderdet1List[i].Invoiced_Procount__c +
                        outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)
                            .Invoiced_Count__c;
                }
                invoiceUpdte1.Invoice_Unitprice__c = outordercountMap.get(
                        outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c
                    )
                    .Invoice_Unitprice__c;
                System.debug('====>procount' + invoiceUpdte1.Invoiced_Procount__c);
                System.debug('===>RMB' + outOrderdet1List[i].Delivery_List_RMB__c);
                invoiceUpdte1.InvoicedProCost_RMB__c = invoiceUpdte1.Invoiced_Procount__c * outOrderdet1List[i].Delivery_List_RMB__c;
                Decimal invoicedProcount = 0;
                if (
                    outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c ==
                    '盒' &&
                    outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c ==
                    '个'
                ) {
                    invoicedProcount = (outordercountMap.get(
                                outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c
                            )
                            .Invoiced_Count__c /
                        outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)
                            .ProductPacking_list_manual__c)
                        .setScale(2);
                } else {
                    invoicedProcount = outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)
                        .Invoiced_Count__c;
                }
                System.debug('发票数量===>' + outOrderdet1List[i].InvoiceProNot_count__c);
                System.debug('还没发票数量===>' + invoicedProcount);
                if (outOrderdet1List[i].InvoiceProNot_count__c < invoicedProcount) {
                    // ApexPages.addmessage(
                    //     new ApexPages.message(
                    //         ApexPages.severity.Error,
                    //         '出库单' +
                    //         outOrderdet1List[i].Consumable_order__r.Name +
                    //         '中,' +
                    //         outOrderdet1List[i].Asset_Model_No__c +
                    //         '还没开票数量小于发票数量,请确认是否有返品'
                    //     )
                    // );
                    // return null;
                    return new ResponseBodyLWC(
                        'Error',
                        500,
                        '出库单' +
                            outOrderdet1List[i].Consumable_order__r.Name +
                            '中,' +
                            outOrderdet1List[i].Asset_Model_No__c +
                            '还没开票数量小于发票数量,请确认是否有返品',
                        ''
                    );
                }
                outOrderdetUp1List.add(invoiceUpdte1);
            }
        }
        Savepoint sp = Database.setSavepoint();
        try {
            //出库单明细1更新
            if (outOrderdetUp1List.size() > 0) {
                ControllerUtil.updateOrderDetails1Satus(outOrderdetUp1List);
            }
            //发票状态更新
            cocinfo = [
                SELECT Id, Name, Invoice_status__c, Dealer_Info__c, Order_ForHospital__c, SummonsForDirction__c
                FROM Consumable_order__c
                WHERE Id = :invoiceId
            ];
            System.debug('cocinfo = ' + cocinfo);
            if (cocinfo.size() > 0) {
                p = cocinfo[0];
            }
            System.debug('p = ' + p);
            p.Invoice_status__c = '提交';
            update p;
        } catch (Exception ex) {
            Database.rollback(sp);
            // ApexPages.addMessages(ex);
            // return null;
            return new ResponseBodyLWC('Error', 500, ex.getMessage() + ' ' + ex.getLineNumber(), '');
        }
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    //ContentVersion
    public InvoiceOrderInfo(ContentVersion cv) {
      cvInfo = cv;
      mailSelectOptsMap = new Map<String, String>();
      mailSelectOptsMap.put('发票和明细', '发票和明细');
      mailSelectOptsMap.put('发票', '发票');
      mailSelectOptsMap.put('明细', '明细');
    @TestVisible
    class InvoiceOrderInfo implements Comparable {
        @AuraEnabled
        public Boolean check { get; set; }
        @AuraEnabled
        public Boolean oldCheck { get; set; }
        @AuraEnabled
        public Consumable_order__c esd { get; set; }
        @AuraEnabled
        public Consumable_Orderdetails__c esdet { get; set; }
        @AuraEnabled
        public Attachment attach { get; set; }
        @AuraEnabled
        public ContentVersion cvInfo { get; set; }
        @AuraEnabled
        public String mailSelectOptsin { get; set; }
        public List<SelectOption> mailSelectOpts { get; set; }
        @AuraEnabled
        public Map<String, String> mailSelectOptsMap { get; set; }
        @AuraEnabled
        public String invoiceOrderId { get; set; }
        @AuraEnabled
        public Decimal needInvoiceCount { get; set; }
        // 出库订单
        public InvoiceOrderInfo(Consumable_order__c e) {
            check = false;
            oldCheck = false;
            esd = e;
            needInvoiceCount = 0;
        }
        // 出库订单明细1
        public InvoiceOrderInfo(Consumable_Orderdetails__c e) {
            esdet = e;
        }
        //附件
        public InvoiceOrderInfo(Attachment e) {
            attach = e;
            mailSelectOpts = new List<SelectOption>();
            mailSelectOpts.add(new SelectOption('发票和明细', '发票和明细'));
            mailSelectOpts.add(new SelectOption('发票', '发票'));
            mailSelectOpts.add(new SelectOption('明细', '明细'));
        }
        //ContentVersion
        public InvoiceOrderInfo(ContentVersion cv) {
            cvInfo = cv;
            mailSelectOptsMap = new Map<String, String>();
            mailSelectOptsMap.put('发票和明细', '发票和明细');
            mailSelectOptsMap.put('发票', '发票');
            mailSelectOptsMap.put('明细', '明细');
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            return null;
        }
    }
    // 排序
    public Integer compareTo(Object compareTo) {
      return null;
    }
  }
}
}
Diff truncated after the above file
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls force-app/main/default/classes/LexConInvoiceViewControllerTest.cls-meta.xml force-app/main/default/classes/LexConInvoicedetailsController.cls force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls-meta.xml force-app/main/default/classes/LexConsumableAccountController.cls force-app/main/default/classes/LexConsumableAccountControllerTest.cls force-app/main/default/classes/LexConsumableAccountControllerTest.cls-meta.xml force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls-meta.xml force-app/main/default/classes/LexConsumableAccountSOQL.cls force-app/main/default/classes/LexConsumableAccountSOQLTest.cls force-app/main/default/classes/LexConsumableAccountSOQLTest.cls-meta.xml force-app/main/default/classes/LexConsumableController.cls force-app/main/default/classes/LexConsumableControllerTest.cls force-app/main/default/classes/LexConsumableControllerTest.cls-meta.xml force-app/main/default/classes/LexConsumableGoodsInfoTest.cls force-app/main/default/classes/LexConsumableGoodsInfoTest.cls-meta.xml force-app/main/default/classes/LexConsumableOrderManageController.cls force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls-meta.xml force-app/main/default/classes/LexInventoryController.cls force-app/main/default/classes/LexInventoryControllerTest.cls force-app/main/default/classes/LexInventoryControllerTest.cls-meta.xml force-app/main/default/classes/LexInventoryListController.cls force-app/main/default/classes/LexInventoryListControllerTest.cls force-app/main/default/classes/LexInventoryListControllerTest.cls-meta.xml force-app/main/default/classes/LexInventoryViewControllerTest.cls force-app/main/default/classes/LexInventoryViewControllerTest.cls-meta.xml force-app/main/default/classes/LexLicenceReminderControllerTest.cls force-app/main/default/classes/LexLicenceReminderControllerTest.cls-meta.xml force-app/main/default/classes/LexOutboundorderImportController.cls force-app/main/default/classes/LexOutboundorderImportControllerTest.cls force-app/main/default/classes/LexOutboundorderImportControllerTest.cls-meta.xml force-app/main/default/classes/LexOverdueStockController.cls force-app/main/default/classes/LexOverdueStockControllerTest.cls force-app/main/default/classes/LexOverdueStockControllerTest.cls-meta.xml force-app/main/default/classes/LexProductLimitEditControllerTest.cls force-app/main/default/classes/LexProductLimitEditControllerTest.cls-meta.xml force-app/main/default/classes/LexRemoveBoxControllerTest.cls force-app/main/default/classes/LexRemoveBoxControllerTest.cls-meta.xml force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls-meta.xml force-app/main/default/classes/LexSaleOrderController.cls force-app/main/default/classes/LexSaleOrderControllerTest.cls force-app/main/default/classes/LexSaleOrderControllerTest.cls-meta.xml force-app/main/default/classes/LexSearchContractControllerTest.cls force-app/main/default/classes/LexSearchContractControllerTest.cls-meta.xml force-app/main/default/classes/LexSearchHospitalControllerTest.cls force-app/main/default/classes/LexSearchHospitalControllerTest.cls-meta.xml force-app/main/default/classes/LexSummonsCreatController.cls force-app/main/default/classes/LexSummonsCreatControllerTest.cls force-app/main/default/classes/LexSummonsCreatControllerTest.cls-meta.xml force-app/main/default/classes/LexTopPageControllerTest.cls force-app/main/default/classes/LexTopPageControllerTest.cls-meta.xml force-app/main/default/classes/LexUpAccountProLimit.cls force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls-meta.xml force-app/main/default/classes/LexUtilityTest.cls force-app/main/default/classes/LexUtilityTest.cls-meta.xml force-app/main/default/classes/LookupSearchResultTest.cls force-app/main/default/classes/LookupSearchResultTest.cls-meta.xml force-app/main/default/classes/ResponseBodyLWCTest.cls force-app/main/default/classes/ResponseBodyLWCTest.cls-meta.xml force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls-meta.xml force-app/main/default/contentassets/OlympusCommunityLoginBG.asset-meta.xml force-app/main/default/contentassets/OlympusCommunityLogo.asset-meta.xml force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.html force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js-meta.xml force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.html force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js-meta.xml force-app/main/default/lwc/customMydrComp/customMydrComp.html force-app/main/default/lwc/customMydrComp/customMydrComp.js force-app/main/default/lwc/customMydrComp/customMydrComp.js-meta.xml force-app/main/default/lwc/customOutputGood/customOutputGood.html force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.html force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.js force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.html force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.js force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.html force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.js force-app/main/default/lwc/lexConsumable/lexConsumable.html force-app/main/default/lwc/lexConsumable/lexConsumable.js force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.html force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.js force-app/main/default/lwc/lexCustomInventoryColor/lexCustomInventoryColor.html force-app/main/default/lwc/lexInventory/lexInventory.html force-app/main/default/lwc/lexInventory/lexInventory.js force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.html force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.js force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.html force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js force-app/main/default/lwc/lexTopPage/lexTopPage.html force-app/main/default/lwc/lexTopPage/lexTopPage.js force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js force-app/main/default/lwc/paginator/paginator.html force-app/main/default/lwc/paginator/paginator.js force-app/main/default/pages/DealerInquiryModifyState.page force-app/main/default/pages/DealerInquiryModifyState.page-meta.xml force-app/main/default/permissionsets/Community_Consumable_LEX_PS.permissionset-meta.xml force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger-meta.xml force-app/main/default/triggers/ContentDocumentLink.trigger force-app/main/default/triggers/ContentDocumentTrigger.trigger manifest/LEXC02packagelexcommunityupdate.xml