buli
2023-07-11 80a3f59e2d3df07805bc67e329300b8de90a5b3a
Merge branch 'LEXCommunityLiJun' into LEXUpgrade2023-Deloitte
275个文件已修改
10个文件已删除
476个文件已添加
139335 ■■■■■ 已修改文件
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D0k000000EKIhEAO/localSourceTracking/HEAD 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D0k000000EKIhEAO/localSourceTracking/config 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D0l0000004CqBEAU/localSourceTracking/HEAD 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D0l0000004CqBEAU/localSourceTracking/config 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D6D00000043GHUAY/localSourceTracking/HEAD 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sf/orgs/00D6D00000043GHUAY/localSourceTracking/config 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/settings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.cmp 1226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.cmp-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTarget.css 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/CreateTarget/CreateTargetHelper.js 798 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImport.cmp 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportController.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportHelper.js 316 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.auradoc 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.cmp 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.cmp-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.design 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.svg 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAuraController.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAuraHelper.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAuraRenderer.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.auradoc 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.cmp 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.cmp-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.css 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityController.js 334 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityHelper.js 341 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityRenderer.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.cmp 2692 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.css 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportController.js 749 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportHelper.js 7809 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.auradoc 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.cmp 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.cmp-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.design 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.svg 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJunController.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJunHelper.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJunRenderer.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp 1182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.css 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js 347 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js 3323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsController.cls 5071 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTest.cls 7326 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ArriveGoodsControllerTestV2.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/AssetHandler.cls 941 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/AssetHandler.cls-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFiles.cls 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFiles.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ContactTriggerHandler.cls 314 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/DealerInquiryModifyStateController.cls 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/DealerInquiryModifyStateControllerTest.cls 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/EquipmentSetShippmentReceived3Controller.cls 652 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LayoutDescriberHelper.cls 1070 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LayoutDescriberHelperTest.cls 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsController.cls 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest.cls 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainController.cls 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGsDetailsController.cls 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxController.cls 825 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls 832 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceListTest.cls 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceListTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewController.cls 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls 3696 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsController.cls 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConInvoicedetailsControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountController.cls 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountControllerTest.cls 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountInfoControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQL.cls 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQLTest.cls 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableAccountSOQLTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableController.cls 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableControllerTest.cls 1245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableGoodsInfo.cls 781 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableGoodsInfoTest.cls 975 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableGoodsInfoTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageController.cls 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexConsumableOrderManageControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryController.cls 1748 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryControllerTest.cls 1087 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListController.cls 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListControllerTest.cls 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryListControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryViewController.cls 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryViewControllerTest.cls 1178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexInventoryViewControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexLicenceReminderControllerTest.cls 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexLicenceReminderControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexNewAndEditBasePIPLController.cls 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexNewAndEditBasePIPLController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexNewAndEditContactPIPLController.cls 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexNewAndEditContactPIPLController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportController.cls 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportControllerTest.cls 612 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOutboundorderImportControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockController.cls 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockControllerTest.cls 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexOverdueStockControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexProductLimitEditControllerTest.cls 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexProductLimitEditControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexRemoveBoxControllerTest.cls 713 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexRemoveBoxControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleAndDeliveryControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderController.cls 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderControllerTest.cls 1665 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSaleOrderControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchContractControllerTest.cls 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchContractControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchHospitalControllerTest.cls 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSearchHospitalControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatController.cls 2310 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatControllerTest.cls 3489 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexSummonsCreatControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexTopPageControllerTest.cls 424 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexTopPageControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimit.cls 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUpAccountProLimitControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUtilityTest.cls 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LexUtilityTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LightningUtil.cls 1432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LookupSearchResultTest.cls 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LookupSearchResultTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/MetaDataUtility.cls 199 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditLeadController.cls 1174 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditLeadControllerTest.cls 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Product2Handler.cls 440 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyEquipmentSetDetailHandler.cls 4218 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ResponseBodyLWCTest.cls 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ResponseBodyLWCTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/WeeklyReportCmp.cls 1611 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLoginBG.asset 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLoginBG.asset-meta.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLogo.asset 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/contentassets/OlympusCommunityLogo.asset-meta.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/dashboards/ConsumableSalesDashboard.dashboardFolder-meta.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/dashboards/ConsumableSalesDashboard/ezyQWhsDlQfrUPdIMqUmGsdMeWiYAH2.dashboard-meta.xml 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/dashboards/Consumable_Dashboard/ezyQWhsDlQfrUPdIMqUmGsdMeWiYAH.dashboard-meta.xml 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/dashboards/LEX.dashboardFolder-meta.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/brandingSets/partnerCentral.json 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/config/consumable系统.json 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/config/languages.json 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/config/loginAppPage.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/config/mainAppPage.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/accountManagement.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/cICList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/cICRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/cICリスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/cIC関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/campaignList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/caseDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/checkPassword.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/contactSupport.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/createRecord.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/dashboardDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/dashboardList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/error.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/feedDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/fileDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/fileList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/flow.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/forgotPassword.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/groupDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/groupList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/home.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexAgencyInfo.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexArriveGoods.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexArriveGoodsMain.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexArriveGsDetails.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexCancelRemoveBox.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexConInvoiceView.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexConsumable.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexConsumableAccount.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexConsumableAccountInfoPrint.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexConsumableOrderManage.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexInventory.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexInventoryView.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexOutboundorderImport.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexOverdueStock.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexProductLimitEdit.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexRemoveBox.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexSaleAndDelivery.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexSummonsCreat.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/lexTopPage.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/login.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/loginError.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/mDFAndCoop.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/messages.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/myAccount.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/questionDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/quipDocsRelatedList.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/recordDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/recordList.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/register.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/relatedRecordList.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/reportBuilder.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/reportDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/reportList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/resources.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/search.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/streamDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/streamList.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/topicCatalog.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/topicDetail.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/userProfile.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/userSettings.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/仪表板RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/仪表板関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/学会・培训Detail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/学会・培训RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/学会・培训詳細.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/学会・培训関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/小组RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/小组関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/库存.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/库存上下限编辑.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/报表RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/报表関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/文件RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/文件関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/新建消耗品订单.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/流RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/流関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/消耗品订单列表.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/消耗品订单相关列表.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/消耗品订单详细信息.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/用户List.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/用户RelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/用户リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/routes/用户関連リスト.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/themes/partnerCentral.json 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/variations/defaultCustomComponentPropertiesComponentProperties.json 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/variations/defaultNavigationMenuComponentProperties.json 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/accountManagement.json 284 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/cICList.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/cICRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/cICリスト.json 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/cIC関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/campaignList.json 286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/caseDetail.json 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/checkPassword.json 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/consumableDetailFix.json 294 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/contactSupport.json 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/createRecord.json 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/dashboardDetail.json 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/dashboardList.json 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/error.json 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/feedDetail.json 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/fileDetail.json 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/fileList.json 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/flow.json 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/forgotPassword.json 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/groupDetail.json 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/groupList.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/home.json 474 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/homeFlexible.json 190 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexAgencyInfo.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexArriveGoods.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexArriveGoodsMain.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexArriveGsDetails.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexCancelRemoveBox.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexConInvoiceView.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexConsumable.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexConsumableAccount.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexConsumableAccountInfoPrint.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexConsumableOrderManage.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexInventory.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexInventoryView.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexOutboundorderImport.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexOverdueStock.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexProductLimitEdit.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexRemoveBox.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexSaleAndDelivery.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexSummonsCreat.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/lexTopPage.json 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/login.json 136 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/loginError.json 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/mDFAndCoop.json 376 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/messages.json 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/myAccount.json 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/neworder.json 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/questionDetail.json 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/quipDocsRelatedList.json 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/recordDetail.json 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/recordList.json 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/register.json 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/relatedRecordList.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/reportBuilder.json 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/reportDetail.json 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/reportList.json 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/resources.json 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/search.json 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/streamDetail.json 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/streamList.json 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/topicCatalog.json 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/topicDetail.json 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/userProfile.json 222 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/userSettings.json 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/仪表板RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/仪表板関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/学会・培训Detail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/学会・培训RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/学会・培训詳細.json 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/学会・培训関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/小组RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/小组関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/库存.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/库存上下限编辑.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/报表RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/报表関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/文件RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/文件関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/流RelatedList.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/流関連リスト.json 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/消耗品订单列表.json 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/消耗品订单相关列表.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/消耗品订单详细信息.json 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/用户List.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/用户RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/用户リスト.json 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable1/views/用户関連リスト.json 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21.site-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/brandingSets/partnerCentral.json 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/config/consumable系统2.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/config/languages.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/config/loginAppPage.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/config/mainAppPage.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/accountManagement.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/cICList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/cICRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/campaignDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/campaignList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/campaignRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/caseDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/checkPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/contactSupport.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/createRecord.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/dashboardDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/dashboardList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/dashboardRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/error.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/feedDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/fileDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/fileList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/fileRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/flow.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/forgotPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/groupDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/groupList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/groupRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/home.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexAgencyInfo.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexArriveGoods.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexArriveGoodsMain.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexArriveGsDetails.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexCancelRemoveBox.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexConInvoiceView.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexConsumable.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexConsumableAccount.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexConsumableAccountInfoPrint.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexConsumableOrderManage.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexInventory.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexInventoryView.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexOutboundorderImport.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexOverdueStock.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexProductLimitEdit.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexRemoveBox.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexSaleAndDelivery.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexSummonsCreat.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/lexTopPage.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/login.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/loginError.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/mDFAndCoop.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/messages.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/myAccount.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/questionDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/quipDocsRelatedList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/recordDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/recordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/register.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/relatedRecordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/reportBuilder.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/reportDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/reportList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/reportRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/resources.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/search.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/streamDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/streamList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/streamRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/topicCatalog.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/topicDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/userList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/userProfile.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/userRelatedList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/userSettings.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/消耗品订单Detail.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/消耗品订单List.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/routes/消耗品订单RelatedList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/themes/partnerCentral.json 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/variations/defaultNavigationMenuComponentProperties.json 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/accountManagement.json 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/cICList.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/cICRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/campaignDetail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/campaignList.json 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/campaignRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/caseDetail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/checkPassword.json 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/consumableDetailFix.json 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/contactSupport.json 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/createRecord.json 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/dashboardDetail.json 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/dashboardList.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/dashboardRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/error.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/feedDetail.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/fileDetail.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/fileList.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/fileRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/flow.json 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/forgotPassword.json 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/groupDetail.json 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/groupList.json 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/groupRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/home.json 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/homeFlexible.json 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexAgencyInfo.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexArriveGoods.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexArriveGoodsMain.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexArriveGsDetails.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexCancelRemoveBox.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexConInvoiceView.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexConsumable.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexConsumableAccount.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexConsumableAccountInfoPrint.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexConsumableOrderManage.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexInventory.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexInventoryView.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexOutboundorderImport.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexOverdueStock.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexProductLimitEdit.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexRemoveBox.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexSaleAndDelivery.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexSummonsCreat.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/lexTopPage.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/login.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/loginError.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/mDFAndCoop.json 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/messages.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/myAccount.json 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/questionDetail.json 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/quipDocsRelatedList.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/recordDetail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/recordList.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/register.json 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/relatedRecordList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/reportBuilder.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/reportDetail.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/reportList.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/reportRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/resources.json 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/search.json 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/streamDetail.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/streamList.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/streamRelatedList.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/topicCatalog.json 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/topicDetail.json 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/userList.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/userProfile.json 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/userRelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/userSettings.json 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/消耗品订单Detail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/消耗品订单List.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Consumable_21/views/消耗品订单RelatedList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21.site-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/brandingSets/partnerCentral.json 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/config/languages.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/config/loginAppPage.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/config/mainAppPage.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/config/partner2.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/accountManagement.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/cICリスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/cIC関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/campaignList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/caseDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/checkPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/contactSupport.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/createRecord.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/dashboardDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/dashboardList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/error.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/feedDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/fileDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/fileList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/flow.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/forgotPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/groupDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/groupList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/home.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/login.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/loginError.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/mDFAndCoop.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/messages.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/myAccount.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/questionDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/quipDocsRelatedList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/recordDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/recordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/register.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/relatedRecordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/reportBuilder.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/reportDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/reportList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/resources.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/search.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/streamDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/streamList.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/topicCatalog.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/topicDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/userProfile.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/userSettings.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/仪表板関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/学会・培训詳細.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/学会・培训関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/小组関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/报表関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/文件関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/流関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/用户リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/routes/用户関連リスト.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/themes/partnerCentral.json 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/accountManagement.json 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/cICリスト.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/cIC関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/campaignList.json 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/caseDetail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/checkPassword.json 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/contactSupport.json 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/createRecord.json 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/dashboardDetail.json 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/dashboardList.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/error.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/feedDetail.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/fileDetail.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/fileList.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/flow.json 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/forgotPassword.json 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/groupDetail.json 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/groupList.json 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/home.json 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/login.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/loginError.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/mDFAndCoop.json 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/messages.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/myAccount.json 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/questionDetail.json 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/quipDocsRelatedList.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/recordDetail.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/recordList.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/register.json 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/relatedRecordList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/reportBuilder.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/reportDetail.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/reportList.json 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/resources.json 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/search.json 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/streamDetail.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/streamList.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/topicCatalog.json 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/topicDetail.json 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/userProfile.json 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/userSettings.json 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/仪表板関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/学会・培训詳細.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/学会・培训関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/小组関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/报表関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/文件関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/流関連リスト.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/用户リスト.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Partner21/views/用户関連リスト.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3.site-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/brandingSets/buildYourOwn.json 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/config/languages.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/config/loginAppPage.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/config/mainAppPage.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/config/电子签收系统.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/checkPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/createRecord.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/error.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/forgotPassword.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/home.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/login.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/loginError.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/recordDetail.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/recordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/register.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/relatedRecordList.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/search.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/奥林巴斯电子签收系统.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/routes/进口单证明细.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/themes/buildYourOwn.json 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/checkPassword.json 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/createRecord.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/error.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/forgotPassword.json 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/home.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/login.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/loginError.json 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/recordDetail.json 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/recordList.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/register.json 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/relatedRecordList.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/search.json 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/奥林巴斯电子签收系统.json 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/experiences/Site3/views/进口单证明细.json 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/labels/CustomLabels.labels-meta.xml 6345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.html 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customAccountUrlComp/customAccountUrlComp.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customDeleteReasonComp/customDeleteReasonComp.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.html 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customMydrComp/customMydrComp.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShipmentNumberComp/customShipmentNumberComp.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShipmentNumberComp/customShipmentNumberComp.js 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.html 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyInfo/lexAgencyInfo.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyInfo/lexAgencyInfo.html 190 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.html 793 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.js 1645 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.html 207 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGoodsMain/lexArriveGoodsMain.js 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGsDetails/lexArriveGsDetails.html 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexArriveGsDetails/lexArriveGsDetails.js 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelRemoveBox/lexCancelRemoveBox.html 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelRemoveBox/lexCancelRemoveBox.js 400 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.css 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.html 1215 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.js 2175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumable/lexConsumable.html 981 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumable/lexConsumable.js 3040 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.html 467 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumableAccount/lexConsumableAccount.js 984 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexConsumableOrderManage/lexConsumableOrderManage.html 191 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCssUtility/lexCssUtility.css 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomDiffReasonComp/lexCustomDiffReasonComp.html 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomInventoryColor/lexCustomInventoryColor.html 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customMyDrCheckBox.html 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentNumber.html 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customaccountUrl.html 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/customdeleteReason.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventory/lexInventory.css 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventory/lexInventory.html 313 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexInventory/lexInventory.js 1479 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLookup/lexLookup.html 222 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.html 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.js 505 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.js-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOutboundorderImport/lexOutboundorderImport.html 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOutboundorderImport/lexOutboundorderImport.js 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOverdueStock/lexOverdueStock.html 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOverdueStock/lexOverdueStock.js 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexProductLimitEdit/lexProductLimitEdit.html 143 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexProductLimitEdit/lexProductLimitEdit.js 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRemoveBox/lexRemoveBox.html 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRemoveBox/lexRemoveBox.js 448 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.html 301 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.js 345 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.css 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.html 1715 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.js 3108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopPage/lexTopPage.html 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopPage/lexTopPage.js 631 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.css 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html 279 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js 1216 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/Consumable系统.network-meta.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/Consumable系统2.network-meta.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/Partner Sales.network-meta.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/Partner2.network-meta.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/消耗品管理系统.network-meta.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/networks/电子签收系统.network-meta.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/DealerInquiryModifyState.page 1386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/DealerInquiryModifyState.page-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OFSInsReportLayout.page 2569 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/StraightBackAddress.page 2143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/StraightBackAddress.page-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/permissionsets/Community_Consumable_LEX_PS.permissionset-meta.xml 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/permissionsets/Community_LEX_PS.permissionset-meta.xml 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport.reportFolder-meta.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/Consumable_Outstock_Invoice_Lex.report-meta.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/CurrentMonthSalesRankByAccount.report-meta.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/CurrentMonthSalesRankByProduct.report-meta.xml 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/LastMonthSalesByAccount1.report-meta.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/LastMonthSalesByProduct.report-meta.xml 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/Report_Outbound_Lex.report-meta.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/ConsumableSalesReport/WeeklyReportForAgency.report-meta.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Consumable_KC/CurrentMonthSalesRankByAccount.report-meta.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Consumable_KC/CurrentMonthSalesRankByProduct.report-meta.xml 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Consumable_KC/LastMonthSalesByAccount1.report-meta.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Consumable_KC/LastMonthSalesByProduct.report-meta.xml 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Consumable_KC/WeeklyReportForAgency.report-meta.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Store_Custom_ReportLink/Consumable_Outstock_Invoice_Lex.report-meta.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/reports/Store_Custom_ReportLink/Report_Outbound_Lex.report-meta.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Consumable.site-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Consumable_2.site-meta.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Partner2.site-meta.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Partner_Sales.site-meta.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Site.site-meta.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/Site2.site-meta.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/sites/extsurvey.site-meta.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/lexdatatable.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger 584 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger-meta.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ConsumableOrderTrigger.trigger 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ContentDocumentLink.trigger 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/ContentDocumentTrigger.trigger 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC00basecmp.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC01packagelexcommunitynew.xml 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC02packagelexcommunityupdate.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC03Dahsboard.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC03report.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC03reportanddashboard.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest/LEXC04packagecommdeploy.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -37,3 +37,4 @@
# Local environment variables
.env
.vim-force.com/session.properties
.sf/config.json
.sf/orgs/00D0k000000EKIhEAO/localSourceTracking/HEAD
New file
@@ -0,0 +1 @@
ref: refs/heads/main
.sf/orgs/00D0k000000EKIhEAO/localSourceTracking/config
New file
@@ -0,0 +1,7 @@
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
.sf/orgs/00D0l0000004CqBEAU/localSourceTracking/HEAD
New file
@@ -0,0 +1 @@
ref: refs/heads/main
.sf/orgs/00D0l0000004CqBEAU/localSourceTracking/config
New file
@@ -0,0 +1,7 @@
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
.sf/orgs/00D6D00000043GHUAY/localSourceTracking/HEAD
New file
@@ -0,0 +1 @@
ref: refs/heads/main
.sf/orgs/00D6D00000043GHUAY/localSourceTracking/config
New file
@@ -0,0 +1,7 @@
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
.vscode/settings.json
@@ -5,6 +5,6 @@
    "**/.sfdx": true
  },
  "salesforcedx-vscode-core.show-cli-success-msg": false,
  "open-in-browser.default": "{\"opn-in-browser.default\":\"Microsoft Edge\"}",
  "salesforcedx-vscode-apex.java.home": "C:\\Users\\buli\\Documents\\Software\\JDK\\jdk19\\bin"
  "salesforcedx-vscode-apex.java.home": "C:\\Users\\buli\\Documents\\Software\\JDK11\\",
  "open-in-browser.default": "{\"opn-in-browser.default\":\"Microsoft Edge\"}"
}
force-app/main/default/aura/CreateTarget/CreateTarget.cmp
@@ -1,318 +1,926 @@
<aura:component controller="CreateTargetCmp" implements="forceCommunity:availableForAllPageTypes,force:hasRecordId" 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}"/>
    <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 class="close_icn" iconName="utility:close" size="medium" alternativeText="Indicates approval"/>
                    <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"/>
                                </div>
                            </div>
                            <!-- <h4 class="slds-section__title">访问目标</h4>
    <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>
        </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 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,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8" ?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>39.0</apiVersion>
    <apiVersion>42.0</apiVersion>
    <description>A Lightning Component Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/CreateTarget/CreateTarget.css
@@ -3,4 +3,10 @@
}
.THIS.disp_none {
    display: none;
}
}
.THIS select {
    --lwc-lineHeightButton: 36px;
    --lwc-heightInput: 36px;
    min-height: 0px !important;
    height: 36px !important;
}
force-app/main/default/aura/CreateTarget/CreateTargetHelper.js
@@ -1,116 +1,192 @@
({
    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();
                if(state === "SUCCESS") {
    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);
                    // 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') {
                        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'
                    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);
                        ];
                        // 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);
                        // 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") {
                } else if (state === 'ERROR') {
                    var errors = response.getError();
                    var toastEvent = $A.get("e.force:showToast");
                    var toastEvent = $A.get('e.force:showToast');
                    toastEvent.setParams({
                        "title": "错误",
                        "type":"error",
                        "message": errors[0].message
                        title: '错误',
                        type: 'error',
                        message: errors[0].message
                    });
                    toastEvent.fire();
                }
            });
            $A.enqueueAction(action);
        }
        var action = component.get("c.getProductList");
        action.setCallback(this, function(response) {
        var action = component.get('c.getProductList');
        action.setCallback(this, function (response) {
            var state = response.getState();
            if(state === "SUCCESS") {
            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_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_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_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_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_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_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_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") {
                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");
                var toastEvent = $A.get('e.force:showToast');
                toastEvent.setParams({
                    "title": "错误",
                    "type":"error",
                    "message": errors[0].message
                    title: '错误',
                    type: 'error',
                    message: errors[0].message
                });
                toastEvent.fire();
            }
        });
        $A.enqueueAction(action);
    },
    toggle_report : function(component, event, helper) {
    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")) {
        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;
    productcategoryChange: function (component, event, helper, dept, index) {
        var cmpId = 'select_' + dept;
        var myId;
        var o1Id;
        var o2Id;
@@ -118,7 +194,7 @@
            myId = cmpId + '1';
            o1Id = cmpId + '2';
            o2Id = cmpId + '3';
        } else if (index == 2){
        } else if (index == 2) {
            myId = cmpId + '2';
            o1Id = cmpId + '1';
            o2Id = cmpId + '3';
@@ -133,22 +209,27 @@
        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)) {
        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(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();
    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 = '';
@@ -158,24 +239,36 @@
                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;
                        GIProduct_Category2 =
                            amountMap.GI[1].Product_Category__c;
                    }
                    if (amountMap.GI.length > 2) {
                        GIProduct_Category3 = amountMap.GI[2].Product_Category__c;
                        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);
                    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);
                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 = '';
@@ -186,22 +279,29 @@
                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;
                        ETProduct_Category2 =
                            amountMap.ET[1].Product_Category__c;
                    }
                    if (amountMap.ET.length > 2) {
                        ETProduct_Category3 = amountMap.ET[2].Product_Category__c;
                        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_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 = '';
@@ -212,22 +312,29 @@
                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;
                        BFProduct_Category2 =
                            amountMap.BF[1].Product_Category__c;
                    }
                    if (amountMap.BF.length > 2) {
                        BFProduct_Category3 = amountMap.BF[2].Product_Category__c;
                        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);
                }
                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 = '';
@@ -236,25 +343,38 @@
                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;
                        OTHProduct_Category2 =
                            amountMap.OTH[1].Product_Category__c;
                    }
                    if (amountMap.OTH.length > 2) {
                        OTHProduct_Category3 = amountMap.OTH[2].Product_Category__c;
                        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);
                }
                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 = '';
@@ -264,22 +384,30 @@
                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;
                        GSProduct_Category2 =
                            amountMap.GS[1].Product_Category__c;
                    }
                    if (amountMap.GS.length > 2) {
                        GSProduct_Category3 = amountMap.GS[2].Product_Category__c;
                        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);
                    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 = '';
@@ -287,26 +415,38 @@
                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;
                        UROProduct_Category2 =
                            amountMap.URO[1].Product_Category__c;
                    }
                    if (amountMap.URO.length > 2) {
                        UROProduct_Category3 = amountMap.URO[2].Product_Category__c;
                        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);
                }
                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 = '';
@@ -314,26 +454,38 @@
                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;
                        GYNProduct_Category2 =
                            amountMap.GYN[1].Product_Category__c;
                    }
                    if (amountMap.GYN.length > 2) {
                        GYNProduct_Category3 = amountMap.GYN[2].Product_Category__c;
                        GYNProduct_Category3 =
                            amountMap.GYN[2].Product_Category__c;
                    }
                    GYNAim_Price__c1= amountMap.GYN[0].Aim_Price__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);
                }
                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 = '';
@@ -341,32 +493,48 @@
                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;
                        ENTProduct_Category2 =
                            amountMap.ENT[1].Product_Category__c;
                    }
                    if (amountMap.ENT.length > 2) {
                        ENTProduct_Category3 = amountMap.ENT[2].Product_Category__c;
                        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')));
                }
                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() {
    getOCMTerm: function () {
        var today = new Date();
        var year = today.getFullYear();
        var month = today.getMonth();
@@ -377,203 +545,243 @@
        return thisYearOCMPeriod;
    },
    createTarget : function(component, event, helper) {
        var action = component.get("c.createSFTarget");
        // alert(component.get("v.GIAmount"));
    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');
        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 == "") {
        if (p1_1 == undefined || p1_1 == '') {
            p1_1 = 0;
        }
        if (p1_2 == undefined || p1_2 == "") {
        if (p1_2 == undefined || p1_2 == '') {
            p1_2 = 0;
        }
        if (p1_3 == undefined || p1_3 == "") {
        if (p1_3 == undefined || p1_3 == '') {
            p1_3 = 0;
        }
        console.warn(p1_1+"-"+p1_2+"-"+p1_3);
        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 == "") {
        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 == "") {
        if (p2_2 == undefined || p2_2 == '') {
            p2_2 = 0;
        }
        if (p2_3 == undefined || p2_3 == "") {
        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 == "") {
        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 == "") {
        if (p3_2 == undefined || p3_2 == '') {
            p3_2 = 0;
        }
        if (p3_3 == undefined || p3_3 == "") {
        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 == "") {
        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 == "") {
        if (p4_2 == undefined || p4_2 == '') {
            p4_2 = 0;
        }
        if (p4_3 == undefined || p4_3 == "") {
        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 == "") {
        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 == "") {
        if (p5_2 == undefined || p5_2 == '') {
            p5_2 = 0;
        }
        if (p5_3 == undefined || p5_3 == "") {
        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 == "") {
        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 == "") {
        if (p6_2 == undefined || p6_2 == '') {
            p6_2 = 0;
        }
        if (p6_3 == undefined || p6_3 == "") {
        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 == "") {
        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 == "") {
        if (p7_2 == undefined || p7_2 == '') {
            p7_2 = 0;
        }
        if (p7_3 == undefined || p7_3 == "") {
        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 == "") {
        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 == "") {
        if (p8_2 == undefined || p8_2 == '') {
            p8_2 = 0;
        }
        if (p8_3 == undefined || p8_3 == "") {
        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) {
        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 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");
                var toastEvent = $A.get('e.force:showToast');
                toastEvent.setParams({
                    "title": "成功",
                    "type":"success",
                    "message": "保存成功"
                    title: '成功',
                    type: 'success',
                    message: '保存成功'
                });
                toastEvent.fire();
                $A.get('e.force:refreshView').fire();
            } else if (state === "INCOMPLETE") {
                var toastEvent = $A.get("e.force:showToast");
            } else if (state === 'INCOMPLETE') {
                var toastEvent = $A.get('e.force:showToast');
                toastEvent.setParams({
                    "title": "未完成!",
                    "type":"error",
                    "message": "未完成"
                    title: '未完成!',
                    type: 'error',
                    message: '未完成'
                });
                toastEvent.fire();
            } else if (state === "ERROR") {
                var errors = response.getError();
                var toastEvent = $A.get("e.force:showToast");
            } else if (state === 'ERROR') {
                var errors = response.getError();
                var toastEvent = $A.get('e.force:showToast');
                toastEvent.setParams({
                    "title": "错误",
                    "type":"error",
                    "message": errors[0].message
                    title: '错误',
                    type: 'error',
                    message: errors[0].message
                });
                toastEvent.fire();
            }
        });
        $A.enqueueAction(action);
            }
        });
        $A.enqueueAction(action);
    },
    warning : function(message) {
        var toastEvent = $A.get("e.force:showToast");
    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"
            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,101 +1,181 @@
<!--
 * @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">
<!-- 批量添加周报 start-->
<!-- <aura:handler name="init" value="{!this}" action="{!c.doInit}" /> -->
<aura:attribute name="reports_date" type="List" />
<aura:attribute name="errorMessage" type="String" />
<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" />
<aura:attribute name="login" type="Boolean" default="false" />
<aura:attribute name="successMessage" type="String" />
<!-- 批量添加周报 end-->
<aura:renderIf isTrue="{!v.login}">
<aura:component
    controller="DealerPersonnelController"
    implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes"
    access="global"
>
    <!-- 批量添加周报 start-->
    <!-- <aura:handler name="init" value="{!this}" action="{!c.doInit}" /> -->
    <aura:attribute name="reports_date" type="List" />
    <aura:attribute name="errorMessage" type="String" />
    <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" />
    <aura:attribute name="login" type="Boolean" default="false" />
    <aura:attribute name="successMessage" type="String" />
    <!-- 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-->
    <aura:renderIf isTrue="{!v.login}">
        <div class="slds-spinner_container height100vh">
            <div class="slds-spinner--brand slds-spinner slds-spinner--medium" role="alert">
            <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>
    </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" /> -->
    <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" />
                        <!-- DB202301262139 SFDC经销商人员导入功能改进 start -->
                        <!-- <h2 class="slds-text-heading_small ">{!v.errorMessage}</h2> -->
                        <pre class="slds-text-heading_small ">{!v.errorMessage}</pre>
                        <!-- DB202301262139 SFDC经销商人员导入功能改进 end -->
    <!-- 批量添加周报 start-->
    <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>
<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 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>
<div >
    <div class="slds-modal__header ">
        <h4 id="headerTarget" class="slds-float--left"></h4>
        <h2 id="headerTarget" class="slds-text-heading--medium">客户人员批量导入</h2>
    </div>
    <div class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium ">
        <aura:if isTrue="{!v.showMain}">
            <div>
                <center>
                <lightning:input type="file" class="file" uara:id="file" onchange="{!c.CreateRecord}" />
            </center>
            </div>
            <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 aura:id="save_con" label="保存" variant="brand" onclick="{!c.processFileContent}" disabled="false" />
                    <lightning:button label="取消" variant="brand" onclick="{!c.cancel}" />
    <div>
        <div class="slds-modal__header">
            <h4 id="headerTarget" class="slds-float--left"></h4>
            <h2 id="headerTarget" class="slds-text-heading--medium">
                客户人员批量导入
            </h2>
        </div>
        <div
            class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium"
        >
            <aura:if isTrue="{!v.showMain}">
                <div>
                    <center>
                        <lightning:input
                            type="file"
                            class="file"
                            uara:id="file"
                            onchange="{!c.CreateRecord}"
                        />
                    </center>
                </div>
            </aura:set>
        </aura:if>
                <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
                            label="取消"
                            variant="brand"
                            onclick="{!c.cancel}"
                        />
                    </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"
                                    minColumnWidth="120"
                                />
                            </div>
                        </div>
                    </aura:if>
                </aura:set>
            </aura:if>
        </div>
    </div>
</div>
<!-- 批量添加周报 end-->
</aura:component>
    <!-- 批量添加周报 end-->
</aura:component>
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportController.js
@@ -1,12 +1,17 @@
({
    CreateRecord : function(component, event, helper){
        var files = event.getSource().get("v.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]);
    },
    processFileContent : function(component,event,helper){
        helper.saveRecords(component,event,helper);
    processFileContent: function (component, event, helper) {
        component.set('v.showErrorInfo', false);
        helper.saveRecords(component, event, helper);
    },
    cancel : function(component,event,helper){
        component.set("v.showMain",true);
    cancel: function (component, event, helper) {
        component.set('v.showMain', true);
    },
    exportErrorInfo: function (component, event, helper) {
        console.log('enter exportErrorInfo');
        helper.exportErrorInfoHelper(component);
    }
})
});
force-app/main/default/aura/DealerPersonnelInformationImport/DealerPersonnelInformationImportHelper.js
@@ -1,6 +1,5 @@
({
    readFile: function (component, helper, file) {
        debugger
        if (!file) return;
        if (!file.name.match(/\.(csv||CSV)$/)) {
            return alert('only support csv files');
@@ -18,168 +17,339 @@
                        break; // noop
                    default:
                        alert('An error occurred reading this file.');
                };
            }
                }
            };
            reader.onabort = function (e) {
                alert('File read cancelled');
            };
            reader.onloadstart = function (e) {
                var output = '<ui type=\"disc\"><li><strong>' + file.name + '</strong> (' + file.type + ')- ' + file.size + 'bytes, last modified: ' + file.lastModifiedDate.toLocaleDateString() + '</li></ui>';
                component.set("v.filename", file.name);
                component.set("v.TargetFileName", output);
                var output =
                    '<ui type="disc"><li><strong>' +
                    file.name +
                    '</strong> (' +
                    file.type +
                    ')- ' +
                    file.size +
                    'bytes, last modified: ' +
                    file.lastModifiedDate.toLocaleDateString() +
                    '</li></ui>';
                component.set('v.filename', file.name);
                component.set('v.TargetFileName', output);
            };
            reader.onload = function (e) {
                var data = e.target.result;
                // data.replace(/\n/,"")
                var allTextLines11 = data.split(/\r/);
                var s = allTextLines11.toString();
                component.set("v.fileContentData", s);
                console.log("file dataqqq" + JSON.stringify(s));
                component.set('v.fileContentData', s);
                console.log('file dataqqq' + JSON.stringify(s));
                var allTextLines = data.split(/\r\n|\n/);
                var dataRows = allTextLines.length - 1;
                var headers = allTextLines[0].split(',');
                var numOfRows = component.get("v.NumOfRecords");
                if (dataRows > numOfRows + 1 || dataRows == 1 || dataRows == 0) {
                    alert("File Rows between 1 to " + numOfRows + " .");
                    component.set("v.showMain", true);
                }
                else {
                var numOfRows = component.get('v.NumOfRecords');
                if (
                    dataRows > numOfRows + 1 ||
                    dataRows == 1 ||
                    dataRows == 0
                ) {
                    alert('File Rows between 1 to ' + numOfRows + ' .');
                    component.set('v.showMain', true);
                } else {
                    var lines = [];
                    var filecontentdata;
                    var content = "<table class=\"table slds-table slds-table--bordered slds-table--cell-buffer\">";
                    content += "<thead><tr class=\"slds-text-title--caps\">";
                    content += '<th scope=\"col"\>' + '行号' + '</th>';
                    var content =
                        '<table class="table slds-table slds-table--bordered slds-table--cell-buffer">';
                    content += '<thead><tr class="slds-text-title--caps">';
                    content += '<th scope="col">' + '行号' + '</th>';
                    for (i = 0; i < headers.length; i++) {
                        content += '<th scope=\"col"\>' + headers[i] + '</th>';
                        content += '<th scope="col">' + headers[i] + '</th>';
                    }
                    content += "</tr></thead>";
                    content += '</tr></thead>';
                    for (var i = 1; i < allTextLines.length; i++) {
                        filecontentdata = allTextLines[i].split(',');
                        if (filecontentdata[0] != '') {
                            content += "<tr>";
                            content += "<td>" + i + "</td>";
                            content += '<tr>';
                            content += '<td>' + i + '</td>';
                            for (var j = 0; j < filecontentdata.length; j++) {
                                content += '<td>' + filecontentdata[j] + '</td>';
                                content +=
                                    '<td>' + filecontentdata[j] + '</td>';
                            }
                            content += "</tr>";
                            content += '</tr>';
                        }
                    }
                    content += "</table>";
                    content += '</table>';
                    console.log(content);
                    component.set("v.TableContent", content);
                    component.set("v.showMain", false);
                    component.set('v.TableContent', content);
                    component.set('v.showMain', false);
                }
            }
            };
            reader.readAsText(file, 'gb2312');
        }
        var reader = new FileReader();
        reader.onloadend = function () {
        };
        reader.onloadend = function () {};
        reader.readAsDataURL(file);
    },
    saveRecords: function (component, event, helper) {
        debugger
        component.set('v.login', true);
        var action = component.get("c.processData");
        var action = component.get('c.processData');
        var fieldsList = ['Name', 'Phone', 'AccountNumber']; //Please write your code dynamic fields
        action.setParams({
            fileData: component.get("v.fileContentData"),
            fileData: component.get('v.fileContentData'),
            sobjectName: 'Account', //Any object
            fields: fieldsList
        });
        action.setCallback(this, function (response) {
            var state = response.getState();
            if (state === "SUCCESS") {
            if (state === 'SUCCESS') {
                var res = response.getReturnValue();
                var res1 = '';
                debugger;
                if (res != 'success') {
                    var ress = res.split('=');
                    console.log(ress);
                    let errorDatas = [];
                    let errorDataRow = [];
                    debugger;
                    for (var i = 0; i < ress.length; i++) {
                        res1 += ress[i].substr(7) + '\n';
                        if (ress[i] != '') {
                            let errorData = {};
                            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);
                                errorDatas.push(errorData);
                            } else {
                                errorDatas[index].errorInfo +=
                                    '; ' + ress[i].substr(7).substring(6);
                            }
                        }
                    }
                    console.log("==" + res1);
                    var fileContentData = component
                        .get('v.fileContentData')
                        .split('\n');
                    let errorColumns = [
                        {
                            label: '错误行',
                            fieldName: 'errorRow',
                            type: 'text',
                            hideDefaultActions: true,
                            initialWidth: 50
                        },
                        {
                            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
                        });
                    }
                    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];
                        }
                    }
                    console.log('errorDatas = ' + JSON.stringify(errorDatas));
                    component.set('v.errorColumns', errorColumns);
                    component.set('v.errorData', errorDatas);
                    component.set('v.showErrorInfo', true);
                    console.log('==' + res1);
                    // this.error( "请修改后重新上传");
                    component.set('v.errorMessage', res1 + "请修改后重新上传");
                    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.showMain', true);
                    component.set('v.login', false);
                    component.find('save_con').set('v.disabled', false);
                }
            }
            else if (state === "INCOMPLETE") {
            } else if (state === 'INCOMPLETE') {
                component.set('v.login', false);
            }
            else if (state === "ERROR") {
            } else if (state === 'ERROR') {
                var errors = response.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        console.log("Error message: " +
                            errors[0].message);
                        console.log('Error message: ' + errors[0].message);
                        let errorDatas = [
                            {
                                errorRow: '1',
                                errorInfo: errors[0].message
                            }
                        ];
                        let errorColumns = [
                            {
                                label: '错误行',
                                fieldName: 'errorRow',
                                type: 'text',
                                hideDefaultActions: true,
                                initialWidth: 50
                            },
                            {
                                label: '错误信息',
                                fieldName: 'errorInfo',
                                type: 'text',
                                hideDefaultActions: true,
                                initialWidth: 300,
                                wrapText: true
                            }
                        ];
                        component.set('v.errorData', errorDatas);
                        component.set('v.errorColumns', errorColumns);
                        component.set('v.showErrorInfo', true);
                        component.set('v.login', false);
                    }
                } else {
                    console.log("Unknown error");
                    console.log('Unknown error');
                    component.set('v.login', false);
                }
            }
        });
        $A.enqueueAction(action);
    },
    //弹出 成功提示
    showSuccessToast01: function (component) {
        $A.util.removeClass(component.find('successDiv01'), 'slds-hide');
        window.setTimeout($A.getCallback(function () {
            $A.util.addClass(component.find('successDiv01'), 'slds-hide');
        }),
        window.setTimeout(
            $A.getCallback(function () {
                $A.util.addClass(component.find('successDiv01'), 'slds-hide');
            }),
            3000
        );
    },
    //弹出 错误提示
    showErrorToast: function (component) {
        $A.util.removeClass(component.find('errorDiv'), 'slds-hide');
        window.setTimeout($A.getCallback(function () {
            $A.util.addClass(component.find('errorDiv'), 'slds-hide');
        }),
            7000
        window.setTimeout(
            $A.getCallback(function () {
                $A.util.addClass(component.find('errorDiv'), 'slds-hide');
            }),
            4000
        );
    },
    success : function(message) {
        var toastEvent = $A.get("e.force:showToast");
    success: function (message) {
        var toastEvent = $A.get('e.force:showToast');
        toastEvent.setParams({
            "title" : "成功!",
            "message" : message,
            "duration" : "5000"
            title: '成功!',
            message: message,
            duration: '5000'
        });
        toastEvent.fire();
    },
    warning : function(message) {
        var toastEvent = $A.get("e.force:showToast");
    warning: function (message) {
        var toastEvent = $A.get('e.force:showToast');
        toastEvent.setParams({
            "title": "警告!",
            "message": message,
            "duration" : "10000"
            title: '警告!',
            message: message,
            duration: '10000'
        });
        toastEvent.fire();
    },
    error : function(message) {
        var toastEvent = $A.get("e.force:showToast");
    error: function (message) {
        var toastEvent = $A.get('e.force:showToast');
        toastEvent.setParams({
            "title": "错误!",
            "message": message,
            "duration" : "sticky"
            title: '错误!',
            message: message,
            duration: 'sticky'
        });
        toastEvent.fire();
    },
})
    //zhj 导出错误信息 2023-05-16 start
    exportErrorInfoHelper: function (component) {
        var errorData = component.get('v.errorData');
        var errorColumns = component.get('v.errorColumns');
        var datas = [];
        let errorColumnsArray = [];
        for (var i in errorColumns) {
            errorColumnsArray.push(errorColumns[i].label);
        }
        datas.push(errorColumnsArray);
        //datas.push(errorColumns);
        for (var i in errorData) {
            let data = [];
            data.push(errorData[i].errorRow);
            data.push(errorData[i].errorInfo);
            for (var j = 0; j < Object.keys(errorData[i]).length - 2; j++) {
                data.push(errorData[i]['field' + j]);
            }
            datas.push(data);
        }
        console.log('datas = ' + JSON.stringify(datas));
        var csv = this.convertToCSV(component, datas);
        console.log('csv = ' + JSON.stringify(csv));
        this.downloadCSV(component, csv);
    },
    convertToCSV: function (component, data) {
        console.log('enter convertToCSV');
        console.log('data = ' + data);
        var csv = '';
        for (var i = 0; i < data.length; i++) {
            var row = data[i];
            console.log('row = ' + JSON.stringify(row));
            for (var j = 0; j < row.length; j++) {
                var val = '';
                val = row[j] === null ? '' : row[j].toString();
                console.log('val = ' + val);
                if (
                    val.indexOf(',') !== -1 ||
                    val.indexOf('"') !== -1 ||
                    val.indexOf('\n') !== -1
                ) {
                    //val = '"' + val.replace(/"/g,'""') + '"';
                }
                if (j > 0) {
                    csv += ',';
                }
                csv += val;
            }
            csv += '\n';
        }
        return csv;
    },
    downloadCSV: function (component, csv) {
        var link = document.createElement('a');
        // 设置字符集和文件头
        let bom = '\uFEFF';
        link.href =
            'data:text/csv;charset=utf-8,' + encodeURIComponent(bom + csv);
        link.download = 'data.csv';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
    //zhj 导出错误信息 2023-05-16 end
});
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.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/LexContactPIPLAura/LexContactPIPLAura.cmp
New file
@@ -0,0 +1,21 @@
<aura:component
    implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickActionWithoutHeader,lightning:actionOverride"
    access="global"
>
       
    <aura:html tag="style">
                .slds-modal__container{         max-width: 65rem !important;    
            width:100% !important;         }         .cuf-content {        
        padding: 0 0rem !important;         }         .slds-p-around--medium {  
              padding: 0rem !important;         }         .slds-modal__content{
                overflow-y:auto !important;         height:unset !important;    
            max-height:unset !important;         min-height:8rem;         }    
            .slds-tile_board{         padding:20px 40px;         }    
    </aura:html>
       
    <c:lexNewAndEditContactPIPL
        onclose="{!c.closeModal}"
        onrefresh="{!c.refreshView}"
        recordId="{!v.recordId}"
    />
</aura:component>
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.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>57.0</apiVersion>
    <description>A Lightning Component Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.css
New file
@@ -0,0 +1,2 @@
.THIS {
}
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.design
New file
@@ -0,0 +1,3 @@
<design:component >
</design:component>
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAura.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/LexContactPIPLAura/LexContactPIPLAuraController.js
New file
@@ -0,0 +1,9 @@
({
    closeModal: function (cmp, event, helper) {
        $A.get('e.force:closeQuickAction').fire();
    },
    refreshView: function (cmp, event, helper) {
        $A.get('e.force:refreshView').fire();
    }
});
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAuraHelper.js
New file
@@ -0,0 +1,3 @@
({
    helperMethod: function () {}
});
force-app/main/default/aura/LexContactPIPLAura/LexContactPIPLAuraRenderer.js
New file
@@ -0,0 +1,3 @@
({
    // Your renderer method overrides go here
});
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.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/NewAgencyOpportunity/NewAgencyOpportunity.cmp
New file
@@ -0,0 +1,233 @@
<!--
  @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="NewAgencyOpportunityController"
>
    <aura:attribute name="recordId" type="Id" default="" />
    <aura:attribute name="recordTypeId" type="Id" default="" />
    <aura:attribute name="ac_name" type="string" />
    <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="showSpinner2" 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:attribute name="isModalOpen" type="boolean" default="false" />
    <aura:attribute name="searchKeyWord" type="string" default="" />
    <aura:attribute name="contactAWSIds" type="List" />
    <aura:attribute name="login" type="Boolean" default="false" />
    <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}"
    />
    <div class="{! v.container_class}">
        <!-- 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_Opportunity__c">
                <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="经销商询价信息"
                            >
                                <aura:iteration
                                    items="{! section.layoutColumns}"
                                    var="col"
                                >
                                    <aura:iteration
                                        items="{! col.layoutItems}"
                                        var="field"
                                    >
                                        <aura:if
                                            isTrue="{!and(field.behavior != 'Readonly', field.field != 'Agency_Contact__c')}"
                                        >
                                            <lightning:inputField
                                                required="{! field.behavior == 'Required' }"
                                                aura:id="field"
                                                fieldName="{! field.field}"
                                                value="{! field.value}"
                                            />
                                        </aura:if>
                                        <aura:if
                                            isTrue="{!field.field == 'Agency_Contact__c' }"
                                        >
                                            <lightning:layout>
                                                <lightning:layoutItem size="12">
                                                    <lightning:input
                                                        required="{! field.behavior == 'Required' }"
                                                        label="客户人员"
                                                        value="{! field.value}"
                                                        variant="label-inline"
                                                        style="
                                                            margin-left: 0cm;
                                                            display: none;
                                                        "
                                                        onclick="{! c.openModel }"
                                                    />
                                                    <lightning:input
                                                        required="{! field.behavior == 'Required' }"
                                                        label="客户人员"
                                                        value="{! v.ac_name}"
                                                        variant="label-inline"
                                                        style="margin-left: 0cm"
                                                        onclick="{! c.openModel }"
                                                    />
                                                </lightning:layoutItem>
                                            </lightning:layout>
                                        </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>
        <aura:if isTrue="{!v.isModalOpen}">
            <!-- Modal/Popup Box starts here-->
            <section
                role="dialog"
                tabindex="-1"
                aria-labelledby="modal-heading-01"
                aria-modal="true"
                aria-describedby="modal-content-id-1"
                class="slds-modal slds-fade-in-open"
            >
                <aura:renderIf isTrue="{!v.login}">
                    <div class="slds-spinner_container height100vh">
                        <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>
                </aura:renderIf>
                <div class="slds-modal__container">
                    <!-- Modal/Popup Box Header Starts here-->
                    <header class="slds-modal__header">
                        <lightning:buttonIcon
                            iconName="utility:close"
                            onclick="{! c.closeModel }"
                            alternativeText="close"
                            variant="bare-inverse"
                            class="slds-modal__close"
                        />
                        <h2
                            id="modal-heading-01"
                            class="slds-text-heading_medium slds-hyphenate"
                        >
                            搜索客户人员
                        </h2>
                    </header>
                    <!--Modal Body Start here-->
                    <div
                        class="slds-modal__content slds-p-around_medium modal-body"
                        id="modal-content-id-1"
                    >
                        <lightning:layout>
                            <lightning:layoutItem size="7">
                                <ui:inputText
                                    label="请输入客户姓名"
                                    class="field"
                                    value="{!v.searchKeyWord}"
                                />
                            </lightning:layoutItem>
                            <lightning:layoutItem size="2" class="searchButton">
                                <ui:button
                                    aura:id="button"
                                    buttonTitle="Click to see agency contact"
                                    class="button"
                                    label="搜索"
                                    press="{!c.searchAgencyContact}"
                                    disabled="false"
                                />
                            </lightning:layoutItem>
                            <lightning:layoutItem size="3" class="searchButton">
                                <ui:button
                                    aura:id="newAgencyContact"
                                    buttonTitle="Click to see agency contact"
                                    class="newAgencyContact"
                                    label="新建.客户人员"
                                    disabled="false"
                                    press="{!c.showNewAgency}"
                                />
                            </lightning:layoutItem>
                        </lightning:layout>
                        <div id="QueryResult" style="margin-top: 20px"></div>
                    </div>
                    <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>
                </div>
            </section>
            <div class="slds-backdrop slds-backdrop_open"></div>
        </aura:if>
    </div>
</aura:component>
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.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>54.0</apiVersion>
    <description>A Lightning Component Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunity.css
New file
@@ -0,0 +1,67 @@
.THIS {
}
.THIS .name {
    margin-right: 0.5cm;
}
.THIS .wh {
    width: 670px;
    height: 500px;
}
.THIS .slds-modal__container {
    max-width: 70rem !important;
    width: 90% !important;
}
.THIS .modal-body {
    height: 500px !important;
    max-height: 500px !important;
}
.THIS table {
    border-collapse: collapse;
    border-spacing: 0;
    width: 98%;
    margin-left: 5px;
    /* border: 1px solid #000000; */
    text-align: center;
}
.THIS tr {
    /* border: 1px solid #000000; */
    text-align: center;
}
.THIS td {
    /* border: 1px solid #000000; */
    text-align: center;
}
.THIS th {
    /* border: 1px solid #000000; */
    text-align: center;
}
.THIS.backgroundInverse {
    position: relative;
    background-color: #16325c;
    height: 80px;
}
.THIS.exampleHolder {
    position: relative;
    display: inline-block;
    margin-left: 15px;
    width: 55px;
    vertical-align: middle;
    white-space: nowrap;
}
.THIS .searchButton {
    margin-top: 20px;
    margin-left: 20px;
}
.THIS .slds-spinner_container {
    position: revert;
}
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityController.js
New file
@@ -0,0 +1,334 @@
({
    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 record_type_id = '';
        let pageref = component.get('v.pageReference');
        if (!record_type_id && pageref) {
            record_type_id = pageref.state.recordTypeId
                ? pageref.state.recordTypeId
                : '';
        }
        let isClone = component.get('v.isClone');
        if (!rid || isClone) {
            component.set('v.title', $A.get('$Label.c.New') + '经销商询价');
            component.set('v.recordTypeId', record_type_id);
        } else {
            component.set('v.title', $A.get('$Label.c.Edit') + '经销商询价');
        }
        console.log('rid: ' + rid);
        console.log('pid: ' + pid);
        console.log('record_type_id: ' + record_type_id);
        component.set('v.showSpinner', true);
        helper.CallBackAction(
            component,
            'Init',
            {
                rid: rid,
                pid: pid,
                //rid : component.get('v.recordId'),
                record_type_id: record_type_id
            },
            function (data) {
                console.log('data: ' + data);
                var rv = data.getReturnValue();
                console.log('rv:' + rv);
                console.log('rv.Data:' + rv.Data);
                console.log('rv.IsSuccess:' + rv.IsSuccess);
                if (data.getState() == 'SUCCESS') {
                    if (rv.IsSuccess) {
                        debugger;
                        let layout = JSON.parse(rv.Data.layout);
                        debugger;
                        let fields = rv.Data.fields;
                        debugger;
                        let staticResource = JSON.parse(rv.Data.staticResource);
                        debugger;
                        let section_names = layout.map((s) => s.label);
                        debugger;
                        // let awsData = rv.Data.awsDataIds;
                        // section_names = layout.map(s=>s.label);
                        component.set('v.section_names', section_names);
                        component.set('v.layout', layout);
                        component.set('v.fields', fields);
                        component.set('v.staticResource', staticResource);
                        debugger;
                        let m = {};
                        for (let f of staticResource.PIDetails) {
                            m[f.SF_Field_API_Name__c] = f;
                        }
                        component.set('v.pi_fields_map', m);
                        if (rv.Data && rv.Data.data) {
                            debugger;
                            console.log('rv.Data.data = ' + rv.Data.data);
                            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];
                                        }
                                    }
                                }
                            }
                            // component.set('v.layout',layout);
                            component.set('v.record_data', rv.Data.data);
                            if (rv.Data.data.Agency_Contact__r) {
                                if (
                                    rv.Data.data.Agency_Contact__r
                                        .AWS_Data_Id__c
                                ) {
                                    helper.AwsGet(
                                        staticResource.queryUrl,
                                        {
                                            dataId: rv.Data.data
                                                .Agency_Contact__r
                                                .AWS_Data_Id__c
                                        },
                                        function (data) {
                                            console.log('data = ' + data);
                                            if (data.object) {
                                                component.set(
                                                    'v.ac_name',
                                                    data.object.name
                                                );
                                            }
                                        },
                                        staticResource.token
                                    );
                                }
                            }
                            // }, staticResource.token);
                        } else {
                            debugger;
                            console.log('rv.Data.data = ' + rv.Data.data);
                            console.log('layout = ' + layout);
                            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;
                                        }
                                    }
                                }
                            }
                            debugger;
                            // component.set('v.layout',layout);
                        }
                        // component.set('v.fields',fields);
                        // component.set('v.staticResource',staticResource);
                        component.set('v.showSpinner', false);
                    } else {
                        component.set('v.showSpinner', false);
                        helper.ShowToast({
                            message: rv.Message,
                            type: 'error'
                        });
                    }
                } else {
                    component.set('v.showSpinner', false);
                    helper.ShowToast({
                        message: 'Init error',
                        type: 'error'
                    });
                }
            }
        );
    },
    saveClick: function (component, event, helper) {
        let staticResource = component.get('v.staticResource');
        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 payloadPi = {};
        if (record_id && !isClone) {
            url = staticResource.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');
        for (let s of layout) {
            for (let c of s.layoutColumns) {
                for (let item of c.layoutItems) {
                    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);
        debugger;
        let data = {};
        if (record_id && !isClone) {
            data.Id = record_id;
        }
        for (let s of layout) {
            for (let c of s.layoutColumns) {
                for (let item of c.layoutItems) {
                    if (item.field && item.behavior != 'Readonly') {
                        data[item.field] = item.value;
                    }
                }
            }
        }
        let x = 1;
        helper.CallBackAction(
            component,
            'Save',
            {
                data: data,
                transId: '1',
                recordTypeId: record_type_id
            },
            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.ShowToast({
                            message: '成功',
                            type: 'success'
                        });
                        if (record_id) {
                            $A.get('e.force:closeQuickAction').fire();
                            $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'
                        });
                    }
                } else {
                    helper.ShowToast({
                        message: 'Init error',
                        type: 'error'
                    });
                }
            }
        );
    },
    cancelClick: function (component, event, helper) {
        $A.get('e.force:closeQuickAction').fire();
        //component.set("v.showNewAgencyContact", false);
    },
    searchAgencyContact: function (component, event, helper) {
        component.find('button').set('v.disabled', true);
        helper.resetTable();
        helper.preparePayloadForSearchAgencyContact(component, event, helper);
    },
    initContactTable: function (component, event, helper) {
        let cols = ['Name', 'AgencyHospital', 'DoctorDivision1', 'Type'];
        let contactInfoList = [];
        let awsDataIds = [];
        let data = component.get('v.result');
        if (data.object) {
            for (var i = 0; i < data.object.length; i++) {
                if (data.object[i].dataId) {
                    let contactInfo = new Object();
                    //需要修改
                    contactInfo.Name = data.object[i].name;
                    contactInfo.DoctorDivision1 =
                        data.object[i].doctorDivision1;
                    contactInfo.AWSDataId = data.object[i].dataId;
                    contactInfo.Type = data.object[i].type;
                    contactInfo.pi = true;
                    awsDataIds.push(contactInfo.AWSDataId);
                    contactInfo.sfRecordId = '';
                    contactInfoList.push(contactInfo);
                }
            }
        }
        let AWSIdToSFIdMapValue = {};
    },
    openModel: function (component, event, helper) {
        let layout = component.get('v.layout');
        for (let s of layout) {
            for (let c of s.layoutColumns) {
                for (let item of c.layoutItems) {
                    if (item.field == 'Agency_Hospital__c' && !item.value) {
                        console.log('item.value = ' + item.value);
                        helper.ShowToast({
                            message: '请先选择经销商医院',
                            type: 'warning'
                        });
                        return;
                    }
                }
            }
        }
        // Set isModalOpen true
        component.set('v.isModalOpen', true);
        component.find('button').set('v.disabled', true);
        helper.preparePayloadForSearchAgencyContact(component, event, helper);
    },
    closeModel: function (component, event, helper) {
        // Set isModalOpen false
        component.set('v.isModalOpen', false);
    },
    saveDetails: function (component, event, helper) {
        //do something
        component.set('v.isModalOpen', false);
    },
    showNewAgency: function (component, event, helper) {
        //do something
        component.set('v.showNewAgencyContact', true);
    },
    closeAgencyContact: function (component, event, helper) {
        var message = event.getParam('showNewAgencyContact');
        component.set('v.showNewAgencyContact', message);
        component.find('button').set('v.disabled', true);
        helper.resetTable();
        helper.preparePayloadForSearchAgencyContact(component, event, helper);
    }
});
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityHelper.js
New file
@@ -0,0 +1,341 @@
({
    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
        );
    },
    refreshTable: function (
        component,
        event,
        helper,
        cols,
        contactInfoList,
        contactsInfo
    ) {
        let that = this;
        let myTableDiv = document.getElementById('QueryResult');
        let table = document.createElement('TABLE');
        table.border = '1';
        table.id = 'table';
        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 = ['姓名', '医院', '医生区分(职务)', '分类'];
        tableBody.appendChild(headerTR);
        for (let i = 0; i < colsHeader.length; i++) {
            let td = document.createElement('TH');
            td.width = '75';
            td.setAttribute('class', 'slds-truncate slds-border_right');
            td.appendChild(document.createTextNode(colsHeader[i]));
            headerTR.appendChild(td);
        }
        //3. Init the AWS data
        for (let i = 0; i < contactInfoList.length; i++) {
            let tr = document.createElement('TR');
            tableBody.appendChild(tr);
            let contactInfoTemp = contactInfoList[i];
            for (let j = 0; j < cols.length; j++) {
                let td = document.createElement('TD');
                td.width = '75';
                if (contactInfoTemp.pi) {
                    if (
                        !contactsInfo.hasOwnProperty(contactInfoTemp.AWSDataId)
                    ) {
                        continue;
                    }
                    if (j == 0 && contactsInfo[contactInfoTemp.AWSDataId]) {
                        td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
                    }
                } else {
                    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
                        );
                    });
                }
                tr.appendChild(td);
            }
        }
        myTableDiv.appendChild(table);
        component.find('button').set('v.disabled', false);
    },
    redirectToParentPage: function (component, event, helper, obj) {
        let agencyContactName = obj.currentTarget.innerText;
        let id = obj.currentTarget.id;
        component.set('v.ac_name', agencyContactName);
        let layout = component.get('v.layout');
        for (let s of layout) {
            for (let c of s.layoutColumns) {
                for (let item of c.layoutItems) {
                    if (item.field == 'Agency_Contact__c') {
                        item.value = id;
                    }
                }
            }
        }
        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]);
            }
        }
    },
    preparePayloadForSearchAgencyContact: function (component, event, helper) {
        let that = this;
        let agencyHospitalId = '';
        let accountId = '';
        let layout = component.get('v.layout');
        for (let s of layout) {
            for (let c of s.layoutColumns) {
                for (let item of c.layoutItems) {
                    if (item.field == 'Agency_Hospital__c') {
                        agencyHospitalId = item.value;
                    }
                    if (item.field == 'Account_Opp__c') {
                        accountId = item.value;
                    }
                }
            }
        }
        var action = component.get('c.getAWSDataIds');
        action.setParams({
            agencyHospitalId: agencyHospitalId,
            accountId: accountId
        });
        action.setCallback(this, function (response) {
            var state = response.getState();
            if (state == 'SUCCESS') {
                var rv = response.getReturnValue();
                if (rv.Data.length == 0) {
                    component.find('button').set('v.disabled', false);
                    helper.ShowToast({
                        message: '该经销商医院下面没有客户人员',
                        type: 'warning'
                    });
                    return;
                }
                let searchPayload = new Object();
                let searchAgencyContactName = component.get('v.searchKeyWord');
                searchPayload.dataIds = rv.Data;
                searchPayload.name = searchAgencyContactName;
                component.set('v.contactAWSIds', rv.Data);
                let staticResource = component.get('v.staticResource');
                let url = staticResource.searchUrl;
                let token = staticResource.token;
                this.AwsPost(
                    url,
                    searchPayload,
                    function (data) {
                        if (data.success) {
                            let cols = [
                                'Name',
                                'AgencyHospital',
                                'DoctorDivision1',
                                'Type'
                            ];
                            let contactInfoList = [];
                            let awsDataIds = [];
                            if (data.object.length == 0) {
                                component
                                    .find('button')
                                    .set('v.disabled', false);
                                that.ShowToast({
                                    message: '没有查询到该客户人员',
                                    type: 'warning'
                                });
                                return;
                            }
                            for (var i = 0; i < data.object.length; i++) {
                                if (data.object[i].dataId) {
                                    let contactInfo = new Object();
                                    //需要修改
                                    contactInfo.Name = data.object[i].name;
                                    contactInfo.AgencyHospital = '';
                                    contactInfo.DoctorDivision1 =
                                        data.object[i].doctorDivision1;
                                    contactInfo.AWSDataId =
                                        data.object[i].dataId;
                                    contactInfo.Type = data.object[i].type;
                                    contactInfo.pi = true;
                                    awsDataIds.push(contactInfo.AWSDataId);
                                    contactInfo.sfRecordId = '';
                                    contactInfoList.push(contactInfo);
                                }
                            }
                            //let AWSIdToSFIdMapValue = {};
                            var searchAgencyContacts = component.get(
                                'c.searchAgencyContacts'
                            );
                            searchAgencyContacts.setParams({
                                awsAgencyContactIds: JSON.stringify(awsDataIds),
                                agencyHospitalId: agencyHospitalId,
                                accountId: accountId
                            });
                            searchAgencyContacts.setCallback(
                                this,
                                function (response) {
                                    var state = response.getState();
                                    if (state == 'SUCCESS') {
                                        var rv = response.getReturnValue();
                                        if (rv.IsSuccess) {
                                            let contactsInfo = '';
                                            if (rv.Data) {
                                                contactsInfo = JSON.parse(
                                                    rv.Data.replace(
                                                        /(&quot\;)/g,
                                                        '"'
                                                    )
                                                );
                                                if (
                                                    Object.keys(contactsInfo)
                                                        .length > 0
                                                ) {
                                                    for (
                                                        let i = 0;
                                                        i <
                                                        contactInfoList.length;
                                                        i++
                                                    ) {
                                                        let contactFromSF =
                                                            contactsInfo[
                                                                contactInfoList[
                                                                    i
                                                                ]['AWSDataId']
                                                            ];
                                                        if (contactFromSF) {
                                                            contactInfoList[
                                                                i
                                                            ].sfRecordId =
                                                                contactFromSF[
                                                                    'Id'
                                                                ];
                                                            if (
                                                                contactFromSF[
                                                                    'Agency_Hospital__r'
                                                                ]
                                                            ) {
                                                                contactInfoList[
                                                                    i
                                                                ].AgencyHospital =
                                                                    contactFromSF[
                                                                        'Agency_Hospital__r'
                                                                    ]['Name'];
                                                            }
                                                            if (
                                                                contactFromSF[
                                                                    'Department_Class__r'
                                                                ]
                                                            ) {
                                                                contactInfoList[
                                                                    i
                                                                ].AgencyHospital =
                                                                    contactFromSF[
                                                                        'Department_Class__r'
                                                                    ]['Parent'][
                                                                        'Name'
                                                                    ];
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            that.refreshTable(
                                                component,
                                                event,
                                                helper,
                                                cols,
                                                contactInfoList,
                                                contactsInfo
                                            );
                                        }
                                    }
                                }
                            );
                            $A.enqueueAction(searchAgencyContacts);
                        }
                    },
                    token
                );
            }
        });
        $A.enqueueAction(action);
    }
});
force-app/main/default/aura/NewAgencyOpportunity/NewAgencyOpportunityRenderer.js
New file
@@ -0,0 +1,3 @@
({
    // Your renderer method overrides go here
});
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.cmp
@@ -1,1289 +1,1455 @@
<aura:component
  controller="RetrospectiveWeeklyReportController"
  implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes,lightning:availableForFlowScreens"
  access="global"
    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
    <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="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="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-->
  <!-- Imports -->
  <!-- <aura:import library="lightningcomponentdemo:mockdataFaker" property="mockdataLibrary"/> -->
  <!-- attributes -->
  <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="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="PIConfig" type="Map" />
  <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
  <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
  <!-- 批量添加日报 end-->
  <!--ロード中...-->
  <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>
  </aura:renderIf>
  <div aura:id="report" id="report" class="contents_wrapper">
    <div class="slds-grid slds-wrap slds-grid--pull-padded">
      <div style="width: 200px"></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"
      >
        周
      </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"
        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}" />
      </div>
      <div
        style="width: 350px"
        class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--2-of-12 slds-large-size--2-of-12"
      >
        <ui:button
          aura:id="copy_button"
          label="复制"
          press="{!c.copy_button}"
          disabled="true"
        />
        <ui:button
          aura:id="delete_button"
          label="删除"
          press="{!c.delete_button}"
          disabled="true"
        />
        <ui:button aura:id="import" label="导入" press="{!c.import}" />
        <ui:button
          aura:id="export"
          label="导出"
          press="{!c.export_condition}"
        />
        <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"
              style="width: 250px"
            ></th>
            <th class="table_header slds-text-title--caps">
              <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" style="width: 250px">
              <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
              >
              <!-- {!v.fieldsmap.Department_Cateogy__c}    科室-->
            </th>
            <th class="table_header slds-text-title--caps">
              <span class="slds-truncate" title="Name">拜访人</span>
              <!-- {!v.fieldsmap.doctor2__c}    拜访人 -->
            </th>
            <th class="table_header slds-text-title--caps">
              <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">
              <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">
                <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
                  >
                </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_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}">
                    <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.DealerPersonnel__r.Name}"
                    >{!item.DealerPersonnel__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.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>
    <!-- 批量添加日报 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>
  <!-- 批量添加日报 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 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"
    <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}"
                />
                <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"
    >
      <!-- <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"
            <!-- 代理店担当者 -->
            <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}"
                />
                <h2 class="slds-text-heading_small">{!v.errorMessage}</h2>
              </div>
            </div>
          </div>
        </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"
          press="{!c.close_import}"
        />
      </div>
      <div
        class="slds-modal__content slds-scrollable slds-grow slds-p-around--medium"
      >
        <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"
              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>
            <aura:if isTrue="{!v.showErrorInfo}">
              <div class="slds-p-around--large slds-align--absolute-center">
                <lightning:button
                  label="导出错误信息"
                  variant="brand"
                  onclick="{!c.exportErrorInfo}"
            <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 class="slds-p-around--large slds-align--absolute-center">
                <div style="height: 300px">
                  <lightning:datatable
                    keyField="id"
                    data="{! v.errorData }"
                    columns="{! v.errorColumns }"
                    hideCheckboxColumn="true"
                  />
                </div>
              </div>
            </aura:if>
          </aura:set>
        </aura:if>
      </div>
            </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
    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__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-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"
            >
              活动日
              <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-6"
              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-5 slds-large-size--1-of-6"
            >
              {!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-5 slds-large-size--1-of-6"
              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-5 slds-large-size--1-of-6"
            >
              {!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-5 slds-large-size--1-of-6"
              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-5 slds-large-size--1-of-12"
            >
              <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-6"
            >
              产品分类(第三分类)
              <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-6"
              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>
            <!-- 使用产品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-6"
              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>
            <!-- 使用产品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-6"
              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-6"
            >
              {!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-6"
            >
              {!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"
                                change="{!c.select_warlocksNumber}" /> -->
              <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
    <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">
                      <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>
                    <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_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>
                    <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>
          </div>
            </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>
    </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>
  </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}"
    <!-- 批量添加日报 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"
        >
          <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>
            <!-- <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">
                        <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>
                                <lightning:icon alternativeText="Close" iconName="utility:close" size="small"
                                        onclick="{!c.closeErrorDiv}" />
                            </div>
                        </div>
                    </div>
                </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>
                        <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>
    <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"> -->
                        <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>
                                                </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>
                                                </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>
                                                </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"
                                change="{!c.select_warlocksNumber}" /> -->
                            <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>
        </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>
    </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>
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReport.css
@@ -1,141 +1,202 @@
@import 'c/lexCssUtility';
.THIS .bcolor {
    color: #333;
}
.THIS.height100vh {
    height: 100vh;
}
.THIS.contents_wrapper {
    padding-top: 50px;
}
.THIS .mt5 {
    margin-top: 5px;
}
.THIS .mt40 {
    margin-top: 40px;
}
.THIS .edit_button {
    float: right;
    margin: -1.5em 0.5em 0 0;
    border: 0;
}
.THIS .no_data_area {
    text-align: center;
    margin: .5em 0;
    margin: 0.5em 0;
}
.THIS.report_list_area {
    margin: 40px 0 20px 100px;
    height: 60vh;
    overflow-y: scroll;
}
.THIS .report_radio {
    float: left;
}
.THIS .table_header {
    width: 9.4rem;
    height: 2em;
}
.THIS.disp_none {
    display: none;
}
.THIS .disp_none {
    display: none;
}
.THIS .tr {
    text-align: right;
}
.THIS .close_button {
    float: right;
    margin-top: -2em;
}
.THIS .close_icn svg {
    fill: #fefefe;
}
.THIS .slds-progress__marker {
    cursor: default;
}
.THIS .progress_0 {
    width: 0%;
}
.THIS .progress_100 {
    width: 100%;
}
.THIS .new_btn_area {
    text-align: center;
    margin-top: 22px;
}
.THIS .new_btn {
    width: 100%;
}
.THIS .save_button_area {
    margin: 1em 0;
    text-align: right;
}
.THIS .save_button {
    background-color: #ffa500;
    border: 1px solid #ff8c00;
}
.THIS .report_data_header {
    border-bottom: 2px solid #ccc;
}
.THIS .report_data_area {
    border-bottom: 1px solid #ccc;
}
.THIS.fade {
    transition: 5s opacity linear;
}
.THIS.animation_off {
    opacity: 0;
}
.THIS.animation_on {
    opacity: 1;
}
.THIS .fade {
    transition: 5s opacity linear;
}
.THIS .animation_off {
    opacity: 0;
}
.THIS .animation_on {
    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{
.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 tr .decrypt{
.THIS .customRequired:before {
    content: '*';
    margin: 0 0.125rem 0 0.125rem;
    color: rgb(194, 57, 52);
    float: left;
}
.THIS .none {
    display: none;
}
.THIS tr:hover .decrypt{
.THIS tr .decrypt {
    display: none;
}
.THIS tr:hover .decrypt {
    display: unset;
}
.THIS tr:hover .encrypt{
.THIS tr:hover .encrypt {
    display: none;
}
}
.THIS tr:hover .encrypt {
    display: none;
}
.THIS .buttonFontSize {
    font-size: 18px;
    min-width: 80px;
    max-width: 110px;
}
.THIS .fontSize {
    font-size: 18px;
}
.THIS thead th {
    font-size: 18px;
}
.THIS table {
    table-layout: fixed;
}
.THIS td {
    white-space: normal;
    overflow-wrap: break-word;
}
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportController.js
@@ -1,389 +1,388 @@
({
  doInit: function (component, event, helper) {
    helper.doinit(component, event, helper);
    component.set("v.errorColumns", [
      {
        label: "错误行",
        fieldName: "errorRow",
        type: "text",
        hideDefaultActions: true,
        initialWidth: 100
      },
      {
        label: "错误信息",
        fieldName: "errorInfo",
        type: "text",
        hideDefaultActions: true
      }
    ]);
  },
    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]);
  },
  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);
  }
});
force-app/main/default/aura/RetrospectiveWeeklyReport/RetrospectiveWeeklyReportHelper.js
Diff too large
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.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/TestForceInputByLiJun/TestForceInputByLiJun.cmp
New file
@@ -0,0 +1,25 @@
<aura:component
    implements="force:appHostable,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes"
    access="global"
>
    <aura:attribute
        name="data"
        type="Agency_Report__c"
        default="{'sobjectType':'Agency_Report__c','Report_Date__c':null}"
    />
    reportdata
    <force:inputField
        value="{!v.data.Report_Date__c}"
        aura:id="input-report-date"
    />
    <aura:attribute
        name="contact"
        type="Contact"
        default="{ 'sobjectType': 'Contact' }"
    />
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    Firstname
    <force:inputField aura:id="firstname" value="{!v.contact.FirstName}" />
    <force:inputField aura:id="lastname" value="{!v.contact.LastName}" />
</aura:component>
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.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>42.0</apiVersion>
    <description>A Lightning Component Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.css
New file
@@ -0,0 +1,2 @@
.THIS {
}
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.design
New file
@@ -0,0 +1,3 @@
<design:component >
</design:component>
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJun.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/TestForceInputByLiJun/TestForceInputByLiJunController.js
New file
@@ -0,0 +1,5 @@
({
    doInit: function (component, event, helper) {
        console.log('Test');
    }
});
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJunHelper.js
New file
@@ -0,0 +1,3 @@
({
    helperMethod: function () {}
});
force-app/main/default/aura/TestForceInputByLiJun/TestForceInputByLiJunRenderer.js
New file
@@ -0,0 +1,3 @@
({
    // Your renderer method overrides go here
});
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
@@ -1,52 +1,77 @@
<aura:component controller="WeeklyReportCmp" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction,forceCommunity:availableForAllPageTypes" access="global" >
<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: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="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="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="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" />
@@ -56,120 +81,243 @@
    <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: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" />
    <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="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="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"/>
    <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"/>
    <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-->
    <!-- 批量添加周报 end-->
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    <!--ロード中...-->
    <aura:renderIf isTrue="{!v.login}">
        <div class="slds-spinner_container height100vh">
            <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>
        <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>
        </div>
        </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
                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
                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">
            <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
                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--2-of-12 slds-large-size--2-of-12">
                <ui:button aura:id="new_button" label="新建" press="{!c.new_report}" disabled="true"/>
            <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--2-of-12 slds-large-size--2-of-12">
                <ui:button aura:id="copy_button" label="复制" press="{!c.copy_button}" disabled="true"/>
            <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}"/>
                <ui:button
                    aura:id="export"
                    label="导出"
                    press="{!c.export_condition}"
                />
            </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;">
            <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">
                        <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">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Person_In_Charge2__c}</span>
                        <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">
                        <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">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                        <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">
                        <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">{!v.fieldsmap.Agency_Contact__c}</span>
                            <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">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.visitor_title__c}</span>
                        <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">
                            <span class="slds-truncate" title="Name">{!v.fieldsmap.Purpose_Type__c}</span>
                        <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">
                    <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}"/>
                                <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}">
                                    <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>
@@ -182,28 +330,50 @@
                            </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
                                        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
                                        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
                                        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
                                        class="slds-truncate"
                                        title="{!item.Purpose_Type__c}"
                                        >{!item.Purpose_Type__c}</span
                                    >
                                </span>
                            </td>
                        </tr>
@@ -213,77 +383,176 @@
        </div>
        <aura:renderIf isTrue="{!v.report_count > 0}">
            <aura:set attribute="else">
                <div class="no_data_area">
                    {!v.list_message}
                </div>
                <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}"/>-->
    <!--    <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 ">
            <div class="slds-modal__header ">
    <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}"/>
                <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 " >
            <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}" />
                        <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}" />
                        <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>
    <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
        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}"/>
                <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">
            <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">
                    <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}" />
                            <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>
@@ -296,47 +565,116 @@
                                              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}" />
                        <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>
    <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
        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">{!v.dialog_type}</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}"/>
                <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">
                    <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"/>
                            <!-- <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" data-select="single">
                            <ui:inputText aura:id="hospital_input_text" label="医院" class="field" value="{!v.hospital}" updateOn="keyup"/>
                        <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">
                                    <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-lookup__result-text"
                                                    >
                                                        {!hospital.Hospital_Name_readonly__c}
                                                    </div>
                                                </div>
                                            </span>
                                        </li>
@@ -344,176 +682,379 @@
                                </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">
                        <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}"/>
                            <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">
                        <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}"/>
                            <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">
                            <br/>
                            <ui:button label="新建" class="slds-button" press="{!c.createCon}" disabled="true" aura:id="new_con"/>
                        <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">
                        <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>
                        <!-- 活动区分 -->
                        <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                        <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}"/>
                            <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">
                        <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}"/>
                            <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">
                        </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">
                        <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"/>
                            <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">
                        <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=""/>
                            <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">
                        <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=""/>
                            <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">
                        <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=""/>
                            <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">
                        <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}"/>
                            <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">
                        <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}"/>
                            <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">
                        <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}"/>
                            <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">
                        <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" />
                            <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">
                        <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: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}"/>
                    <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">
                        <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
                                            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
                                            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
                                            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
                                            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
                                            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
                                            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>
                                    <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>
                                            <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>
                                            <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>
                                            <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>
                                            <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>
                                            <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>
@@ -526,53 +1067,112 @@
            </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
        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>
                <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}" />
                <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 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
        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>
                <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" />
                <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
                            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/>
                    <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="保存" />
                        <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>
                </lightning:recordEditForm>
            </div>
        </div>
    </div>
</aura:component>
</aura:component>
force-app/main/default/aura/WeeklyReport/WeeklyReport.css
@@ -4,9 +4,10 @@
.THIS.height100vh {
    height: 100vh;
}
.THIS.contents_wrapper {
/* .THIS.contents_wrapper {
    padding-top: 50px;
}
    width: 105%;
} */
.THIS .mt5 {
    margin-top: 5px;
}
@@ -20,10 +21,10 @@
}
.THIS .no_data_area {
    text-align: center;
    margin: .5em 0;
    margin: 0.5em 0;
}
.THIS.report_list_area {
    margin: 40px 0 20px 100px;
    margin: 40px 0 20px 0px;
    height: 60vh;
    overflow-y: scroll;
}
@@ -98,44 +99,72 @@
.THIS .animation_on {
    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{
.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 tr .decrypt{
.THIS .customRequired:before {
    content: '*';
    margin: 0 0.125rem 0 0.125rem;
    color: rgb(194, 57, 52);
    float: left;
}
.THIS .none {
    display: none;
}
.THIS tr:hover .decrypt{
.THIS tr .decrypt {
    display: none;
}
.THIS tr:hover .decrypt {
    display: unset;
}
.THIS tr:hover .encrypt{
.THIS tr:hover .encrypt {
    display: none;
}
}
/* add by Deloitte-Link 2023-6-19 start*/
.THIS .weeklyReportSpinner {
    top: 100px;
}
.THIS .weeklyReportSpinnerEdit {
    top: 50px;
}
.THIS .slds-spinner_container {
    position: absolute;
    top: 100px;
}
.THIS .slds-spinner_containerEdit {
    position: absolute;
    top: 50px;
}
.THIS .marginTop {
    margin-top: 10px;
}
.THIS .custom-input .uiInput {
    height: 2rem;
}
/* add by Deloitte-Link 2023-6-19 end*/
force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
@@ -1,55 +1,58 @@
({
    doInit : function(component, event, helper) {
        console.log('zhj 新方案');
        if (window.location.href.endsWith("weekly-report")) {
    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) {
    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) {
    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) {
    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) {
    change_report_radio: function (component, event, helper) {
        helper.change_report_radio(component, event, helper);
    },
    edit_button : function(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) {
    handleSuccess: function (component, event, helper) {
        helper.handleSuccess(component, event, helper);
    },
    handleSubmit : function(component, event, helper) {
    handleSubmit: function (component, event, helper) {
        /*
        var params = event.getParams();
        params.fields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
@@ -60,39 +63,44 @@
        // vivek 添加验证 start
        // helper.handleFormSubmit(component);
        var showValidationError = false;
        var fields = component.find("newOpportunityField");
        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
        fields.forEach(function (field) {
            if(field.get("v.fieldName") === 'Type__c' && $A.util.isEmpty(field.get("v.value"))){
            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"))){
                vaildationFailReason = '分类不能为空!';
            } else if (
                field.get('v.fieldName') === 'Doctor_Division1__c' &&
                $A.util.isEmpty(field.get('v.value'))
            ) {
                showValidationError = true;
                if(vaildationFailReason != ''){
                    vaildationFailReason += "医生区分(职务)不能为空!";
                }else{
                    vaildationFailReason = "医生区分(职务)不能为空!";
                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");
            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
            /*
@@ -103,50 +111,72 @@
            var agencyHospitalid = component.get('v.hospitalLinkId');
            //zhj MEBG新方案改造 2022-11-29 start
            debugger
            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;
            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;
                            }
                            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 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{
                            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" : data.message,
                            "type" : "error"
                            message: 'searchAgency失败',
                            type: 'error'
                        });
                    }
                }else{
                    helper.ShowToast({
                        "message" : 'searchAgency失败',
                        "type" : "error"
                    });
                }
            })
            );
            //zhj MEBG新方案改造 2022-11-29 end
            // var arr = new Array();
            // arr.push(agencyReport);
@@ -155,12 +185,12 @@
            // 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);
            // PIPL update Yin Mingjie 21/02/2022 end
        }else{
        } else {
            component.find('OppMessage').setError(vaildationFailReason);
        }
        // var eventFields = event.getParam("fields");
@@ -168,151 +198,166 @@
        // component.find('recordEditForm').submit(eventFields);
        // vivek 添加验证 end
    },
    createCancel : function(component, event, helper) {
    createCancel: function (component, event, helper) {
        helper.createCancel(component, event, helper);
    },
    yes_button : function(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'));
        helper.close_confirm(
            component,
            component.get('v.modal_confirm_title'),
            component.get('v.modal_confirm_text')
        );
    },
    no_button : function(component, event, helper) {
    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'));
        helper.close_confirm(
            component,
            component.get('v.modal_confirm_title'),
            component.get('v.modal_confirm_text')
        );
    },
    toggle_report : function(component, event, helper) {
    toggle_report: function (component, event, helper) {
        helper.toggle_report(component);
    },
    save_report : function(component, event, helper) {
    save_report: function (component, event, helper) {
        helper.save_report(component, event, helper);
    },
    select_date_change : function(component, event, helper) {
    select_date_change: function (component, event, helper) {
        helper.select_date_change(component, event, helper);
    },
    select_agency_change : function(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);
        }
    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);
    selectHos: function (component, event, helper) {
        helper.selectHos(component, event, helper);
        helper.setOpportunity_cfilter(component);
    },
    select_department : function(component, event, helper) {
    select_department: function (component, event, helper) {
        helper.select_department(component, event, helper);
        helper.setOpportunity_cfilter(component);
    },
    select_purpose_type : function(component, event, helper) {
    select_purpose_type: function (component, event, helper) {
        helper.select_purpose_type(component, event, helper);
    },
    doctor_change : function(component, event, helper) {
    doctor_change: function (component, event, helper) {
        helper.doctor_change(component, event, helper);
    },
    opportunityChange : function(component, event, helper) {
    opportunityChange: function (component, event, helper) {
        helper.opportunityChange(component, event, helper);
    },
    productcategoryChange1 : function(component, event, helper) {
    productcategoryChange1: function (component, event, helper) {
        helper.productcategoryChange1(component, event, helper);
    },
    productcategoryChange2 : function(component, event, helper) {
    productcategoryChange2: function (component, event, helper) {
        helper.productcategoryChange2(component, event, helper);
    },
    productcategoryChange3 : function(component, event, helper) {
    productcategoryChange3: function (component, event, helper) {
        helper.productcategoryChange3(component, event, helper);
    },
    stageNameChange : function(component, event, helper) {
    stageNameChange: function (component, event, helper) {
        helper.stageNameChange(component, event, helper);
    },
    onDragOver : function(component, event, helper) {
    onDragOver: function (component, event, helper) {
        event.preventDefault();
    },
    onDrop : function(component, event, helper) {
    onDrop: function (component, event, helper) {
        event.stopPropagation();
        event.preventDefault();
        event.dataTransfer.dropEffect='copy';
        var files=event.dataTransfer.files;
        helper.readFile(component,helper,files[0]);
        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");
    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]);
        helper.readFile(component, helper, files[0]);
        component.set('v.showErrorInfo', false);
    },
    processFileContent : function(component,event,helper){
        helper.saveRecords(component,event,helper);
    },
    cancel : function(component,event,helper){
        component.set("v.showMain",true);
    processFileContent: function (component, event, helper) {
        helper.saveRecords(component, event, helper);
        component.set('v.showErrorInfo', false);
    },
    import : function(component,event,helper){
    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;}
    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";
        // ####--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]
        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){
    export_condition: function (component, event, helper) {
        helper.showExport(component);
    },
    select_repores_date : function(component,event,helper){
        helper.select_repores_date(component,event,helper);
    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){
    export: function (component, event, helper) {
        console.log('进入export');
        var stockData = component.get("v.reports_date");
        console.log('查出的数据'+stockData);
        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);
    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);
    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
New file
@@ -0,0 +1,207 @@
@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)'
        ];
        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',
                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;
            //订单明细
            //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();
            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
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>58.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/AssetHandler.cls
@@ -1,19 +1,23 @@
public without sharing class AssetHandler extends Oly_TriggerHandler {
    public static Map<String , List<Rental_Apply_Equipment_Set_Detail__c>> queueRaesdMap;
    public static Map<String, List<Rental_Apply_Equipment_Set_Detail__c>> queueRaesdMap;
    private Map<Id, Asset> newMap;
    private Map<Id, Asset> oldMap;
    private List<Asset> newList;
    private List<Asset> oldList;
    @TestVisible private static Set<String> testTargetDepts;
    @TestVisible private static Id Account_Asset_Id;
     public static Boolean disabled = false;
    private static final Map<String, Schema.RecordTypeInfo> DEVELOPERNAMEMAP = Schema.SObjectType.Asset.getRecordTypeInfosByDeveloperName(); // 20230306 ljh add
    @TestVisible
    private static Set<String> testTargetDepts;
    @TestVisible
    private static Id Account_Asset_Id;
    public static Boolean disabled = false;
    public AssetHandler() {
        this.newMap = (Map<Id, Asset>) Trigger.newMap;
        this.oldMap = (Map<Id, Asset>) Trigger.oldMap;
        this.newList = (List<Asset>) Trigger.new;
        this.oldList = (List<Asset>) Trigger.old;
        Integer i = 0;
    }
    protected override void beforeInsert() {
@@ -23,21 +27,28 @@
        //第一次不加变更的时候不知道第一次是多少
        updateChangeQuantityReason();
        workflowCode();
    }
    protected override void beforeUpdate() {
        if(!disabled){
        if (!disabled) {
            beforeSetValue();
            //动态更新 Asset的 AccountId的 Logic
            beforeSetAccountId();
            updateChangeQuantityReason();
            // 20230309 gzw 优化 注释代码
            // 虚拟维修保修合同保修开始结束日期更新
            updateMaintenance_Contract_Asset();
            // updateMaintenance_Contract_Asset();
            // 20230309 gzw 优化 注释代码
            updateRentalCount();
            workflowCode();
        }
    }
    protected override void afterInsert() {
@@ -46,7 +57,7 @@
    }
    protected override void afterUpdate() {
        if(!disabled){
        if (!disabled) {
            mainAssetUpdateed_OneToOneRecord();
            // 已经改进 Must_Input_ChangeQuantityReason 的 valida before可以完成 ChangeQuantityReason__c = ''
            ////入力規則によってbeforeクリアできません,
@@ -63,19 +74,453 @@
            updateMaintenance_Contract_Asset();
        }
    }
    //20230309 sx 保有设备workflow代码化 start
    private void workflowCode() {
        /*List<Id> accIds = new List<Id>();
        List<Id> productIds = new List<Id>();
        List<Id> hospitalIds = new List<Id>();
        for(Asset nObj : newList) {
            accIds.add(nObj.Account.Id);
            productIds.add(nObj.Product2.Id);
            hospitalIds.add(nObj.Hospital__c);
        }
        //查找客户List
        Map<Id, Account> accMap = new Map<Id, Account>([SELECT Id, Name, Management_Code__c from Account where Id in :accIds]);
        Map<Id, Product2> productMap = new Map<Id, Product2>([SELECT Id, Name, RecordTypeId, RecordType.Name, Serial_Lot_No__c ,ProductCode  from Product2 where Id in :productIds]);
        Map<Id, Account> hosMap = new Map<Id, Account>([SELECT Id, Name, RecordType.Name  from Account where id in :hospitalIds]);
        Map<Id, Account> acc_assMap = new Map<Id, Account>();
        Map<Id, Product2> pro_proMap = new Map<Id, Product2>();
        Map<Id, Account> hos_assMap = new Map<Id, Account>();
        for(Asset nObj : newList){
            if(accMap.containsKey(nObj.Account.Id)) {
                acc_assMap.put(nObj.Id, accMap.get(nObj.Account.Id));
            }
            if(productMap.containsKey(nObj.Product2.Id)) {
                pro_proMap.put(nObj.Id, productMap.get(nObj.Product2.Id));
            }
            if(hosMap.containsKey(nObj.Hospital__c)) {
                hos_assMap.put(nObj.Id, hosMap.get(nObj.Id));
            }
        }*/
        Date today = Date.today();
        for (Asset nObj : newList) {
            //保有设备HPID文本化
            nObj.Asset_Year_Txt__c = nObj.Asset_Year__c;
            nObj.HP_ID_Text__c = nObj.HP_Id__c;
            nObj.Gurantee_End_day1__c = nObj.Gurantee_End_day__c;
            //覆盖设备的可选对象文本化
            if (Trigger.isInsert || (Trigger.isUpdate && nObj.Posting_Date__c != oldMap.get(nObj.Id).Posting_Date__c)) {
                if (String.isBlank(nObj.IF_Coverage_Target_Asset__c) || '0'.equals(nObj.IF_Coverage_Target_Asset__c)) {
                    nObj.IF_Coverage_Target_Asset__c = nObj.IF_Coverage_Target_Asset_FF__c + '';
                }
                if (nObj.IF_Coverage_Target_Asset_FF__c == 3 && nObj.FY23_Asset_Age__c == null) {
                    nObj.FY23_Asset_Age__c = 0;
                }
            }
            //市场对应录入时间自动录入
            if (
                (Trigger.isInsert && nObj.Market_Product_Category__c != null) ||
                (Trigger.isUpdate &&
                nObj.Market_Product_Category__c != oldMap.get(nObj.Id).Market_Product_Category__c &&
                nObj.Market_Product_Category__c != null)
            ) {
                nObj.Marketing_Input_Date__c = today;
            }
            /*//待报废变更为使用中
            if(nObj.RecordType.Name == '备品'
                && nObj.Manage_type__c == '个体管理'
                && nObj.Quantity > 0 && nObj.Status == '待报废'
                && ( (nObj.Abandoned_RealThing__c == null && nObj.Abandoned_Inventory__c == null) || (nObj.Abandoned_RealThing__c + nObj.Abandoned_Inventory__c) == 0)
                && acc_assMap.get(nObj.Id).Management_Code__c != System.Label.Account_Asset_FJZ) {
                nObj.Status = '使用中';
                nObj.Tobe_Discarded_Date__c = null;
            }*/
            /*//AssetMarkUpdate
            if(Trigger.isUpdate && nObj.IF_Information_From__c == false && nObj.AssetMark__c == null) {
                if(pro_proMap.containsKey(nObj.Id)){
                    if(pro_proMap.get(nObj.Id).RecordType.Name == '竞品-主机' ) {
                        nObj.AssetMark__c = '竞品主机';
                    }else if(pro_proMap.get(nObj.Id).RecordType.Name == '竞品-耗材') {
                        nObj.AssetMark__c = '竞品耗材';
                    }else if(pro_proMap.get(nObj.Id).Serial_Lot_No__c == 'S/N tracing') {
                        nObj.AssetMark__c = '主机';
                    }
                }
                else {
                    nObj.AssetMark__c = '耗材';
                }
            }*/
            /*//AssetName=ProductName
            if(nObj.Name.equals('*') || (nObj.Product2.Id != null && nObj.Product2 != oldMap.get(nObj.Id).Product2)) {
                nObj.Name = pro_proMap.get(nObj.Id).Name;
            }*/
            //AssetTextCopy
            if (Trigger.isInsert || (Trigger.isUpdate && nObj.Product2 != oldMap.get(nObj.Id).Product2)) {
                nObj.BSSCategory_Text__c = nObj.BSSCategory__c;
                nObj.Brand_Name_Text__c = nObj.Brand_Name__c;
                nObj.Category2_Text__c = nObj.Category2__c;
                nObj.Category3_Text__c = nObj.Category3__c;
                nObj.Category4_Text__c = nObj.Category4__c;
                nObj.Category5_Text__c = nObj.Category5__c;
            }
            //CIC安装状态确认日
            if (nObj.CIC_call_back_check__c && nObj.CIC_call_back_confirm_day__c == null) {
                nObj.CIC_call_back_confirm_day__c = today;
            }
            //Equipment_Last_confirmed_day
            if (
                (Trigger.isInsert &&
                (nObj.Status != null ||
                nObj.Installation_Site__c != null ||
                nObj.Final_Examination_Date__c != null ||
                nObj.Hospital_Manage_Number__c != null)) ||
                (Trigger.isUpdate &&
                (nObj.Status != oldMap.get(nObj.Id).Status ||
                nObj.Installation_Site__c != oldMap.get(nObj.Id).Installation_Site__c ||
                nObj.Final_Examination_Date__c != oldMap.get(nObj.Id).Final_Examination_Date__c ||
                nObj.Hospital_Manage_Number__c != oldMap.get(nObj.Id).Hospital_Manage_Number__c))
            ) {
                nObj.Equipment_Last_checking_day__c = today;
            }
            /*//Product_Code+Serial_No
            if(Trigger.isUpdate && nObj.IsCompetitorProduct == false && nObj.Manage_type__c != '数量管理' && nObj.AssetMark__c != '耗材' && nObj.Loaner_accsessary__c != true && nObj.unknow_serial_NO_product__c != false) {
                if(nObj.Product2.Id == null) {
                    nObj.Product_Serial_No__c = nObj.Id;
                }else {
                    nObj.Product_Serial_No__c = pro_proMap.get(nObj.Id).ProductCode + ' ' + nObj.SerialNumber;
                    if(nObj.Delete_Flag__c){
                        nObj.Product_Serial_No__c += ':' + acc_assMap.get(nObj.Id).Management_Code__c;
                    }
                }
            }*/
            //Product_Code+Serial_No Clear
            if (
                (Trigger.isInsert && nObj.IsCompetitorProduct) ||
                (Trigger.isUpdate &&
                nObj.IsCompetitorProduct &&
                !oldMap.get(nObj.Id).IsCompetitorProduct)
            ) {
                nObj.Product_Serial_No__c = '';
            }
            /*//Product_Code+Serial_No+Salesdepartment
            if(Trigger.isUpdate && nObj.IsCompetitorProduct == false && nObj.Manage_type__c == '数量管理' && nObj.AssetMark__c == '耗材' && nObj.Loaner_accsessary__c == true && nObj.unknow_serial_NO_product__c == false) {
                if(nObj.Product2.Id == null) {
                    nObj.Product_Serial_No__c = nObj.Id;
                }else {
                    nObj.Product_Serial_No__c = pro_proMap.get(nObj.Id).ProductCode + ' ' + nObj.SerialNumber + ':' + nObj.Salesdepartment__c.subString(0,nObj.Salesdepartment__c.indexOf(':'));
                    if(nObj.Delete_Flag__c){
                        nObj.Product_Serial_No__c += ':' + acc_assMap.get(nObj.Id).Management_Code__c;
                    }
                }
            }*/
            /*//Product_Code+Serial_No UnkownSerial
            if(Trigger.isUpdate && nObj.unknow_serial_NO_product__c == true) {
                nObj.SerialNumber = nObj.serial_past__c;
                if(nObj.Product2.Id == null) {
                    nObj.Product_Serial_No__c = nObj.Id;
                }else {
                    nObj.Product_Serial_No__c = pro_proMap.get(nObj.Id).ProductCode + ':' + nObj.serial_past__c;
                    if(nObj.Delete_Flag__c){
                        nObj.Product_Serial_No__c += ':' + acc_assMap.get(nObj.Id).Management_Code__c;
                    }
                }
            }*/
            //更新备品资产管理负责本部选项
            if (
                (Trigger.isInsert && nObj.Internal_demo_incharge_demo__c != null) ||
                (Trigger.isUpdate && nObj.Internal_demo_incharge_demo__c != oldMap.get(nObj.Id).Internal_demo_incharge_demo__c)
            ) {
                nObj.Internal_demo_incharge_demo_text__c = nObj.Internal_demo_incharge_demo__c;
            }
            /*//自动更新资产所属(医院资产)
            if(Trigger.isUpdate && nObj.RecordType.Name == '医院保有设备' && hos_assMap.containskey(nObj.Id) && hos_assMap.get(nObj.Id).RecordType.Name == '病院' && acc_assMap.get(nObj.Id).Id == '00110000015Bx0h' ) {
                nObj.Asset_Owner__c = '医院资产';
            }*/
            /*//自动更新资产所属(奥林巴斯)
            if(nObj.RecordType.Name == '医院保有设备' || (acc_assMap.containskey(nObj.Id) && acc_assMap.get(nObj.Id).Id == '00110000015Bx0h')) {
                nObj.Asset_Owner__c = '奥林巴斯';
            }*/
            /*//自动更新资产所属(经销商资产)
            if(nObj.RecordType.Name == '医院保有设备' && (acc_assMap.containskey(nObj.Id) && hos_assMap.get(nObj.Id).RecordType.Name == '販売店')) {
                nObj.Asset_Owner__c = '经销商资产';
            }*/
            //手动创建的耗材信息修改
            if (nObj.RecordTypeId == '01210000000kOPM' && nObj.Information_From__c == '手动输入' && nObj.AssetMark__c == '耗材') {
                nObj.Guarantee_period_for_products__c = nObj.Posting_Date__c;
                nObj.InstallDate = nObj.Posting_Date__c;
            }
            //出货日自动赋值
            if (Trigger.isInsert && nObj.Information_From__c == '手动输入') {
                nObj.Posting_Date__c = Date.newInstance(1900, 1, 1);
            }
            //新逻辑保修期限对应
            if (nObj.New_logic_data__c) {
                nObj.Guarantee_period_for_products__c = nObj.Guarantee_period_formula__c;
            }
            //成本中心更新编码Update
            if (
                (Trigger.isInsert && nObj.Internal_cost_center_cd__c != null) ||
                (Trigger.isUpdate && nObj.Internal_cost_center_cd__c != oldMap.get(nObj.Id).Internal_cost_center_cd__c)
            ) {
                nObj.Internal_demo_incharge_demo_text__c = nObj.Internal_cost_center_formula__c;
            }
            //成本中心更新选项Update
            if (
                (Trigger.isInsert && nObj.Internal_cost_center__c != null) ||
                (Trigger.isUpdate && nObj.Internal_cost_center__c != oldMap.get(nObj.Id).Internal_cost_center__c)
            ) {
                nObj.Internal_cost_center_text__c = nObj.Internal_cost_center__c;
            }
            //待报废日登录
            if (
                Trigger.isUpdate &&
                nObj.Fixture_Status__c != oldMap.get(nObj.Id).Fixture_Status__c &&
                nObj.Fixture_Status__c != '废弃' &&
                (nObj.Abandoned_RealThing__c > 0 ||
                nObj.Abandoned_Inventory__c > 0) &&
                nObj.Manage_type__c == '个体管理'
            ) {
                nObj.Status = '待报废';
                nObj.Tobe_Discarded_Date__c = today;
            }
            //退货转备品DEL置FALSE
            if (
                Trigger.isUpdate &&
                ((nObj.RecordType != oldMap.get(nObj.Id).RecordType && nObj.RecordTypeId == '01210000000kOPR') ||
                (nObj.AccountId != oldMap.get(nObj.Id).AccountId &&
                nObj.AccountId == '0011000000VAiwz')) &&
                nObj.Delete_Flag__c
            ) {
                nObj.Delete_Flag__c = false;
            }
            //追溯设备耗材Mark更新
            if ('追溯系统'.equals(nObj.Information_From__c) && String.isBlank(nObj.AssetMark__c)) {
                nObj.AssetMark__c = '耗材';
            }
            //納入商品状態変更(使用中)
            if (
                (Trigger.isInsert && nObj.Status == '使用中') ||
                (Trigger.isUpdate &&
                nObj.Status != oldMap.get(nObj.Id).Status &&
                nObj.Status == '使用中')
            ) {
                nObj.Status_Busy_Date__c = today;
            }
            //納入商品状態変更(廃棄)
            if (
                (Trigger.isInsert && nObj.Status == '廃棄') ||
                (Trigger.isUpdate &&
                nObj.Status != oldMap.get(nObj.Id).Status &&
                nObj.Status == '廃棄')
            ) {
                nObj.Discarded_Date__c = today;
                nObj.Quantity = 0;
                nObj.Abandoned_Inventory__c = null;
                nObj.Abandoned_RealThing__c = null;
                nObj.ChangeQuantityReason__c = '废弃';
            }
            //納入商品状態変更(不明)
            if (
                (Trigger.isInsert && nObj.Status == '不明') ||
                (Trigger.isUpdate &&
                nObj.Status != oldMap.get(nObj.Id).Status &&
                nObj.Status == '不明')
            ) {
                nObj.Indistinctness_Date__c = today;
            }
            //納入商品状態変更(未使用)
            if (
                (Trigger.isInsert && nObj.Status == '未使用') ||
                (Trigger.isUpdate &&
                nObj.Status != oldMap.get(nObj.Id).Status &&
                nObj.Status == '未使用')
            ) {
                nObj.Unused_Date__c = today;
            }
            /*//納品確認書の診療科コード_セット
            if(!(nObj.Product2.Id != null && nObj.IsCompetitorProduct == false && nObj.InstallDate != null) && nObj.Install_Account_Code__c == null) {
                nObj.Install_Account_Code__c = acc_assMap.get(nObj.Id).Management_Code__c;
                nObj.Install_Account_Name__c = acc_assMap.get(nObj.Id).Name;
                nObj.Install_Hospital_Name__c = hos_assMap.get(nObj.Id).Name;
                nObj.Install_Hospital_code__c = hos_assMap.get(nObj.Id).Management_Code__c;
            }*/
            //病院管理番号変更日
            if (
                (Trigger.isInsert && nObj.Hospital_Manage_Number__c != null) ||
                (Trigger.isUpdate && nObj.Hospital_Manage_Number__c != oldMap.get(nObj.Id).Hospital_Manage_Number__c)
            ) {
                nObj.Hospital_Manage_Number_Change_Date__c = today;
            }
            //更新-2次前点检日
            if (Trigger.isUpdate && nObj.Final_Examination_Date__c != oldMap.get(nObj.Id).Final_Examination_Date__c) {
                nObj.X2_second_past_inspection__c = oldMap.get(nObj.Id).Final_Examination_Date__c;
            }
            // 文本化 多年保修期至
            nObj.Extend_Gurantee_DateTo_Text__c = nObj.Extend_Gurantee_DateTo__c;
            // 保修天数工作流
            if (
                Trigger.isInsert ||
                (Trigger.isUpdate &&
                (nObj.Guarantee_period_for_products__c != oldMap.get(nObj.Id).Guarantee_period_for_products__c ||
                nObj.InstallDate__c != oldMap.get(nObj.Id).InstallDate__c ||
                nObj.ChangeWarrantyStartDate__c != oldMap.get(nObj.Id).ChangeWarrantyStartDate__c))
            ) {
                nObj.GuaranteePeriod__c = nObj.guarantee_period__c;
            }
            // 有安装日,更新状态到[使用中]
            if (
                (Trigger.isInsert && nObj.InstallDate != null) ||
                (Trigger.isUpdate &&
                nObj.InstallDate != null &&
                nObj.InstallDate != oldMap.get(nObj.Id).InstallDate)
            ) {
                nObj.Status_Busy_Date__c = today;
                nObj.Status = '使用中';
            }
            // 备品再退货转DEL置TRUE
            if (nObj.AccountId == '00110000015Bx0h' && nObj.RecordTypeId == '01210000000kOPM' && !nObj.Delete_Flag__c) {
                nObj.Delete_Flag__c = true;
            }
            // 设定备品所属公司(上海)FromVBA
            if (
                (Trigger.isInsert && nObj.CompanyCodeOfEquipment_txt__c == '5112') ||
                (Trigger.isUpdate &&
                nObj.CompanyCodeOfEquipment_txt__c != oldMap.get(nObj.Id).CompanyCodeOfEquipment_txt__c &&
                nObj.CompanyCodeOfEquipment_txt__c == '5112')
            ) {
                nObj.CompanyOfEquipment__c = '上海';
            }
            // 设定备品所属公司(沈阳)FromVBA
            if (
                (Trigger.isInsert && nObj.CompanyCodeOfEquipment_txt__c == '5114') ||
                (Trigger.isUpdate &&
                nObj.CompanyCodeOfEquipment_txt__c != oldMap.get(nObj.Id).CompanyCodeOfEquipment_txt__c &&
                nObj.CompanyCodeOfEquipment_txt__c == '5114')
            ) {
                nObj.CompanyOfEquipment__c = '沈阳';
            }
            // 设定备品所属公司(北京)FromVBA
            if (
                (Trigger.isInsert && nObj.CompanyCodeOfEquipment_txt__c == '5111') ||
                (Trigger.isUpdate &&
                nObj.CompanyCodeOfEquipment_txt__c != oldMap.get(nObj.Id).CompanyCodeOfEquipment_txt__c &&
                nObj.CompanyCodeOfEquipment_txt__c == '5111')
            ) {
                nObj.CompanyOfEquipment__c = '北京';
            }
            // 设定备品所属公司(广州)FromVBA
            if (
                (Trigger.isInsert && nObj.CompanyCodeOfEquipment_txt__c == '5113') ||
                (Trigger.isUpdate &&
                nObj.CompanyCodeOfEquipment_txt__c != oldMap.get(nObj.Id).CompanyCodeOfEquipment_txt__c &&
                nObj.CompanyCodeOfEquipment_txt__c == '5113')
            ) {
                nObj.CompanyOfEquipment__c = '广州';
            }
        }
    }
    //20230309 sx 保有设备workflow代码化 end
    // 借出明细更新借出_分配_数(Sys)和已借出数(Sys)
    private void updateRentalCount() {
        Set<Id> idSet = new Set<Id>();
        for(Id assId : this.newMap.keySet()) {
            if(this.newMap.get(assId).AssetManageConfirm__c &&
                this.newMap.get(assId).Account_Management_Code__c != System.Label.Account_Asset_FJZ ) {
        for (Id assId : this.newMap.keySet()) {
            if (
                this.newMap.get(assId).AssetManageConfirm__c &&
                this.newMap.get(assId).Account_Management_Code__c != System.Label.Account_Asset_FJZ
            ) {
                idSet.add(assId);
                this.newMap.get(assId).Out_of_wh_Sys__c = 0;
                this.newMap.get(assId).Rental_Count_Sys__c = 0;
            }
        }
        if(!idSet.isEmpty()) {
            for (Rental_Apply_Equipment_Set_Detail__c raesd : [
        if (!idSet.isEmpty()) {
            // 备品性能优化改修 20230312 by lc Start
            List<AggregateResult> raesdTempList2 = [
                SELECT COUNT(Id) num, Asset__c
                FROM Rental_Apply_Equipment_Set_Detail__c
                //备品发货报错对应 20230413 by lc Start
                //WHERE Detail_Finish__c = false
                WHERE
                    Detail_Not_Finish_Text__c = TRUE
                    //备品发货报错对应 20230413 by lc End
                    AND Asset__c IN :idSet
                    AND Shippment_loaner_time2__c != NULL
                GROUP BY Asset__c
            ];
            if (raesdTempList2 != null && raesdTempList2.size() > 0) {
                for (AggregateResult ar : raesdTempList2) {
                    String assetId = String.valueOf(ar.get('Asset__c'));
                    Integer tempNum = Integer.valueOf(ar.get('num'));
                    this.newMap.get(assetId).Rental_Count_Sys__c += tempNum;
                }
            }
            List<AggregateResult> raesdTempList1 = [
                SELECT COUNT(Id) num, Asset__c
                FROM Rental_Apply_Equipment_Set_Detail__c
                //备品发货报错对应 20230413 by lc Start
                //WHERE Detail_Finish__c = false
                WHERE
                    Detail_Not_Finish_Text__c = TRUE
                    //备品发货报错对应 20230413 by lc End
                    AND Asset__c IN :idSet
                GROUP BY Asset__c
            ];
            if (raesdTempList1 != null && raesdTempList1.size() > 0) {
                for (AggregateResult ar : raesdTempList1) {
                    String assetId = String.valueOf(ar.get('Asset__c'));
                    Integer tempNum = Integer.valueOf(ar.get('num'));
                    this.newMap.get(assetId).Out_of_wh_Sys__c += tempNum;
                    idSet.remove(assetId);
                }
            }
            /*for (Rental_Apply_Equipment_Set_Detail__c raesd : [
                SELECT Id, Shippment_loaner_time2__c, Asset__c
                FROM Rental_Apply_Equipment_Set_Detail__c
                WHERE Detail_Finish__c = false
@@ -86,52 +531,63 @@
                    this.newMap.get(raesd.Asset__c).Rental_Count_Sys__c += 1;
                }
                idSet.remove(raesd.Asset__c);
            }
            if(!idSet.isEmpty()) {
            }*/
            // 备品性能优化改修 20230312 by lc End
            if (!idSet.isEmpty()) {
                // 没有字段可以完全准确地区分备品设备与耗材设备,只好把备品里没出现过的设备当成耗材来查
                for (Consum_Apply_Equipment_Set_Detail__c caesd : [
                 SELECT Id, Shippment_loaner_time2__c, Asset__c
                  FROM Consum_Apply_Equipment_Set_Detail__c
                    WHERE Detail_Finish__c = false
                    AND Asset__c IN :idSet
                    SELECT Id, Shippment_loaner_time2__c, Asset__c
                    FROM Consum_Apply_Equipment_Set_Detail__c
                    WHERE Detail_Finish__c = FALSE AND Asset__c IN :idSet
                ]) {
                    this.newMap.get(caesd.Asset__c).Out_of_wh_Sys__c += 1;
                    if(caesd.Shippment_loaner_time2__c != null) {
                    if (caesd.Shippment_loaner_time2__c != null) {
                        this.newMap.get(caesd.Asset__c).Rental_Count_Sys__c += 1;
                    }
                }
            }
        }
    }
    //多年保修 start
    private void updateMaintenance_Contract_Asset(){
    private void updateMaintenance_Contract_Asset() {
        StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger = true;
        Set<id> AssetIDSet = new Set<id>();
        for(Asset tempAsset : newList){
            if(String.isNotBlank(tempAsset.warrantyType__c)){
        for (Asset tempAsset : newList) {
            // 20230306 ljh update start
            Id Shipment = DEVELOPERNAMEMAP.get('Shipment').getRecordTypeId();
            // if(String.isNotBlank(tempAsset.warrantyType__c)){
            if (String.isNotBlank(tempAsset.warrantyType__c) && Shipment != tempAsset.RecordTypeId) {
                // 20230306 ljh update end
                AssetIDSet.add(tempAsset.id);
            }
        }
        if(AssetIDSet.size() > 0 ){
            list<Maintenance_Contract_Asset__c> MCAList =
            [select id,startDateGurantee__c,
             startDateGurantee_Text__c,endDateGurantee__c,
             endDateGurantee_Text__c,Return_Flag__c,ChangeAcc_flag__c,
             Maintenance_Price_Amount__c,Maintenance_Price_Amount_text__c,
             GuaranteePrice_Amount__c,GuaranteePrice_Amount_text__c
             from Maintenance_Contract_Asset__c
             where Asset__c in : AssetIDSet
             and Maintenance_Contract__r.RecordType.DeveloperName = 'VM_Contract'
             ];
            if(MCAList.size() > 0){
                list<Maintenance_Contract_Asset__c> UpdateMcaList =
                new list<Maintenance_Contract_Asset__c> ();
                for(Maintenance_Contract_Asset__c tempMCA : MCAList ){
                    if(tempMCA.startDateGurantee__c != tempMCA.startDateGurantee_Text__c
                    || tempMCA.endDateGurantee__c != tempMCA.endDateGurantee_Text__c
                    || tempMCA.Maintenance_Price_Amount__c != tempMCA.Maintenance_Price_Amount_Text__c
                    || tempMCA.GuaranteePrice_Amount__c != tempMCA.GuaranteePrice_Amount_text__c){
        if (AssetIDSet.size() > 0) {
            list<Maintenance_Contract_Asset__c> MCAList = [
                SELECT
                    id,
                    startDateGurantee__c,
                    startDateGurantee_Text__c,
                    endDateGurantee__c,
                    endDateGurantee_Text__c,
                    Return_Flag__c,
                    ChangeAcc_flag__c,
                    Maintenance_Price_Amount__c,
                    Maintenance_Price_Amount_text__c,
                    GuaranteePrice_Amount__c,
                    GuaranteePrice_Amount_text__c
                FROM Maintenance_Contract_Asset__c
                WHERE Asset__c IN :AssetIDSet AND Maintenance_Contract__r.RecordType.DeveloperName = 'VM_Contract'
            ];
            if (MCAList.size() > 0) {
                list<Maintenance_Contract_Asset__c> UpdateMcaList = new List<Maintenance_Contract_Asset__c>();
                for (Maintenance_Contract_Asset__c tempMCA : MCAList) {
                    if (
                        tempMCA.startDateGurantee__c != tempMCA.startDateGurantee_Text__c ||
                        tempMCA.endDateGurantee__c != tempMCA.endDateGurantee_Text__c ||
                        tempMCA.Maintenance_Price_Amount__c != tempMCA.Maintenance_Price_Amount_Text__c ||
                        tempMCA.GuaranteePrice_Amount__c != tempMCA.GuaranteePrice_Amount_text__c
                    ) {
                        UpdateMcaList.add(tempMCA);
                    }
                }
@@ -152,21 +608,23 @@
            if (Trigger.isInsert) {
                nObj.Last_Reserve_RAES_Detail__c = null;
                nObj.Last_Reserve_TAES_Detail__c = null;
                nObj.Pre_Reserve_RAES_Detail__c  = null;
                nObj.Pre_Reserve_TAES_Detail__c  = null;
                nObj.Fixture_OneToOne_Link__c    = null;
                nObj.Pre_Reserve_RAES_Detail__c = null;
                nObj.Pre_Reserve_TAES_Detail__c = null;
                nObj.Fixture_OneToOne_Link__c = null;
            }
            if (Trigger.isUpdate) {
                Asset oObj = oldMap.get(nObj.Id);
                if (oObj.Last_Reserve_RAES_Detail__c != null && nObj.Last_Reserve_RAES_Detail__c == null
                        && oObj.Last_Reserve_RAES_Detail_Flag__c == true) {
                if (
                    oObj.Last_Reserve_RAES_Detail__c != null &&
                    nObj.Last_Reserve_RAES_Detail__c == null &&
                    oObj.Last_Reserve_RAES_Detail_Flag__c == true
                ) {
                    nObj.Pre_Reserve_RAES_Detail__c = oObj.Last_Reserve_RAES_Detail__c;
                }
                if (oObj.Last_Reserve_TAES_Detail__c != null && nObj.Last_Reserve_TAES_Detail__c == null
                        // TODO 由于__r超20,字段建不出来
                        // && oObj.Last_Reserve_TAES_Detail_Flag__c == true
                ) {
                if (oObj.Last_Reserve_TAES_Detail__c != null && nObj.Last_Reserve_TAES_Detail__c == null) {
                    // TODO 由于__r超20,字段建不出来
                    // && oObj.Last_Reserve_TAES_Detail_Flag__c == true
                    nObj.Pre_Reserve_TAES_Detail__c = oObj.Last_Reserve_TAES_Detail__c;
                }
            }
@@ -174,17 +632,22 @@
            // 必ず最後で置く
            nObj.Fixture_Status2_text__c = nObj.Fixture_Status2__c;
            nObj.Fixture_Status3_text__c = nObj.Fixture_Status3__c;
            nObj.BTreeIndexKey__c = nObj.Asset_Owner__c
                                    + ':' + nObj.Asset_loaner_category__c
                                    + ':' + String.valueOf(nobj.Freeze_sign_Abandoned_Flag__c)
                                    + ':' + String.valueOf(nObj.Delete_Flag__c)
                                    + ':' + String.valueOf(nObj.AssetManageConfirm__c);
            nObj.BTreeIndexKey__c =
                nObj.Asset_Owner__c +
                ':' +
                nObj.Asset_loaner_category__c +
                ':' +
                String.valueOf(nobj.Freeze_sign_Abandoned_Flag__c) +
                ':' +
                String.valueOf(nObj.Delete_Flag__c) +
                ':' +
                String.valueOf(nObj.AssetManageConfirm__c);
            if (nObj.Status == FixtureUtil.assetStatusMap.get(FixtureUtil.AssetStatus.Dai_Fei_Qi.ordinal())) {
                nObj.Freeze_sign__c = false;
            }
            // gzw CHAN-CCR6MW  【委托】【保有设备】保有设备发货日逻辑 start
            if(Trigger.isInsert && nObj.Posting_Date__c == null){
            if (Trigger.isInsert && nObj.Posting_Date__c == null) {
                nObj.Posting_Date__c = Date.newInstance(1900, 1, 1);
            }
            // gzw CHAN-CCR6MW  【委托】【保有设备】保有设备发货日逻辑 end
@@ -206,8 +669,10 @@
            String nAbandoned_Inventory = nObj.Abandoned_Inventory__c == null ? '' : String.valueOf(nObj.Abandoned_Inventory__c);
            if ((oQuantity != nQuantity && String.isNotBlank(nObj.ChangeQuantityReason__c)) || Trigger.isInsert) {
                String rs = nObj.ChangeQuantityReason__c;
                nObj.ChangeQuantityHistory__c = String.format(System.Label.ChangeQuantityHistory,
                         new String[]{oQuantity, nQuantity, rs});
                nObj.ChangeQuantityHistory__c = String.format(
                    System.Label.ChangeQuantityHistory,
                    new List<String>{ oQuantity, nQuantity, rs }
                );
                // before里面入立规则过不了改到
                // 已经改进 Must_Input_ChangeQuantityReason 的 valida before可以完成 ChangeQuantityReason__c = ''
                // nObj.ChangeQuantityReason__c = '';
@@ -215,25 +680,26 @@
            if (oAbandoned_Inventory != nAbandoned_Inventory || Trigger.isInsert) {
                String rs = nObj.Giveup_Return__c;
                nObj.ChangeAbandoned_InventoryHistory__c = String.format(System.Label.ChangeAbandoned_InventoryHistory,
                         new String[]{oAbandoned_Inventory, nAbandoned_Inventory, rs});
                nObj.ChangeAbandoned_InventoryHistory__c = String.format(
                    System.Label.ChangeAbandoned_InventoryHistory,
                    new List<String>{ oAbandoned_Inventory, nAbandoned_Inventory, rs }
                );
            }
        }
    }
    //// かならず afterUpdate
    private void cleanChangeQuantityReason() {
       // TODO 更新自己table 原则需要Static的Class变量(因为会有复数的Method去更新自己的)
       List<Asset> assList = new List<Asset>();
       for (Asset nObj : newList) {
           if (String.isBlank(nObj.ChangeQuantityReason__c) == false) {
               assList.add(new Asset(Id = nObj.Id,
                       ChangeQuantityReason__c = ''));
           }
       }
       if (!assList.isEmpty()) {
           update assList;
       }
        // TODO 更新自己table 原则需要Static的Class变量(因为会有复数的Method去更新自己的)
        List<Asset> assList = new List<Asset>();
        for (Asset nObj : newList) {
            if (String.isBlank(nObj.ChangeQuantityReason__c) == false) {
                assList.add(new Asset(Id = nObj.Id, ChangeQuantityReason__c = ''));
            }
        }
        if (!assList.isEmpty()) {
            update assList;
        }
    }
    // afterUpdate
@@ -242,9 +708,7 @@
        List<Asset> assList = new List<Asset>();
        for (Asset nObj : newList) {
            if (String.isBlank(nObj.Giveup_Return__c) == false) {
                assList.add(new Asset(
                        Id = nObj.Id,
                        Giveup_Return__c = ''));
                assList.add(new Asset(Id = nObj.Id, Giveup_Return__c = ''));
            }
        }
        if (!assList.isEmpty()) {
@@ -273,8 +737,13 @@
        }
        if (!aSetIdSet.isEmpty()) {
            List<Fixture_OneToOne_Link__c> oneToOneList = [
                    SELECT Id FROM Fixture_OneToOne_Link__c WHERE Main_Asset__c IN :aSetIdSet];
            if (!oneToOneList.isEmpty()) { update oneToOneList; }
                SELECT Id
                FROM Fixture_OneToOne_Link__c
                WHERE Main_Asset__c IN :aSetIdSet
            ];
            if (!oneToOneList.isEmpty()) {
                update oneToOneList;
            }
        }
    }
@@ -291,7 +760,7 @@
    // かならず after
    private void queueRedistribution() {
        if (queueRaesdMap == null) {
            queueRaesdMap = new Map<String , List<Rental_Apply_Equipment_Set_Detail__c>>();
            queueRaesdMap = new Map<String, List<Rental_Apply_Equipment_Set_Detail__c>>();
        }
        Map<String, Set<Id>> modelNoAssetIdMap = new Map<String, Set<Id>>();
        Set<Id> raesdIdSet = new Set<Id>();
@@ -299,12 +768,13 @@
        String whkey = '';
        for (Asset nObj : newList) {
            //ToDo現在排队できるのは主体だけなので,今後个体管理の附属品も排队できるの場合があったらこのIFぶんを直す必要があります
            if (!(nObj.Loaner_accsessary__c == false
                    && nObj.Asset_Owner__c == 'Olympus'
                    && nObj.Equipment_Type__c != '检测用备品'
                    && nObj.Delete_Flag__c == False
                    && nObj.You_Xiao_Ku_Cun__c > 0
                    && nObj.Freeze_sign_Abandoned_Flag__c == False)
            if (
                !(nObj.Loaner_accsessary__c == false &&
                nObj.Asset_Owner__c == 'Olympus' &&
                nObj.Equipment_Type__c != '检测用备品' &&
                nObj.Delete_Flag__c == false &&
                nObj.You_Xiao_Ku_Cun__c > 0 &&
                nObj.Freeze_sign_Abandoned_Flag__c == false)
            ) {
                continue;
            }
@@ -325,7 +795,6 @@
                key += nObj.Product_category__c;
            }
            System.debug(LoggingLevel.INFO, '*** key: ' + key);
            //有新的Asset的时候 暂定分配
            // You_Xiao_Ku_Cun__c > 0 在上面已经做了判断
@@ -349,22 +818,27 @@
            // You_Xiao_Ku_Cun__c > 0 在上面已经做了判断
            else {
                Asset oObj = oldMap.get(nObj.Id);
                if (nObj.Loaner_accsessary__c == false && String.isBlank(nObj.Last_Reserve_RAES_Detail__c)
                        && (nObj.Last_Reserve_RAES_Detail__c != oObj.Last_Reserve_RAES_Detail__c
                            || (nObj.Asset_Owner__c != oObj.Asset_Owner__c && nObj.Asset_Owner__c == 'Olympus')
                            //备品存放地 OLY_OCM-722 恢复存放地的条件
                            || (nObj.Internal_asset_location__c != oObj.Internal_asset_location__c)
                            //备品分类并且不是 检测用备品
                            || (nObj.Equipment_Type__c != oObj.Equipment_Type__c && nObj.Equipment_Type__c != '检测用备品')
                            //销售本部
                            || (nObj.Salesdepartment__c != oObj.Salesdepartment__c)
                            //产品分类(GI/SP)
                            || (nObj.Product_category__c != oObj.Product_category__c)
                            //备品配套明细型号
                            || (nObj.Fixture_Model_No_F__c != oObj.Fixture_Model_No_F__c)
                            || (nObj.Delete_Flag__c != oObj.Delete_Flag__c && nObj.Delete_Flag__c == true)
                            || (nObj.Freeze_sign_Abandoned_Flag__c != oObj.Freeze_sign_Abandoned_Flag__c && nObj.Freeze_sign_Abandoned_Flag__c == false)
                        )
                if (
                    nObj.Loaner_accsessary__c == false &&
                    String.isBlank(nObj.Last_Reserve_RAES_Detail__c) &&
                    (nObj.Last_Reserve_RAES_Detail__c != oObj.Last_Reserve_RAES_Detail__c ||
                    (nObj.Asset_Owner__c != oObj.Asset_Owner__c &&
                    nObj.Asset_Owner__c == 'Olympus') ||
                    //备品存放地 OLY_OCM-722 恢复存放地的条件
                    (nObj.Internal_asset_location__c != oObj.Internal_asset_location__c) ||
                    //备品分类并且不是 检测用备品
                    (nObj.Equipment_Type__c != oObj.Equipment_Type__c &&
                    nObj.Equipment_Type__c != '检测用备品') ||
                    //销售本部
                    (nObj.Salesdepartment__c != oObj.Salesdepartment__c) ||
                    //产品分类(GI/SP)
                    (nObj.Product_category__c != oObj.Product_category__c) ||
                    //备品配套明细型号
                    (nObj.Fixture_Model_No_F__c != oObj.Fixture_Model_No_F__c) ||
                    (nObj.Delete_Flag__c != oObj.Delete_Flag__c &&
                    nObj.Delete_Flag__c == true) ||
                    (nObj.Freeze_sign_Abandoned_Flag__c != oObj.Freeze_sign_Abandoned_Flag__c &&
                    nObj.Freeze_sign_Abandoned_Flag__c == false))
                ) {
                    if (String.isBlank(nObj.Fixture_Model_No_F__c) == false) {
                        if (modelNoAssetIdMap.containsKey(key) == false) {
@@ -386,34 +860,45 @@
        List<String> keyList = new List<String>();
        keyList.addAll(modelNoAssetIdMap.keySet());
        System.debug(LoggingLevel.INFO, '*** keyList: ' + keyList);
       List<Rental_Apply_Sequence__c> targetSequence = [SELECT Id,Apply_Set_Detail__c,
                                                                Apply_Set_Detail_ExternalKey__c,
                                                                Demo_Purpose2__c, Equipment_Type__c, ExternalKey__c,
                                                                Fixture_Model_No__c,
                                                                Internal_asset_location__c, Invalid_Flag__c,
                                                                Product_category__c,
                                                                Rental_Apply__c,Series_No__c,
                                                                Series_Unequal_Queue_Flag__c, Salesdepartment__c
                                                        FROM Rental_Apply_Sequence__c
                                                        WHERE Series_No__c > 0 AND Invalid_Flag__c =false
                                                        AND Apply_Set_Detail__c NOT IN:raesdIdSet
                                                        AND ExternalKey__c IN:keyList
                                                        AND Apply_Set_Detail__r.Cancel_Select__c = false
                                                        ORDER BY Series_No__c ];
        List<Rental_Apply_Sequence__c> targetSequence = [
            SELECT
                Id,
                Apply_Set_Detail__c,
                Apply_Set_Detail_ExternalKey__c,
                Demo_Purpose2__c,
                Equipment_Type__c,
                ExternalKey__c,
                Fixture_Model_No__c,
                Internal_asset_location__c,
                Invalid_Flag__c,
                Product_category__c,
                Rental_Apply__c,
                Series_No__c,
                Series_Unequal_Queue_Flag__c,
                Salesdepartment__c
            FROM Rental_Apply_Sequence__c
            WHERE
                Series_No__c > 0
                AND Invalid_Flag__c = FALSE
                AND Apply_Set_Detail__c NOT IN :raesdIdSet
                AND ExternalKey__c IN :keyList
                AND Apply_Set_Detail__r.Cancel_Select__c = FALSE
            ORDER BY Series_No__c
        ];
        System.debug(LoggingLevel.INFO, '*** targetSequence: ' + targetSequence);
        Map<String,List<Rental_Apply_Sequence__c>> sequenceMap = new Map<String,List<Rental_Apply_Sequence__c>>();
        for(Rental_Apply_Sequence__c sequeuece:targetSequence){
            if(!sequenceMap.containsKey(sequeuece.Externalkey__c)){
                sequenceMap.put(sequeuece.Externalkey__c,new List<Rental_Apply_Sequence__c>());
        Map<String, List<Rental_Apply_Sequence__c>> sequenceMap = new Map<String, List<Rental_Apply_Sequence__c>>();
        for (Rental_Apply_Sequence__c sequeuece : targetSequence) {
            if (!sequenceMap.containsKey(sequeuece.Externalkey__c)) {
                sequenceMap.put(sequeuece.Externalkey__c, new List<Rental_Apply_Sequence__c>());
            }
            sequenceMap.get(sequeuece.Externalkey__c).add(sequeuece);
        }
        Map<String,Rental_Apply_Equipment_Set_Detail__c> updateMap = new Map<String,Rental_Apply_Equipment_Set_Detail__c>();
        for(String key:sequenceMap.keySet()){
            for(Rental_Apply_Sequence__c sequeuece:sequenceMap.get(key)){
                if(!updateMap.containsKey(sequeuece.Apply_Set_Detail__c)){
        Map<String, Rental_Apply_Equipment_Set_Detail__c> updateMap = new Map<String, Rental_Apply_Equipment_Set_Detail__c>();
        for (String key : sequenceMap.keySet()) {
            for (Rental_Apply_Sequence__c sequeuece : sequenceMap.get(key)) {
                if (!updateMap.containsKey(sequeuece.Apply_Set_Detail__c)) {
                    System.debug(LoggingLevel.INFO, '*** modelNoAssetIdMap: ' + JSON.serialize(modelNoAssetIdMap));
                    if(modelNoAssetIdMap.containsKey(key)){
                    if (modelNoAssetIdMap.containsKey(key)) {
                        List<Id> assIdList = new List<Id>();
                        assIdList.addAll(modelNoAssetIdMap.get(key));
                        String assIdbk = assIdList.get(0);
@@ -421,9 +906,8 @@
                        raesd.Id = sequeuece.Apply_Set_Detail__c;
                        raesd.Asset__c = assIdbk;
                        System.debug('raesd.Asset__c' + raesd.Asset__c);
                        raesd.Queue_Number__c = 0;      // 暂定分配
                        updateMap.put(raesd.Id,raesd);
                        raesd.Queue_Number__c = 0; // 暂定分配
                        updateMap.put(raesd.Id, raesd);
                        modelNoAssetIdMap.get(key).remove(assIdbk);
                        if (modelNoAssetIdMap.get(key).isEmpty()) {
@@ -432,15 +916,13 @@
                        System.debug(LoggingLevel.INFO, '*** modelNoAssetIdMap: ' + JSON.serialize(modelNoAssetIdMap));
                    }
                }
            }
        }
        System.debug(LoggingLevel.INFO, '*** updateMap.values(): ' + JSON.serialize(updateMap.values()));
        update updateMap.values();
            // Fixture_Model_No_F__c を見ることができない、データがおおいので。
            // Fixture_Set_Detail__r.Fixture_Model_No_F__c をみるか Fixture_Model_No_text__c をみるか
        // Fixture_Model_No_F__c を見ることができない、データがおおいので。
        // Fixture_Set_Detail__r.Fixture_Model_No_F__c をみるか Fixture_Model_No_text__c をみるか
        //     whkey += ' (';
        //     whkey += '   ((Fixture_Set_Detail__c != null and Fixture_Set_Detail__r.Product2__r.Fixture_Model_No_T__c =\'' + String.escapeSingleQuotes(nObj.Fixture_Model_No_F__c) + '\')';
        //     whkey += '      OR Fixture_Model_No_text__c =\'' + String.escapeSingleQuotes(nObj.Fixture_Model_No_F__c) + '\'';
@@ -467,13 +949,9 @@
        //     whkey += wher + ' ) OR';
        // }
        // if (String.isNotBlank(whkey)) {
        //     whkey = '( ' + whkey.removeEnd('OR') + ')';
        // }
        // String soql = 'SELECT Fixture_Model_No_F__c, Substitute_flag__c, Asset__c,'
        //             + ' Queue_Number__c, Fixture_Model_No_text__c, Salesdepartment_before__c,'
@@ -572,15 +1050,17 @@
    private void checkOneToOneLink() {
        Set<Id> otoIds = new Set<Id>(); // 待删除link的Id
        Set<Id> assetIds = new Set<Id>();
        Set<String> centers = new Set<String> {'北京 备品中心', '上海 备品中心', '广州 备品中心'};
        Set<String> centers = new Set<String>{ '北京 备品中心', '上海 备品中心', '广州 备品中心' };
        for (Asset nObj : newList) {
            //待废弃,废弃,和数量0的备品需要断开一对一link (目前只处理个体管理的)
            if ((nObj.Fixture_Status__c == FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Fei_Qi.ordinal())
                || nObj.Fixture_Status__c == FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Dai_Fei_Qi.ordinal())
                || nObj.Quantity == 0) && nObj.Manage_type__c == FixtureUtil.managetypeMap.get(FixtureUtil.Managetype.Ge_Ti_Guan_Li)){
            if (
                (nObj.Fixture_Status__c == FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Fei_Qi.ordinal()) ||
                nObj.Fixture_Status__c == FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Dai_Fei_Qi.ordinal()) ||
                nObj.Quantity == 0) && nObj.Manage_type__c == FixtureUtil.managetypeMap.get(FixtureUtil.Managetype.Ge_Ti_Guan_Li)
            ) {
                //是一对一主体或者是一对一个体附属品
                if (nObj.Main_OneToOne__c == true || nObj.Fixture_OneToOne_Link__c <> null) {
                    if(centers.contains(nObj.Internal_asset_location__c)) {
                    if (centers.contains(nObj.Internal_asset_location__c)) {
                        assetIds.add(nObj.Id);
                    }
                }
@@ -588,13 +1068,14 @@
        }
        if (assetIds.size() > 0) {
            Map<Id, Fixture_OneToOne_Link__c> linkMap = new Map<Id, Fixture_OneToOne_Link__c>([
                SELECT Id
                  FROM Fixture_OneToOne_Link__c
                 WHERE Main_Asset__c in :assetIds
                    OR Accessory_Asset__c IN: assetIds
            ]);
            if(!linkMap.isEmpty()){
            Map<Id, Fixture_OneToOne_Link__c> linkMap = new Map<Id, Fixture_OneToOne_Link__c>(
                [
                    SELECT Id
                    FROM Fixture_OneToOne_Link__c
                    WHERE Main_Asset__c IN :assetIds OR Accessory_Asset__c IN :assetIds
                ]
            );
            if (!linkMap.isEmpty()) {
                delete linkMap.values();
            }
        }
@@ -612,8 +1093,15 @@
     *    - 没有找的话, 不更新AccountId, 自动做 Account, Group, ApexShare
     */
    private void beforeSetAccountId() {
        Set<String> targetDepts = new Set<String> {'1.华北营业本部','2.东北营业本部','3.西北营业本部','4.华东营业本部','5.华南营业本部','6.西南营业本部'};
        Set<String> targetCenters = new Set<String> {'北京 备品中心', '上海 备品中心', '广州 备品中心'};
        Set<String> targetDepts = new Set<String>{
            '1.华北营业本部',
            '2.东北营业本部',
            '3.西北营业本部',
            '4.华东营业本部',
            '5.华南营业本部',
            '6.西南营业本部'
        };
        Set<String> targetCenters = new Set<String>{ '北京 备品中心', '上海 备品中心', '广州 备品中心' };
        if (Test.isRunningTest() && testTargetDepts != null) {
            targetDepts = testTargetDepts;
        }
@@ -627,39 +1115,42 @@
            Asset oObj = (null == this.oldMap) ? null : this.oldMap.get(nObj.Id);
            // 作成, 确认字段有没有变化
            if (Trigger.isInsert
                || (oObj != null
                    && (oObj.RecordTypeId != nObj.RecordTypeId
                        || oObj.Asset_loaner_category__c != nObj.Asset_loaner_category__c
                        || oObj.AssetManageConfirm__c != nObj.AssetManageConfirm__c
                        || oObj.Internal_asset_location__c != nObj.Internal_asset_location__c
                        || oObj.Salesdepartment__c != nObj.Salesdepartment__c
                        || oObj.OlympusAccShareName__c != nObj.OlympusAccShareName__c
                    )
                    && (targetCenters.contains(nObj.Internal_asset_location__c)
                        || targetProvs.containsKey(nObj.Internal_asset_location__c)
                    )
                    && !nObj.TransferToOther__c
                )
            if (
                Trigger.isInsert ||
                (oObj != null &&
                (oObj.RecordTypeId != nObj.RecordTypeId ||
                oObj.Asset_loaner_category__c != nObj.Asset_loaner_category__c ||
                oObj.AssetManageConfirm__c != nObj.AssetManageConfirm__c ||
                oObj.Internal_asset_location__c != nObj.Internal_asset_location__c ||
                oObj.Salesdepartment__c != nObj.Salesdepartment__c ||
                oObj.OlympusAccShareName__c != nObj.OlympusAccShareName__c) &&
                (targetCenters.contains(nObj.Internal_asset_location__c) || targetProvs.containsKey(nObj.Internal_asset_location__c)) &&
                !nObj.TransferToOther__c)
            ) {
                // 是不是备品的确认
                if (System.Label.Asset_RecordType == nObj.RecordTypeId
                    && true == nObj.AssetManageConfirm__c
                    && nObj.Asset_loaner_category__c != '耗材'
                if (
                    System.Label.Asset_RecordType == nObj.RecordTypeId &&
                    true == nObj.AssetManageConfirm__c &&
                    nObj.Asset_loaner_category__c != '耗材'
                ) {
                    // 办事处备品 → 动态设定 Asset.AccountId 的対象
                    if (targetProvs.containsKey(nObj.Internal_asset_location__c)
                        && targetDepts.contains(nObj.Salesdepartment__c)
                    ) {
                        String accShareName = '备品共享_'
                                + targetProvs.get(nObj.Internal_asset_location__c) + '_' + nObj.Salesdepartment__c.right(6);
                    if (targetProvs.containsKey(nObj.Internal_asset_location__c) && targetDepts.contains(nObj.Salesdepartment__c)) {
                        String accShareName =
                            '备品共享_' +
                            targetProvs.get(nObj.Internal_asset_location__c) +
                            '_' +
                            nObj.Salesdepartment__c.right(6);
                        nObj.OlympusAccShareName__c = accShareName;
                        assetAccShareNameMap.put(nObj, accShareName);
                    }
                    else {
                    } else {
                        if (AssetHandler.Account_Asset_Id == null) {
                            // Static 只会执行一遍
                            AssetHandler.Account_Asset_Id = [SELECT Id FROM Account WHERE AgentCode_Ext__c =: System.Label.Account_Asset].Id;
                            AssetHandler.Account_Asset_Id = [
                                SELECT Id
                                FROM Account
                                WHERE AgentCode_Ext__c = :System.Label.Account_Asset
                            ]
                            .Id;
                        }
                        nObj.OlympusAccShareName__c = '';
                        nObj.AccountId = AssetHandler.Account_Asset_Id;
@@ -675,11 +1166,11 @@
        Set<String> insertAccShareNameSet = new Set<String>();
        if (assetAccShareNameMap.size() > 0) {
            Map<String, Id> accShareId = new Map<String, Id>();
            for (Account accShare : [SELECT Id
                        , Department_Name__c
                     FROM Account
                    WHERE RecordTypeId =: System.Label.Department_OTH
                      AND Department_Name__c IN: assetAccShareNameMap.values()]) {
            for (Account accShare : [
                SELECT Id, Department_Name__c
                FROM Account
                WHERE RecordTypeId = :System.Label.Department_OTH AND Department_Name__c IN :assetAccShareNameMap.values()
            ]) {
                accShareId.put(accShare.Department_Name__c, accShare.Id);
            }
@@ -690,15 +1181,14 @@
                if (accShareId.containsKey(accShareName)) {
                    // 找到 Account 设定 AccountId, "Olympus社内 其他 备品" => "Olympus社内 其他 备品共享_XXX"
                    nObj.AccountId = accShareId.get(accShareName);
                }
                else {
                } else {
                    // 找不到 AccountId, 新建 Account, Group, ApexShare
                    insertAccShareNameSet.add(accShareName);
                }
            }
        }
        if (insertAccShareNameSet.size() > 0) {
            // AssetHandler.futureInsertAccShare(JSON.serialize(insertAccShareNameSet), execNow);
            // AssetHandler.futureInsertAccShare(JSON.serialize(insertAccShareNameSet), execNow);
            System.enqueueJob(new MyQueueableClass(JSON.serialize(insertAccShareNameSet), execNow));
        }
    }
@@ -709,24 +1199,29 @@
     */
    private static void insertAccShare(String insertAccShareNameJson, Datetime execNow) {
        Set<String> insertAccShareNameSet = (Set<String>) JSON.deserialize(insertAccShareNameJson, Set<String>.class);
        if (insertAccShareNameSet.isEmpty()) { return; }
        if (insertAccShareNameSet.isEmpty()) {
            return;
        }
        //  Olympus社内 其他
        List<Account> olympusAccount_OtherDC;
        try {
            olympusAccount_OtherDC = [SELECT Id, ParentId
                     FROM Account
                    WHERE Parent.AgentCode_Ext__c = '9999999' AND Department_Class_Name__c = '其他'
                      FOR Update];
            olympusAccount_OtherDC = [
                SELECT Id, ParentId
                FROM Account
                WHERE Parent.AgentCode_Ext__c = '9999999' AND Department_Class_Name__c = '其他'
                FOR UPDATE
            ];
        } catch (Exception e) {
            System.enqueueJob(new MyQueueableClass(insertAccShareNameJson, execNow));
            return;
        }
        List<Account> isInsertedList = [SELECT Id, Department_Name__c
                 FROM Account
                WHERE ParentId =: olympusAccount_OtherDC[0].Id
                  AND Department_Name__c IN: insertAccShareNameSet];
        List<Account> isInsertedList = [
            SELECT Id, Department_Name__c
            FROM Account
            WHERE ParentId = :olympusAccount_OtherDC[0].Id AND Department_Name__c IN :insertAccShareNameSet
        ];
        if (isInsertedList.size() > 0) {
            Map<String, Account> insertedAccount = new Map<String, Account>();
            for (Account insertedAcc : isInsertedList) {
@@ -737,27 +1232,31 @@
            AssetHandler.updateAssetAccount(insertedAccount, execNow);
        }
        if (insertAccShareNameSet.size() > 0) {
            Map<String, Account> insertAccount = new Map<String, Account>();
            for (String accShareName : insertAccShareNameSet) {
                insertAccount.put(accShareName, new Account(
                    Name = '*',
                    Hospital__c = olympusAccount_OtherDC[0].ParentId,
                    ParentId = olympusAccount_OtherDC[0].Id,
                    Department_Class__c = olympusAccount_OtherDC[0].Id,
                    Other_dept_category__c = '其他科室',
                    Department_Name__c = accShareName,
                    OwnerId = System.Label.Batch_User_Id,
                    RecordTypeId = System.Label.Department_OTH
                ));
                insertAccount.put(
                    accShareName,
                    new Account(
                        Name = '*',
                        Hospital__c = olympusAccount_OtherDC[0].ParentId,
                        ParentId = olympusAccount_OtherDC[0].Id,
                        Department_Class__c = olympusAccount_OtherDC[0].Id,
                        Other_dept_category__c = '其他科室',
                        Department_Name__c = accShareName,
                        OwnerId = System.Label.Batch_User_Id,
                        RecordTypeId = System.Label.Department_OTH
                    )
                );
            }
            AssetHandler.insertAccGrantShare(insertAccount, execNow);
        }
    }
    private static void insertAccGrantShare(Map<String, Account> insertAccountMap, Datetime execNow) {
        if (insertAccountMap.isEmpty()) { return; }
        if (insertAccountMap.isEmpty()) {
            return;
        }
        Set<String> accShareNameSet = insertAccountMap.keySet();
        // insert Account的时候, 跳过 NFM001
        // OLY_OCM-1230 需要执行NFM001Trigger
@@ -767,13 +1266,15 @@
        Map<String, Group> insertGroup = new Map<String, Group>();
        Map<String, Group> groupNameMap = new Map<String, Group>();
        for (String accShareName : accShareNameSet) {
            insertGroup.put(accShareName, new Group(
                Name = accShareName
            ));
            insertGroup.put(accShareName, new Group(Name = accShareName));
        }
        // Check 有没有 Group
        for (Group grp : [SELECT Id, Name FROM Group WHERE Type = 'Regular' AND Name IN: accShareNameSet]) {
        for (Group grp : [
            SELECT Id, Name
            FROM Group
            WHERE Type = 'Regular' AND Name IN :accShareNameSet
        ]) {
            // 已经有Group 的话 不用 insert
            insertGroup.remove(grp.Name);
            groupNameMap.put(grp.Name, grp);
@@ -787,12 +1288,14 @@
        // 赋 Account 共享权限
        List<AccountShare> insertShareList = new List<AccountShare>();
        for (String accShareName : accShareNameSet) {
            insertShareList.add(new AccountShare(
            insertShareList.add(
                new AccountShare(
                    UserOrGroupId = groupNameMap.get(accShareName).Id,
                    AccountId = insertAccountMap.get(accShareName).Id,
                    AccountAccessLevel = 'Edit',
                    OpportunityAccessLevel = 'None'
            ));
                )
            );
        }
        insert insertShareList;
        // Update Asset.AccountId
@@ -800,15 +1303,17 @@
    }
    private static void updateAssetAccount(Map<String, Account> accShareNameAccountMap, Datetime execNow) {
        if (accShareNameAccountMap.isEmpty()) { return; }
        if (accShareNameAccountMap.isEmpty()) {
            return;
        }
        Set<String> accShareNameSet = accShareNameAccountMap.keySet();
        List<Asset> updAssetAccount = new List<Asset>();
        for (Asset nObj : [SELECT Id, OlympusAccShareName__c, AccountId
                 FROM Asset
                WHERE OlympusAccShareSameFlag__c = '0'
                  AND OlympusAccShareName__c IN: accShareNameSet
                  AND LastModifiedDate >=: execNow]) {
        for (Asset nObj : [
            SELECT Id, OlympusAccShareName__c, AccountId
            FROM Asset
            WHERE OlympusAccShareSameFlag__c = '0' AND OlympusAccShareName__c IN :accShareNameSet AND LastModifiedDate >= :execNow
        ]) {
            nObj.AccountId = accShareNameAccountMap.get(nObj.OlympusAccShareName__c).Id;
            updAssetAccount.add(nObj);
        }
@@ -829,4 +1334,4 @@
            AssetHandler.insertAccShare(insertAccShareNameJson, execNow);
        }
    }
}
}
force-app/main/default/classes/AssetHandler.cls-meta.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>35.0</apiVersion>
    <apiVersion>50.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/Batch_FixAttachmentToFiles.cls
New file
@@ -0,0 +1,96 @@
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';
        }
        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.Name, 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.Name; //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
            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.Title); //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_FixAttachmentToFiles.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/Batch_FixAttachmentToFilesTest.cls
New file
@@ -0,0 +1,52 @@
@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;
        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
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/ContactTriggerHandler.cls
@@ -2,20 +2,21 @@
 * Select Id From Contact Where RecordTypeId = '01210000000QfWdAAK' and Strategic_dept_Class__c != null
 */
public without sharing class ContactTriggerHandler extends Oly_TriggerHandler {
    private Map < Id, Contact > newMap;
    private Map < Id, Contact > oldMap;
    private List < Contact > newList;
    private List < Contact > oldList;
    private Map<Id, Contact> newMap;
    private Map<Id, Contact> oldMap;
    private List<Contact> newList;
    private List<Contact> oldList;
    private Id AgencyId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Agency').getRecordTypeId(); // 20220830 ljh LLIU-CHR8FF add
    public ContactTriggerHandler() {
        this.newMap = (Map < Id, Contact > ) Trigger.newMap;
        this.oldMap = (Map < Id, Contact > ) Trigger.oldMap;
        this.newList = (List < Contact > ) Trigger.new;
        this.oldList = (List < Contact > ) Trigger.old;
        this.newMap = (Map<Id, Contact>) Trigger.newMap;
        this.oldMap = (Map<Id, Contact>) Trigger.oldMap;
        this.newList = (List<Contact>) Trigger.new;
        this.oldList = (List<Contact>) Trigger.old;
    }
    protected override void beforeInsert() {
        if(Test.isRunningTest()||UserInfo.getUserId()!=System.Label.ByPassTrigger){ //Add by Li Jun for PIPL 20220331
        if (Test.isRunningTest() || UserInfo.getUserId() != System.Label.ByPassTrigger) {
            //Add by Li Jun for PIPL 20220331
            mobileNumberVerification();
        }
    }
@@ -24,7 +25,7 @@
        syncToAgencyContact();
        updateDealerNum();
        sendToComPlat();
        updateChargeState();// 20220830 ljh LLIU-CHR8FF
        updateChargeState(); // 20220830 ljh LLIU-CHR8FF
    }
    protected override void afterUpdate() {
@@ -40,7 +41,6 @@
        mobileNumberVerification();
    }
    protected override void afterDelete() {
        syncToAgencyContactDelete();
        updateDealerNum();
@@ -53,15 +53,13 @@
     * 根据服务技师填写情况更新客户人员上的开展工作字段
     */
    private void UpdateProcessingWork() {
        for (Contact temContact: newList) {
        for (Contact temContact : newList) {
            if (System.label.UpdateServiceHistory.equals('true')) {
                string ProcessingWork = '';
                string ProcessingWorkWithoutNumber = '';
                if (temContact.ServiceBookInput__c != 0) {
                    ProcessingWork += '维修委托书填写' + temContact.ServiceBookInput__c + '次';
                    ProcessingWorkWithoutNumber += '维修委托书填写';
                }
                if (temContact.InspectTime__c != 0) {
                    if (String.isBlank(ProcessingWork)) {
@@ -70,7 +68,6 @@
                    } else {
                        ProcessingWork += ',点检' + temContact.InspectTime__c + '次';
                        ProcessingWorkWithoutNumber += ',点检';
                    }
                }
                if (temContact.InspectEquipmentTime__c != 0) {
@@ -81,7 +78,6 @@
                        ProcessingWork += ',点检设备' + temContact.InspectEquipmentTime__c + '个';
                        ProcessingWorkWithoutNumber += ',点检设备';
                    }
                }
                if (temContact.VisitTime__c != 0) {
                    if (String.isBlank(ProcessingWork)) {
@@ -91,7 +87,6 @@
                        ProcessingWork += ',上门' + temContact.VisitTime__c + '次';
                        ProcessingWorkWithoutNumber += ',上门';
                    }
                }
                if (temContact.pollingTime__c != 0) {
                    if (String.isBlank(ProcessingWork)) {
@@ -101,7 +96,6 @@
                        ProcessingWork += ',巡检' + temContact.pollingTime__c + '次';
                        ProcessingWorkWithoutNumber += ',巡检';
                    }
                }
                if (temContact.TeachingTime__c != 0) {
                    if (String.isBlank(ProcessingWork)) {
@@ -118,43 +112,38 @@
                //}
                temContact.ProcessingWork__c = ProcessingWork;
                temContact.ProcessingWorkWithoutNumber__c = ProcessingWorkWithoutNumber;
            }
        }
    }
    // 服务技师 2018/12/24  end
    private void syncToAgencyContact() {
        System.debug('enter syncToAgencyContact');
        Map < Id, Agency_Contact__c > targetContactMap = new Map < Id, Agency_Contact__c > ();
        Map < Id, Contact > ContactMap = new Map < Id, Contact > ();
        for (Contact nObj: newList) {
            if (nObj.RecordTypeId == '01210000000QfWdAAK' // Doctor
                &&
        Map<Id, Agency_Contact__c> targetContactMap = new Map<Id, Agency_Contact__c>();
        Map<Id, Contact> ContactMap = new Map<Id, Contact>();
        for (Contact nObj : newList) {
            if (
                nObj.RecordTypeId ==
                '01210000000QfWdAAK' && // Doctor
                String.isBlank(nObj.Strategic_dept_Class__c) == false
            ) {
                if (Trigger.isInsert ||
                    (Trigger.isUpdate
                        //                        && (
                        //                            oldMap.get(nObj.Id).LastName                != nObj.LastName
                        //                         || oldMap.get(nObj.Id).FirstName               != nObj.FirstName
                        //                         || oldMap.get(nObj.Id).Strategic_dept_Class__c != nObj.Strategic_dept_Class__c
                        //                         || oldMap.get(nObj.Id).Type__c                 != nObj.Type__c
                        //                         || oldMap.get(nObj.Id).Doctor_Division1__c     != nObj.Doctor_Division1__c
                        //                        )
                    )
                ) {
                if (Trigger.isInsert || (Trigger.isUpdate)) {
                    //                        && (
                    //                            oldMap.get(nObj.Id).LastName                != nObj.LastName
                    //                         || oldMap.get(nObj.Id).FirstName               != nObj.FirstName
                    //                         || oldMap.get(nObj.Id).Strategic_dept_Class__c != nObj.Strategic_dept_Class__c
                    //                         || oldMap.get(nObj.Id).Type__c                 != nObj.Type__c
                    //                         || oldMap.get(nObj.Id).Doctor_Division1__c     != nObj.Doctor_Division1__c
                    //                        )
                    //Agency_Contact__c acObj = new Agency_Contact__c(Agency_ID__c = '000000000000000', Contact__c = nObj.Id, ContactId18__c = nObj.Id, Agency_Hospital__c = null, Name = nObj.LastName + ((String.isBlank(nObj.FirstName) == false) ? ' ' + nObj.FirstName : ''), Department_Class__c = nObj.Strategic_dept_Class__c, Type__c = nObj.Type__c, Doctor_Division1__c = nObj.Doctor_Division1__c);
                    //zhj MEBG新方案改造 2022-11-27 去掉Encrypted start
                    Agency_Contact__c acObj = new Agency_Contact__c(
                        Agency_ID__c = '000000000000000',
                        Contact__c = nObj.Id,
                        ContactId18__c = nObj.Id,
                        Agency_Hospital__c = null,
                        Agency_ID__c = '000000000000000',
                        Contact__c = nObj.Id,
                        ContactId18__c = nObj.Id,
                        Agency_Hospital__c = null,
                        Name = nObj.LastName,
                        //Name_Encrypted__c = nObj.LastName_Encrypted__c,
                        Department_Class__c = nObj.Strategic_dept_Class__c,
                        Department_Class__c = nObj.Strategic_dept_Class__c,
                        Type__c = nObj.Type__c,
                        //Type_Encrypted__c = nObj.Type_Encrypted__c,
                        Doctor_Division1__c = nObj.Doctor_Division1__c
@@ -169,22 +158,22 @@
        if (targetContactMap.size() > 0) {
            List<Agency_Contact__c> temp = targetContactMap.values();
            upsert temp ContactId18__c;
            system.debug('temp='+temp);
            EncryptInsert(temp,ContactMap);
            system.debug('temp=' + temp);
            EncryptInsert(temp, ContactMap);
        }
    }
    static void EncryptInsert(List<Agency_Contact__c> aclist,Map < Id, Contact > ContactMap){
        if(!(system.isFuture() || system.isBatch())){
    static void EncryptInsert(List<Agency_Contact__c> aclist, Map<Id, Contact> ContactMap) {
        if (!(system.isFuture() || system.isBatch())) {
            //zhj MEBG新方案改造 2022-11-27 start
            //AwsServiceTool2.EncryptPushFuture(Json.serialize(aclist), 'Agency_Contact__c');
            Map<String,PIHelper.PIIntegration> staticResource = new Map<String,PIHelper.PIIntegration>();
            staticResource.put('Contact',PIHelper.getPIIntegrationInfo('Contact'));
            staticResource.put('Agency_Contact__c',PIHelper.getPIIntegrationInfo('Agency_Contact__c'));
            Map<String, Map<String, PI_Field_Policy_Detail__c>> mmsp = new Map<String, Map<String,PI_Field_Policy_Detail__c>>();
            Map<String, PIHelper.PIIntegration> staticResource = new Map<String, PIHelper.PIIntegration>();
            staticResource.put('Contact', PIHelper.getPIIntegrationInfo('Contact'));
            staticResource.put('Agency_Contact__c', PIHelper.getPIIntegrationInfo('Agency_Contact__c'));
            Map<String, Map<String, PI_Field_Policy_Detail__c>> mmsp = new Map<String, Map<String, PI_Field_Policy_Detail__c>>();
            for (String key : staticResource.keySet()) {
                mmsp.put(key, new Map<String,PI_Field_Policy_Detail__c>());
                mmsp.put(key, new Map<String, PI_Field_Policy_Detail__c>());
                for (PI_Field_Policy_Detail__c detail : staticResource.get(key).PIDetails) {
                    mmsp.get(key).put(detail.SF_Field_API_Name__c, detail);
                }
@@ -192,13 +181,13 @@
            System.debug('mmsp = ' + mmsp);
            List<AWSServiceTool2V2.EncryptPushRequestBody> EncryptPushList = new List<AWSServiceTool2V2.EncryptPushRequestBody>();
            for(Agency_Contact__c ac : aclist){
            for (Agency_Contact__c ac : aclist) {
                AWSServiceTool2V2.EncryptPushRequestBody EncryptPush = new AWSServiceTool2V2.EncryptPushRequestBody();
                EncryptPush.dataId = ac.AWS_Data_Id__c != null ?ac.AWS_Data_Id__c:'';
                EncryptPush.dataId = ac.AWS_Data_Id__c != null ? ac.AWS_Data_Id__c : '';
                EncryptPush.sfRecordId = ac.Id;
                EncryptPush.fieldsMapping = new Map<String, List<AWSServiceTool2V2.EncryptPushRes>>();
                List<AWSServiceTool2V2.EncryptPushRes> resList = new List<AWSServiceTool2V2.EncryptPushRes>();
                AWSServiceTool2V2.EncryptPushRes res= new AWSServiceTool2V2.EncryptPushRes();
                AWSServiceTool2V2.EncryptPushRes res = new AWSServiceTool2V2.EncryptPushRes();
                res.isQueryDb = true;
                res.value = '';
                res.table = staticResource.get('Contact').awsTableName;
@@ -207,7 +196,7 @@
                resList.add(res);
                List<AWSServiceTool2V2.EncryptPushRes> resList2 = new List<AWSServiceTool2V2.EncryptPushRes>();
                AWSServiceTool2V2.EncryptPushRes res2= new AWSServiceTool2V2.EncryptPushRes();
                AWSServiceTool2V2.EncryptPushRes res2 = new AWSServiceTool2V2.EncryptPushRes();
                res2.isQueryDb = true;
                res2.value = '';
                res2.table = staticResource.get('Contact').awsTableName;
@@ -216,7 +205,7 @@
                resList2.add(res2);
                List<AWSServiceTool2V2.EncryptPushRes> resList3 = new List<AWSServiceTool2V2.EncryptPushRes>();
                AWSServiceTool2V2.EncryptPushRes res3= new AWSServiceTool2V2.EncryptPushRes();
                AWSServiceTool2V2.EncryptPushRes res3 = new AWSServiceTool2V2.EncryptPushRes();
                res3.isQueryDb = true;
                res3.value = '';
                res3.table = staticResource.get('Contact').awsTableName;
@@ -224,7 +213,7 @@
                res3.field = mmsp.get('Contact').get('Doctor_Division1__c').AWS_Field_API__c;
                resList3.add(res3);
                System.debug('Agency_Contact__c Name = ' +mmsp.get('Agency_Contact__c').get('Name').AWS_Field_API__c);
                System.debug('Agency_Contact__c Name = ' + mmsp.get('Agency_Contact__c').get('Name').AWS_Field_API__c);
                System.debug('resList = ' + resList);
                EncryptPush.fieldsMapping.put(mmsp.get('Agency_Contact__c').get('Name').AWS_Field_API__c, resList);
                EncryptPush.fieldsMapping.put(mmsp.get('Agency_Contact__c').get('Type__c').AWS_Field_API__c, resList2);
@@ -235,27 +224,29 @@
            System.debug('EncryptPushListsfRecordId = ' + JSON.serialize(EncryptPushList[0].sfRecordId));
            System.debug('EncryptPushListfieldsMapping = ' + JSON.serialize(EncryptPushList[0].fieldsMapping));
            System.debug('EncryptPushList = ' + JSON.serialize(EncryptPushList));
            if(!Test.isRunningTest())
                AwsServiceTool2V2.EncryptPushFutureV2(Json.serialize(EncryptPushList),Json.serialize(aclist), 'Agency_Contact__c');
            if (!Test.isRunningTest())
                AwsServiceTool2V2.EncryptPushFutureV2(Json.serialize(EncryptPushList), Json.serialize(aclist), 'Agency_Contact__c');
            //zhj MEBG新方案改造 2022-11-27 end
        }else{
        } else {
            //Add By Li Jun for sync agency contact to aws 20220424 start
            if(!Test.isRunningTest()){
            if (!Test.isRunningTest()) {
                System.debug('ContactMap = ' + ContactMap);
                SyncAccountContactToAWS.assignOnceOneMinuteLater(aclist,ContactMap);
                SyncAccountContactToAWS.assignOnceOneMinuteLater(aclist, ContactMap);
            }
            //Add By Li Jun for sync agency contact to aws 20220424 end
        }
    }
    private void syncToAgencyContactDelete() {
        List < Id > cIdList = new List < Id > ();
        for (Contact oObj: oldList) {
        List<Id> cIdList = new List<Id>();
        for (Contact oObj : oldList) {
            cIdList.add(oObj.Id);
        }
        if (cIdList.size() > 0) {
            List < Agency_Contact__c > acList = [Select Id From Agency_Contact__c
                Where Contact__c =: null and Agency_ID__c = '000000000000000'
            List<Agency_Contact__c> acList = [
                SELECT Id
                FROM Agency_Contact__c
                WHERE Contact__c = :null AND Agency_ID__c = '000000000000000'
            ];
            if (acList.size() > 0) {
                delete acList;
@@ -265,27 +256,30 @@
    //更新经销商用户人数字段 精琢技术 pk 2021-08-26 start
    private void updateDealerNum() {
        Set < Id > accountSet = new Set < Id > ();
        Map < Id, Account > acMap = new Map < Id, Account > ();
        Set<Id> accountSet = new Set<Id>();
        Map<Id, Account> acMap = new Map<Id, Account>();
        if (Trigger.isUpdate) {
            for (Contact contactnew: newList) {
                if (contactnew.Agency_User__c != oldMap.get(contactnew.Id).Agency_User__c || (System.Label.onlyUpdate == '1' && UserInfo.getUserId() == '00510000005sEEMAA2')) {
            for (Contact contactnew : newList) {
                if (
                    contactnew.Agency_User__c != oldMap.get(contactnew.Id).Agency_User__c ||
                    (System.Label.onlyUpdate == '1' &&
                    UserInfo.getUserId() == '00510000005sEEMAA2')
                ) {
                    accountSet.add(contactnew.AccountId);
                }
            }
        }
        if (Trigger.isInsert) {
            for (Contact contactnew: newList) {
            for (Contact contactnew : newList) {
                if (contactnew.Agency_User__c) {
                    accountSet.add(contactnew.AccountId);
                }
            }
        }
        if (Trigger.isDelete) {
            for (Contact contactold: oldList) {
            for (Contact contactold : oldList) {
                if (contactold.Agency_User__c) {
                    accountSet.add(contactold.AccountId);
                }
@@ -293,10 +287,13 @@
        }
        if (accountSet.size() > 0) {
            List < AggregateResult > contactList = [select count(id) ctn, AccountId accid from Contact where Agency_User__c = true and AccountId =: accountSet and RecordTypeId = '01210000000QfWi'
                group by AccountId
            List<AggregateResult> contactList = [
                SELECT count(id) ctn, AccountId accid
                FROM Contact
                WHERE Agency_User__c = TRUE AND AccountId = :accountSet AND RecordTypeId = '01210000000QfWi'
                GROUP BY AccountId
            ];
            for (AggregateResult ar: contactList) {
            for (AggregateResult ar : contactList) {
                String accid = (String) ar.get('accid');
                Account account = new Account();
                account.id = accid;
@@ -304,7 +301,7 @@
                acMap.put(accid, account);
            }
            for (Id accountId: accountSet) {
            for (Id accountId : accountSet) {
                if (!acMap.containsKey(accountId)) {
                    Account account = new Account();
                    account.id = accountId;
@@ -317,17 +314,14 @@
                update acMap.values();
            }
        }
    }
    //更新经销商用户人数字段 精琢技术 pk 2021-08-26 end
    //zhj 新方案改造 将手机号去重及其验证规则移动到AWS和前端 start
    // 手机号去重及规则验证 及新增客户人员重名验证
    public void mobileNumberVerification(){
    public void mobileNumberVerification() {
        // Pattern pattern = Pattern.compile('^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$');
        Map<String, Map<String,Contact>> accountContactMap = new Map<String, Map<String,Contact>>();
        Map<String, Map<String, Contact>> accountContactMap = new Map<String, Map<String, Contact>>();
        Set<Id> accountIdSet = new Set<Id>();
        //用户对象上找对应的联系人
        // List<User> userList=[select ID,ContactID from User where ContactID != null];
@@ -339,19 +333,23 @@
        // }
        //查找联系人对象上对应的有效客户;医院直接使用有效/无效字段、经销商使用有效/无效公式字段
        List<String> accIdList = new List<String>();
        Map<String,String> accMap= new Map<String,String>();
        for (Contact contact1: newList) {
        Map<String, String> accMap = new Map<String, String>();
        for (Contact contact1 : newList) {
            accIdList.add(contact1.AccountId);
        }
        if (accIdList.size()>0){
            List<Account> accList=[select ID,Is_Active__c,Is_Active_Formula__c from Account where ID in:accIdList];
            if(accList.size()>0){
                for(Account acc:accList){
                    if (String.isNotBlank(acc.Is_Active__c)){
        if (accIdList.size() > 0) {
            List<Account> accList = [
                SELECT ID, Is_Active__c, Is_Active_Formula__c
                FROM Account
                WHERE ID IN :accIdList
            ];
            if (accList.size() > 0) {
                for (Account acc : accList) {
                    if (String.isNotBlank(acc.Is_Active__c)) {
                        accMap.put(acc.Id, acc.Is_Active__c);
                        continue;
                    }
                    if (String.isNotBlank(acc.Is_Active_Formula__c)){
                    if (String.isNotBlank(acc.Is_Active_Formula__c)) {
                        accMap.put(acc.Id, acc.Is_Active_Formula__c);
                    }
                }
@@ -362,23 +360,25 @@
        ID AgencyRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Agency').getRecordTypeId();
        for (Contact contactnew : newList) {
            // 手机号有值并且联系人有效,联系人的客户有效,进行手机号码验证
            if (('有效'.equals(contactnew.Isactive__c) || '有効'.equals(contactnew.Isactive__c))
                && ('有効'.equals(accMap.get(contactnew.AccountId)) || '有效'.equals(accMap.get(contactnew.AccountId)))) {
            if (
                ('有效'.equals(contactnew.Isactive__c) || '有効'.equals(contactnew.Isactive__c)) &&
                ('有効'.equals(accMap.get(contactnew.AccountId)) || '有效'.equals(accMap.get(contactnew.AccountId)))
            ) {
                // 经销商客户人员不进行手机号校验 thh 20220517 start
                if(AgencyRecordTypeId.equals(contactnew.RecordTypeId)){
                    if(String.isNotBlank(contactnew.MobilePhone)){
                if (AgencyRecordTypeId.equals(contactnew.RecordTypeId)) {
                    if (String.isNotBlank(contactnew.MobilePhone)) {
                        // Matcher isMobilePhone = pattern.matcher(contactnew.MobilePhone);
                        // if (isMobilePhone.matches()) {
                        contactnew.UniqueNumber__c = contactnew.MobilePhone;
                        // } else {
                            // 手机号唯一字段清空
                            // contactnew.UniqueNumber__c = null;
                        // 手机号唯一字段清空
                        // contactnew.UniqueNumber__c = null;
                        // }
                    } else {
                        contactnew.UniqueNumber__c = null;
                    }
                // 经销商客户人员不进行手机号校验 thh 20220517 end
                }
                    // 经销商客户人员不进行手机号校验 thh 20220517 end
                }
                // else if(DoctorRecordTypeId.equals(contactnew.RecordTypeId)){
                //     if(String.isNotBlank(contactnew.MobilePhone_Encrypted__c)){
                //         contactnew.UniqueNumber__c = contactnew.MobilePhone_Encrypted__c;
@@ -389,9 +389,9 @@
            }
            // if (Trigger.isInsert) {
            // if(DoctorRecordTypeId.equals(contactnew.RecordTypeId)){
            //     accountIdSet.add(contactnew.AccountId);
            //     accountIdSet.add(contactnew.AccountId);
            // }
            // }
            // }
        }
        //手机号唯一校验-医院下新建客户人员校验使用加密手机号,经销商使用普通手机号 thh 20220328 end
        // 新增医院联系人时
@@ -401,14 +401,14 @@
        //         contactList = [SELECT Id,AccountId,FullName__c,LastName,FirstName,Account.Name,CManageCode__c,IsFromSPO__c,
        //                                         LastName_Encrypted__c// 20220314 PI改造 by Bright
        //                                         , MobilePhone_Encrypted__c // 通过姓名+手机号判断人员是否重复 thh 20220518
        //                                         FROM Contact
        //                                         FROM Contact
        //                                         WHERE IsFromSPO__c = false AND AccountId IN:accountIdSet];
        //     }
        //     if(Trigger.isUpdate){
        //         contactList = [SELECT Id,AccountId,FullName__c,LastName,FirstName,Account.Name,CManageCode__c,IsFromSPO__c,
        //                                      LastName_Encrypted__c// 20220314 PI改造 by Bright
        //                                      , MobilePhone_Encrypted__c // 通过姓名+手机号判断人员是否重复 thh 20220518
        //                                     FROM Contact
        //                                     FROM Contact
        //                                     WHERE IsFromSPO__c = false AND AccountId IN:accountIdSet AND Id Not IN: oldMap.keyset()];
        //     }
        //     System.debug('contactList:' + contactList);
@@ -417,12 +417,12 @@
        //             // 通过姓名+手机号判断人员是否重复 thh 20220518 start
        //             // String lastNameStr = String.isNotBlank(contact.LastName) ? contact.LastName:'';
        //             // String firstNameStr = String.isNotBlank(contact.FirstName) ? contact.FirstName:'';
        //             // String contactFullName = lastNameStr + firstNameStr + MobilePhoneStr;
        //             // String contactFullName = lastNameStr + firstNameStr + MobilePhoneStr;
        //             String contactFullName = contact.LastName_Encrypted__c + contact.MobilePhone_Encrypted__c;// 20220314 PI改造 by Bright
        //             // 通过姓名+手机号判断人员是否重复 thh 20220518 end
        //             if(string.isBlank(contactFullName)){
        //                 continue;
        //             }
        //             }
        //             String accountId = String.valueOf(contact.AccountId).SubString(0,15);
        //             Map<String,Contact> contactFullNameMap = new  Map<String,Contact>();
        //             if (accountContactMap.containsKey(accountId)) {
@@ -435,8 +435,8 @@
        // }
        // for (Contact contactnew: newList) {
        //     if(AgencyRecordTypeId.equals(contactnew.RecordTypeId) || (Trigger.isUpdate && !oldMap.isEmpty() && oldMap.get(contactnew.Id) != null
        //         && String.isBlank(oldMap.get(contactnew.Id).MobilePhone_Encrypted__c)
        //     if(AgencyRecordTypeId.equals(contactnew.RecordTypeId) || (Trigger.isUpdate && !oldMap.isEmpty() && oldMap.get(contactnew.Id) != null
        //         && String.isBlank(oldMap.get(contactnew.Id).MobilePhone_Encrypted__c)
        //         && String.isBlank(contactnew.MobilePhone_Encrypted__c))){
        //         continue;
        //     }
@@ -455,59 +455,63 @@
        //             // 跳过测试程序 和 SPO通过203接口创建的联系人
        //             if (!(Test.isRunningTest() || contactnew.IsFromSPO__c)) {
        //                 // if(Trigger.isInsert) {
        //                     contactnew.LastName.addError('客户 [ '+accountName+ ' ],已存在相同名字的联系人 人员管理编码 ['+cManageCode+' ] ,不能重复创建,请了解');
        //                 // }
        //                     contactnew.LastName.addError('客户 [ '+accountName+ ' ],已存在相同名字的联系人 人员管理编码 ['+cManageCode+' ] ,不能重复创建,请了解');
        //                 // }
        //                 // 客户人员删除手机号时,进行判断是否存在同名且手机号为空的客户人员 thh 20220523 start
        //                 // if(Trigger.isUpdate && !UserInfo.getUserId().equals(System.Label.interfaceUserID)) {
        //                 //     if (String.isNotBlank(oldMap.get(contactnew.Id).MobilePhone_Encrypted__c) && String.isBlank(contactnew.MobilePhone_Encrypted__c)){
        //                 //         contactnew.LastName.addError('相同名字的联系人 人员管理编码 ['+cManageCode+' ] 手机号为空已经存在,不能重复创建,请了解');
        //                 //     }
        //                 //     }
        //                 //     if (oldMap.get(contactnew.Id).CManageCode__c != contactnew.CManageCode__c){
        //                 //         contactnew.LastName.addError('客户 [ '+accountName+ ' ],已存在相同名字的联系人 人员管理编码 ['+cManageCode+' ] ,不能重复创建,请了解');
        //                 //         contactnew.LastName.addError('客户 [ '+accountName+ ' ],已存在相同名字的联系人 人员管理编码 ['+cManageCode+' ] ,不能重复创建,请了解');
        //                 //     }
        //                 // }
        //                 // 客户人员删除手机号时,进行判断是否存在同名且手机号为空的客户人员 thh 20220523 end
        //             }
        //             }
        //         }
        //     }
        // }
    }
    //zhj 新方案改造 将手机号去重及其验证规则移动到AWS和前端 end
    public static Map<Id,Id> NFM606_IdMap = new Map<Id,Id>();
    public static Map<Id, Id> NFM606_IdMap = new Map<Id, Id>();
    // 606接口调用问题修复 thh 20220330 start
    private void sendToComPlat() {
        List<Id> contactIdList = new List<Id>();
        List<String> interfaceUserUpsertContact = new List<String>();
        for (Contact local: newList) {
        for (Contact local : newList) {
            Contact old = null;
            if (Trigger.isUpdate) {
                old = oldMap.get(local.Id);
            }
            if (Trigger.isInsert
                        || old.LastName != local.LastName
                        || old.FirstName != local.FirstName
                        || old.Email != local.Email  //メール Email
                        || old.MobilePhone != local.MobilePhone  //手机号码 Mobile_Phone__c
                        || old.Employee_No_manual__c != local.Employee_No_manual__c  //员工号码 Employee_No__c
                        || old.Work_Location_manual__c != local.Work_Location_manual__c  //工作地 Work_Location__c
                        || old.Post_picklist__c != local.Post_picklist__c  //职位 post__c
                        || old.Job_Category_picklist__c != local.Job_Category_picklist__c  //职种 Job_Category__c
                        || old.Hire_date_text__c != local.Hire_date_text__c  //入职日 Hire_date__c
                        || old.Gender_text__c != local.Gender_text__c  //性别 Gender__c
                        || old.dept__c != local.dept__c  //本部 dept__c
                        || old.Pregnant_Rest__c != local.Pregnant_Rest__c // 是否产假 Pregnant_Rest__c
                        || old.Stay_or_not__c != local.Stay_or_not__c // 在职/离职 Stay_or_not__c
                        //|| old.Salesdepartment_Text__c != local.Salesdepartment_Text__c // 销售本部 Salesdepartment__c
                        || old.AccountId != local.AccountId//客户人员换客户
                        || old.Isactive__c != local.Isactive__c//状态变更
                        || old.ServicePlatformCode__c != local.ServicePlatformCode__c//服务平台编码
                        || old.UnifiedI_Contact_ID__c != local.UnifiedI_Contact_ID__c//智慧医疗编码
                        || old.ContactType__c != local.ContactType__c//人员类型
                        || (old.ChargeState__c != local.ChargeState__c && local.RecordTypeId == AgencyId)//负责省 // 20220830 ljh LLIU-CHR8FF add
                        ) {
            if (
                Trigger.isInsert ||
                old.LastName != local.LastName ||
                old.FirstName != local.FirstName ||
                old.Email != local.Email || //メール Email
                old.MobilePhone != local.MobilePhone || //手机号码 Mobile_Phone__c
                old.Employee_No_manual__c != local.Employee_No_manual__c || //员工号码 Employee_No__c
                old.Work_Location_manual__c != local.Work_Location_manual__c || //工作地 Work_Location__c
                old.Post_picklist__c != local.Post_picklist__c || //职位 post__c
                old.Job_Category_picklist__c != local.Job_Category_picklist__c || //职种 Job_Category__c
                old.Hire_date_text__c != local.Hire_date_text__c || //入职日 Hire_date__c
                old.Gender_text__c != local.Gender_text__c || //性别 Gender__c
                old.dept__c != local.dept__c || //本部 dept__c
                old.Pregnant_Rest__c != local.Pregnant_Rest__c || // 是否产假 Pregnant_Rest__c
                old.Stay_or_not__c != local.Stay_or_not__c || // 在职/离职 Stay_or_not__c
                //|| old.Salesdepartment_Text__c != local.Salesdepartment_Text__c // 销售本部 Salesdepartment__c
                old.AccountId != local.AccountId || //客户人员换客户
                old.Isactive__c != local.Isactive__c || //状态变更
                old.ServicePlatformCode__c != local.ServicePlatformCode__c || //服务平台编码
                old.UnifiedI_Contact_ID__c != local.UnifiedI_Contact_ID__c || //智慧医疗编码
                old.ContactType__c != local.ContactType__c || //人员类型
                (old.ChargeState__c != local.ChargeState__c &&
                local.RecordTypeId == AgencyId) //负责省 // 20220830 ljh LLIU-CHR8FF add
            ) {
                //获取客户人员的记录类型ID thh 20220330 start
                ID InternalStaffRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Internal_staff').getRecordTypeId();
                ID InternalStaffRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName()
                    .get('Internal_staff')
                    .getRecordTypeId();
                ID DoctorRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Doctor').getRecordTypeId();
                ID AgencyRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Agency').getRecordTypeId();
                //获取客户人员的记录类型ID thh 20220330 end
@@ -516,11 +520,11 @@
                // gzw 20220824 bugfix start
                // if (!local.IsFromSPO__c && !InternalStaffRecordTypeId.equals(local.RecordTypeId)) {
                if (!InternalStaffRecordTypeId.equals(local.RecordTypeId)) {
                // gzw 20220824 bugfix end
                    // gzw 20220824 bugfix end
                    // 医院 客户人员 统一平台编码有值 发送 PO
                    if (DoctorRecordTypeId.equals(local.RecordTypeId) && String.isNotBlank(local.UnifiedI_Contact_ID__c)) {
                        if (!NFM606_IdMap.containsKey(local.Id)) {
                            if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){
                            if (UserInfo.getUserId().equals(System.Label.interfaceUserID)) {
                                interfaceUserUpsertContact.add(local.Id);
                            } else {
                                contactIdList.add(local.Id);
@@ -531,7 +535,7 @@
                    // 经销商 客户人员 手机号码有值 发送 PO
                    if (AgencyRecordTypeId.equals(local.RecordTypeId) && String.isNotBlank(local.MobilePhone)) {
                        if (!NFM606_IdMap.containsKey(local.Id)) {
                            if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){
                            if (UserInfo.getUserId().equals(System.Label.interfaceUserID)) {
                                interfaceUserUpsertContact.add(local.Id);
                            } else {
                                contactIdList.add(local.Id);
@@ -540,41 +544,41 @@
                        }
                    }
                }
            }
        }
        //606标记
        if(!System.Test.isRunningTest()){
        if (!System.Test.isRunningTest()) {
            // NFM606Controller.executeNotFuture('', contactIdList);
            if (contactIdList.size() > 0) {
                // NFM606Controller.callout('', contactIdList);
                 //添加future 判断 add for pipl  sushanhu 20220317 start
                //添加future 判断 add for pipl  sushanhu 20220317 start
                // if (!(System.isFuture()||System.isBatch())) {
                NFM606Controller.callout('', contactIdList);
                // } else{
                    // NFM606Controller.executeNotFuture('', contactIdList);
                // NFM606Controller.executeNotFuture('', contactIdList);
                // }
               //添加future 判断 add for pipl  sushanhu 20220317 end
                //添加future 判断 add for pipl  sushanhu 20220317 end
            }
            if (interfaceUserUpsertContact.size() > 0) {
                NFM606Controller.executeNotFuture('', interfaceUserUpsertContact);
                //添加future 判断 add for pipl  sushanhu 20220316 start
                // if (!(System.isFuture()||System.isBatch())) {
                    // NFM606Controller.executeNotFuture('', interfaceUserUpsertContact);
                // NFM606Controller.executeNotFuture('', interfaceUserUpsertContact);
                // }
               //添加future 判断 add for pipl  sushanhu 20220316 end
                //添加future 判断 add for pipl  sushanhu 20220316 end
            }
        }
        }
    }
    // 606接口调用问题修复 thh 20220330 end
    // 20220830 ljh LLIU-CHR8FF add start
    private void updateChargeState(){
    private void updateChargeState() {
        List<Contact> contactL = new List<Contact>();
        for (Contact nObj : newList) {
            if(nObj.RecordTypeId == AgencyId && String.isBlank(nObj.ChargeState__c)){
            if (nObj.RecordTypeId == AgencyId && String.isBlank(nObj.ChargeState__c)) {
                Contact cnew = new Contact();
                cnew.Id = nObj.Id;
                cnew.ChargeState__c =  nObj.ChargeState_F__c;
                cnew.ChargeState__c = nObj.ChargeState_F__c;
                contactL.add(cnew);
            }
        }
@@ -583,6 +587,4 @@
        }
    }
    // 20220830 ljh LLIU-CHR8FF add end
}
}
force-app/main/default/classes/DealerInquiryModifyStateController.cls
@@ -1,23 +1,23 @@
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>> 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 accSearch { get; set; } //经销商医院
    public String aooSearch { get; set; } //担当人
    public String numtext1 { get; set; } //数据字段01
    public String numtext { get; set; }//数据字段03
    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 limits { get; set; } //日期03
    public List<SelectOption> dateOpts { get; private set; }
    public List<SelectOption> textOpts { get; private set; }
@@ -34,24 +34,28 @@
    public String preSortKey { get; set; }
    public Boolean sortOrderAsc { get; set; }
    public String[] sortOrder { get; set; }
    public String[] columus = new String[] {'Id'};
    public String[] columus = new List<String>{ 'Id' };
    public String[] selColumus = null;
    public Set<String> columusSet = new Set<String> {'Id'};
    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用
    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;
    @TestVisible private String accTypeForSort = null;
    //add by Link 2023-6-2
    public String remindMsg { get; set; }
    @TestVisible
    private String accTypeForSort = null;
    private static Integer oppLimit = 500;
    public DealerInquiryModifyStateController() {
@@ -79,7 +83,7 @@
        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', '市'));
@@ -124,6 +128,7 @@
    }
    public PageReference init() {
        remindMsg = '';
        PartnerSoapSforceCom.Soap soap = new PartnerSoapSforceCom.Soap();
        soap.SessionHeader = new PartnerSoapSforceCom.SessionHeader_element();
        soap.SessionHeader.sessionId = UserInfo.getSessionId();
@@ -155,7 +160,7 @@
            layoutItem.layoutComponents.add(layoutComponent);
            // return dlr;
        } else {
            dlr  = soap.describeLayout('Agency_Opportunity__c', null, null);
            dlr = soap.describeLayout('Agency_Opportunity__c', null, null);
            // dlr  = soap.describeLayout('asdas', null, null);
        }
@@ -173,8 +178,11 @@
            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) {
                        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');
@@ -195,9 +203,10 @@
        return null;
    }
    //用于获取经销商询价字段集和询价字段集以及相应的读写权限
    @TestVisible private void setLayoutRWInfo() {
    @TestVisible
    private void setLayoutRWInfo() {
        if (this.sortOrder == null) {
            selColumus = new String[] {};
            selColumus = new List<String>{};
            strColumus = '';
            ID accRecordTypeId = accTypeForSort;
@@ -276,14 +285,14 @@
                    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] = ' ';
            this.sortOrder = new List<String>(selColumus.size());
            for (Integer i = 0; i < selColumus.size(); i++)
                this.sortOrder[i] = ' ';
        }
    }
    //用于拼接SOQL语句 根据不同检索条件拼接不同SOQL语句。
@@ -305,14 +314,17 @@
        // 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\' ';
        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 += 'AND Agency_Hospital__r.Name  ' + '  LIKE  \'%' + accSearch + '%\' ';
        }
        //数据字段:担当人  +SOQL
        if (!String.isBlank(aooSearch)) {
@@ -323,7 +335,7 @@
        //数据字段:03 手动填写项 准备调用makeTextSql;
        if (!String.isBlank(numtext)) {
            String newNumtext = numtext.trim();
            String str = makeTextSql(numtext1,  numtext2,  newNumtext);
            String str = makeTextSql(numtext1, numtext2, newNumtext);
            soql += str;
            System.debug('+++++++++++++=============++++++++++++++++++' + soql);
        }
@@ -333,9 +345,21 @@
            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);
                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);
                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);
@@ -343,7 +367,7 @@
        // System.debug('pppqqq111'+userlist1);
        List<Agency_Opportunity__c> InfoList = Database.query(soql);
        System.debug('+++++++-------------------'+InfoList);
        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);
@@ -359,7 +383,6 @@
                    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) {
@@ -372,14 +395,24 @@
        //显示提示操作信息
        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 + '件'));
                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均满足进入此方法 判断多种情况
@@ -395,7 +428,6 @@
                String cSql = '';
                soql += ' AND (';
                for (Integer icount = 0; icount < vals.size(); icount++) {
                    //精琢科技   zxk    2021-08-25   start
                    String val = vals[icount];
                    if (equalOpts == 'contains') {
@@ -412,10 +444,8 @@
                            soql += ' AND ';
                        }
                    }
                }
                //精琢科技   zxk    2021-08-25   end
                //     String val = vals[icount];
                //     cSql = this.makeTextSqlStr(textOpts, equalOpts, val);
@@ -459,7 +489,6 @@
            else if (equalOpts == '=' || equalOpts == '<>') {
                soql += 'AND ' + textOpts + equalOpts + '\'' + numtext + '\'';
            }
            //精琢科技   zxk    2021-08-25   start
            //起始字符
            else if (equalOpts == 'starts with' && numtext.contains(' ')) {
@@ -468,15 +497,13 @@
                for (Integer icount = 0; icount < vals.size(); icount++) {
                    String val = vals[icount];
                    if (equalOpts == 'starts with') {
                        soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'' ;
                        soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'';
                        if (icount < vals.size() - 1) {
                            soql += ' OR ';
                        }
                    }
                }
                soql += ')';
            }
            //精琢科技   zxk    2021-08-25   end
@@ -497,22 +524,23 @@
        return soql;
    }
    //检索条件:数据字段1,数据字段2,数据字段3均满足,并且进入makeTextSql()之后,内含数据字段包含多种时进入此方法。
    @TestVisible private String makeTextSqlStr(String textOpts, String equalOpts, String val) {
    @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 + '%\'' ;
                        soql += ' ' + textOpts + '  LIKE  \'%' + val + '%\'';
                    } else if (equalOpts == 'notcontains') {
                        soql += ' ( NOT ' + textOpts + '  LIKE  \'%' + val + '%\' ) ' ;
                        soql += ' ( NOT ' + textOpts + '  LIKE  \'%' + val + '%\' ) ';
                    }
                } else if (equalOpts == '=' || equalOpts == '<>') {
                    if (equalOpts == '=') {
                        soql += ' AND ' + textOpts + ' = ' + val ;
                        soql += ' AND ' + textOpts + ' = ' + val;
                    } else if (equalOpts == '<>') {
                        soql += ' AND ' + textOpts + ' <> ' + val ;
                        soql += ' AND ' + textOpts + ' <> ' + val;
                    }
                }
            } else {
@@ -551,7 +579,6 @@
                if (oi.changeFlg == '1') {
                    oi.changeFlg = '0';
                    updTarget.add(oi.AgcOpp);
                }
                // if (oi.changeFlgRt == '1' && oi.opp.id != null) {
                //     oi.changeFlgRt = '0';
@@ -559,13 +586,15 @@
                // }
            }
            if (updTarget.size() > 0) {
                system.debug('updTarget.size:' + updTarget.size() );
                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, '请确定科室分类和产品区分的关系'));
        }
@@ -627,4 +656,4 @@
            AgcOpp = record;
        }
    }
}
}
force-app/main/default/classes/DealerInquiryModifyStateControllerTest.cls
@@ -1,51 +1,64 @@
@isTest
private class DealerInquiryModifyStateControllerTest {
    @TestSetup static void init() {
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
    @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 = '戦略科室分類 呼吸科'];
        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 = '診療科 消化科'];
        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';
        company.Name = 'NFM007TestCompany';
        insert company;
        Account section = new Account();
        section.RecordTypeId = rectSct[0].Id;
        section.Name         = '*';
        section.Name = '*';
        section.Department_Class_Label__c = '消化科';
        section.ParentId                  = company.Id;
        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.Name = '*';
        depart.Department_Name__c = 'NFM007TestDepart';
        depart.ParentId = section.Id;
        depart.Department_Class__c = section.Id;
        depart.Hospital__c         = company.Id;
        depart.Hospital__c = company.Id;
        insert depart;
        Opportunity opp = new Opportunity();
        opp.AccountId           = depart.Id;
        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.newinstance(2022, 11, 30);
        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();
@@ -60,17 +73,16 @@
        contact1.LastName = 'test1医院';
        contact1.Agency_User__c = true;
        insert contact1;
        List<Contact> contactlist = [select Id, FirstName
                                     from Contact
                                    ];
        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_经销商活动系统'];
        Profile p = [SELECT Id FROM Profile WHERE Name = '901_经销商活动系统'];
        user.ProfileId = p.Id;
        user.ContactId = contact1.Id;
        user.FirstName = 'ユーザー';
@@ -84,9 +96,14 @@
        user.Alias = 'テユ';
        user.CommunityNickname = 'テストユーザー';
        user.SalesManager__c = UserInfo.getUserId();
        insert user;
        List<user> users = [select Id, Name, LastName, FirstName from User where LastName = 'テスト'];
        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();
@@ -99,9 +116,14 @@
        //
        //System.assertEquals('テスト',users[0].LastName);
        System.assertEquals('ユーザー', users[0].FirstName );
        System.assertEquals('ユーザー', users[0].FirstName);
        Id rtId = [select Id, DeveloperName from RecordType where IsActive = true and SobjectType = 'Agency_Opportunity__c' and DeveloperName = 'Opportunity'].Id;
        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;
@@ -112,25 +134,22 @@
        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();
        agency_opportunity.Sales_Manager__c = UserInfo.getUserId();
        insert agency_opportunity;
        Test.stopTest();
    }
    static testMethod void myUnitTest_SortKey() {
        Test.startTest();
        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();
        controller.init();
        //System.assertEquals(1, controller.oppRecords.size());验证预期值和结果值正确性
        // 排序测试
@@ -145,7 +164,7 @@
        // Test.stopTest();
    }
    static testMethod void myUnitTest_AccSearchAndAoosearch() {
        Test.startTest();
        Test.startTest();
        Test.setMock(WebServiceMock.class, new NFMTest_Mock());
        Test.stopTest();
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
@@ -153,7 +172,7 @@
        DealerInquiryModifyStateController controller = new DealerInquiryModifyStateController();
        // 初始化测试
        // Test.startTest();
        controller.init();
        //文本输入框检索
        //1:经销商医院
@@ -342,8 +361,7 @@
        controller.chick();
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
         Test.stopTest();
        Test.stopTest();
    }
    static testMethod void myUnitTestTime02() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
@@ -378,7 +396,6 @@
        controller.tmpBO.MaxActivityDate__c = date.valueOf('2018-02-09');
        controller.chick();
        Test.stopTest();
    }
    static testMethod void myUnitTestTimeSave() {
        PageReference page = new PageReference('/apex/DealerInquiryModifyState');
@@ -417,4 +434,4 @@
        controller.init();
        Test.stopTest();
    }
}
}
force-app/main/default/classes/EquipmentSetShippmentReceived3Controller.cls
@@ -5,17 +5,17 @@
    public Rental_Apply_Equipment_Set__c es { get; set; }
    public List<EsdInfo> esdList { get; set; }
    public Boolean saveBtnDisabled { get; private set; }
    public boolean ReturnRefuse {get;private set;}
    public String ErrorMessage {get; set;}
    public boolean ReturnRefuse { get; private set; }
    public String ErrorMessage { get; set; }
    // public String CDSFinished {get;set;}
    // public boolean LostFlg {get;set;}
    public String Step_status { get; private set; }
    public Boolean needCDS { get; private set; }
    public Boolean done_flg { get; set; }
    public String Raid {get;set;}
    public String ApplyId {get;set;}
    public String CheckedId {get;set;}
    public String UnCheckedId {get;set;}
    public String Raid { get; set; }
    public String ApplyId { get; set; }
    public String CheckedId { get; set; }
    public String UnCheckedId { get; set; }
    private String Id;
    public Integer getEsdListSize() {
@@ -23,7 +23,7 @@
    }
    public EquipmentSetShippmentReceived3Controller() {
//        Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
        //        Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
        Id = ApexPages.currentPage().getParameters().get('id');
        if (Step_status == null) {
            Step_status = ApexPages.currentPage().getParameters().get('step');
@@ -32,20 +32,23 @@
    }
    public PageReference searchSlip() {
        Map<String,boolean> esdIdMap = new Map<String,boolean>();
        Map<String, boolean> esdIdMap = new Map<String, boolean>();
        for (EsdInfo esd : esdList) {
            if (!esd.hasSended)
            esdIdMap.put(esd.rec.Id, esd.isChecked);
                esdIdMap.put(esd.rec.Id, esd.isChecked);
        }
        String qryString = 'select Combine_Pack__c, Name, Id, DeliveryCompany_SlipNo__c,DeliveryType__c,Distributor_method__c,DeliveryCompany__c,Wh_Staff__c '
                + 'from FixtureDeliverySlip__c '
                + 'where Name =\''+ slip.Name +'\' and DeliveryType__c = \'发货\'';
        String qryString =
            'select Combine_Pack__c, Name, Id, DeliveryCompany_SlipNo__c,DeliveryType__c,Distributor_method__c,DeliveryCompany__c,Wh_Staff__c ' +
            'from FixtureDeliverySlip__c ' +
            'where Name =\'' +
            slip.Name +
            '\' and DeliveryType__c = \'发货\'';
        if (String.isNotBlank(slip.Distributor_method__c)) {
            qryString += ' and Distributor_method__c = \''+ slip.Distributor_method__c +'\'';
            qryString += ' and Distributor_method__c = \'' + slip.Distributor_method__c + '\'';
        }
        if (String.isNotBlank(slip.DeliveryCompany__c)) {
            qryString += ' and DeliveryCompany__c = \''+ slip.DeliveryCompany__c +'\'';
            qryString += ' and DeliveryCompany__c = \'' + slip.DeliveryCompany__c + '\'';
        }
        List<FixtureDeliverySlip__c> slipList = Database.query(qryString);
@@ -56,15 +59,57 @@
            }
            slip = slipList[0];
            List<Rental_Apply_Equipment_Set_Detail__c> eList = [select Rental_Apply__c, Rental_Apply__r.Shippment_ng_num__c, Rental_Apply__r.Pre_inspection_ng_num__c, SerialNumber_F__c, Rental_Apply_Equipment_Set__r.Inspection_not_finish__c, Fixture_Name_F__c, Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name, Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c,
                           Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c,
                           Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c,
                           Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                           Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, CDS_complete__c, Loaner_accsessary__c
                      from Rental_Apply_Equipment_Set_Detail__c
                     where (DeliverySlip__c = :slip.Id or Id in :esdIdMap.keySet())
                       and Cancel_Select__c = False and Return_DeliverySlip__c = null
                     order by Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Rental_Apply_Equipment_Set__c, Name];
            List<Rental_Apply_Equipment_Set_Detail__c> eList = [
                SELECT
                    Rental_Apply__c,
                    Rental_Apply__r.Shippment_ng_num__c,
                    Rental_Apply__r.Pre_inspection_ng_num__c,
                    SerialNumber_F__c,
                    Rental_Apply_Equipment_Set__r.Inspection_not_finish__c,
                    Fixture_Name_F__c,
                    Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name,
                    Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                    Rental_Apply_Equipment_Set__r.Name,
                    Pre_inspection_time__c,
                    StockDown__c,
                    StockDown_time__c,
                    Id,
                    Name,
                    Asset__c,
                    Asset__r.Name,
                    Asset__r.SerialNumber,
                    Asset__r.Product_Serial_No__c,
                    Asset__r.Remark__c,
                    Asset__r.ImageAsset__c,
                    Asset__r.ImageSerial__c,
                    Asset__r.ImageAssetUploadedTime__c,
                    Asset__r.ImageSerialUploadedTime__c,
                    Loaner_CDS_Info__c,
                    Inspection_result__c,
                    Check_lost_Item__c,
                    Pre_disinfection__c,
                    Water_leacage_check__c,
                    Inspection_result_after__c,
                    Arrival_in_wh__c,
                    Asset__r.Pre_Reserve_RAES_Detail__c,
                    Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                    Inspection_result_after_ng__c,
                    Inspection_result_ng__c,
                    Lost_item_giveup__c,
                    CDS_complete__c,
                    Loaner_accsessary__c
                FROM Rental_Apply_Equipment_Set_Detail__c
                WHERE
                    (DeliverySlip__c = :slip.Id
                    OR Id IN :esdIdMap.keySet())
                    AND Cancel_Select__c = FALSE
                    AND Return_DeliverySlip__c = NULL
                ORDER BY
                    Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                    Rental_Apply_Equipment_Set__r.Name,
                    Rental_Apply_Equipment_Set__c,
                    Name
            ];
            esdList.clear();
            for (Rental_Apply_Equipment_Set_Detail__c esd : eList) {
@@ -85,11 +130,21 @@
        List<String> ids = ApplyId.split(',');
        Set<String> checkedIds = new Set<String>(CheckedId.split(':'));
        CheckedId = null;
        List<Rental_Apply_Equipment_Set__c> esList = [select Rental_Apply__r.Name, First_RAESD_Model_No_F__c, First_RAESD__r.SerialNumber_F__c, First_RAESD__r.Loaner_asset_no__c, Rental_Apply__c, Id, RAES_Status__c, Name, Shippment_loaner_time2__c
                                    from Rental_Apply_Equipment_Set__c
                                    where (Rental_Apply__r.Name in :ids or Id in :ids)
                                      AND Cancel_Select__c = False
                                    order by Rental_Apply__r.Name, Id];
        List<Rental_Apply_Equipment_Set__c> esList = [
            SELECT
                Rental_Apply__r.Name,
                First_RAESD_Model_No_F__c,
                First_RAESD__r.SerialNumber_F__c,
                First_RAESD__r.Loaner_asset_no__c,
                Rental_Apply__c,
                Id,
                RAES_Status__c,
                Name,
                Shippment_loaner_time2__c
            FROM Rental_Apply_Equipment_Set__c
            WHERE (Rental_Apply__r.Name IN :ids OR Id IN :ids) AND Cancel_Select__c = FALSE
            ORDER BY Rental_Apply__r.Name, Id
        ];
        Set<Id> esIds = new Set<Id>();
        Set<Id> esdIds = new Set<Id>();
        Set<Id> applySet = new Set<Id>();
@@ -102,15 +157,55 @@
            esdIds.add(raesd.rec.Id);
        }
        List<Rental_Apply_Equipment_Set_Detail__c> eList = [
                select Rental_Apply__c, Rental_Apply__r.Shippment_ng_num__c, Rental_Apply__r.Pre_inspection_ng_num__c, SerialNumber_F__c, Rental_Apply_Equipment_Set__r.Inspection_not_finish__c, Fixture_Name_F__c, Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name, Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c,
                       Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c,
                       Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c,
                       Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                       Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, CDS_complete__c, Loaner_accsessary__c
                  from Rental_Apply_Equipment_Set_Detail__c
                 where Rental_Apply_Equipment_Set__c in :esIds and DeliverySlip__c = null and Return_DeliverySlip__c = null //and Inspection_result__c <> null and Shipment_request_time2__c <> null
                   and Cancel_Select__c = False
                 order by Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Rental_Apply_Equipment_Set__c, Name
            SELECT
                Rental_Apply__c,
                Rental_Apply__r.Shippment_ng_num__c,
                Rental_Apply__r.Pre_inspection_ng_num__c,
                SerialNumber_F__c,
                Rental_Apply_Equipment_Set__r.Inspection_not_finish__c,
                Fixture_Name_F__c,
                Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name,
                Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                Rental_Apply_Equipment_Set__r.Name,
                Pre_inspection_time__c,
                StockDown__c,
                StockDown_time__c,
                Id,
                Name,
                Asset__c,
                Asset__r.Name,
                Asset__r.SerialNumber,
                Asset__r.Product_Serial_No__c,
                Asset__r.Remark__c,
                Asset__r.ImageAsset__c,
                Asset__r.ImageSerial__c,
                Asset__r.ImageAssetUploadedTime__c,
                Asset__r.ImageSerialUploadedTime__c,
                Loaner_CDS_Info__c,
                Inspection_result__c,
                Check_lost_Item__c,
                Pre_disinfection__c,
                Water_leacage_check__c,
                Inspection_result_after__c,
                Arrival_in_wh__c,
                Asset__r.Pre_Reserve_RAES_Detail__c,
                Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                Inspection_result_after_ng__c,
                Inspection_result_ng__c,
                Lost_item_giveup__c,
                CDS_complete__c,
                Loaner_accsessary__c
            FROM Rental_Apply_Equipment_Set_Detail__c
            WHERE
                Rental_Apply_Equipment_Set__c IN :esIds
                AND DeliverySlip__c = NULL
                AND Return_DeliverySlip__c = NULL //and Inspection_result__c <> null and Shipment_request_time2__c <> null
                AND Cancel_Select__c = FALSE
            ORDER BY
                Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                Rental_Apply_Equipment_Set__r.Name,
                Rental_Apply_Equipment_Set__c,
                Name
        ];
        //esdList.clear();
        for (Rental_Apply_Equipment_Set_Detail__c esd : eList) {
@@ -123,7 +218,7 @@
        for (EsdInfo raesd : esdList) {
            if (checkedIds.contains(raesd.rec.Rental_Apply_Equipment_Set__c)) {
                raesd.isChecked = true;
                system.debug('========4esdList='+JSON.serialize(raesd));
                system.debug('========4esdList=' + JSON.serialize(raesd));
            }
        }
        return null;
@@ -140,33 +235,43 @@
        ReturnRefuse = true;
        ErrorMessage = '';
        if (Id != null) {
            system.debug('==================='+Id);
            system.debug('===================' + Id);
            // 当前User
            String userid = Userinfo.getUserId();
            User user = [select Id,Name from User where Id = :userid];
            User user = [SELECT Id, Name FROM User WHERE Id = :userid];
            List<Rental_Apply_Equipment_Set__c> esList;
            List<String> ids = Id.split(',');
            esList = [select Rental_Apply__r.Name, First_RAESD_Model_No_F__c, First_RAESD__r.SerialNumber_F__c, First_RAESD__r.Loaner_asset_no__c, Rental_Apply__c, Id, RAES_Status__c, Name, Shippment_loaner_time2__c
                                        from Rental_Apply_Equipment_Set__c
                                       where (Rental_Apply__r.Name in :ids or Id in:ids)
                                         AND Cancel_Select__c = False
                                       order by Rental_Apply__r.Name, Id];
         //   if (Step_status == '追加') {
            esList = [
                SELECT
                    Rental_Apply__r.Name,
                    First_RAESD_Model_No_F__c,
                    First_RAESD__r.SerialNumber_F__c,
                    First_RAESD__r.Loaner_asset_no__c,
                    Rental_Apply__c,
                    Id,
                    RAES_Status__c,
                    Name,
                    Shippment_loaner_time2__c
                FROM Rental_Apply_Equipment_Set__c
                WHERE (Rental_Apply__r.Name IN :ids OR Id IN :ids) AND Cancel_Select__c = FALSE
                ORDER BY Rental_Apply__r.Name, Id
            ];
            //   if (Step_status == '追加') {
            //} else {
            //  // 备品set
         //     esList = [select Rental_Apply__r.Name, First_RAESD_Model_No_F__c, First_RAESD__r.SerialNumber_F__c, First_RAESD__r.Loaner_asset_no__c, Rental_Apply__c, Id, RAES_Status__c, Name, Shippment_loaner_time__c
         //                                   from Rental_Apply_Equipment_Set__c
         //                                  where (Rental_Apply__r.Name = :Id or Id = :Id)
         //                                    AND Cancel_Select__c = False
         //                                  ];
            //     esList = [select Rental_Apply__r.Name, First_RAESD_Model_No_F__c, First_RAESD__r.SerialNumber_F__c, First_RAESD__r.Loaner_asset_no__c, Rental_Apply__c, Id, RAES_Status__c, Name, Shippment_loaner_time__c
            //                                   from Rental_Apply_Equipment_Set__c
            //                                  where (Rental_Apply__r.Name = :Id or Id = :Id)
            //                                    AND Cancel_Select__c = False
            //                                  ];
            //}
            //if (Step_status == '明细') {
                slip.Wh_Staff__c = userid;
                slip.DeliveryType__c = '发货';
            slip.Wh_Staff__c = userid;
            slip.DeliveryType__c = '发货';
            //}
            //List<Fixture_Set__c> esList = [select Id, Name, CDS_staff__c, Shippment_loaner_time__c, Received_loaner_time__c,
            //List<Fixture_Set__c> esList = [select Id, Name, CDS_staff__c, Shippment_loaner_time__c, Received_loaner_time__c,
            //                                       delivery_company__c, Return_to_wh_staff__c, Return_to_wh_staff__r.Name, Fedex_number__c, Distributor_method__c,
            //                                       Return_delivery_company__c,Return_wh_chenk_staff__c, Received_confirmation_staff__c, Received_confirmation_staff__r.Name, Return_Fedex_number__c, Return_Distributor_method__c,
            //                                       Arrival_wh_time2__c, Asset_return_time__c,
@@ -211,21 +316,60 @@
            // system.debug('All::::'+Rac.repair__c);
            //  system.debug('All::::'+Ra_c.RAES_Status__c);
            // 本番暂不上线该功能,启用后不能入库操作感觉不对
        }
        // 备品set明细
        List<Rental_Apply_Equipment_Set_Detail__c> eList = [
                select Rental_Apply__c, Rental_Apply__r.Shippment_ng_num__c, Rental_Apply__r.Pre_inspection_ng_num__c, SerialNumber_F__c, Rental_Apply_Equipment_Set__r.Inspection_not_finish__c, Fixture_Name_F__c, Rental_Apply_Equipment_Set__r.RAES_Status__c, Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name, Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c,
                       Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c,
                       Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c,
                       Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                       Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, CDS_complete__c, Loaner_accsessary__c
                  from Rental_Apply_Equipment_Set_Detail__c
                 where Rental_Apply_Equipment_Set__c in :esIds and DeliverySlip__c = null and Return_DeliverySlip__c = null//and Shipment_request_time__c <> null
                   and Cancel_Select__c = False
                 order by Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Rental_Apply_Equipment_Set__c, Name
            SELECT
                Rental_Apply__c,
                Rental_Apply__r.Shippment_ng_num__c,
                Rental_Apply__r.Pre_inspection_ng_num__c,
                SerialNumber_F__c,
                Rental_Apply_Equipment_Set__r.Inspection_not_finish__c,
                Fixture_Name_F__c,
                Rental_Apply_Equipment_Set__r.RAES_Status__c,
                Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name,
                Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                Rental_Apply_Equipment_Set__r.Name,
                Pre_inspection_time__c,
                StockDown__c,
                StockDown_time__c,
                Id,
                Name,
                Asset__c,
                Asset__r.Name,
                Asset__r.SerialNumber,
                Asset__r.Product_Serial_No__c,
                Asset__r.Remark__c,
                Asset__r.ImageAsset__c,
                Asset__r.ImageSerial__c,
                Asset__r.ImageAssetUploadedTime__c,
                Asset__r.ImageSerialUploadedTime__c,
                Loaner_CDS_Info__c,
                Inspection_result__c,
                Check_lost_Item__c,
                Pre_disinfection__c,
                Water_leacage_check__c,
                Inspection_result_after__c,
                Arrival_in_wh__c,
                Asset__r.Pre_Reserve_RAES_Detail__c,
                Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                Inspection_result_after_ng__c,
                Inspection_result_ng__c,
                Lost_item_giveup__c,
                CDS_complete__c,
                Loaner_accsessary__c
            FROM Rental_Apply_Equipment_Set_Detail__c
            WHERE
                Rental_Apply_Equipment_Set__c IN :esIds
                AND DeliverySlip__c = NULL
                AND Return_DeliverySlip__c = NULL //and Shipment_request_time__c <> null
                AND Cancel_Select__c = FALSE
            ORDER BY
                Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                Rental_Apply_Equipment_Set__r.Name,
                Rental_Apply_Equipment_Set__c,
                Name
        ];
        //Set<Id> lockId = new Set<Id>();
        //for (Rental_Apply_Equipment_Set_Detail__c esd : eList) {
@@ -266,8 +410,8 @@
    // Step 切り替えボタン、发货前-检测
    public PageReference ShippmentDetail() {
        system.debug('========cid='+CheckedId);
        system.debug('========esd='+esdList.size());
        system.debug('========cid=' + CheckedId);
        system.debug('========esd=' + esdList.size());
        Step_status = '明细';
        //slip.Wh_Staff__c = Userinfo.getUserId();
        //slip.DeliveryType__c = '发货';
@@ -288,12 +432,14 @@
                    allcount.put(esd.rec.Rental_Apply__c, Integer.valueOf(esd.rec.Rental_Apply__r.Shippment_ng_num__c));
                }
            }
            system.debug('========shipcount='+JSON.serialize(shipcount));
            system.debug('========shipcount='+JSON.serialize(allcount));
            system.debug('========shipcount=' + JSON.serialize(shipcount));
            system.debug('========shipcount=' + JSON.serialize(allcount));
            for (String raid : allcount.keySet()) {
                if (allcount.get(raid) > shipcount.get(raid).size()) {
                    Step_status = '追加';
                    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '申请单内存在未勾选的配套,请勾选全部配套或分割申请单!'));
                    ApexPages.addmessage(
                        new ApexPages.message(ApexPages.severity.Error, '申请单内存在未勾选的配套,请勾选全部配套或分割申请单!')
                    );
                }
            }
        }
@@ -306,7 +452,7 @@
    // Step 切り替えボタン、发货-发货运输单号 等
    public PageReference ShippmentAdd() {
        Step_status = '追加';
        system.debug('========2esdList='+JSON.serialize(esdList));
        system.debug('========2esdList=' + JSON.serialize(esdList));
        //return new PageReference('/apex/EquipmentSetShippmentReceived3?id=' + this.Id + '&step=' + this.Step_status);
        return null;
    }
@@ -334,31 +480,39 @@
    // 保存按钮
    public PageReference save() {
        List<String> raids = Raid.split(':');
        //检查是否可以继续
        List<Rental_Apply__c> RaTarList = [select Id,Name,Campaign__c,Repair__c,next_action__c
                                                ,QIS_number__r.ReplaceDeliveryDate__c,demo_purpose2__c
                                                ,Follow_UP_Opp__r.Shipping_Finished_Day_Func__c
                                                ,Campaign__r.Status
                                                ,Campaign__r.IF_Approved__c
                                                ,Campaign__r.Meeting_Approved_No__c // 20220315 ljh obpm备品决裁状态相关修改
                                                ,Campaign__r.Approved_Status__c     // 20220315 ljh obpm备品决裁状态相关修改
                                                ,repair__r.Return_Without_Repair_Date__c
                                                ,Repair__r.Repair_Final_Inspection_Date__c
                                                ,Repair__r.Repair_Shipped_Date__c
                                            from Rental_Apply__c
                                            where id in :raids];//20210602 ljh update 增加查询Name SFDC-C3LBNL
        List<Rental_Apply__c> RaTarList = [
            SELECT
                Id,
                Name,
                Campaign__c,
                Repair__c,
                next_action__c,
                QIS_number__r.ReplaceDeliveryDate__c,
                demo_purpose2__c,
                Follow_UP_Opp__r.Shipping_Finished_Day_Func__c,
                Campaign__r.Status,
                Campaign__r.IF_Approved__c,
                Campaign__r.Meeting_Approved_No__c, // 20220315 ljh obpm备品决裁状态相关修改
                Campaign__r.Approved_Status__c, // 20220315 ljh obpm备品决裁状态相关修改
                repair__r.Return_Without_Repair_Date__c,
                Repair__r.Repair_Final_Inspection_Date__c,
                AccDealerBlacklist__c, //贸易合规 you
                //,EquipmentGuaranteeFlg__c//贸易合规 you
                Repair__r.Repair_Shipped_Date__c
            FROM Rental_Apply__c
            WHERE id IN :raids
        ]; //20210602 ljh update 增加查询Name SFDC-C3LBNL
        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 start
        Map<Id, String> rentalApplyNameMap = new Map<Id, String>();
        List<Rental_Apply_Equipment_Set__c> RAESRecords = [
                SELECT Id,Rental_Apply__c,Rental_Apply__r.Name
                FROM Rental_Apply_Equipment_Set__c
                WHERE Rental_Apply__c in :raids
                AND Cancel_Select__c = False
                AND Rental_Start_Date__c <> :Date.today()
                ORDER BY Rental_Apply__c];
            SELECT Id, Rental_Apply__c, Rental_Apply__r.Name
            FROM Rental_Apply_Equipment_Set__c
            WHERE Rental_Apply__c IN :raids AND Cancel_Select__c = FALSE AND Rental_Start_Date__c != :Date.today()
            ORDER BY Rental_Apply__c
        ];
        for (Rental_Apply_Equipment_Set__c RAES : RAESRecords) {
            if (rentalApplyNameMap.isEmpty() || !rentalApplyNameMap.containsKey(RAES.Rental_Apply__c)) {
@@ -374,63 +528,75 @@
        String message2 = '';
        String message3 = '';
        String message = '';
        String message4 = '';//1822 yc 20211025 已购待货目的,新品已有发货日不能出库
        String message5 = '';//1822 yc 20211108 索赔QIS目的,QIS已有新品发货日不能出库
        String message4 = ''; //1822 yc 20211025 已购待货目的,新品已有发货日不能出库
        String message5 = ''; //1822 yc 20211108 索赔QIS目的,QIS已有新品发货日不能出库
        String message6 = '';
        String message7 = '';// 20220315 ljh obpm备品决裁状态相关修改 end
        String message8 = '';//add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整
        String message7 = ''; // 20220315 ljh obpm备品决裁状态相关修改 end
        String message8 = ''; //add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整
        String message9 = ''; //贸易合规 you
        // 要判断决裁状态不能是草稿/驳回/终止申请/取消/删除
        List<String> statusList = System.Label.StatusProcessState.split(',');
        Map<Id, Rental_Apply__c> RaMap = new Map<Id, Rental_Apply__c>();
        for (Rental_Apply__c RaTar : RaTarList) {
            // 20230215 ljh DB202301265636 学会取消申请也拦截 start
            // if( RaTar.Campaign__r.Status == '取消'){
            if( RaTar.Campaign__r.Status == '取消' || RaTar.Campaign__r.Status == '取消申请中'){
            // 20230215 ljh DB202301265636 学会取消申请也拦截 end
            //贸易合规 you
            // && RaTar.EquipmentGuaranteeFlg__c==false
            if (System.Label.TradeComplianceStatusFlagBP == 'true' && RaTar.AccDealerBlacklist__c == '1') {
                errorFlag = true;
                message9 += RaTar.Name + '、';
            } else if (RaTar.Campaign__r.Status == '取消' || RaTar.Campaign__r.Status == '取消申请中') {
                // 20230215 ljh DB202301265636 学会取消申请也拦截 end
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '学会已取消,不能继续操作了'));
                // return null;
                errorFlag = true;
                message0 += RaTar.Name+'、';
            }else if(RaTar.Repair__r.Repair_Final_Inspection_Date__c!=null){
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '存在修理最终检测日,不能继续了'));
                message0 += RaTar.Name + '、';
            } else if (RaTar.Repair__r.Repair_Final_Inspection_Date__c != null) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '存在修理最终检测日,不能继续了'));
                // return null;
                errorFlag = true;
                message1 += RaTar.Name+'、';
            }else if(RaTar.repair__r.Return_Without_Repair_Date__c!=null&&RaTar.repair__c!=null ){
                message1 += RaTar.Name + '、';
            } else if (RaTar.repair__r.Return_Without_Repair_Date__c != null && RaTar.repair__c != null) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '未修理归还日不为空,不能出库'));
                // return null;
                errorFlag = true;
                message2 += RaTar.Name+'、';
            }else if(RaTar.Repair__r.Repair_Shipped_Date__c!=null){
                message2 += RaTar.Name + '、';
            } else if (RaTar.Repair__r.Repair_Shipped_Date__c != null) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '存在RC修理返送日,不能继续了'));
                // return null;
                errorFlag = true;
                message3 += RaTar.Name+'、';
                message3 += RaTar.Name + '、';
            }
            //1822 yc 20211025 已购待货目的,新品已有发货日不能出库 start
            else if(RaTar.demo_purpose2__c=='已购待货' && RaTar.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c!= null){
            else if (RaTar.demo_purpose2__c == '已购待货' && RaTar.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c != null) {
                errorFlag = true;
                message4 += RaTar.Name+'、';
            }else if(RaTar.demo_purpose2__c=='索赔QIS' && RaTar.next_action__c=='无偿更换' && RaTar.QIS_number__r.ReplaceDeliveryDate__c!= null){
                message4 += RaTar.Name + '、';
            } else if (
                RaTar.demo_purpose2__c == '索赔QIS' &&
                RaTar.next_action__c == '无偿更换' &&
                RaTar.QIS_number__r.ReplaceDeliveryDate__c != null
            ) {
                errorFlag = true;
                message5 += RaTar.Name+'、';
                message5 += RaTar.Name + '、';
            }
            //1822 yc 20211025 已购待货目的,新品已有发货日不能出库 end
            // 20220315 ljh obpm备品决裁状态相关修改 start
            // else if (!campMap.isEmpty() && campMap.containsKey(RaTar.Campaign__c) && campMap.get(RaTar.Campaign__c).IF_Approved__c){
            //     if (String.isBlank(campMap.get(RaTar.Campaign__c).Meeting_Approved_No__c)
            //     if (String.isBlank(campMap.get(RaTar.Campaign__c).Meeting_Approved_No__c)
            //         || String.isBlank(campMap.get(RaTar.Campaign__c).Meeting_Approved_No__r.MeetingApprovedNo__c)) {
            //         errorFlag = true;
            //         message6 = RaTar.Name + '、';
            //     }
            // }
            else if(RaTar.Campaign__c!= null &&  RaTar.Campaign__r.IF_Approved__c && RaTar.Campaign__r.Meeting_Approved_No__c == null) {
            else if (RaTar.Campaign__c != null && RaTar.Campaign__r.IF_Approved__c && RaTar.Campaign__r.Meeting_Approved_No__c == null) {
                errorFlag = true;
                message6 += RaTar.Name + '、';
            }
            else if(RaTar.Campaign__c!= null &&  RaTar.Campaign__r.IF_Approved__c && RaTar.Campaign__r.Meeting_Approved_No__c != null && statusList.contains(RaTar.Campaign__r.Approved_Status__c)) {
            } else if (
                RaTar.Campaign__c != null &&
                RaTar.Campaign__r.IF_Approved__c &&
                RaTar.Campaign__r.Meeting_Approved_No__c != null &&
                statusList.contains(RaTar.Campaign__r.Approved_Status__c)
            ) {
                errorFlag = true;
                message7 += RaTar.Name + '、';
            }
@@ -447,46 +613,50 @@
        }
        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 end
        if(errorFlag){
            if(String.isNotBlank(message0)){
        if (errorFlag) {
            if (String.isNotBlank(message0)) {
                // 20230215 ljh DB202301265636 学会取消申请也拦截 start
                // message += '单号NO.'+message0.removeEnd('、')+'学会已取消,不能继续操作了';
                message += '单号NO.'+message0.removeEnd('、')+'学会已取消或者取消申请中,不能继续操作了';
                message += '单号NO.' + message0.removeEnd('、') + '学会已取消或者取消申请中,不能继续操作了';
                // 20230215 ljh DB202301265636 学会取消申请也拦截 start
            }
            if(String.isNotBlank(message1)){
                message += '单号NO.'+message1.removeEnd('、')+'存在修理最终检测日,不能继续了';
            if (String.isNotBlank(message1)) {
                message += '单号NO.' + message1.removeEnd('、') + '存在修理最终检测日,不能继续了';
            }
            if(String.isNotBlank(message2)){
                message += '单号NO.'+message2.removeEnd('、')+'未修理归还日不为空,不能出库';
            if (String.isNotBlank(message2)) {
                message += '单号NO.' + message2.removeEnd('、') + '未修理归还日不为空,不能出库';
            }
            if(String.isNotBlank(message3)){
                message += '单号NO.'+message3.removeEnd('、')+'存在RC修理返送日,不能继续了';
            if (String.isNotBlank(message3)) {
                message += '单号NO.' + message3.removeEnd('、') + '存在RC修理返送日,不能继续了';
            }
            //1822 yc 20211025 已购待货目的,新品已有发货日不能出库 start
            if(String.isNotBlank(message4)){
                message += '单号NO.'+message4.removeEnd('、')+'已购待货目的,新品已有发货日,不能继续了';
            if (String.isNotBlank(message4)) {
                message += '单号NO.' + message4.removeEnd('、') + '已购待货目的,新品已有发货日,不能继续了';
            }
            if(String.isNotBlank(message5)){
                message += '单号NO.'+message5.removeEnd('、')+'索赔QIS目的,QIS已有新品发货日,不能继续了';
            if (String.isNotBlank(message5)) {
                message += '单号NO.' + message5.removeEnd('、') + '索赔QIS目的,QIS已有新品发货日,不能继续了';
            }
            //1822 yc 20211025 已购待货目的,新品已有发货日不能出库 end
            if(String.isNotBlank(message6)){
                message += '单号No.'+ message6.removeEnd('、')+ '已申请决裁但决裁编码为空';
            if (String.isNotBlank(message6)) {
                message += '单号No.' + message6.removeEnd('、') + '已申请决裁但决裁编码为空';
            }
            // 20220315 ljh obpm备品决裁状态相关修改 add start
            if(String.isNotBlank(message7)){
                message += '单号No.'+ message7.removeEnd('、')+ '已申请决裁但决裁状态不符合条件';
            if (String.isNotBlank(message7)) {
                message += '单号No.' + message7.removeEnd('、') + '已申请决裁但决裁状态不符合条件';
            }
            // 20220315 ljh obpm备品决裁状态相关修改 add end
            // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 start
            if(String.isNotBlank(message8)){
                message += '单号No.'+ message8.removeEnd('、')+ '的备品预计出货日应该等于今天,否则不能发货';
            if (String.isNotBlank(message8)) {
                message += '单号No.' + message8.removeEnd('、') + '的备品预计出货日应该等于今天,否则不能发货';
            }
            // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 end
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error,message));
            if (String.isNotBlank(message9)) {
                message += '单号No.' + message9.removeEnd('、') + System.Label.IFTradeComplianceAlertBP;
            }
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, message));
            return null;
        }
        //20210604 ljh update SFDC-C3LBNL end
@@ -508,21 +678,60 @@
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '未选择备品set,不能创建发货单'));
            return null;
        }
        eList = [select Rental_Apply__c, Rental_Apply__r.Shippment_ng_num__c, Rental_Apply__r.Pre_inspection_ng_num__c, Rental_Apply_Equipment_Set__r.Inspection_not_finish__c, Fixture_Name_F__c, Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name, Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name, Rental_Apply_Equipment_Set__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c,
                           Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c,
                           Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c,
                           Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                           Rental_Apply__r.Request_approval_time__c , Add_Request_approval_time__c ,ApplyToShipmentWorkTime__c, //20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长
                           Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, CDS_complete__c, Loaner_accsessary__c,Key_product__c
                    from Rental_Apply_Equipment_Set_Detail__c where Id in :eSet for update];
        eList = [
            SELECT
                Rental_Apply__c,
                Rental_Apply__r.Shippment_ng_num__c,
                Rental_Apply__r.Pre_inspection_ng_num__c,
                Rental_Apply_Equipment_Set__r.Inspection_not_finish__c,
                Fixture_Name_F__c,
                Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name,
                Rental_Apply_Equipment_Set__r.Rental_Apply__r.Name,
                Rental_Apply_Equipment_Set__r.Name,
                Pre_inspection_time__c,
                StockDown__c,
                StockDown_time__c,
                Id,
                Name,
                Asset__c,
                Asset__r.Name,
                Asset__r.SerialNumber,
                Asset__r.Product_Serial_No__c,
                Asset__r.Remark__c,
                Asset__r.ImageAsset__c,
                Asset__r.ImageSerial__c,
                Asset__r.ImageAssetUploadedTime__c,
                Asset__r.ImageSerialUploadedTime__c,
                Loaner_CDS_Info__c,
                Inspection_result__c,
                Check_lost_Item__c,
                Pre_disinfection__c,
                Water_leacage_check__c,
                Inspection_result_after__c,
                Arrival_in_wh__c,
                Asset__r.Pre_Reserve_RAES_Detail__c,
                Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c,
                Rental_Apply__r.Request_approval_time__c,
                Add_Request_approval_time__c,
                ApplyToShipmentWorkTime__c, //20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长
                Inspection_result_after_ng__c,
                Inspection_result_ng__c,
                Lost_item_giveup__c,
                CDS_complete__c,
                Loaner_accsessary__c,
                Key_product__c
            FROM Rental_Apply_Equipment_Set_Detail__c
            WHERE Id IN :eSet
            FOR UPDATE
        ];
        Boolean needSaveSet = false;
        Boolean needSaveDetail = false;
        Boolean needDeliverySlip = false;
        //wangweipeng   是否是重点产品       2021/08/30        start
        Map<String,boolean> keyPointProduct = new Map<String,boolean>();
        Map<String, boolean> keyPointProduct = new Map<String, boolean>();
        //wangweipeng   是否是重点产品       2021/08/30        end
        Set<Id> astForLock = new Set<Id>();
        Map<Datetime, List<Rental_Apply_Equipment_Set_Detail__c>> approvalMap = new Map<Datetime, List<Rental_Apply_Equipment_Set_Detail__c>>();// 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长
        Map<Datetime, List<Rental_Apply_Equipment_Set_Detail__c>> approvalMap = new Map<Datetime, List<Rental_Apply_Equipment_Set_Detail__c>>(); // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长
        for (Rental_Apply_Equipment_Set_Detail__c esd : eList) {
            if (esd.Inspection_result__c <> null && esd.StockDown__c == false) {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品set未下架,不能填写发货前检查结果'));
@@ -530,33 +739,37 @@
            }
            //wangweipeng   是否是重点产品       2021/08/30        start
            //记录当前借出备品的配套明细里面是否时重点产品,注意:只要有一个是重点产品,那么此借出备品就是重点产品
            if(esd.Key_product__c != null && esd.Key_product__c != ''){
                if(!(keyPointProduct.containsKey(esd.Rental_Apply__c)) || keyPointProduct.get(esd.Rental_Apply__c) == false){
                    keyPointProduct.put(esd.Rental_Apply__c,true);
            if (esd.Key_product__c != null && esd.Key_product__c != '') {
                if (!(keyPointProduct.containsKey(esd.Rental_Apply__c)) || keyPointProduct.get(esd.Rental_Apply__c) == false) {
                    keyPointProduct.put(esd.Rental_Apply__c, true);
                }
            }else{
                if(keyPointProduct.get(esd.Rental_Apply__c) == null){
                    keyPointProduct.put(esd.Rental_Apply__c,false);
            } else {
                if (keyPointProduct.get(esd.Rental_Apply__c) == null) {
                    keyPointProduct.put(esd.Rental_Apply__c, false);
                }
            }
            //wangweipeng   是否是重点产品       2021/08/30        end
            astForLock.add(esd.Asset__c);
            // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
            Datetime keyDt = esd.Add_Request_approval_time__c != null?esd.Add_Request_approval_time__c:esd.Rental_Apply__r.Request_approval_time__c;
            Datetime keyDt = esd.Add_Request_approval_time__c != null
                ? esd.Add_Request_approval_time__c
                : esd.Rental_Apply__r.Request_approval_time__c;
            List<Rental_Apply_Equipment_Set_Detail__c> tempRaesdL;
            if(approvalMap.containsKey(keyDt)){
            if (approvalMap.containsKey(keyDt)) {
                tempRaesdL = approvalMap.get(keyDt);
            }else{
            } else {
                tempRaesdL = new List<Rental_Apply_Equipment_Set_Detail__c>();
            }
            tempRaesdL.add(esd);
            approvalMap.put(keyDt,tempRaesdL);
            tempRaesdL.add(esd);
            approvalMap.put(keyDt, tempRaesdL);
            // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 end
        }
        List<Asset> astLock = [select Id
                 from Asset
                where id in :astForLock
                  for update];
        List<Asset> astLock = [
            SELECT Id
            FROM Asset
            WHERE id IN :astForLock
            FOR UPDATE
        ];
        if (Step_status == '明细') {
            needDeliverySlip = true;
            //if (slip.Id == null) {
@@ -564,18 +777,37 @@
            //    slip.Shippment_loaner_time__c = Datetime.now();
            //}
            if (slip.Id != null) {
                slip = [select Combine_Pack__c, Name, Id, DeliveryCompany_SlipNo__c,DeliveryType__c,Distributor_method__c,DeliveryCompany__c,Wh_Staff__c
                        from FixtureDeliverySlip__c
                        where Id =:slip.Id for update];
                slip = [
                    SELECT
                        Combine_Pack__c,
                        Name,
                        Id,
                        DeliveryCompany_SlipNo__c,
                        DeliveryType__c,
                        Distributor_method__c,
                        DeliveryCompany__c,
                        Wh_Staff__c
                    FROM FixtureDeliverySlip__c
                    WHERE Id = :slip.Id
                    FOR UPDATE
                ];
            }
            slip.Shippment_loaner_time__c = Datetime.now();
            needSaveDetail = true;
        }
        List<Rental_Apply__c> raList = [select Id, DeliverySlip__c, Campaign__c
                                        , Campaign__r.IF_Approved__c         // 20220315 ljh obpm备品决裁状态相关修改
                                        , Campaign__r.Meeting_Approved_No__r.Name // 20220315 ljh obpm备品决裁状态相关修改
                                        , Campaign__r.Approved_Status__c     // 20220315 ljh obpm备品决裁状态相关修改
                                        from Rental_Apply__c where Id in :raSet];
        List<Rental_Apply__c> raList = [
            SELECT
                Id,
                DeliverySlip__c,
                Campaign__c,
                Campaign__r.IF_Approved__c, // 20220315 ljh obpm备品决裁状态相关修改
                Campaign__r.Meeting_Approved_No__r.Name, // 20220315 ljh obpm备品决裁状态相关修改
                Campaign__r.Approved_Status__c, // 20220315 ljh obpm备品决裁状态相关修改
                Hospital__r.TradeComplianceStatus__c, //贸易合规 you
                Outbound_TradeStatus__c //贸易合规 you
            FROM Rental_Apply__c
            WHERE Id IN :raSet
        ];
        Savepoint sp = Database.setSavepoint();
        try {
            //if (needSaveSet) ControllerUtil.upRAdEquipmentSet(es);
@@ -583,34 +815,35 @@
                FixtureUtil.withoutUpsertObjects(new List<FixtureDeliverySlip__c>{ slip });
                //ControllerUtil.updRADeliverySlipDetail(slip);
                // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
                map<String,Decimal> ApplyToShipmentMap = new map<String,Decimal>();
                if(approvalMap.size() > 0 ){
                map<String, Decimal> ApplyToShipmentMap = new Map<String, Decimal>();
                if (approvalMap.size() > 0) {
                    // dtList[0] 第一个就是最小时间
                    List<Datetime> dtList = new List<Datetime>(approvalMap.keySet());
                    Date startDateSOQL  = date.newinstance(dtList[0].year(), dtList[0].month(), dtList[0].day());
                    List<OlympusCalendar__c> ocList = [SELECT Id, Date__c,IsWorkDay__c
                                     FROM OlympusCalendar__c
                                    WHERE Date__c >= :startDateSOQL
                                      AND Date__c <= :Date.today()
                                    ORDER BY Date__c ASC];
                    Map<Date,String> ocMap = new Map<Date,String>();
                    for(OlympusCalendar__c oc:ocList){
                    Date startDateSOQL = date.newinstance(dtList[0].year(), dtList[0].month(), dtList[0].day());
                    List<OlympusCalendar__c> ocList = [
                        SELECT Id, Date__c, IsWorkDay__c
                        FROM OlympusCalendar__c
                        WHERE Date__c >= :startDateSOQL AND Date__c <= :Date.today()
                        ORDER BY Date__c ASC
                    ];
                    Map<Date, String> ocMap = new Map<Date, String>();
                    for (OlympusCalendar__c oc : ocList) {
                        String IsWorkDay = oc.IsWorkDay__c.format();
                        ocMap.put(oc.Date__c,IsWorkDay);
                        ocMap.put(oc.Date__c, IsWorkDay);
                    }
                    for(Datetime dt:dtList){
                    for (Datetime dt : dtList) {
                        Boolean startFlag = false;
                        Boolean endFlag = false;
                        Datetime startTime = dt;
                        Date startDate = Date.newInstance(startTime.year(),startTime.month(),startTime.day());
                        Date startDate = Date.newInstance(startTime.year(), startTime.month(), startTime.day());
                        Datetime endTime = Datetime.now();
                        Date endDate = Date.today();
                        // 审批时间是非奥林巴斯工作日
                        // 审批时间是非奥林巴斯工作日
                        // if(ocList[0].IsWorkDay__c == 0){
                        if(ocMap.get(startDate) == '0'){
                            for(OlympusCalendar__c oc:ocList){
                                if(startDate < oc.Date__c && oc.IsWorkDay__c == 1){
                                    startTime = Datetime.newInstance(oc.Date__c.year(),oc.Date__c.month(),oc.Date__c.day(),0,0,0);
                        if (ocMap.get(startDate) == '0') {
                            for (OlympusCalendar__c oc : ocList) {
                                if (startDate < oc.Date__c && oc.IsWorkDay__c == 1) {
                                    startTime = Datetime.newInstance(oc.Date__c.year(), oc.Date__c.month(), oc.Date__c.day(), 0, 0, 0);
                                    startDate = oc.Date__c;
                                    startFlag = true;
                                    break;
@@ -618,10 +851,17 @@
                            }
                        }
                        // 发货时间是非奥林巴斯工作日
                        if(ocList[ocList.size() - 1].IsWorkDay__c == 0){
                            for(Integer i = ocList.size() - 1; i >= 0;i--){
                                if(ocList[i].IsWorkDay__c == 1){
                                    endTime = Datetime.newInstance(ocList[i].Date__c.addDays(1).year(),ocList[i].Date__c.addDays(1).month(),ocList[i].Date__c.addDays(1).day(),0,0,0);
                        if (ocList[ocList.size() - 1].IsWorkDay__c == 0) {
                            for (Integer i = ocList.size() - 1; i >= 0; i--) {
                                if (ocList[i].IsWorkDay__c == 1) {
                                    endTime = Datetime.newInstance(
                                        ocList[i].Date__c.addDays(1).year(),
                                        ocList[i].Date__c.addDays(1).month(),
                                        ocList[i].Date__c.addDays(1).day(),
                                        0,
                                        0,
                                        0
                                    );
                                    endDate = ocList[i].Date__c.addDays(1);
                                    endFlag = true;
                                    break;
@@ -629,26 +869,26 @@
                            }
                        }
                        Decimal timeDifLast;
                        if(ocList[0].IsWorkDay__c == 0 && ocList[ocList.size() - 1].IsWorkDay__c == 0 && !startFlag && !endFlag){
                        if (ocList[0].IsWorkDay__c == 0 && ocList[ocList.size() - 1].IsWorkDay__c == 0 && !startFlag && !endFlag) {
                            timeDifLast = 0;
                        }else{
                        } else {
                            Long startL = startTime.getTime();
                            Long tendL = endTime.getTime();
                            Long timeDif = tendL - startL;
                            Decimal time11 = timeDif*1.00;
                            Decimal time12 = 24*3600*1000*1.00;
                            timeDifLast = time11/time12;
                            Long timeDif = tendL - startL;
                            Decimal time11 = timeDif * 1.00;
                            Decimal time12 = 24 * 3600 * 1000 * 1.00;
                            timeDifLast = time11 / time12;
                            Integer tempWeek = 0;
                            for(OlympusCalendar__c oc:ocList){
                                if(oc.IsWorkDay__c == 0 && startDate < oc.Date__c && oc.Date__c < endDate){
                            for (OlympusCalendar__c oc : ocList) {
                                if (oc.IsWorkDay__c == 0 && startDate < oc.Date__c && oc.Date__c < endDate) {
                                    tempWeek++;
                                }
                            }
                            timeDifLast = timeDifLast - tempWeek;
                        }
                        // dtestLast 四舍五入 保留1位小数
                        for(Rental_Apply_Equipment_Set_Detail__c raesd00:approvalMap.get(dt)){
                            ApplyToShipmentMap.put(raesd00.Id,timeDifLast.setScale(1));
                        for (Rental_Apply_Equipment_Set_Detail__c raesd00 : approvalMap.get(dt)) {
                            ApplyToShipmentMap.put(raesd00.Id, timeDifLast.setScale(1));
                        }
                    }
                }
@@ -656,7 +896,7 @@
                for (Rental_Apply_Equipment_Set_Detail__c esd : eList) {
                    esd.DeliverySlip__c = slip.Id;
                    // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
                    if(ApplyToShipmentMap.containsKey(esd.Id)){
                    if (ApplyToShipmentMap.containsKey(esd.Id)) {
                        esd.ApplyToShipmentWorkTime__c = ApplyToShipmentMap.get(esd.Id);
                    }
                    // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 end
@@ -667,14 +907,14 @@
                    //wangweipeng   是否是重点产品       2021/08/30        start
                    ra.Is_keyPoint_Product__c = keyPointProduct.get(ra.Id);
                    //wangweipeng   是否是重点产品       2021/08/30        start
                    ra.Outbound_TradeStatus__c = ra.Hospital__r.TradeComplianceStatus__c; //贸易合规 you
                    // 20220315 ljh obpm备品决裁状态相关修改 update start
                    //20220217 sx add 备品借出申请-决裁控制 No.4 出库成功时,把此时点的决裁编号和决裁状态写到决裁编号(出库)和决裁状态(出库)上
                    // if (!campMap.isEmpty() && campMap.containsKey(ra.Campaign__c) && campMap.get(ra.Campaign__c).IF_Approved__c){
                    //     ra.ApprovedNo_Delivery__c = campMap.get(ra.Campaign__c).Meeting_Approved_No__r.MeetingApprovedNo__c;
                    //     ra.Approved_State_Delivery__c = campMap.get(ra.Campaign__c).Meeting_Approved_No__r.ProcessState__c;
                    // }
                    if (ra.Campaign__c != null&& ra.Campaign__r.IF_Approved__c && ra.Campaign__r.Meeting_Approved_No__r.Name != null){
                    if (ra.Campaign__c != null && ra.Campaign__r.IF_Approved__c && ra.Campaign__r.Meeting_Approved_No__r.Name != null) {
                        ra.ApprovedNo_Delivery__c = ra.Campaign__r.Meeting_Approved_No__r.Name;
                        ra.Approved_State_Delivery__c = ra.Campaign__r.Approved_Status__c;
                    }
@@ -683,6 +923,9 @@
            }
            //if (needSaveDetail) ControllerUtil.updRAEquipmentSetDetail(eList);
            if (needSaveDetail) {
                // 备品优化追加 20230518 lc Start
                RentalApplyEquipmentSetDetailHandler.skipUpdateAgain = true;
                // 备品优化追加 20230518 lc End
                FixtureUtil.withoutUpsertObjects(eList);
                FixtureUtil.withoutUpsertObjects(raList);
            }
@@ -718,7 +961,10 @@
            this.isChecked = checked;
            this.hasSended = false;
            if (rec.Asset__r.Pre_Reserve_RAES_Detail__c != null && rec.Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c != null) {
            if (
                rec.Asset__r.Pre_Reserve_RAES_Detail__c != null &&
                rec.Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c != null
            ) {
                this.quickCheck = Datetime.now() < rec.Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c + 30 ? true : false;
            } else {
                this.quickCheck = false;
@@ -736,4 +982,4 @@
            this(rec, false);
        }
    }
}
}
force-app/main/default/classes/LayoutDescriberHelper.cls
@@ -3,141 +3,144 @@
 * Created Date: 01/19/2022
 * Purpose: Utility class for describe layouts
 * Test Class: LayoutDescriberHelper_Test
 * History:
 * History:
 *         01/19/2022 - Bubba Li - Initial Code.
 *
 *
 * */
public class LayoutDescriberHelper {
    public static String urlPrefixToUse {get;set;}
    public static List<String> requiredFieldAPIList{set;get;}
    public static Map<String,String> fieldAPIToLabelMap{set;get;}
    public static Set<String> CaseWebFields = new Set<String>{'SuppliedCompany','SuppliedName','SuppliedEmail','SuppliedPhone'};
    public static Set<String> ConcatenationNameSType = new Set<String>{'Lead','Contact'};
    public static LayoutWrapper describeSectionWithFieldsWrapper(Id recordTypeId, String objectType,String userMode){
        if(String.isEmpty(recordTypeId)){
    public static String urlPrefixToUse { get; set; }
    public static List<String> requiredFieldAPIList { get; set; }
    public static Map<String, String> fieldAPIToLabelMap { get; set; }
    public static Set<String> CaseWebFields = new Set<String>{ 'SuppliedCompany', 'SuppliedName', 'SuppliedEmail', 'SuppliedPhone' };
    public static Set<String> ConcatenationNameSType = new Set<String>{ 'Lead', 'Contact' };
    public static LayoutWrapper describeSectionWithFieldsWrapper(Id recordTypeId, String objectType, String userMode) {
        if (String.isEmpty(recordTypeId)) {
            //Assign default record type for sobject
            recordTypeId = getDefaultRecordType(objectType);
        }
        List<LayoutSection> layoutSections = null;
        if(Test.isRunningTest()){
            layoutSections = (List<LayoutSection>)Json.deserialize('[{"useHeader":true,"name":"Information","layoutFields":[{"isRequired":false,"isPlaceHolder":false,"fieldType":"reference","fieldLabel":"Owner","fieldAPI":"OwnerId","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"文件名","fieldAPI":"FileName__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"picklist","fieldLabel":"Currency","fieldAPI":"CurrencyIsoCode","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"预览链接","fieldAPI":"ViewLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"下载链接","fieldAPI":"DownloadLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"父级目录","fieldAPI":"ParentRecordId__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"AWS File Key","fieldAPI":"AWS_File_Key__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null}],"columns":2,"allowCollapse":false}]', List<LayoutSection>.class);
        }else{
            layoutSections = describeSectionWithFields(recordTypeId,objectType,userMode);
        if (Test.isRunningTest()) {
            layoutSections = (List<LayoutSection>) Json.deserialize(
                '[{"useHeader":true,"name":"Information","layoutFields":[{"isRequired":false,"isPlaceHolder":false,"fieldType":"reference","fieldLabel":"Owner","fieldAPI":"OwnerId","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"文件名","fieldAPI":"FileName__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"picklist","fieldLabel":"Currency","fieldAPI":"CurrencyIsoCode","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"预览链接","fieldAPI":"ViewLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"下载链接","fieldAPI":"DownloadLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"父级目录","fieldAPI":"ParentRecordId__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"AWS File Key","fieldAPI":"AWS_File_Key__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null}],"columns":2,"allowCollapse":false}]',
                List<LayoutSection>.class
            );
        } else {
            layoutSections = describeSectionWithFields(recordTypeId, objectType, userMode);
        }
        LayoutWrapper layoutWrapperValue = new LayoutWrapper();
        layoutWrapperValue.layoutSections = layoutSections;
        layoutWrapperValue.requiredFieldAPIList = requiredFieldAPIList;
        layoutWrapperValue.fieldAPIToLabelMap = fieldAPIToLabelMap;
        system.debug('required API List:'+JSON.serialize(layoutWrapperValue));
        system.debug('required API List:' + JSON.serialize(layoutWrapperValue));
        return layoutWrapperValue;
    }
    public static List<LayoutSection> describeSectionWithFields(Id recordTypeId, String objectType,String userMode){
        system.debug('record type id ===>'+ recordTypeId+' object type===>'+objectType + ' userMode===>'+userMode);
    public static List<LayoutSection> describeSectionWithFields(Id recordTypeId, String objectType, String userMode) {
        system.debug('record type id ===>' + recordTypeId + ' object type===>' + objectType + ' userMode===>' + userMode);
        List<LayoutSection> layoutSections;
        Map<String,List<LayoutField>> layoutFields;
        Map<String, List<LayoutField>> layoutFields;
        requiredFieldAPIList = new List<String>();
        fieldAPIToLabelMap = new Map<String,String>();
        fieldAPIToLabelMap = new Map<String, String>();
        layoutSections = new List<LayoutSection>();
        String theRespBody = getLayoutSchema(recordTypeId, objectType,userMode);
        String theRespBody = getLayoutSchema(recordTypeId, objectType, userMode);
        Map<String, Object> layoutSection = (Map<String, Object>) JSON.deserializeUntyped(theRespBody);
        Map<String,object> m = new Map<String,object>();
        if(String.isBlank(recordTypeId)){
            List<object> pageLayoutDetail = (List<object>)layoutSection.get('layouts');
            System.debug('Page Layout Section Detail:'+JSON.serialize(pageLayoutDetail[0]));
            m = (Map<String,object>) pageLayoutDetail[0];
        }else{
        Map<String, object> m = new Map<String, object>();
        if (String.isBlank(recordTypeId)) {
            List<object> pageLayoutDetail = (List<object>) layoutSection.get('layouts');
            System.debug('Page Layout Section Detail:' + JSON.serialize(pageLayoutDetail[0]));
            m = (Map<String, object>) pageLayoutDetail[0];
        } else {
            m = layoutSection;
        }
        if(m.containsKey('editLayoutSections')){
            List<object > targetLayout = (List<object>) m.get('editLayoutSections');
            for(object sectionObject: targetLayout){
                Map<String,object> section = (Map<String,object>) sectionObject;
                String sectionH = (String)section.get('heading');
                boolean useH = (boolean)section.get('useHeading');
                integer columns = (integer)section.get('columns');
                boolean useCollapse = (boolean)section.get('useCollapsibleSection');
        }
        if (m.containsKey('editLayoutSections')) {
            List<object> targetLayout = (List<object>) m.get('editLayoutSections');
            for (object sectionObject : targetLayout) {
                Map<String, object> section = (Map<String, object>) sectionObject;
                String sectionH = (String) section.get('heading');
                boolean useH = (boolean) section.get('useHeading');
                integer columns = (integer) section.get('columns');
                boolean useCollapse = (boolean) section.get('useCollapsibleSection');
                LayoutSection ls = new LayoutSection();
                ls.Name = sectionH;
                ls.useHeader = useH;
                ls.columns = columns;
                ls.allowCollapse = useCollapse;
                ls.layoutFields = new List<LayoutField>();
                ls.layoutFields = new List<LayoutField>();
                layoutSections.add(ls);
                List<object> layoutRows = (List<object>)  section.get('layoutRows');
                system.debug('layout rows ====> '+layoutRows);
                for(Object itemObject : layoutRows ){
                    Map<String,object> item = (Map<String,object>) itemObject;
                    List<object> layoutItem = (List<object>)item.get('layoutItems');
                    boolean priorFieldLayoutAdded = true;//initially true
                    for(object fieldItemObject : layoutItem){
                        Map<String, object> fields = (Map<String,object>) fieldItemObject;
                List<object> layoutRows = (List<object>) section.get('layoutRows');
                system.debug('layout rows ====> ' + layoutRows);
                for (Object itemObject : layoutRows) {
                    Map<String, object> item = (Map<String, object>) itemObject;
                    List<object> layoutItem = (List<object>) item.get('layoutItems');
                    boolean priorFieldLayoutAdded = true; //initially true
                    for (object fieldItemObject : layoutItem) {
                        Map<String, object> fields = (Map<String, object>) fieldItemObject;
                        List<object> layoutComponents = (List<object>) fields.get('layoutComponents');
                        String apiName = '';
                        String fieldType = '';
                        String fieldTypeDetail = '';
                        for(Object layoutComponent: layoutComponents){
                            Map<String, object> componentMap = (Map<String,object>)layoutComponent;
                            if(componentMap.containsKey('value')){
                        String fieldTypeDetail = '';
                        for (Object layoutComponent : layoutComponents) {
                            Map<String, object> componentMap = (Map<String, object>) layoutComponent;
                            if (componentMap.containsKey('value')) {
                                apiName = (String) componentMap.get('value');
                            }
                            if(componentMap.containsKey('type')){
                            if (componentMap.containsKey('type')) {
                                fieldType = (String) componentMap.get('type');
                            }
                            if(componentMap.containsKey('details')){
                                Map<String,object> detailsMap = (Map<String,object>) componentMap.get('details');
                                boolean calculatedField = (boolean)detailsMap.get('calculated');
                                boolean autoNumberField = (boolean)detailsMap.get('autoNumber');
                                if(calculatedField || autoNumberField){
                            if (componentMap.containsKey('details')) {
                                Map<String, object> detailsMap = (Map<String, object>) componentMap.get('details');
                                boolean calculatedField = (boolean) detailsMap.get('calculated');
                                boolean autoNumberField = (boolean) detailsMap.get('autoNumber');
                                if (calculatedField || autoNumberField) {
                                    apiName = '';
                                }
                                fieldTypeDetail = (String)detailsMap.get('type');
                                }
                                fieldTypeDetail = (String) detailsMap.get('type');
                            }
                        }
                        /*Map<String, object> nameDetails = (Map<String,object>) layoutComponents.get('Name');*/
                        String fieldLabel = (String) fields.get('label');
                        boolean placeholderF = (boolean) fields.get('placeholder');
                        boolean isEditable = (boolean) fields.get('editableForUpdate')||(boolean)fields.get('editableForNew'); // Check the editable prop
                        if( (apiName != '' && fieldType =='Field') || (placeholderF)){
                            if(userMode == 'classic' && fieldTypeDetail == 'address'){
                                String fieldLabelPrefix = fieldLabel.split(' ')[0] == 'Address'?'':fieldLabel.split(' ')[0];
                                List<String> addressDetail = new List<String>{'Country','PostalCode','State','City','Street'};
                                for(String addressType:addressDetail){
                        String fieldLabel = (String) fields.get('label');
                        boolean placeholderF = (boolean) fields.get('placeholder');
                        boolean isEditable = (boolean) fields.get('editableForUpdate') || (boolean) fields.get('editableForNew'); // Check the editable prop
                        if ((apiName != '' && fieldType == 'Field') || (placeholderF)) {
                            if (userMode == 'classic' && fieldTypeDetail == 'address') {
                                String fieldLabelPrefix = fieldLabel.split(' ')[0] == 'Address' ? '' : fieldLabel.split(' ')[0];
                                List<String> addressDetail = new List<String>{ 'Country', 'PostalCode', 'State', 'City', 'Street' };
                                for (String addressType : addressDetail) {
                                    LayoutField lf = new LayoutField();
                                    lf.isRequired = (Boolean)fields.get('required');
                                    lf.isRequired = (Boolean) fields.get('required');
                                    lf.isPlaceHolder = placeholderF;
                                    lf.editableField = isEditable;
                                    lf.fieldAPI = fieldLabelPrefix+addressType;
                                    lf.fieldLabel = fieldLabelPrefix+' '+addressType;
                                    lf.fieldType = 'string';
                                    if(ls.Name != '' || layoutSections.size() == 1){
                                    lf.fieldAPI = fieldLabelPrefix + addressType;
                                    lf.fieldLabel = fieldLabelPrefix + ' ' + addressType;
                                    lf.fieldType = 'string';
                                    if (ls.Name != '' || layoutSections.size() == 1) {
                                        ls.layoutFields.add(lf);
                                    }else if(layoutSections.size() - 2 >= 0){
                                        layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                                    } else if (layoutSections.size() - 2 >= 0) {
                                        layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                                    }
                                    if(lf.isRequired){
                                        system.debug(lf.fieldAPI+' is required');
                                    if (lf.isRequired) {
                                        system.debug(lf.fieldAPI + ' is required');
                                        requiredFieldAPIList.add(lf.fieldAPI);
                                    }
                                    if(string.isBlank(lf.fieldAPI)){
                                    if (string.isBlank(lf.fieldAPI)) {
                                        system.debug('==================================2');
                                        continue;
                                    }else{
                                        fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
                                    } else {
                                        fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel);
                                    }
                                }
                                continue;
                            }
                            if(userMode == 'classic' && apiName == 'Name' && ConcatenationNameSType.contains(objectType)){
                                List<String> nameDetail = new List<String>{'Salutation','LastName'};
                                for(String nameField:nameDetail){
                            if (userMode == 'classic' && apiName == 'Name' && ConcatenationNameSType.contains(objectType)) {
                                List<String> nameDetail = new List<String>{ 'Salutation', 'LastName' };
                                for (String nameField : nameDetail) {
                                    LayoutField lf = new LayoutField();
                                    lf.isRequired = (Boolean)fields.get('required');
                                    if(nameField == 'Salutation'){
                                    lf.isRequired = (Boolean) fields.get('required');
                                    if (nameField == 'Salutation') {
                                        lf.isRequired = false;
                                    }
                                    lf.isPlaceHolder = placeholderF;
@@ -145,867 +148,146 @@
                                    lf.fieldAPI = nameField;
                                    lf.fieldLabel = nameField;
                                    lf.fieldType = 'string';
                                    if(ls.Name != '' || layoutSections.size() == 1){
                                    if (ls.Name != '' || layoutSections.size() == 1) {
                                        ls.layoutFields.add(lf);
                                    }else if(layoutSections.size() - 2 >= 0){
                                        layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                                    } else if (layoutSections.size() - 2 >= 0) {
                                        layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                                    }
                                    if(lf.isRequired){
                                        system.debug(lf.fieldAPI+' is required');
                                    if (lf.isRequired) {
                                        system.debug(lf.fieldAPI + ' is required');
                                        requiredFieldAPIList.add(lf.fieldAPI);
                                    }
                                    if(string.isBlank(lf.fieldAPI)){
                                    }
                                    if (string.isBlank(lf.fieldAPI)) {
                                        system.debug('==================================3');
                                        continue;
                                    }else{
                                        fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
                                    } else {
                                        fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel);
                                    }
                                }
                                continue;
                            }
                            if(objectType == 'Case' && CaseWebFields.contains(apiName)){
                            if (objectType == 'Case' && CaseWebFields.contains(apiName)) {
                                continue;
                            }
                            LayoutField lf = new LayoutField();
                            lf.isRequired = (Boolean)fields.get('required');
                            lf.isPlaceHolder = placeholderF;
                            lf.isRequired = (Boolean) fields.get('required');
                            lf.isPlaceHolder = placeholderF;
                            lf.editableField = isEditable;
                            lf.fieldAPI = apiName;
                            lf.fieldLabel = fieldLabel;
                            lf.fieldType = fieldTypeDetail;
                            if(ls.Name != '' || layoutSections.size() == 1){
                            if (ls.Name != '' || layoutSections.size() == 1) {
                                ls.layoutFields.add(lf);
                            }else if(layoutSections.size() - 2 >= 0){
                            } else if (layoutSections.size() - 2 >= 0) {
                                layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                            }
                            if(lf.isRequired){
                                system.debug(lf.fieldAPI+' is required');
                            if (lf.isRequired) {
                                system.debug(lf.fieldAPI + ' is required');
                                requiredFieldAPIList.add(lf.fieldAPI);
                            }
                            if(string.isBlank(lf.fieldAPI)){
                            if (string.isBlank(lf.fieldAPI)) {
                                system.debug('==================================1');
                                continue;
                            }else{
                                fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
                            } else {
                                fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel);
                            }
                            priorFieldLayoutAdded = true;
                        }else
                        } else
                            priorFieldLayoutAdded = false;
                    }
                    }
                }
                if(layoutSections.get(layoutSections.size() -1).layoutFields.size() <= 0) {
                if (layoutSections.get(layoutSections.size() - 1).layoutFields.size() <= 0) {
                    layoutSections.remove(layoutSections.size() - 1);
                }
                }
            }
        }
        System.debug('Layout Section Result:'+JSon.serialize(layoutSections));
        system.debug('required API List:'+JSON.serialize(requiredFieldAPIList));
        System.debug('Layout Section Result:' + JSon.serialize(layoutSections));
        system.debug('required API List:' + JSON.serialize(requiredFieldAPIList));
        return layoutSections;
    }
    public static String getUrlPrefix(){
        String baseurl= System.URL.getOrgDomainUrl().getHost();
        system.debug('original url ===>'+ baseurl);
    public static String getUrlPrefix() {
        String baseurl = System.URL.getOrgDomainUrl().getHost();
        system.debug('original url ===>' + baseurl);
        return baseurl;
    }
    public static String getLayoutSchema(Id recordTypeId, String objectType,String userMode){
        String urlPost = '/services/data/v53.0/sobjects/'+objectType+'/describe/layouts/';
        if(String.isNotEmpty(recordTypeId) && String.isNotBlank(recordTypeId)){
    public static String getLayoutSchema(Id recordTypeId, String objectType, String userMode) {
        String urlPost = '/services/data/v53.0/sobjects/' + objectType + '/describe/layouts/';
        if (String.isNotEmpty(recordTypeId) && String.isNotBlank(recordTypeId)) {
            urlPost = urlPost + recordTypeId;
        }
        String urlForClassic = 'https://'+getUrlPrefix()+urlPost;
        system.debug('URL Post:'+urlForClassic);
        String urlForClassic = 'https://' + getUrlPrefix() + urlPost;
        system.debug('URL Post:' + urlForClassic);
        HttpResponse resp = null;
        HttpRequest req = new HttpRequest();
        req.setMethod('GET');
        if(userMode =='lightning'){
            req.setEndPoint('callout:SF_Rest_API'+urlPost);
            system.debug('callout:SF_Rest_API'+urlPost);
        }else if(userMode == 'classic'){
            req.setEndpoint(urlForClassic);
        HttpRequest req = new HttpRequest();
        req.setMethod('GET');
        if (userMode == 'lightning') {
            req.setEndPoint('callout:SF_Rest_API' + urlPost);
            system.debug('callout:SF_Rest_API' + urlPost);
        } else if (userMode == 'classic') {
            req.setEndpoint(urlForClassic);
            req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid());
        }
        Http client = new Http();
        }
        Http client = new Http();
        resp = client.send(req);
        system.debug('Schema Body:'+JSON.serialize(resp.getBody()));
        system.debug('Schema Body:' + JSON.serialize(resp.getBody()));
        return resp.getBody();
    }
    public static Id  getDefaultRecordType(String ObjectName) {
    public static Id getDefaultRecordType(String ObjectName) {
        Map<String, Schema.SObjectType> GlobalDescribeMap = Schema.getGlobalDescribe();
        Schema.SObjectType obj = GlobalDescribeMap.get(ObjectName);
        Schema.DescribeSObjectResult describeResult = obj.getDescribe();
        List<Schema.RecordTypeInfo> rtInfos = describeResult.getRecordTypeInfos();
        for(Schema.RecordTypeInfo rtInfo : rtInfos) {
            if(rtInfo.DefaultRecordTypeMapping) {
                return  rtInfo.getRecordTypeId();
        for (Schema.RecordTypeInfo rtInfo : rtInfos) {
            if (rtInfo.DefaultRecordTypeMapping) {
                return rtInfo.getRecordTypeId();
            }
        }
        return null;
    }
    public class LayoutWrapper{
        @AuraEnabled public List<LayoutSection> layoutSections{set;get;}
        @AuraEnabled public List<String> requiredFieldAPIList{set;get;}
        @AuraEnabled public Map<String,String> fieldAPIToLabelMap{set;get;}
    public class LayoutWrapper {
        @AuraEnabled
        public List<LayoutSection> layoutSections { get; set; }
        @AuraEnabled
        public List<String> requiredFieldAPIList { get; set; }
        @AuraEnabled
        public Map<String, String> fieldAPIToLabelMap { get; set; }
    }
    public class LayoutSection{
        @AuraEnabled public boolean useHeader {get;set;}
        @AuraEnabled public String name {get;set;}
        @AuraEnabled public boolean allowCollapse {get;set;}
        @AuraEnabled public integer columns {get;set;}
        @AuraEnabled public List<LayoutField> layoutFields {get;set;}
    public class LayoutSection {
        @AuraEnabled
        public boolean useHeader { get; set; }
        @AuraEnabled
        public String name { get; set; }
        @AuraEnabled
        public boolean allowCollapse { get; set; }
        @AuraEnabled
        public integer columns { get; set; }
        @AuraEnabled
        public List<LayoutField> layoutFields { get; set; }
    }
    public class LayoutField{
        @AuraEnabled public String fieldAPI {get;set;}
        @AuraEnabled public String fieldLabel{set;get;}
        @AuraEnabled public String fieldType{set;get;}
        @AuraEnabled public boolean editableField {get;set;}
        @AuraEnabled public boolean isRequired {get; set;}
        @AuraEnabled public boolean isPlaceHolder {get;set;}
        @AuraEnabled public String defaultValue{set;get;}
    }
public static Integer ControllerUtil() {
Integer i = 0;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
return i;
}
}
    public class LayoutField {
        @AuraEnabled
        public String fieldAPI { get; set; }
        @AuraEnabled
        public String fieldLabel { get; set; }
        @AuraEnabled
        public String fieldType { get; set; }
        @AuraEnabled
        public boolean editableField { get; set; }
        @AuraEnabled
        public boolean isRequired { get; set; }
        @AuraEnabled
        public boolean isPlaceHolder { get; set; }
        @AuraEnabled
        public String defaultValue { get; set; }
    }
    public static Integer ControllerUtil() {
        Integer i = 0;
        return i;
    }
}
force-app/main/default/classes/LayoutDescriberHelperTest.cls
@@ -1,90 +1,102 @@
@isTest
private class LayoutDescriberHelperTest {
    static testMethod void testMethod1() {
        String userMode = 'classic';//classic  lightning
        String objectType = 'Contact';
        String recordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Doctor').getRecordTypeId();
        String userMode = 'classic'; //classic  lightning
        String objectType = 'Contact';
        String recordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Doctor').getRecordTypeId();
        System.debug('record type id ===>' + recordTypeId + ' object type===>' + objectType + ' userMode===>' + userMode);
        boolean useHeader = false;
        String baseurl = System.URL.getOrgDomainUrl().getHost();
        Map<String, object> detailsMap = new Map<String, object>();
        Map<String, object> detailsMap2 = new Map<String, object>();
        Map<String, object> detailsMap3 = new Map<String, object>();
        detailsMap.put('calculated', true);
        detailsMap.put('autoNumber', false);
        detailsMap.put('type', 'address');
        detailsMap2.put('calculated', false);
        detailsMap2.put('autoNumber', false);
        detailsMap2.put('type', 'repair');
        detailsMap3.put('calculated', false);
        detailsMap3.put('autoNumber', false);
        detailsMap3.put('type', 'repair');
        String fieldTypeDetail = (String) detailsMap.get('type');
        Map<String,object> detailsMap = new Map<String,object>();
        Map<String,object> detailsMap2 = new Map<String,object>();
        Map<String,object> detailsMap3 = new Map<String,object>();
        detailsMap.put('calculated',true);
        detailsMap.put('autoNumber',false);
        detailsMap.put('type','address');
        detailsMap2.put('calculated',false);
        detailsMap2.put('autoNumber',false);
        detailsMap2.put('type','repair');
        detailsMap3.put('calculated',false);
        detailsMap3.put('autoNumber',false);
        detailsMap3.put('type','repair');
        List<Map<String, object>> componentMapList = new List<Map<String, object>>();
        List<Map<String, object>> componentMapList2 = new List<Map<String, object>>();
        List<Map<String, object>> componentMapList3 = new List<Map<String, object>>();
        Map<String, object> componentMap = new Map<String, object>();
        Map<String, object> componentMap2 = new Map<String, object>();
        Map<String, object> componentMap3 = new Map<String, object>();
        componentMap.put('value', 'Name');
        componentMap.put('type', 'Field');
        componentMap.put('details', detailsMap);
        componentMapList.add(componentMap);
        componentMap2.put('value', 'Name');
        componentMap2.put('type', 'Field');
        componentMap2.put('details', detailsMap2);
        componentMapList2.add(componentMap2);
        componentMap3.put('value', 'LastName');
        componentMap3.put('type', 'Field');
        componentMap3.put('details', detailsMap3);
        componentMapList3.add(componentMap3);
        String apiName = (String) componentMap.get('value');
        String fieldType = (String) componentMap.get('type');
        List<Map<String, object>> componentMapList = new List<Map<String, object>>();
        List<Map<String, object>> componentMapList2 = new List<Map<String, object>>();
        List<Map<String, object>> componentMapList3 = new List<Map<String, object>>();
        Map<String, object> componentMap = new Map<String, object>();
        Map<String, object> componentMap2 = new Map<String, object>();
        Map<String, object> componentMap3 = new Map<String, object>();
        componentMap.put('value','Name');
        componentMap.put('type','Field');
        componentMap.put('details',detailsMap);
        componentMapList.add(componentMap);
        componentMap2.put('value','Name');
        componentMap2.put('type','Field');
        componentMap2.put('details',detailsMap2);
        componentMapList2.add(componentMap2);
        componentMap3.put('value','LastName');
        componentMap3.put('type','Field');
        componentMap3.put('details',detailsMap3);
        componentMapList3.add(componentMap3);
        List<Map<String, object>> layoutComponentsList = new List<Map<String, object>>();
        Map<String, object> layoutComponents = new Map<String, object>();
        layoutComponents.put('layoutComponents', componentMapList);
        layoutComponents.put('label', 'Address');
        layoutComponents.put('placeholder', true);
        layoutComponents.put('editableForNew', true);
        layoutComponents.put('editableForUpdate', true);
        layoutComponents.put('required', false);
        layoutComponentsList.add(layoutComponents);
        Map<String, object> layoutComponents2 = new Map<String, object>();
        layoutComponents2.put('layoutComponents', componentMapList2);
        layoutComponents2.put('label', 'Repair');
        layoutComponents2.put('placeholder', true);
        layoutComponents2.put('editableForNew', true);
        layoutComponents2.put('editableForUpdate', true);
        layoutComponents2.put('required', false);
        layoutComponentsList.add(layoutComponents2);
        Map<String, object> layoutComponents3 = new Map<String, object>();
        layoutComponents3.put('layoutComponents', componentMapList3);
        layoutComponents3.put('label', 'Repair');
        layoutComponents3.put('placeholder', true);
        layoutComponents3.put('editableForNew', true);
        layoutComponents3.put('editableForUpdate', true);
        layoutComponents3.put('required', false);
        layoutComponentsList.add(layoutComponents3);
        List<Map<String, object>> layoutComponentsList = new List<Map<String, object>>();
        Map<String, object> layoutComponents = new Map<String, object>();
        layoutComponents.put('layoutComponents',componentMapList);
        layoutComponents.put('label','Address');
        layoutComponents.put('placeholder',true);
        layoutComponents.put('editableForNew',true);
        layoutComponents.put('required',false);
        layoutComponentsList.add(layoutComponents);
        Map<String, object> layoutComponents2 = new Map<String, object>();
        layoutComponents2.put('layoutComponents',componentMapList2);
        layoutComponents2.put('label','Repair');
        layoutComponents2.put('placeholder',true);
        layoutComponents2.put('editableForNew',true);
        layoutComponents2.put('required',false);
        layoutComponentsList.add(layoutComponents2);
        Map<String, object> layoutComponents3 = new Map<String, object>();
        layoutComponents3.put('layoutComponents',componentMapList3);
        layoutComponents3.put('label','Repair');
        layoutComponents3.put('placeholder',true);
        layoutComponents3.put('editableForNew',true);
        layoutComponents3.put('required',false);
        layoutComponentsList.add(layoutComponents3);
        boolean placeholderF = (boolean) layoutComponents.get('placeholder');
        boolean isEditable = (boolean) layoutComponents.get('editableForUpdate') || (boolean) layoutComponents.get('editableForNew');
        System.debug('isEditable ===>' + isEditable);
        List<Map<String, object>> itemList = new List<Map<String, object>>();
        Map<String, object> item = new Map<String, object>();
        item.put('layoutItems', layoutComponentsList);
        itemList.add(item);
        useHeader = true;
        List<Map<String, object>> sectionList = new List<Map<String, object>>();
        Map<String, object> section = new Map<String, object>();
        section.put('heading', '');
        section.put('useHeading', useHeader);
        section.put('columns', 1);
        section.put('useCollapsibleSection', true);
        section.put('layoutRows', itemList);
        sectionList.add(section);
        List<Map<String,object>> itemList = new List<Map<String,object>>();
        Map<String,object> item = new Map<String,object>();
        item.put('layoutItems',layoutComponentsList);
        itemList.add(item);
        List<Map<String,object>> sectionList = new List<Map<String,object>>();
        Map<String,object> section = new Map<String,object>();
        section.put('heading','');
        section.put('useHeading',true);
        section.put('columns',1);
        section.put('useCollapsibleSection',true);
        section.put('layoutRows',itemList);
        sectionList.add(section);
        Map<String, Object> layoutSection = new Map<String,Object>();
        layoutSection.put('layouts','123');
        layoutSection.put('editLayoutSections',sectionList);
        String layoutSectionJson = JSON.serialize(layoutSection);
        LayoutDescriberHelper.ControllerUtil();
        Test.setMock(HttpCalloutMock.class, new TestDataUtility.BaseHttpMock(layoutSectionJson,'OK','200'));
        Map<String, Object> layoutSection = new Map<String, Object>();
        layoutSection.put('layouts', '123');
        layoutSection.put('editLayoutSections', sectionList);
        String layoutSectionJson = JSON.serialize(layoutSection);
        LayoutDescriberHelper.ControllerUtil();
        Test.setMock(HttpCalloutMock.class, new TestDataUtility.BaseHttpMock(layoutSectionJson, 'OK', '200'));
        Test.startTest();
        LayoutDescriberHelper.describeSectionWithFieldsWrapper(recordTypeId,objectType,userMode);
        LayoutDescriberHelper.describeSectionWithFieldsWrapper(null,objectType,userMode);
        LayoutDescriberHelper.describeSectionWithFieldsWrapper(recordTypeId, objectType, userMode);
        LayoutDescriberHelper.describeSectionWithFieldsWrapper(null, objectType, userMode);
        LayoutDescriberHelper.describeSectionWithFields(recordTypeId, objectType, userMode);
        LayoutDescriberHelper.getLayoutSchema(recordTypeId, objectType, userMode);
        LayoutDescriberHelper.getUrlPrefix();
        Test.stopTest();
    }
}
}
force-app/main/default/classes/LexArriveGoodsController.cls
@@ -0,0 +1,257 @@
public without sharing class LexArriveGoodsController {
    //初始化
    @AuraEnabled
    public static Results init(String arrType, String eSetId) {
        Results results = new Results();
        results.isNoteStay = LexUtility.getIsNoteStay();
        try {
            ArriveGoodsController arrController = new ArriveGoodsController(eSetId, arrType);
            arrController.isLwc = true;
            arrController.init();
            results.arrGoodCon = JSON.serialize(arrController);
            results.coc = arrController.coc;
            results.saveFLGbln = arrController.saveFLGbln;
            results.returnFLGbln = arrController.ReturnFLGbln;
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //搜索产品
    @AuraEnabled
    public static Results searchProduct(String barcode, String arrControllerStr) {
        Results results = new Results();
        try {
            System.debug('arrControllerStr:' + arrControllerStr);
            ArriveGoodsController arrController = (ArriveGoodsController) JSON.deserialize(arrControllerStr, ArriveGoodsController.class);
            arrController.barcode = barcode;
            arrController.returnError = null;
            arrController.warningList = new List<String>();
            arrController.errorList = new List<String>();
            arrController.SearchPro();
            results.arrGoodCon = JSON.serialize(arrController);
            if (arrController.returnError != null && arrController.returnError != '') {
                results.result = 'Fail';
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.errorMsg = arrController.returnError;
            } else {
                results.coc = arrController.coc;
                results.saveFLGbln = arrController.saveFLGbln;
                results.returnFLGbln = arrController.ReturnFLGbln;
                results.detailsSummary = changeType1(arrController.detailsSummary);
                results.consumableorderdetailsRecords = changeType1(arrController.ConsumableorderdetailsRecords);
                results.showGoodsofReturnList = changeType1(arrController.ShowGoodsofReturnList);
                results.consumableInventory = changeType1(arrController.consumableInventory);
                results.consumableorderdetailsRecordserror = changeType1(arrController.ConsumableorderdetailsRecordserror);
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.result = 'Success';
            }
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage() + '---' + e.getStackTraceString();
        }
        return results;
    }
    //到货确认
    @AuraEnabled
    public static Results arriveGoodsConfim(String arrControllerStr) {
        Results results = new Results();
        try {
            ArriveGoodsController arrController = (ArriveGoodsController) JSON.deserialize(arrControllerStr, ArriveGoodsController.class);
            arrController.returnError = null;
            arrController.warningList = new List<String>();
            arrController.errorList = new List<String>();
            Pagereference page = arrController.ArriveGoodsConfim();
            results.arrGoodCon = JSON.serialize(arrController);
            if (arrController.returnError != null && arrController.returnError != '') {
                results.result = 'Fail';
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.errorMsg = arrController.returnError;
            } else {
                if (arrController.urlType == 'UnabletoEdit') {
                    results.url = '/lexarrivegsdetails?EsetId=' + arrController.arriveId;
                }
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.result = 'Success';
            }
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //登录返品
    @AuraEnabled
    public static Results updateGoodsOfReturn(String arrControllerStr, String showGoodsofReturnListStr) {
        Results results = new Results();
        try {
            List<ConsumableorderdetailsInfo> showGoodsofReturnList = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
                showGoodsofReturnListStr,
                List<ConsumableorderdetailsInfo>.class
            );
            ArriveGoodsController arrController = (ArriveGoodsController) JSON.deserialize(arrControllerStr, ArriveGoodsController.class);
            arrController.ShowGoodsofReturnList = changeType2(showGoodsofReturnList);
            arrController.returnError = null;
            arrController.warningList = new List<String>();
            arrController.errorList = new List<String>();
            StaticParameter.ConsumableOrderTrigger = true; //Add by Li Jun for bypass ConsumableOrderTrigger 20230616
            Pagereference page = arrController.UpdateGoodsOfReturn();
            results.arrGoodCon = JSON.serialize(arrController);
            if (arrController.returnError != null && arrController.returnError != '') {
                results.result = 'Fail';
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.errorMsg = arrController.returnError;
            } else {
                if (arrController.urlType == 'ToReturnGoodsPage') {
                    results.url = '/detail/' + arrController.return_Order_id;
                }
                if (arrController.urlType == 'ToInventoryGoodsPage') {
                    results.url = '/detail/' + arrController.inventory_Order_id;
                }
                results.errorMsgList = arrController.errorList;
                results.warningMsgList = arrController.warningList;
                results.result = 'Success';
            }
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    public static List<ConsumableorderdetailsInfo> changeType1(List<ArriveGoodsController.ConsumableorderdetailsInfo> conList) {
        List<ConsumableorderdetailsInfo> conList1 = new List<ConsumableorderdetailsInfo>();
        if (conList != null) {
            for (ArriveGoodsController.ConsumableorderdetailsInfo con : conList) {
                ConsumableorderdetailsInfo con1 = new ConsumableorderdetailsInfo();
                con1.esd = con.esd;
                con1.Prod = con.Prod;
                con1.ProductName = con.ProductName;
                con1.barCodeNo = con.barCodeNo;
                con1.sterilizationlimitDate = con.sterilizationlimitDate;
                con1.serialNoorLotNo = con.serialNoorLotNo;
                con1.tracingCodeNo = con.tracingCodeNo;
                con1.ReturnReason = con.ReturnReason;
                con1.oldConsumableCount = con.oldConsumableCount;
                con1.ErrorReason = con.ErrorReason;
                con1.canEdit = con.canEdit;
                con1.intMark = con.intMark;
                con1.arriveAmount = con.arriveAmount;
                con1.arrivedCount = con.arrivedCount;
                con1.ReportProductExpirationDate = con.ReportProductExpirationDate;
                conList1.add(con1);
            }
        }
        return conList1;
    }
    public static List<ArriveGoodsController.ConsumableorderdetailsInfo> changeType2(List<ConsumableorderdetailsInfo> conList) {
        List<ArriveGoodsController.ConsumableorderdetailsInfo> conList1 = new List<ArriveGoodsController.ConsumableorderdetailsInfo>();
        if (conList != null) {
            for (ConsumableorderdetailsInfo con : conList) {
                ArriveGoodsController.ConsumableorderdetailsInfo con1 = new ArriveGoodsController.ConsumableorderdetailsInfo();
                con1.esd = con.esd;
                con1.Prod = con.Prod;
                con1.ProductName = con.ProductName;
                con1.barCodeNo = con.barCodeNo;
                con1.sterilizationlimitDate = con.sterilizationlimitDate;
                con1.serialNoorLotNo = con.serialNoorLotNo;
                con1.tracingCodeNo = con.tracingCodeNo;
                con1.ReturnReason = con.ReturnReason;
                con1.oldConsumableCount = con.oldConsumableCount;
                con1.ErrorReason = con.ErrorReason;
                con1.canEdit = con.canEdit;
                con1.intMark = con.intMark;
                con1.arriveAmount = con.arriveAmount;
                con1.arrivedCount = con.arrivedCount;
                con1.ReportProductExpirationDate = con.ReportProductExpirationDate;
                conList1.add(con1);
            }
        }
        return conList1;
    }
    public class Results {
        @AuraEnabled
        public String result;
        @AuraEnabled
        public String errorMsg;
        @AuraEnabled
        public String url;
        @AuraEnabled
        public String arrGoodCon;
        @AuraEnabled
        public Consumable_order__c coc;
        @AuraEnabled
        public Boolean returnFLGbln;
        @AuraEnabled
        public Boolean saveFLGbln;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> detailsSummary;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> showGoodsofReturnList;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> consumableInventory;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> consumableorderdetailsRecordserror;
        @AuraEnabled
        public List<String> errorMsgList;
        @AuraEnabled
        public List<String> warningMsgList;
        @AuraEnabled
        public Boolean isNoteStay;
    }
    public class ConsumableorderdetailsInfo implements Comparable {
        @AuraEnabled
        public Consumable_order_details2__c esd { get; set; }
        @AuraEnabled
        public Product2__c Prod { get; set; }
        @AuraEnabled
        public String ProductName { get; set; }
        @AuraEnabled
        public String barCodeNo { get; set; }
        @AuraEnabled
        public Date sterilizationlimitDate { get; set; }
        @AuraEnabled
        public String serialNoorLotNo { get; set; }
        @AuraEnabled
        public String tracingCodeNo { get; set; }
        @AuraEnabled
        public String ReturnReason { get; set; }
        @AuraEnabled
        public String oldConsumableCount { get; set; }
        @AuraEnabled
        public String ErrorReason { get; set; }
        @AuraEnabled
        public boolean canEdit { get; set; }
        @AuraEnabled
        public Integer intMark { get; set; }
        @AuraEnabled
        public Decimal arriveAmount { get; set; }
        @AuraEnabled
        public Decimal arrivedCount { get; set; }
        @AuraEnabled
        public String ReportProductExpirationDate { get; set; }
        public ConsumableorderdetailsInfo() {
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            return null;
        }
    }
}
force-app/main/default/classes/LexArriveGoodsControllerTest.cls
New file
@@ -0,0 +1,426 @@
@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)'
        ];
        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();
        }
    }
    @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
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexArriveGoodsControllerTest1.cls
New file
@@ -0,0 +1,214 @@
@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;
        }
        // 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
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexArriveGoodsMainController.cls
@@ -1,13 +1,13 @@
public without sharing class LexArriveGoodsMainController {
    /*****************検索用******************/
    //经销商产品分类
    public static String agencyProType {get;set;}
    public static String agencyProType { get; set; }
    // public static Consumable_order__c coc { get; set; }
    public static String category1 { get; set; }
    private static String cate1ForSort = null;
    private static Date cate2ForSort = Date.today();
    private static Date cate2 = Date.today();
    private static String[] columus = new String[]{ 'Product2__c.Name'};
    private static String[] columus = new List<String>{ 'Product2__c.Name' };
    // 产品 ID
    private static String ESetId = '';
    private static String accountid = null;
@@ -21,37 +21,29 @@
    // 登录者工作地
    private static String userWorkLocation;
    // 20200904 ljh  汇总使用 start
    public static Integer Total_num {get; set;}
    public static Integer OrderNumber_arrived {get; set;}
    public static Integer Delivery_detail_count {get; set;}
    public static Integer OrderNumber_notarrive {get; set;}
    public static Integer More_than_seven_days {get; set;}
    public static Integer Total_num { get; set; }
    public static Integer OrderNumber_arrived { get; set; }
    public static Integer Delivery_detail_count { get; set; }
    public static Integer OrderNumber_notarrive { get; set; }
    public static Integer More_than_seven_days { get; set; }
    @AuraEnabled
    public static Results init(){
    public static Results init() {
        Results results = new Results();
        results.isNoteStay = LexUtility.getIsNoteStay();
        try {
            List<String> idList  = new List<String>();
            idList.add('a2K10000002zHyDEAU');
            idList.add('a2K10000002zIJEEA2');
            idList.add('a2K10000002zK9rEAE');
            idList.add('a2K10000004AKGBEA4');
            idList.add('a2K10000004ALqeEAG');
            idList.add('a2K10000004AMmrEAG');
            idList.add('a2K10000004ANvDEAW');
            idList.add('a2K10000004AOVxEAO');
            idList.add('a2K10000004AOJZEA4');
            idList.add('a2K10000004AOLuEAO');
            idList.add('a2K10000004AOLfEAO');
            // coc = new Consumable_order__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];
            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)){
            if (String.isBlank(Useracc[0].UserPro_Type__c)) {
                agencyProType = 'ET';
            }
            // 获得订单一览
@@ -74,7 +66,18 @@
            for (String s : column) {
                soql += ',' + s;
            }
            soql += ' from Consumable_order__c where Order_type__c = \''+'订单'+'\' and  recordtypeid =\'' + System.Label.RT_ConOrder_Delivery + '\' and Dealer_Info__c =\'' + accountid +'\' and Order_ProType__c =\'' + agencyProType +'\' and   (OrderNumber_notarrive__c > 0 or Delivery_detail_count__c >0) and Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' and showFalseNotshowTrue__c = false order by Deliver_date__c'; //
            soql +=
                ' from Consumable_order__c where Order_type__c = \'' +
                '订单' +
                '\' and  recordtypeid =\'' +
                System.Label.RT_ConOrder_Delivery +
                '\' and Dealer_Info__c =\'' +
                accountid +
                '\' and Order_ProType__c =\'' +
                agencyProType +
                '\' and   (OrderNumber_notarrive__c > 0 or Delivery_detail_count__c >0) and Order_Owner_WorkLocal__c = \'' +
                userWorkLocation +
                '\' and showFalseNotshowTrue__c = false order by Deliver_date__c'; //
            // soql = 'select id,name,ContractNo__c,Total_num__c,OrderNumber_arrived__c,Delivery_detail_count__c,OrderNumber_notarrive__c,More_than_seven_days__c,Shipment_date__c,First_Delivery__c from Consumable_order__c where id in :idList';
            raesList = Database.query(soql);
            //20200904 ljh add start
@@ -83,22 +86,22 @@
            Delivery_detail_count = 0;
            OrderNumber_notarrive = 0;
            More_than_seven_days = 0;
            System.debug('-----1------'+raesList);
            for(Consumable_order__c conorder :raesList){
                if(conorder.Total_num__c != null){
                    Total_num += (Integer)conorder.Total_num__c;
            System.debug('-----1------' + raesList);
            for (Consumable_order__c conorder : raesList) {
                if (conorder.Total_num__c != null) {
                    Total_num += (Integer) conorder.Total_num__c;
                }
                if(conorder.OrderNumber_arrived__c != null){
                    OrderNumber_arrived += (Integer)conorder.OrderNumber_arrived__c;
                if (conorder.OrderNumber_arrived__c != null) {
                    OrderNumber_arrived += (Integer) conorder.OrderNumber_arrived__c;
                }
                if(conorder.Delivery_detail_count__c != null){
                    Delivery_detail_count += (Integer)conorder.Delivery_detail_count__c;
                if (conorder.Delivery_detail_count__c != null) {
                    Delivery_detail_count += (Integer) conorder.Delivery_detail_count__c;
                }
                if(conorder.OrderNumber_notarrive__c != null){
                    OrderNumber_notarrive += (Integer)conorder.OrderNumber_notarrive__c;
                if (conorder.OrderNumber_notarrive__c != null) {
                    OrderNumber_notarrive += (Integer) conorder.OrderNumber_notarrive__c;
                }
                if(conorder.More_than_seven_days__c != null){
                    More_than_seven_days += (Integer)conorder.More_than_seven_days__c;
                if (conorder.More_than_seven_days__c != null) {
                    More_than_seven_days += (Integer) conorder.More_than_seven_days__c;
                }
            }
            results.agencyProType = agencyProType;
@@ -120,7 +123,13 @@
    }
    @AuraEnabled
    public static Results searchConsumableorderdetails(String category1Str, Date cate2Str, String accountidStr, String userWorkLocationStr, String agencyProTypeStr){
    public static Results searchConsumableorderdetails(
        String category1Str,
        Date cate2Str,
        String accountidStr,
        String userWorkLocationStr,
        String agencyProTypeStr
    ) {
        Results results = new Results();
        category1 = category1Str;
        cate2 = cate2Str;
@@ -149,16 +158,23 @@
            for (String s : column) {
                soql += ',' + s;
            }
            soql += ' from Consumable_order__c where Order_type__c = \''+'订单'+'\' and  recordtypeid =\'' + System.Label.RT_ConOrder_Delivery + '\' and Dealer_Info__c =\'' + accountid +'\' and  (OrderNumber_notarrive__c > 0 or Delivery_detail_count__c >0) ';
            soql +=
                ' from Consumable_order__c where Order_type__c = \'' +
                '订单' +
                '\' and  recordtypeid =\'' +
                System.Label.RT_ConOrder_Delivery +
                '\' and Dealer_Info__c =\'' +
                accountid +
                '\' and  (OrderNumber_notarrive__c > 0 or Delivery_detail_count__c >0) ';
            soql += 'and Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
            soql += 'and showFalseNotshowTrue__c = false';
            if (!String.isBlank(category1)) {
                soql += ' and Name like \'%' + String.escapeSingleQuotes(category1.replaceAll('%', '\\%')) + '%\' ';
            }
            if(cate2 != null){
            if (cate2 != null) {
                soql += ' and Shipment_date__c = :cate2 ';
            }
            soql += '  and Order_ProType__c =\'' + agencyProType +'\'';
            soql += '  and Order_ProType__c =\'' + agencyProType + '\'';
            soql += ' order by Deliver_date__c';
            system.debug('====soql:' + soql);
            raesList = Database.query(soql);
@@ -205,4 +221,4 @@
        @AuraEnabled
        public Boolean isNoteStay;
    }
}
}
force-app/main/default/classes/LexArriveGoodsMainControllerTest.cls
New file
@@ -0,0 +1,133 @@
@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;
        }
        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
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexArriveGsDetailsController.cls
@@ -19,45 +19,72 @@
        try {
            //取经销商信息
            String userId = UserInfo.getUserId();
            List<user> useracc = New List<user>();
            useracc = [select accountid from user where id =:userId];
            List<user> useracc = new List<user>();
            useracc = [SELECT accountid FROM user WHERE id = :userId];
            accountid = useracc[0].accountid;
            List<Consumable_order__c> rs = New List<Consumable_order__c>();
            if(eSetId == NULL || eSetId == '') {
            }else {
                rs = [SELECT id,name,Order_reason__c,Arrive_Order__c,Arrive_Order__r.Total_num__c,Arrive_Order__r.IsShipment__c,Arrive_Order__r.Name,
                            recordtypeid,Order_status__c,Deliver_date__c,Arrive_total_amount__c
                        FROM Consumable_order__c
                        WHERE id =:eSetId];
                coc =  new Consumable_order__c();
                if(rs.size()>0){
            List<Consumable_order__c> rs = new List<Consumable_order__c>();
            if (eSetId == null || eSetId == '') {
            } else {
                rs = [
                    SELECT
                        id,
                        name,
                        Order_reason__c,
                        Arrive_Order__c,
                        Arrive_Order__r.Total_num__c,
                        Arrive_Order__r.IsShipment__c,
                        Arrive_Order__r.Name,
                        recordtypeid,
                        Order_status__c,
                        Deliver_date__c,
                        Arrive_total_amount__c
                    FROM Consumable_order__c
                    WHERE id = :eSetId
                ];
                coc = new Consumable_order__c();
                if (rs.size() > 0) {
                    coc = rs[0];
                    orderallcount = coc.Arrive_Order__r.Total_num__c;
                }
                if(coc.Arrive_Order__c == null){
                if (coc.Arrive_Order__c == null) {
                    arrivetoorder = true;
                }
                List<Consumable_order_details2__c> consumablearriveproductdetailsSelected = [SELECT Id,Dealer_Arrive__c,Bar_Code__c, RecordTypeid, Name,Consumable_Product__r.Name__c,
                                                            Consumable_Product__c,Consumable_Product__r.Name,Dealer_Saled__c,
                                                            Sterilization_limit__c,Deliver_date__c,
                                                            Intra_Trade_List_RMB__c,Asset_Model_No__c,Arrive_Date__c,Send_Date__c,
                                                            Consumable_Product__r.SFDA_Status__c,
                                                            Consumable_Product__r.Product2__r.Packing_list_manual__c,
                                                            Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                                                            Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
                                                        FROM Consumable_order_details2__c
                                                        WHERE Consumable_Arrived_order__c = :eSetId
                                                        ORDER BY Name ];
                List<Consumable_order_details2__c> consumablearriveproductdetailsSelected = [
                    SELECT
                        Id,
                        Dealer_Arrive__c,
                        Bar_Code__c,
                        RecordTypeid,
                        Name,
                        Consumable_Product__r.Name__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Dealer_Saled__c,
                        Sterilization_limit__c,
                        Deliver_date__c,
                        Intra_Trade_List_RMB__c,
                        Asset_Model_No__c,
                        Arrive_Date__c,
                        Send_Date__c,
                        Consumable_Product__r.SFDA_Status__c,
                        Consumable_Product__r.Product2__r.Packing_list_manual__c,
                        Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                        Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
                    FROM Consumable_order_details2__c
                    WHERE Consumable_Arrived_order__c = :eSetId
                    ORDER BY Name
                ];
                for (Integer i = 0; i < consumablearriveproductdetailsSelected.size(); i++) {
                        consumableorderdetailsRecords.add(new ConsumableorderdetailsInfo(consumablearriveproductdetailsSelected[i]));
                    }
                    consumableorderdetailsRecords.add(new ConsumableorderdetailsInfo(consumablearriveproductdetailsSelected[i]));
                }
            }
            for(ConsumableorderdetailsInfo bss : consumableorderdetailsRecords){
            for (ConsumableorderdetailsInfo bss : consumableorderdetailsRecords) {
                bss.packing_list = bss.Prod.Product2__r.Packing_list_manual__c;
                bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                //update by rentx 20210622 start CHAN-C3K4ZQ
                bss.expiration_DateStr = bss.Prod.Product2__r.SFDA_Expiration_Date__c == null ? '' : bss.Prod.Product2__r.SFDA_Expiration_Date__c.format();
                bss.expiration_DateStr = bss.Prod.Product2__r.SFDA_Expiration_Date__c == null
                    ? ''
                    : bss.Prod.Product2__r.SFDA_Expiration_Date__c.format();
                bss.Sterilization_limitStr = bss.esd.Sterilization_limit__c == null ? '' : bss.esd.Sterilization_limit__c.format();
                //update by rentx 20210622 end CHAN-C3K4ZQ
            }
@@ -65,7 +92,7 @@
            //add by rentx 20210622 CHAN-C3K4ZQ
            // makeRecordsView(consumableorderdetailsRecords);
            //add by rentx 20210622 CHAN-
            for(ConsumableorderdetailsInfo con : consumableorderdetailsRecords){
            for (ConsumableorderdetailsInfo con : consumableorderdetailsRecords) {
                con.prodName = con.esd.Consumable_Product__r.Name__c;
            }
            results.coc = coc;
@@ -84,30 +111,34 @@
    //出库
    @AuraEnabled
    public static Results proSale(String cocStr, Decimal orderallcountParm, Integer consumableorderdetailsCountParm) {
    public static Results proSale(String cocStr, Decimal orderallcountParm, Integer consumableorderdetailsCountParm, String eSetIdStr) {
        Results results = new Results();
        eSetId = eSetIdStr;
        try {
            orderallcount = orderallcountParm;
            consumableorderdetailsCount = consumableorderdetailsCountParm;
            coc = (Consumable_order__c)JSON.deserialize(cocStr, Consumable_order__c.class);
            coc = (Consumable_order__c) JSON.deserialize(cocStr, Consumable_order__c.class);
            List<Consumable_order_details2__c> orderdetails = new List<Consumable_order_details2__c>();
            //发货明细2
            orderdetails = [SELECT Id
                            FROM Consumable_order_details2__c
                            WHERE Consumable_order_minor__c =:coc.Arrive_Order__c
                            AND recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                            AND Dealer_Arrive__c = true ];
            if(orderallcount!= consumableorderdetailsCount){
            orderdetails = [
                SELECT Id
                FROM Consumable_order_details2__c
                WHERE
                    Consumable_order_minor__c = :coc.Arrive_Order__c
                    AND recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                    AND Dealer_Arrive__c = TRUE
            ];
            if (orderallcount != consumableorderdetailsCount) {
                results.result = 'Fail';
                results.errorMsg = '订单不完全到货,无法出库';
                return results;
            }
            if(coc.Arrive_Order__r.IsShipment__c == true){
            if (coc.Arrive_Order__r.IsShipment__c == true) {
                results.result = 'Fail';
                results.errorMsg = '订单已经出库';
                return results;
            }
            results.url = '/lexsummonscreat?arriveorder=' + eSetId +'&KeyWords=Redirect';
            results.url = '/lexsummonscreat?arriveorder=' + eSetId + '&KeyWords=Redirect';
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
@@ -143,7 +174,7 @@
        @AuraEnabled
        public Consumable_order_details2__c esd;
        @AuraEnabled
        public Product2__c Prod;
        public Product2__c Prod;
        @AuraEnabled
        public Decimal packing_list;
        @AuraEnabled
@@ -157,7 +188,6 @@
        @AuraEnabled
        public String prodName;
        // 已存在消耗品明细用
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            esd = e;
@@ -168,4 +198,4 @@
            return null;
        }
    }
}
}
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls
New file
@@ -0,0 +1,210 @@
@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 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;
                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);
            }
        }
    }
}
force-app/main/default/classes/LexArriveGsDetailsControllerTest.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexCancelRemoveBoxController.cls
@@ -1,6 +1,6 @@
public with sharing class LexCancelRemoveBoxController {
    //经销商产品分类
    public static String agencyProType {get;set;}
    public static String agencyProType { get; set; }
    public static String userPro_Typestr = null;
    public static String barcode { get; set; }
    /*****************画面表示Bean******************/
@@ -9,32 +9,32 @@
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror { get; set; }
    //拆盒明细
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy { get; set; }
    public static boolean saveFLGbln {get;set;}
    public static boolean saveFLGbln { get; set; }
    //错误信息
    public static String alertMessage {set;get;}
    public static String alertMessage { get; set; }
    //拆盒明细件数
    public static Integer getinventorysize(){
    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>();
    public static List<String> BarCodeListP = new List<String>();
    //不符合的barcode和型号
    public static list<String> notInlist = new list<String>();
    public static  String baseUrl {get;private set;}
    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(){
    public LexCancelRemoveBoxController() {
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        consumableInventory = new List<ConsumableorderdetailsInfo>();
        saveFLGbln = FALSE;
        saveFLGbln = false;
    }
    @AuraEnabled
@@ -44,39 +44,46 @@
        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];
        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)){
        if (String.isBlank(Useracc[0].UserPro_Type__c)) {
            agencyProType = 'ET';
        }
        userPro_Typestr = '%' + agencyProType + '%';
        List<account> accountInfo = [SELECT Name FROM account WHERE id =:accountid];
        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);
        data.put('accountName', accountName);
        data.put('userWorkLocation', userWorkLocation);
        data.put('agencyProType', agencyProType);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    // 将页面或取得BarCode去掉重复的,转换成List
    public static List<String> ParseBarCode(String Code){
        String[] Cache = new String[]{};
    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){
        Set<String> Buff = new Set<String>();
        for (String A : Cache) {
            Buff.add(A);
        }
        List<String> outPut = new List<String>();
        for(String B :Buff){
        for (String B : Buff) {
            B = B.trim();
            outPut.add(B);
        }
@@ -85,9 +92,14 @@
    //获取明细
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(String barcode,String accountName,String userWorkLocation,String agencyProType) {
    public static ResponseBodyLWC searchConsumableorderdetails(
        String barcode,
        String accountName,
        String userWorkLocation,
        String agencyProType
    ) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        userPro_Typestr = '%' + agencyProType + '%';
        barcode = barcode;
@@ -97,20 +109,18 @@
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        notInlist = new list<String>();
        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> 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='';
        saveFLGbln = false;
        alertMessage = '';
        //判断barcode是否为空
        if(barcode == null || barcode ==''){
            return new ResponseBodyLWC('Error',500, '请输入BarCode号', '');
        if (barcode == null || barcode == '') {
            return new ResponseBodyLWC('Error', 500, '请输入BarCode号', '');
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
            // return;
        }
@@ -122,309 +132,416 @@
        // 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){
        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)){
                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);
                } 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_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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品没有拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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_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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品还未到货';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品存在出货履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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_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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品存在销售履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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_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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品存在返品履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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 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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } else {
                    String str = '该商品存在盘点履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__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, 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){
        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)){
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }else{
                } 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);
                    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){
        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) ){
                if (ErrorIdMap.containsKey(reSet[i].Bar_Code__c)) {
                    // 跳过错误的消耗品明细
                    continue;
                }
                else if(ExistIdMap.containsKey(reSet[i].Bar_Code__c) ){
                } else if (ExistIdMap.containsKey(reSet[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                }
                else{
                } else {
                    ConsumableorderdetailsRecordsdummy.add(new ConsumableorderdetailsInfo(reSet[i]));
                    ExistIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
                    ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                }
            }
        }
@@ -432,89 +549,97 @@
        AllMap.putAll(ExistIdMap);
        //得到不存在的BarCode
        for(Integer i = 0; i < BarCodeListP.size(); i++){
            if(ExistIdMap.containsKey(BarCodeListP[i])){
        for (Integer i = 0; i < BarCodeListP.size(); i++) {
            if (ExistIdMap.containsKey(BarCodeListP[i])) {
                continue;
            }else if(ErrorIdMap.containsKey(BarCodeListP[i])){
            } else if (ErrorIdMap.containsKey(BarCodeListP[i])) {
                continue;
            }else{
            } 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 + '不存在。', '');
        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());
        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) {
    public static ResponseBodyLWC cancelRemoveBoxConfirm(
        String saveConsumableorderdetailsRecordsdummy,
        String accountName,
        String userWorkLocation,
        String agencyProType
    ) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String,object> data = new Map<String,object>();
        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);
        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>();
        List<Consumable_order_details2__c> ins = New List<Consumable_order_details2__c>();
        Savepoint sp = Database.setSavepoint();
        if(ConsumableorderdetailsRecordsdummy.size()<1){
        if (ConsumableorderdetailsRecordsdummy.size() < 1) {
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细'));
            return new ResponseBodyLWC('Error',500, '不存在取消拆盒明细', '');
            return new ResponseBodyLWC('Error', 500, '不存在取消拆盒明细', '');
            // return null;
        }
        List<String> BarCodeList = new List<String>();
        for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy)  {
        for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy) {
            BarCodeList.add(tmp.esd.Bar_Code__c);
        }
        try{
        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
            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_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
                ];
                    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>();
            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;
                delDetails2.Id = detail2tmp.Id;
                //删除通番大于001的明细2
                //delete delDetails2;
@@ -522,46 +647,48 @@
            }
            //取得通番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
            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
                    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_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
                ];
                    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;
                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_text__c;
                } else {
                    updDetails2.ContractNo_text__c = detail2tmp.Consumable_order_minor__r.ContractNo__c;
                }
                // updDetails2.ContractNo_text__c       = detail2tmp.ContractNo__c;
                // tcm end
@@ -571,30 +698,30 @@
                orderlistupd.add(updDetails2);
            }
            if(orderlistdel.size()>0){
            if (orderlistdel.size() > 0) {
                delete orderlistdel;
            }
            if(orderlistupd.size()>0){
            if (orderlistupd.size() > 0) {
                update orderlistupd;
            }
            saveFLGbln = true;
            alertMessage = '取消拆盒完成';
            data.put('saveFLGbln',saveFLGbln);
            data.put('saveFLGbln', saveFLGbln);
            res.status = 'Success';
            res.code = 200;
            res.msg = alertMessage;
            System.debug('res = ' + res);
            return res;
            // return null;
        }catch(Exception e){
        } catch (Exception e) {
            Database.rollback(sp);
            ApexPages.addMessages(e);
            return null;
        }
    }
    @TestVisible
    class ConsumableorderdetailsInfo implements Comparable {
        public Consumable_order_details2__c esd { get; set; }
        public Product2__c Prod { get; set; }
@@ -606,18 +733,18 @@
        //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;
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e, string str) {
            esd = e;
            Prod = e.Consumable_Product__r;
            oldConsumableCount = e.name;
            ErrorReason        = str;
            ErrorReason = str;
        }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            esd                = e;
            Prod               = e.Consumable_Product__r;
            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;
@@ -643,4 +770,4 @@
            return null;
        }
    }
}
}
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls
New file
@@ -0,0 +1,832 @@
@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)'
            ];
            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 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>();
            //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();
        }
    }
}
force-app/main/default/classes/LexCancelRemoveBoxControllerTest.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexConInvoiceListTest.cls
New file
@@ -0,0 +1,184 @@
@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;
        }
        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());
        }
    }
}
force-app/main/default/classes/LexConInvoiceListTest.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LexConInvoiceViewController.cls
@@ -102,7 +102,11 @@
        }
        userId = UserInfo.getUserId();
        List<user> Useracc = new List<user>();
        Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :userId];
        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;
@@ -388,12 +392,38 @@
        //         attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[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]));
        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) {
@@ -415,17 +445,16 @@
        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);
        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(
@@ -453,12 +482,12 @@
        SecondDealer = SecondDealerLwc;
        errorMsg = '';
        deliveryId = deliveryIdLwc;
        invoiceOrderRecoeds = (List<InvoiceOrderInfo>)JSON.deserialize(invoiceOrderRecoedsLwc, List<InvoiceOrderInfo>.class);
        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);
        invoiceOrderRecoedschange = (List<InvoiceOrderInfo>) JSON.deserialize(invoiceOrderRecoedschangeLwc, List<InvoiceOrderInfo>.class);
        List<String> chukudanID = new List<String>();
        if (coc.Name == '' || coc.Name == null) {
@@ -533,7 +562,6 @@
                }
            } 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');
@@ -552,7 +580,9 @@
                        (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');
                        System.debug(
                            'HospitalInfo == null && ass.esd.Order_ForDealerText__c != null ass.esd.ShipmentAccount__c != shipmentAccountString'
                        );
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
@@ -607,9 +637,10 @@
                    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 = [
@@ -693,12 +724,12 @@
                invoiceHead.Order_ProType__c = agencyProType;
                invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                //if (deliveryId != null) {
                    if (String.isNotBlank(deliveryId)) {
                if (String.isNotBlank(deliveryId)) {
                    invoiceHead.Outbound_order__c = deliveryId;
                }
                invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
                //if (SecondDealer == null) {
                    if (String.isBlank(SecondDealer)) {
                if (String.isBlank(SecondDealer)) {
                    if (HospitalInfo != null && HospitalInfo != '') {
                        invoiceHead.Order_ForHospital__c = HospitalInfo;
                    }
@@ -706,6 +737,9 @@
                    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);
@@ -849,6 +883,8 @@
                    delete invoiceLinkdetList;
                }
                //新建发票明细1
                System.debug('===>' + chukudanID);
                System.debug('===>' + chukudanID.size());
                if (chukudanID.size() > 0) {
                    newinvoicedetails1(chukudanID);
                }
@@ -883,7 +919,7 @@
                if (cocinfo.size() > 0) {
                    invoiceHead = cocinfo[0];
                }
                if (String.isNotBlank(deliveryId)) {
                if (String.isNotBlank(deliveryId)) {
                    for (InvoiceOrderInfo ass : invoiceOrderRecoedschange) {
                        insertDetMap.put(ass.esd.Id, invoiceHead.Id);
                    }
@@ -1267,13 +1303,13 @@
    // 保存附件
    @AuraEnabled
    public static ResponseBodyLWC saveAttachment(String attachmentRecoedsLwc,String invoiceId) {
    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);
        attachmentRecoeds = (List<InvoiceOrderInfo>) JSON.deserialize(attachmentRecoedsLwc, List<InvoiceOrderInfo>.class);
        System.debug('attachmentRecoeds = ' + attachmentRecoeds);
        try {
            Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c();
@@ -1299,7 +1335,16 @@
    // 检索(未开发票出库单)
    @AuraEnabled
    public static ResponseBodyLWC InvoiceorderSearch(Consumable_order__c cocLwc,String invoiceIdLwc,String accountidLwc,String userWorkLocationLwc,String agencyProTypeLwc,String HospitalInfoLwc,String SecondDealerLwc,String invoiceOrderRecoedsLwc) {
    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>();
@@ -1309,12 +1354,12 @@
        HospitalInfo = HospitalInfoLwc;
        SecondDealer = SecondDealerLwc;
        errorMsg = '';
        invoiceOrderRecoeds = (List<InvoiceOrderInfo>)JSON.deserialize(invoiceOrderRecoedsLwc, List<InvoiceOrderInfo>.class);
        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>();
@@ -1340,7 +1385,7 @@
                invoiceOrderMap.put(invoiceOrderList[i].Name, invoiceOrderList[i].Name);
            }
        }
        data.put('invoiceOrderRecoeds',invoiceOrderRecoeds);
        data.put('invoiceOrderRecoeds', invoiceOrderRecoeds);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
@@ -1396,7 +1441,7 @@
    // 删除按钮
    @AuraEnabled
    public static ResponseBodyLWC deleteButton(String invoiceIdLwc,Consumable_order__c cocLwc) {
    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>();
@@ -1429,7 +1474,11 @@
    // 提交按钮
    @AuraEnabled
    public static ResponseBodyLWC approval(List<String> outOrderStringListLwc,Map<String, Consumable_Orderdetails__c> outordercountMapLwc,String invoiceIdLwc) {
    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>();
@@ -1437,7 +1486,7 @@
        outOrderStringList = outOrderStringListLwc;
        outordercountMap = outordercountMapLwc;
        invoiceId= invoiceIdLwc;
        invoiceId = invoiceIdLwc;
        //更新发票明细2链接
        Consumable_order__c P = new Consumable_order__c();
        List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
@@ -1501,6 +1550,8 @@
                        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;
@@ -1521,6 +1572,8 @@
                    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(
@@ -1534,7 +1587,16 @@
                    //     )
                    // );
                    // return null;
                    return new ResponseBodyLWC('Error', 500, '出库单' + outOrderdet1List[i].Consumable_order__r.Name + '中,' + outOrderdet1List[i].Asset_Model_No__c + '还没开票数量小于发票数量,请确认是否有返品', '');
                    return new ResponseBodyLWC(
                        'Error',
                        500,
                        '出库单' +
                            outOrderdet1List[i].Consumable_order__r.Name +
                            '中,' +
                            outOrderdet1List[i].Asset_Model_No__c +
                            '还没开票数量小于发票数量,请确认是否有返品',
                        ''
                    );
                }
                outOrderdetUp1List.add(invoiceUpdte1);
@@ -1570,7 +1632,7 @@
        System.debug('res = ' + res);
        return res;
    }
    @TestVisible
    class InvoiceOrderInfo implements Comparable {
        @AuraEnabled
        public Boolean check { get; set; }
@@ -1583,12 +1645,12 @@
        @AuraEnabled
        public Attachment attach { get; set; }
        @AuraEnabled
        public ContentVersion cvInfo{ get; set; }
        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; }
        public Map<String, String> mailSelectOptsMap { get; set; }
        @AuraEnabled
        public String invoiceOrderId { get; set; }
        @AuraEnabled
@@ -1616,7 +1678,7 @@
        //ContentVersion
        public InvoiceOrderInfo(ContentVersion cv) {
            cvInfo = cv;
            mailSelectOptsMap = new Map<String,String>();
            mailSelectOptsMap = new Map<String, String>();
            mailSelectOptsMap.put('发票和明细', '发票和明细');
            mailSelectOptsMap.put('发票', '发票');
            mailSelectOptsMap.put('明细', '明细');
@@ -1626,4 +1688,4 @@
            return null;
        }
    }
}
}
force-app/main/default/classes/LexConInvoiceViewControllerTest.cls
New file
@@ -0,0 +1,3696 @@
@isTest
private class LexConInvoiceViewControllerTest { //新建发票 以及编辑发票 invoiceId<>null
    public static user myUser_test;
    public static Account myAccount1;
    public static Account hosp1;
    public static Account agency1;
    public static List<RecordType> rectHos;
    public static Account agency2;
    @testSetup
    static void setupTestData() {
        User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
        System.runAs(thisUser) {
            // Profile prof = [select Id from Profile where Name ='901_经销商社区普通权限_2重验证'];
            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;
            }
            //二级经销商SecondDealer
            agency1 = new Account(name = 'Testhosp001', Dealer_discount__c = 10, RecordTypeId = rectCo[0].Id);
            agency2 = new Account(name = 'Testhosp002', Dealer_discount__c = 10, RecordTypeId = rectCo[0].Id);
            //经销商
            myAccount1 = new Account(name = 'Testaccount002', Dealer_discount__c = 20, RecordTypeId = rectCo[0].Id);
            insert agency1;
            insert agency2;
            insert myAccount1;
            //客户名HospitalInfo
            hosp1 = new Account(name = 'Testhosp001', Dealer_discount__c = 10, RecordTypeId = rectHos[0].Id);
            Account hosp2 = new Account(name = 'Testhosp002', Dealer_discount__c = 10, RecordTypeId = rectHos[0].Id);
            insert hosp1;
            Dealer_elationship__c dealerelationship = new Dealer_elationship__c(
                Dealer_principal__c = myAccount1.id,
                Dealer_subordinate__c = agency1.id
            );
            insert dealerelationship;
            Dealer_elationship__c dealerelationship1 = new Dealer_elationship__c(
                Dealer_principal__c = myAccount1.id,
                Dealer_subordinate__c = agency2.id
            );
            insert dealerelationship1;
            Agency_Hospital_Link__c agencyHospitalLink1 = new Agency_Hospital_Link__c(Hospital__c = hosp1.id, Agency__c = myAccount1.id);
            insert agencyHospitalLink1;
            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;
        }
    }
    static testMethod void conInvoiceViewTestedit_1() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            // invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            System.Test.startTest();
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = invoiceorder.Id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3 };
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.saveAttachment(JSON.serialize(LexConInvoiceViewController.attachmentRecoeds), invoiceorder.Id);
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            LexConInvoiceViewController.deleteButton(testList1.Id, testList1);
            LexConInvoiceViewController.deleteButton('234567', testList1);
            // LexConInvoiceViewController.saveFile(invoiceorder.Id,'Test','TmFtZSxTdW1tb25zRm9yRGlyY3Rpb25fX2MsSG9zcGl0YWxDb2RlLE9yZGVyX0Zvckhvc3BpdGFsX19jLE9yZGVyX0ZvckN1c3RvbWVyVGV4dF9fYyxPcmRlcl9Gb3JEZWFsZXJfX2MsQmFyX0NvZGVfX2MsU2hpcG1lbnRfQ291bnRfX2MsRGVsaXZlcnlfTGlzdF9STUJfX2MsQm94X1BpZWNlX19jLFVuaXRwcmljZV9Ub19hZ2VuY3lfX2MsT3V0Ym91bmRfRGF0ZV9fYyxMb3NlX3JlYXNvbl9fYw0KREItRlkyMDI0LTA2LVozMTAwMDIs55u05o6l6ZSA5ZSu57uZ5Yy76ZmiLDgxMDU2NDAs5a6955S45Lic5qGl5bq35aSN5Yy76ZmiLOa2iOWMluenkSwsMTY4NjIwMzI1NDQ2ODI1MFZWR0lVLDEsMjAwMCznm5IsMjAsMjAyMy82Lzgs5Lii5aSx5Y6f5ZugDQpEQi1GWTIwMjQtMDYtWjMxMDAwMyznm7TmjqXplIDllK7nu5nljLvpmaIsODEwNTY0MCzlrr3nlLjkuJzmoaXlurflpI3ljLvpmaIs5raI5YyW56eRLCwxNjg2MjAzMjU2MDk4MjUwUkVKT1EsMSwzMDAwLOebkiwyMCwyMDIzLzYvOCzkuKLlpLHljp%2Flm6ANCkRCLUZZMjAyNC0wNi1aMzEwMDA0LOebtOaOpemUgOWUrue7meWMu%2BmZoiw4MTA1NjQwLOWuveeUuOS4nOahpeW6t%2BWkjeWMu%2BmZoizmtojljJbnp5EsLDE2ODYyMDMyNTc2NTcyNTBHU0ZTQiwxLDQwMDAs55uSLDIwLDIwMjMvNi84LOS4ouWkseWOn%2BWboA0K');
            try {
                LexConInvoiceViewController.saveFile(invoiceorder.Id, 'Test', '');
            } catch (Exception e) {
                system.debug('Test');
            }
            LexConInvoiceViewController.outbound = testList2;
            LexConInvoiceViewController.getInvoiceName();
            // LexConInvoiceViewController.shipmentAccount = '222';
            Map<String, Decimal> ordermx1defaultMap = new Map<String, Decimal>();
            LexConInvoiceViewController.ordermx1defaultMap = ordermx1defaultMap;
            Map<String, String> deleteMap = new Map<String, String>();
            LexConInvoiceViewController.deleteOutboundorder(deleteMap, '');
            // LexConInvoiceViewController.invoiceOrderRecoedsCount
            LexConInvoiceViewController.orderby = new List<String>{ 'Outbound_Date__c', 'Name', 'ShipmentAccount__c' };
            LexConInvoiceViewController.sortKey = 'test';
            LexConInvoiceViewController.preSortKey = 'test';
            LexConInvoiceViewController.sortOrderAsc = false;
            LexConInvoiceViewController.sortOrder = new List<String>{ 'Outbound_Date__c', 'Name', 'ShipmentAccount__c' };
            List<LexConInvoiceViewController.InvoiceOrderInfo> test1 = new List<LexConInvoiceViewController.InvoiceOrderInfo>();
            List<String> chukudanID = new List<String>();
            chukudanID.add(testList2.Id);
            chukudanID.add(testList1.Id);
            LexConInvoiceViewController.newinvoicedetails1(chukudanID);
            Map<String, String> insertDetMap = new Map<String, String>();
            insertDetMap.put('Outboundorder_Code_link__c', testList1.Id);
            // LexConInvoiceViewController.outOrderchange(insertDetMap);
            LexConInvoiceViewController.getdefaultMapinfo(chukudanID);
            System.Test.stopTest();
        }
    }
    //新建发票 invoiceId=null
    static testMethod void conInvoiceViewTestedit_2() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            // invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            // LexConInvoiceViewController.HospitalInfo = hosp1.id;
            System.Test.stopTest();
        }
    }
    //新建发票 invoiceId=null error check
    static testMethod void conInvoiceViewTestedit_3() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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
            );
            insert new List<Product2>{ prod01 };
            Product2__c pro1 = new Product2__c(Name = 'Pro001', OT_CODE_Text__c = 'Test001', Product2__c = prod01.Id);
            insert new List<Product2__c>{ pro1 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            PageReference page = new PageReference('/apex/ConInvoiceView?invoiceId=' + invoiceorder.Id + '&KeyWords=Redirect');
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            System.Test.startTest();
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            // LexConInvoiceViewController.init();
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            // LexConInvoiceViewController.coc.SummonsForDirction__c = '直接销售给医院';
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            System.debug('===>hosp1.id' + hosp1.id);
            LexConInvoiceViewController.invoiceId = null;
            System.Test.stopTest();
        }
    }
    //新建发票 以及编辑发票invoiceId== NULL and deliveryId== NULL
    static testMethod void conInvoiceViewTestinit() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            //Consumable_order__c testList1 = new Consumable_order__c(Name='Test1',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            //Consumable_order__c testList2 = new Consumable_order__c(Name='Test2',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='已提交',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            //insert new Consumable_order__c[]{testList1,testList2};
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable2',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable2;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_002001';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Shipment_Count__c = 1;
            orderdet3.Consumable_product__c = pro2.Id;
            //出库单2明细2
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test1_002002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList2.id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Shipment_Count__c = 1;
            orderdet4.Consumable_product__c = pro2.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3, orderdet4 };
            //附件
            Consumable_accessories_invoice__c caic = new Consumable_accessories_invoice__c();
            caic.Attachment_ID__c = acc.Id;
            caic.Accessories_type__c = '发票和明细';
            caic.Invoice_code__c = invoiceorder.id;
            insert caic;
            PageReference page = new PageReference('/apex/ConInvoiceView?KeyWords=Redirect');
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            //contest.deliveryId=testList1.id;
            System.Test.startTest();
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            System.Test.stopTest();
        }
    }
    //新建发票 以及编辑发票invoiceId== NULL and deliveryId<> NULL
    static testMethod void conInvoiceViewTestinit_1() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            //Consumable_order__c testList1 = new Consumable_order__c(Name='Test1',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            //Consumable_order__c testList2 = new Consumable_order__c(Name='Test2',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='已提交',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            //insert new Consumable_order__c[]{testList1,testList2};
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable2',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable2;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_002001';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Shipment_Count__c = 1;
            orderdet3.Consumable_product__c = pro2.Id;
            //出库单2明细2
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test1_002002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList2.id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Shipment_Count__c = 1;
            orderdet4.Consumable_product__c = pro2.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3, orderdet4 };
            //附件
            Consumable_accessories_invoice__c caic = new Consumable_accessories_invoice__c();
            caic.Attachment_ID__c = acc.Id;
            caic.Accessories_type__c = '发票和明细';
            caic.Invoice_code__c = invoiceorder.id;
            insert caic;
            PageReference page = new PageReference('/apex/ConInvoiceView?invoiceId=' + invoiceorder.id);
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            // contest.deliveryId=testList1.id;
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            System.Test.stopTest();
        }
    }
    //新建发票 以及编辑发票invoiceId<> NULL
    static testMethod void conInvoiceViewTestinit_2() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            //Consumable_order__c testList1 = new Consumable_order__c(Name='Test1',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            //Consumable_order__c testList2 = new Consumable_order__c(Name='Test2',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='已提交',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            //insert new Consumable_order__c[]{testList1,testList2};
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable2',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable2;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_002001';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Shipment_Count__c = 1;
            orderdet3.Consumable_product__c = pro2.Id;
            //出库单2明细2
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test1_002002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList2.id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Shipment_Count__c = 1;
            orderdet4.Consumable_product__c = pro2.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3, orderdet4 };
            //附件
            Consumable_accessories_invoice__c caic = new Consumable_accessories_invoice__c();
            caic.Attachment_ID__c = acc.Id;
            caic.Accessories_type__c = '发票和明细';
            caic.Invoice_code__c = invoiceorder.id;
            insert caic;
            // PageReference page = new PageReference('/apex/ConInvoiceView?KeyWords=Redirect');
            // page.setRedirect(true);
            // System.Test.setCurrentPage(page);
            // ConInvoiceViewController conTest = new ConInvoiceViewController();
            // contest.deliveryId=testList1.id;
            // conTest.invoiceId =invoiceorder.Id;
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            // conTest.init();
            //System.assertEquals(false, conTest.getdone());
            //System.assertEquals(false, conTest.getExistOutbound());
            //System.assertEquals('invoice01', conTest.getInvoiceName());
            //System.assertEquals(2, conTest.invoiceOrderRecoedsCount);
            // conTest.InvoiceorderSearch();
            // conTest.SortLimited();
            System.Test.stopTest();
        }
    }
    static testMethod void conInvoiceViewTestoutOrderchange() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            System.Test.startTest();
            insert testList1;
            insert testList2;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2 };
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            System.Test.stopTest();
        }
    }
    static testMethod void conInvoiceViewTestgetdefaultMapinfo() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            // invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            System.Test.startTest();
            insert testList1;
            insert testList2;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2 };
            PageReference page = new PageReference('/apex/ConInvoiceView?invoiceId=' + invoiceorder.Id + '&KeyWords=Redirect');
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            System.Test.stopTest();
        }
    }
    //从出库单直接开票
    static testMethod void conInvoiceViewRedirectTest() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            //Consumable_order__c testList1 = new Consumable_order__c(Name='Test1',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            //Consumable_order__c testList2 = new Consumable_order__c(Name='Test2',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='已提交',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            testList1.Order_date__c = Date.today().addDays(2);
            testList2.Order_date__c = Date.today().addDays(2);
            testList1.Deliver_date__c = Date.today();
            testList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            //insert new Consumable_order__c[]{testList1,testList2};
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable2',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable2;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_002001';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Shipment_Count__c = 1;
            orderdet3.Consumable_product__c = pro2.Id;
            //出库单2明细2
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test1_002002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList2.id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Shipment_Count__c = 1;
            orderdet4.Consumable_product__c = pro2.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3, orderdet4 };
            //附件
            Consumable_accessories_invoice__c caic = new Consumable_accessories_invoice__c();
            caic.Attachment_ID__c = acc.Id;
            caic.Accessories_type__c = '发票和明细';
            caic.Invoice_code__c = invoiceorder.id;
            insert caic;
            PageReference page = new PageReference('/apex/ConInvoiceView?deliveryId=' + testList1.Id + '&KeyWords=Redirect');
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            LexConInvoiceViewController.saveAttachment(JSON.serialize(LexConInvoiceViewController.attachmentRecoeds), invoiceorder.Id);
            // LexConInvoiceViewController.saveAttachment(JSON.serialize(caic),invoiceorder.Id);
            System.Test.stopTest();
        }
    }
    //提交
    static testMethod void conInvoiceViewTestapproval() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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,
                Packing_list_manual__c = 5
            );
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            //Consumable_order__c testList1 = new Consumable_order__c(Name='Test1',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='草案中',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            //Consumable_order__c testList2 = new Consumable_order__c(Name='Test2',Summons_Sale_Status__c='出货',SummonsStatus_c__c='已完成',Order_ForHospital__c =hosp1.Id,SummonsForDirction__c='直接销售给医院',Order_status__c='已提交',Order_type__c='传票',Order_ForDealer__c = agency1.Id, Dealer_info__c=myAccount1.Id,ConInvoice_Code__c = invoiceorder.id);
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                RecordTypeId = System.Label.RT_ConOrder_Sale,
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                RecordTypeId = System.Label.RT_ConOrder_Sale,
                Dealer_info__c = acc.Id
            );
            testList1.Order_date__c = Date.today().addDays(2);
            testList2.Order_date__c = Date.today().addDays(2);
            testList1.Deliver_date__c = Date.today();
            testList2.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            //insert new Consumable_order__c[]{testList1,testList2};
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable2',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable2;
            //出库单1明细1
            Consumable_Orderdetails__c orderdet1 = new Consumable_Orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            orderdet1.Invoiced_Count__c = 10;
            orderdet1.Delivery_List_RMB__c = 200;
            orderdet1.Box_Piece__c = '盒';
            orderdet1.Invoice_Unit__c = '个';
            // orderdet1.Shipment_Count__c = 50;
            // orderdet1.Invoiced_Procount__c = 5;
            // orderdet1.RrturnPro_count__c = 5;
            Consumable_Orderdetails__c orderdet12 = new Consumable_Orderdetails__c();
            orderdet12.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet12.Consumable_order__c = testList1.Id;
            orderdet12.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet12.Consumable_count__c = 1;
            orderdet12.Consumable_product__c = pro1.Id;
            orderdet12.Invoiced_Count__c = 30;
            orderdet12.Delivery_List_RMB__c = 200;
            //出库单1明细2
            Consumable_Orderdetails__c orderdet2 = new Consumable_Orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = invoiceorder.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            //出库单2明细1
            Consumable_Orderdetails__c orderdet3 = new Consumable_Orderdetails__c();
            orderdet3.Name = 'Test1_002001';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = invoiceorder.Id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Shipment_Count__c = 1;
            orderdet3.Consumable_product__c = pro2.Id;
            //出库单2明细2
            Consumable_Orderdetails__c orderdet4 = new Consumable_Orderdetails__c();
            orderdet4.Name = 'Test1_002002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList2.id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Shipment_Count__c = 1;
            orderdet4.Consumable_product__c = pro2.Id;
            insert new List<Consumable_Orderdetails__c>{ orderdet1, orderdet2, orderdet3, orderdet4, orderdet12 };
            List<String> conorList = new List<String>();
            conorList.add(testList1.Id);
            // List<Consumable_Orderdetails__c> outOrderdet1List1 = new List<Consumable_Orderdetails__c>();
            // outOrderdet1List1.add(orderdet1);
            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,
                    ProductPacking_list_manual__c
                FROM Consumable_Orderdetails__c
                WHERE Id = :orderdet1.Id
            ];
            System.debug('outOrderdet1List' + outOrderdet1List);
            List<Consumable_Orderdetails__c> outOrderdet1List1 = [
                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,
                    ProductPacking_list_manual__c
                FROM Consumable_Orderdetails__c
                WHERE Id = :orderdet12.Id
            ];
            Map<String, Consumable_Orderdetails__c> tempCocMap = new Map<String, Consumable_Orderdetails__c>();
            Map<String, Consumable_Orderdetails__c> tempCocMap1 = new Map<String, Consumable_Orderdetails__c>();
            for (Consumable_Orderdetails__c cocTemp : outOrderdet1List) {
                if (cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c != null) {
                    tempCocMap.put(cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c, cocTemp);
                }
            }
            for (Consumable_Orderdetails__c cocTemp : outOrderdet1List1) {
                if (cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c != null) {
                    tempCocMap1.put(cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c, cocTemp);
                }
            }
            System.debug('tempCocMap===>' + tempCocMap);
            //附件
            Consumable_accessories_invoice__c caic = new Consumable_accessories_invoice__c();
            caic.Attachment_ID__c = acc.Id;
            caic.Accessories_type__c = '发票和明细';
            caic.Invoice_code__c = invoiceorder.id;
            insert caic;
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            LexConInvoiceViewController.approval(conorList, tempCocMap, invoiceorder.id);
            LexConInvoiceViewController.approval(conorList, tempCocMap1, invoiceorder.id);
            System.Test.stopTest();
        }
    }
    //提交发票
    static testMethod void conInvoice_approval() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Oly_TriggerHandler.bypass('ConsumableAssetHander');
        Oly_TriggerHandler.bypass('Oly_TriggerHandler');
        System.runAs(curUser) {
            //产品信息
            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 };
            //出库单1
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                recordtypeid = System.Label.RT_ConOrder_Sale,
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                // Order_ForHospital__c=hosp1.Id,
                Dealer_Info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            insert testList1;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001';
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Sale;
            orderdet1.Shipment_Count__c = 1;
            orderdet1.Delivery_List_RMB__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            orderdet1.Shipment_Count__c = 50;
            orderdet1.Invoiced_Procount__c = 5;
            orderdet1.RrturnPro_count__c = 5;
            insert orderdet1;
            List<String> conorList = new List<String>();
            conorList.add(testList1.Id);
            //出库单1明细2
            Consumable_order_details2__c orderdet2 = new Consumable_order_details2__c();
            orderdet2.Name = 'Test1_001001';
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
            orderdet2.Consumable_Sale_order__c = testList1.Id;
            orderdet2.Deliver_date__c = Date.today();
            orderdet2.Arrive_date__c = Date.today();
            orderdet2.Used_date__c = Date.today();
            orderdet2.Consumable_product__c = pro1.Id;
            insert orderdet2;
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            // invoiceorder.Order_ForHospital__c =hosp1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            insert invoiceorder;
            //发票明细1
            Consumable_orderdetails__c invoicedet1 = new Consumable_orderdetails__c();
            invoicedet1.Name = 'invoice01_01';
            invoicedet1.Consumable_order__c = invoiceorder.Id;
            invoicedet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            invoicedet1.Invoiced_Count__c = 1;
            invoicedet1.Invoice_Unitprice__c = 1;
            invoicedet1.Consumable_product__c = pro1.Id;
            invoicedet1.Invoicedet1_OD_link__c = testList1.Id;
            insert invoicedet1;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            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,
                    ProductPacking_list_manual__c
                FROM Consumable_Orderdetails__c
                WHERE Id = :orderdet1.Id
            ];
            Map<String, Consumable_Orderdetails__c> tempCocMap1 = new Map<String, Consumable_Orderdetails__c>();
            for (Consumable_Orderdetails__c cocTemp : outOrderdet1List) {
                if (cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c != null) {
                    tempCocMap1.put(cocTemp.Consumable_order__c + cocTemp.Asset_Model_No__c, cocTemp);
                }
            }
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', orderdet1.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = acc.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                acc.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                acc.id,
                invoiceOrderRecoeds
            );
            LexConInvoiceViewController.approval(conorList, tempCocMap1, invoiceorder.id);
            LexConInvoiceViewController.approval(conorList, tempCocMap1, '2345678');
            // conTest.init();
            // System.assertEquals(1, conTest.invoiceOrderRecoeds.size());
            // conTest.approval();
            System.Test.stopTest();
        }
    }
    //CHAN-BSS5SQ    update by rentongxiao 2020-08-26  start
    //新建发票 以及编辑发票 invoiceId<>null
    static testMethod void rentestreopen() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '提交';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList3 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList3.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            TestList3.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            insert testList3;
            System.Test.startTest();
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            Consumable_order_LinkTable__c order_LinkTable3 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList3.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            insert order_LinkTable2;
            insert order_LinkTable3;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2 };
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test3_001002';
            //orderdet3.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.Id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Consumable_product__c = pro1.Id;
            insert orderdet3;
            //出库单3明细1
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test3_001002';
            //orderdet4.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList3.Id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Consumable_product__c = pro1.Id;
            insert orderdet4;
            PageReference page = new PageReference(
                '/apex/ConInvoiceView?invoiceId=' + invoiceorder.Id + '&reopen=isreopen&KeyWords=Redirect'
            );
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            // ConInvoiceViewController conTest = new ConInvoiceViewController();
            // conTest.init();
            // conTest.invoiceId =invoiceorder.Id;
            // conTest.coc.SummonsForDirction__c = '直接销售给医院';
            // conTest.HospitalInfo = hosp1.id;
            // //conTest.SecondDealer = agency1.id;
            // //conTest.coc.Order_ForDealer__c = agency1.id;
            // conTest.coc.Name = 'invoice002';
            // conTest.coc.Order_ForCustomerText__c = 'AA';
            // conTest.coc.Order_ForHospital__c = hosp1.id;
            // conTest.coc.Invoice_Date__c = Date.today();
            // //conTest.SortLimited();
            // //conTest.InvoiceorderSearch();
            // System.assertEquals(3, conTest.invoiceOrderRecoeds.size());
            // conTest.invoiceOrderRecoeds[0].esd.Order_ForCustomerText__c = 'AA';
            // conTest.invoiceOrderRecoeds[0].esd.Order_ForHospital__c =hosp1.Id;
            // conTest.invoiceOrderRecoeds[0].esd.Order_ForDealer__c = agency1.id;
            // conTest.invoiceOrderRecoeds[1].esd.Order_ForCustomerText__c = 'AA';
            // conTest.invoiceOrderRecoeds[1].esd.Order_ForHospital__c =hosp1.Id;
            // conTest.invoiceOrderRecoeds[1].esd.Order_ForDealer__c = agency1.id;
            // conTest.invoiceOrderRecoeds[2].esd.Order_ForCustomerText__c = 'AA';
            // conTest.invoiceOrderRecoeds[2].esd.Order_ForHospital__c =hosp1.Id;
            // conTest.invoiceOrderRecoeds[2].esd.Order_ForDealer__c = agency1.id;
            // conTest.invoiceOrderRecoeds[0].check= true;
            // conTest.invoiceOrderRecoeds[1].check= false;
            // conTest.invoiceOrderRecoeds[2].check= true;
            // conTest.save();
            // //System.assertEquals('123',conTest.testTmp);
            // conTest.nvoiceorderremind();
            // conTest.saveAttachment();
            // conTest.getdone();
            // conTest.getExistOutbound();
            // conTest.getInvoiceName();
            System.Test.stopTest();
        }
    }
    //CHAN-BSS5SQ    update by rentongxiao 2020-08-26  end
    //CHAN-BSS5SQ    update by rentongxiao 2020-08-26  start
    //新建发票 以及编辑发票 invoiceId<>null
    static testMethod void rentestreopen001() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '提交';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            //invoiceorder.Order_ForHospital__c =hosp1.Id;
            //invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList3 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList3.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            TestList3.Deliver_date__c = Date.today();
            insert testList1;
            insert testList2;
            insert testList3;
            System.Test.startTest();
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            Consumable_order_LinkTable__c order_LinkTable2 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList2.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            Consumable_order_LinkTable__c order_LinkTable3 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList3.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            insert order_LinkTable2;
            insert order_LinkTable3;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2 };
            //出库单2明细1
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test3_001002';
            //orderdet3.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = testList2.Id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Consumable_product__c = pro1.Id;
            insert orderdet3;
            //出库单3明细1
            Consumable_orderdetails__c orderdet4 = new Consumable_orderdetails__c();
            orderdet4.Name = 'Test3_001002';
            //orderdet4.Consumable_principal__c = testList2.Id;
            orderdet4.Consumable_order__c = testList3.Id;
            orderdet4.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet4.Consumable_count__c = 1;
            orderdet4.Consumable_product__c = pro1.Id;
            insert orderdet4;
            PageReference page = new PageReference(
                '/apex/ConInvoiceView?invoiceId=' + invoiceorder.Id + '&reopen=isreopen&KeyWords=Redirect'
            );
            page.setRedirect(true);
            System.Test.setCurrentPage(page);
            LexConInvoiceViewController.init(invoiceorder.id, 'Redirect', testList2.Id);
            LexConInvoiceViewController conTest = new LexConInvoiceViewController();
            LexConInvoiceViewController.HospitalInfo = hosp1.id;
            LexConInvoiceViewController.SecondDealer = agency1.id;
            LexConInvoiceViewController.invoiceId = invoiceorder.Id;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                '济宁任城儒济医院',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.InvoiceorderSearch(
                testList1,
                invoiceorder.Id,
                acc.Id,
                '重庆',
                'ET',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds
            );
            System.Test.stopTest();
        }
    }
    //新建发票 以及编辑发票 invoiceId<>null
    static testMethod void allinit() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //准备数据
            // Consumable_order__c  Id = deliveryId  //出库单
            // Consumable_order__c
            // WHERE Id = :invoiceId AND Order_type__c = '发票'
            //产品信息
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            // invoiceorder.Order_ForHospital__c =hosp1.Id;
            // invoiceorder.Order_ForDealer__c = agency1.Id;
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            invoiceorder = [
                SELECT id, Name
                FROM Consumable_order__c
                WHERE id = :invoiceorder.id
            ];
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test2',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '已提交',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Order_ForCustomerText__c = ''
            );
            TestList1.Order_date__c = Date.today().addDays(2);
            TestList2.Order_date__c = Date.today().addDays(2);
            TestList1.Deliver_date__c = Date.today();
            TestList2.Deliver_date__c = Date.today();
            Consumable_order__c testList3 = new Consumable_order__c();
            testList3.Summons_Sale_Status__c = '出货';
            testList3.SummonsStatus_c__c = '已完成';
            testList3.SummonsForDirction__c = '直接销售给医院';
            testList3.Order_status__c = '草案中';
            testList3.Order_type__c = '传票';
            testList3.Dealer_info__c = acc.Id;
            testList3.Order_ForCustomerText__c = '消化科';
            insert testList1;
            insert testList2;
            insert testList3;
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder.Id
            );
            insert order_LinkTable1;
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            //出库单1明细2
            Consumable_orderdetails__c orderdet2 = new Consumable_orderdetails__c();
            orderdet2.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet2.Consumable_order__c = testList1.Id;
            orderdet2.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet2.Consumable_count__c = 1;
            orderdet2.Consumable_product__c = pro1.Id;
            Consumable_orderdetails__c orderdet3 = new Consumable_orderdetails__c();
            orderdet3.Name = 'Test1_001002';
            //orderdet2.Consumable_principal__c = testList2.Id;
            orderdet3.Consumable_order__c = invoiceorder.Id;
            orderdet3.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet3.Consumable_count__c = 1;
            orderdet3.Consumable_product__c = pro1.Id;
            insert new List<Consumable_orderdetails__c>{ orderdet1, orderdet2, orderdet3 };
            //发票附件
            Consumable_accessories_invoice__c cai = new Consumable_accessories_invoice__c();
            cai.Invoice_code__c = invoiceorder.Id;
            insert cai;
            System.Test.startTest();
            LexConInvoiceViewController.init(invoiceorder.Id, '', testList1.Id);
            LexConInvoiceViewController.init('', '', testList1.Id);
            LexConInvoiceViewController.init(invoiceorder.Id, '', '');
            LexConInvoiceViewController.init('', '', '');
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList1.Id);
            LexConInvoiceViewController.init('', 'Redirect', '');
            LexConInvoiceViewController.init('', 'Redirect', testList1.Id);
            System.debug('order==>' + LexConInvoiceViewController.invoiceOrderRecoeds);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList2,
                'Testhosp001',
                '',
                '',
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList3,
                'Testhosp001',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList2,
                'Testhosp001',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            //保存
            // LexConInvoiceViewController.save(testList1,'测试医院',hosp1.Id,agency1.Id,'',testList1.Id,invoiceorder.Id,myAccount1.Id,'ET');
            System.Test.stopTest();
        }
    }
    static testMethod void allsave() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            // invoiceorder.Order_ForHospital__c = '';
            // invoiceorder.Order_ForDealer__c = '';
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            // LexConInvoiceViewController.init(invoiceorder.Id,'Redirect',testList1.Id);
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                null,
                null,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.saveAttachment(JSON.serialize(LexConInvoiceViewController.attachmentRecoeds), invoiceorder.Id);
        }
    }
    static testMethod void allsave1() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            // invoiceorder.Order_ForHospital__c = '';
            // invoiceorder.Order_ForDealer__c = '';
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today(),
                Order_ForCustomerText__c = '消化科'
            );
            insert testList1;
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today(),
                Order_ForDealerText__c = 'Test'
            );
            insert testList2;
            LexConInvoiceViewController.init(invoiceorder.Id, 'Redirect', testList2.Id);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            String invoiceOrderRecoeds = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoeds);
            List<LexConInvoiceViewController.InvoiceOrderInfo> test1 = new List<LexConInvoiceViewController.InvoiceOrderInfo>();
            for (LexConInvoiceViewController.InvoiceOrderInfo ass : LexConInvoiceViewController.invoiceOrderRecoeds) {
                ass.check = true;
                test1.add(ass);
            }
            System.debug('test1==>' + test1);
            System.debug('invoiceOrderRecoedschangeLwc==>' + invoiceOrderRecoedschangeLwc);
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                hosp1.id,
                agency1.id,
                invoiceOrderRecoeds,
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                '',
                '',
                JSON.serialize(test1),
                testList1.Id,
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList1,
                'Testhosp001',
                '',
                '',
                JSON.serialize(test1),
                '',
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList1,
                '青岛盈海医院',
                hosp1.id,
                agency1.id,
                '[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false}]',
                '',
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                testList1,
                '青岛盈海医院',
                hosp1.id,
                agency1.id,
                '[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false}]',
                '',
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
        }
    }
    static testMethod void allsave2() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = 'invoice01';
            invoiceorder.Order_type__c = '发票';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.RecordTypeid = System.Label.RT_ConOrder_Invoice;
            // invoiceorder.Order_ForHospital__c = '';
            // invoiceorder.Order_ForDealer__c = '';
            invoiceorder.Dealer_Info__c = acc.Id;
            //invoiceorder.Order_ProType__c = 'ET';
            insert invoiceorder;
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today(),
                Order_ForDealerText__c = 'Test'
            );
            insert testList2;
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            insert testList1;
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            //选择开票单
            LexConInvoiceViewController.save(
                testList2,
                '青岛盈海医院',
                '',
                agency2.id,
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false}]',
                '',
                invoiceorder.Id,
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
        }
    }
    static testMethod void allsave3() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            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 };
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = '202306164590';
            invoiceorder.Invoice_Date__c = Date.today();
            invoiceorder.Order_ForCustomerText__c = '消化科';
            invoiceorder.Invoice_Note__c = '4444';
            invoiceorder.RecordTypeid = '012100000006JxEAAU';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            insert invoiceorder;
            // invoiceorder = [select id,Name from Consumable_order__c where id =:invoiceorder.id];
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            insert testList2;
            List<Consumable_orderdetails__c> conList = new List<Consumable_orderdetails__c>();
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = invoiceorder.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            orderdet1.Shipment_Count__c = 10;
            orderdet1.Invoiced_Procount__c = 4;
            orderdet1.RrturnPro_count__c = 2;
            conList.add(orderdet1);
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            LexConInvoiceViewController.save(
                invoiceorder,
                '潍城现代门诊部',
                '0011000001g0uyhAAA',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}, {"check": true,"esd": {"Id": "a2K0l000000xAnwEAE","Order_ForHospital__c": "0011000001g0uyhAAA","Name": "a2K0l000000xAnw","Outbound_Date__c": "2023-05-12","ShipmentAccount__c": "潍城现代门诊部", "Shipment_total_amount__c": 2300,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 2300,"InvoiceNotPro_money__c": 2300,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "潍城现代门诊部","Id": "0011000001g0uyhAAA"} }, "needInvoiceCount": 0,"oldCheck": false, "Id": "a2K0l000000xAnwEAE"}]',
                '',
                '',
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            LexConInvoiceViewController.save(
                invoiceorder,
                '潍城现代门诊部',
                '0011000001g0uyhAAA',
                agency1.Id,
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}, {"check": true,"esd": {"Id": "a2K0l000000xAnwEAE","Order_ForHospital__c": "0011000001g0uyhAAA","Name": "a2K0l000000xAnw","Outbound_Date__c": "2023-05-12","ShipmentAccount__c": "潍城现代门诊部", "Shipment_total_amount__c": 2300,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 2300,"InvoiceNotPro_money__c": 2300,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "潍城现代门诊部","Id": "0011000001g0uyhAAA"} }, "needInvoiceCount": 0,"oldCheck": false, "Id": "a2K0l000000xAnwEAE"}]',
                testList2.Id,
                '',
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            List<LexConInvoiceViewController.InvoiceOrderInfo> test1 = new List<LexConInvoiceViewController.InvoiceOrderInfo>();
            for (LexConInvoiceViewController.InvoiceOrderInfo ass : LexConInvoiceViewController.invoiceOrderRecoeds) {
                ass.check = true;
                test1.add(ass);
            }
            System.debug('test1==>' + test1);
            LexConInvoiceViewController.save(
                invoiceorder,
                '潍城现代门诊部',
                '0011000001g0uyhAAA',
                '',
                JSON.serialize(test1),
                '',
                '',
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
        }
    }
    static testMethod void allsave4() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        Account hosp1 = [SELECT Id FROM Account WHERE name = 'Testhosp001' LIMIT 1];
        Account agency1 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp001'
            LIMIT 1
        ];
        Account agency2 = [
            SELECT Id
            FROM Account
            WHERE name = 'Testhosp002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = '202306164590';
            invoiceorder.Invoice_Date__c = Date.today();
            // invoiceorder.Order_ForCustomerText__c = '消化科';
            invoiceorder.Invoice_Note__c = '4444';
            invoiceorder.RecordTypeid = '012100000006JxEAAU';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            insert invoiceorder;
            //发票信息
            Consumable_order__c invoiceorder1 = new Consumable_order__c();
            invoiceorder1.Name = '202306164590';
            invoiceorder1.Invoice_Date__c = Date.today();
            invoiceorder1.Order_ForCustomerText__c = '消化科';
            invoiceorder1.Invoice_Note__c = '4444';
            invoiceorder1.RecordTypeid = '012100000006JxEAAU';
            invoiceorder1.Invoice_status__c = '草案中';
            invoiceorder1.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            insert invoiceorder1;
            // invoiceorder = [select id,Name from Consumable_order__c where id =:invoiceorder.id];
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            insert testList2;
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            //不需要输入科室
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '',
                agency1.Id,
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}, {"check": true,"esd": {"Id": "a2K0l000000xAnwEAE","Order_ForHospital__c": "0011000001g0uyhAAA","Name": "a2K0l000000xAnw","Outbound_Date__c": "2023-05-12","ShipmentAccount__c": "潍城现代门诊部", "Shipment_total_amount__c": 2300,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 2300,"InvoiceNotPro_money__c": 2300,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "潍城现代门诊部","Id": "0011000001g0uyhAAA"} }, "needInvoiceCount": 0,"oldCheck": false, "Id": "a2K0l000000xAnwEAE"}]',
                testList2.Id,
                '',
                acc.Id,
                'ET',
                '',
                invoiceOrderRecoedschangeLwc
            );
            //LexConInvoiceViewController.save(invoiceorder,'潍城现代门诊部','',agency2.Id,'[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}, {"check": false,"esd": {"Id": "a2K0l000000xAnwEAE","Order_ForHospital__c": "0011000001g0uyhAAA","Name": "a2K0l000000xAnw","Outbound_Date__c": "2023-05-12","ShipmentAccount__c": "潍城现代门诊部", "Shipment_total_amount__c": 2300,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 2300,"InvoiceNotPro_money__c": 2300,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "潍城现代门诊部","Id": "0011000001g0uyhAAA"} }, "needInvoiceCount": 0,"oldCheck": false, "Id": "a2K0l000000xAnwEAE"}]',testList2.Id,invoiceorder.Id,myAccount1.Id,'ET','isreopen',invoiceOrderRecoedschangeLwc);
            //  LexConInvoiceViewController.save(invoiceorder1,'潍城现代门诊部','',agency2.Id,'[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}, {"check": false,"esd": {"Id": "a2K0l000000xAnwEAE","Order_ForHospital__c": "0011000001g0uyhAAA","Name": "a2K0l000000xAnw","Outbound_Date__c": "2023-05-12","ShipmentAccount__c": "潍城现代门诊部", "Shipment_total_amount__c": 2300,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 2300,"InvoiceNotPro_money__c": 2300,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "潍城现代门诊部","Id": "0011000001g0uyhAAA"} }, "needInvoiceCount": 0,"oldCheck": false, "Id": "a2K0l000000xAnwEAE"}]',testList2.Id,invoiceorder1.Id,myAccount1.Id,'ET','isreopen',invoiceOrderRecoedschangeLwc);
        }
    }
    static testMethod void allsave5() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            List<Consumable_order__c> orderList = new List<Consumable_order__c>();
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = '202306164590';
            invoiceorder.Invoice_Date__c = Date.today();
            // invoiceorder.Order_ForCustomerText__c = '消化科';
            invoiceorder.Invoice_Note__c = '4444';
            invoiceorder.RecordTypeid = '012100000006JxEAAU';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder);
            //发票信息
            Consumable_order__c invoiceorder1 = new Consumable_order__c();
            invoiceorder1.Name = '202306164590';
            invoiceorder1.Invoice_Date__c = Date.today();
            invoiceorder1.Order_ForCustomerText__c = '消化科';
            invoiceorder1.Invoice_Note__c = '4444';
            invoiceorder1.RecordTypeid = '012100000006JxEAAU';
            invoiceorder1.Invoice_status__c = '草案中';
            invoiceorder1.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder1);
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            orderList.add(testList2);
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            orderList.add(testList1);
            insert orderList;
            List<Consumable_orderdetails__c> conList = new List<Consumable_orderdetails__c>();
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = invoiceorder1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            orderdet1.Shipment_Count__c = 10;
            orderdet1.Invoiced_Procount__c = 4;
            orderdet1.RrturnPro_count__c = 2;
            conList.add(orderdet1);
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = testList1.Id,
                Invoice_Code_link__c = invoiceorder1.Id
            );
            insert order_LinkTable1;
            Consumable_Orderdetails__c upDateform = new Consumable_Orderdetails__c();
            upDateform.Name = 'Test1_001001';
            upDateform.Consumable_order__c = invoiceorder1.Id;
            upDateform.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            upDateform.Consumable_count__c = 1;
            upDateform.Consumable_product__c = pro1.Id;
            upDateform.Consumable_order__c = order_LinkTable1.Outboundorder_Code_link__c;
            conList.add(upDateform);
            insert conList;
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '0011000001k1K9ZAAU',
                '',
                '[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]',
                testList1.Id,
                invoiceorder1.Id,
                acc.Id,
                'ET',
                'isreopen',
                invoiceOrderRecoedschangeLwc
            );
            // LexConInvoiceViewController.save(invoiceorder1,'潍城现代门诊部','0011000001k1K9ZAAU','','[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]',testList1.Id,'',myAccount1.Id,'ET','isreopen',invoiceOrderRecoedschangeLwc);
        }
    }
    static testMethod void allsave6() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            List<Consumable_order__c> orderList = new List<Consumable_order__c>();
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = '202306164590';
            invoiceorder.Invoice_Date__c = Date.today();
            // invoiceorder.Order_ForCustomerText__c = '消化科';
            invoiceorder.Invoice_Note__c = '4444';
            invoiceorder.RecordTypeid = '012100000006JxEAAU';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder);
            //发票信息
            Consumable_order__c invoiceorder1 = new Consumable_order__c();
            invoiceorder1.Name = '202306164590';
            invoiceorder1.Invoice_Date__c = Date.today();
            invoiceorder1.Order_ForCustomerText__c = '消化科';
            invoiceorder1.Invoice_Note__c = '4444';
            invoiceorder1.RecordTypeid = '012100000006JxEAAU';
            invoiceorder1.Invoice_status__c = '草案中';
            invoiceorder1.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder1);
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            orderList.add(testList2);
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            orderList.add(testList1);
            insert orderList;
            List<Consumable_orderdetails__c> conList = new List<Consumable_orderdetails__c>();
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            conList.add(orderdet1);
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = invoiceorder1.Id,
                Invoice_Code_link__c = invoiceorder1.Id
            );
            insert order_LinkTable1;
            Consumable_Orderdetails__c upDateform = new Consumable_Orderdetails__c();
            upDateform.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            upDateform.Consumable_order__c = invoiceorder1.Id;
            upDateform.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            upDateform.Consumable_count__c = 1;
            upDateform.Consumable_product__c = pro1.Id;
            upDateform.Consumable_order__c = order_LinkTable1.Outboundorder_Code_link__c;
            upDateform.RrturnPro_count__c = 10;
            conList.add(upDateform);
            insert conList;
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '0011000001k1K9ZAAU',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]',
                testList1.Id,
                invoiceorder1.Id,
                acc.Id,
                'ET',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]'
            );
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '0011000001k1K9ZAAU',
                '',
                '[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]',
                '',
                invoiceorder1.Id,
                acc.Id,
                'ET',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]'
            );
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '0011000001k1K9ZAAU',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]',
                '',
                invoiceorder1.Id,
                acc.Id,
                'ET',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]'
            );
        }
    }
    static testMethod void allsave7() {
        user curUser = [SELECT Id FROM User WHERE LastName = 'TestUser' LIMIT 1];
        Account acc = [
            SELECT Id
            FROM Account
            WHERE name = 'Testaccount002'
            LIMIT 1
        ];
        System.runAs(curUser) {
            //产品信息
            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 };
            List<Consumable_order__c> orderList = new List<Consumable_order__c>();
            //发票信息
            Consumable_order__c invoiceorder = new Consumable_order__c();
            invoiceorder.Name = '202306164590';
            invoiceorder.Invoice_Date__c = Date.today();
            // invoiceorder.Order_ForCustomerText__c = '消化科';
            invoiceorder.Invoice_Note__c = '4444';
            invoiceorder.RecordTypeid = '012100000006JxEAAU';
            invoiceorder.Invoice_status__c = '草案中';
            invoiceorder.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder);
            //发票信息
            Consumable_order__c invoiceorder1 = new Consumable_order__c();
            invoiceorder1.Name = '202306164590';
            invoiceorder1.Invoice_Date__c = Date.today();
            invoiceorder1.Order_ForCustomerText__c = '消化科';
            invoiceorder1.Invoice_Note__c = '4444';
            invoiceorder1.RecordTypeid = '012100000006JxEAAU';
            invoiceorder1.Invoice_status__c = '草案中';
            invoiceorder1.Order_type__c = '发票';
            // invoiceorder.Order_ForHospital__c = hosp1.Id;
            orderList.add(invoiceorder1);
            Consumable_order__c testList2 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id,
                Invoice_Date__c = Date.today()
            );
            orderList.add(testList2);
            //出库单
            Consumable_order__c testList1 = new Consumable_order__c(
                Name = 'Test1',
                Summons_Sale_Status__c = '出货',
                SummonsStatus_c__c = '已完成',
                SummonsForDirction__c = '直接销售给医院',
                Order_status__c = '草案中',
                Order_type__c = '传票',
                Dealer_info__c = acc.Id
            );
            orderList.add(testList1);
            insert orderList;
            List<Consumable_orderdetails__c> conList = new List<Consumable_orderdetails__c>();
            //出库单1明细1
            Consumable_orderdetails__c orderdet1 = new Consumable_orderdetails__c();
            orderdet1.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            orderdet1.Consumable_order__c = testList1.Id;
            orderdet1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            orderdet1.Consumable_count__c = 1;
            orderdet1.Consumable_product__c = pro1.Id;
            conList.add(orderdet1);
            Consumable_order_LinkTable__c order_LinkTable1 = new Consumable_order_LinkTable__c(
                Name = 'order_LinkTable1',
                Outboundorder_Code_link__c = invoiceorder1.Id,
                Invoice_Code_link__c = invoiceorder1.Id
            );
            insert order_LinkTable1;
            Consumable_Orderdetails__c upDateform = new Consumable_Orderdetails__c();
            upDateform.Name = 'Test1_001001';
            //orderdet1.Consumable_principal__c = testList1.Id;
            upDateform.Consumable_order__c = invoiceorder1.Id;
            upDateform.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            upDateform.Consumable_count__c = 1;
            upDateform.Consumable_product__c = pro1.Id;
            upDateform.Consumable_order__c = order_LinkTable1.Outboundorder_Code_link__c;
            upDateform.RrturnPro_count__c = 10;
            conList.add(upDateform);
            insert conList;
            String invoiceOrderRecoedschangeLwc = JSON.serialize(LexConInvoiceViewController.invoiceOrderRecoedschange);
            LexConInvoiceViewController.save(
                invoiceorder1,
                '潍城现代门诊部',
                '0011000001k1K9ZAAU',
                '',
                '[{"check": true,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"},{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848,"Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false}]',
                '',
                invoiceorder1.Id,
                acc.Id,
                'ET',
                '',
                '[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]'
            );
            // LexConInvoiceViewController.save(invoiceorder1,'潍城现代门诊部','0011000001k1K9ZAAU','','[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]','',invoiceorder1.Id,myAccount1.Id,'ET','','[{"check": false,"esd": {"Id": "a2K0l000000x1KXEAY","Order_ForHospital__c": "0011000001k1K9ZAAU","Name": "DB-FY2024-04-Z316244","Outbound_Date__c": "2023-06-09","ShipmentAccount__c": "青岛盈海医院","Shipment_total_amount__c": 848,"RrturnPro_total_amount__c": 0,"Total_Invoiced_Procount__c": 0,"InvoiceNotPro_total_amount__c": 848,"InvoiceNotPro_money__c": 848, "Invoice_total_amount__c": 0,"Billed_Status__c": "还没开票","Order_ForHospital__r": {"Name": "青岛盈海医院","Id": "0011000001k1K9ZAAU"}},"needInvoiceCount": 0,"oldCheck": false,"Id": "a2K0l000000x1KXEAY"}]');
        }
    }
}
Diff truncated after the above file
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/LexConsumableGoodsInfo.cls 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/LexInventoryViewController.cls 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/LexNewAndEditBasePIPLController.cls force-app/main/default/classes/LexNewAndEditBasePIPLController.cls-meta.xml force-app/main/default/classes/LexNewAndEditContactPIPLController.cls force-app/main/default/classes/LexNewAndEditContactPIPLController.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/LightningUtil.cls force-app/main/default/classes/LookupSearchResultTest.cls force-app/main/default/classes/LookupSearchResultTest.cls-meta.xml force-app/main/default/classes/MetaDataUtility.cls force-app/main/default/classes/NewAndEditLeadController.cls force-app/main/default/classes/NewAndEditLeadControllerTest.cls force-app/main/default/classes/Product2Handler.cls force-app/main/default/classes/RentalApplyEquipmentSetDetailHandler.cls force-app/main/default/classes/ResponseBodyLWCTest.cls force-app/main/default/classes/ResponseBodyLWCTest.cls-meta.xml force-app/main/default/classes/WeeklyReportCmp.cls force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls force-app/main/default/classes/lexSearchAgencyHospitalControllerTest.cls-meta.xml force-app/main/default/contentassets/OlympusCommunityLoginBG.asset force-app/main/default/contentassets/OlympusCommunityLoginBG.asset-meta.xml force-app/main/default/contentassets/OlympusCommunityLogo.asset force-app/main/default/contentassets/OlympusCommunityLogo.asset-meta.xml force-app/main/default/dashboards/ConsumableSalesDashboard.dashboardFolder-meta.xml force-app/main/default/dashboards/ConsumableSalesDashboard/ezyQWhsDlQfrUPdIMqUmGsdMeWiYAH2.dashboard-meta.xml force-app/main/default/dashboards/Consumable_Dashboard/ezyQWhsDlQfrUPdIMqUmGsdMeWiYAH.dashboard-meta.xml (deleted) force-app/main/default/dashboards/LEX.dashboardFolder-meta.xml (deleted) force-app/main/default/experiences/Consumable1/brandingSets/partnerCentral.json force-app/main/default/experiences/Consumable1/config/consumable系统.json force-app/main/default/experiences/Consumable1/config/languages.json force-app/main/default/experiences/Consumable1/config/loginAppPage.json force-app/main/default/experiences/Consumable1/config/mainAppPage.json force-app/main/default/experiences/Consumable1/routes/accountManagement.json force-app/main/default/experiences/Consumable1/routes/cICList.json force-app/main/default/experiences/Consumable1/routes/cICRelatedList.json force-app/main/default/experiences/Consumable1/routes/cICリスト.json force-app/main/default/experiences/Consumable1/routes/cIC関連リスト.json force-app/main/default/experiences/Consumable1/routes/campaignList.json force-app/main/default/experiences/Consumable1/routes/caseDetail.json force-app/main/default/experiences/Consumable1/routes/checkPassword.json force-app/main/default/experiences/Consumable1/routes/contactSupport.json force-app/main/default/experiences/Consumable1/routes/createRecord.json force-app/main/default/experiences/Consumable1/routes/dashboardDetail.json force-app/main/default/experiences/Consumable1/routes/dashboardList.json force-app/main/default/experiences/Consumable1/routes/error.json force-app/main/default/experiences/Consumable1/routes/feedDetail.json force-app/main/default/experiences/Consumable1/routes/fileDetail.json force-app/main/default/experiences/Consumable1/routes/fileList.json force-app/main/default/experiences/Consumable1/routes/flow.json force-app/main/default/experiences/Consumable1/routes/forgotPassword.json force-app/main/default/experiences/Consumable1/routes/groupDetail.json force-app/main/default/experiences/Consumable1/routes/groupList.json force-app/main/default/experiences/Consumable1/routes/home.json force-app/main/default/experiences/Consumable1/routes/lexAgencyInfo.json force-app/main/default/experiences/Consumable1/routes/lexArriveGoods.json force-app/main/default/experiences/Consumable1/routes/lexArriveGoodsMain.json force-app/main/default/experiences/Consumable1/routes/lexArriveGsDetails.json force-app/main/default/experiences/Consumable1/routes/lexCancelRemoveBox.json force-app/main/default/experiences/Consumable1/routes/lexConInvoiceView.json force-app/main/default/experiences/Consumable1/routes/lexConsumable.json force-app/main/default/experiences/Consumable1/routes/lexConsumableAccount.json force-app/main/default/experiences/Consumable1/routes/lexConsumableAccountInfoPrint.json force-app/main/default/experiences/Consumable1/routes/lexConsumableOrderManage.json force-app/main/default/experiences/Consumable1/routes/lexInventory.json force-app/main/default/experiences/Consumable1/routes/lexInventoryView.json force-app/main/default/experiences/Consumable1/routes/lexOutboundorderImport.json force-app/main/default/experiences/Consumable1/routes/lexOverdueStock.json force-app/main/default/experiences/Consumable1/routes/lexProductLimitEdit.json force-app/main/default/experiences/Consumable1/routes/lexRemoveBox.json force-app/main/default/experiences/Consumable1/routes/lexSaleAndDelivery.json force-app/main/default/experiences/Consumable1/routes/lexSummonsCreat.json force-app/main/default/experiences/Consumable1/routes/lexTopPage.json force-app/main/default/experiences/Consumable1/routes/login.json force-app/main/default/experiences/Consumable1/routes/loginError.json force-app/main/default/experiences/Consumable1/routes/mDFAndCoop.json force-app/main/default/experiences/Consumable1/routes/messages.json force-app/main/default/experiences/Consumable1/routes/myAccount.json force-app/main/default/experiences/Consumable1/routes/questionDetail.json force-app/main/default/experiences/Consumable1/routes/quipDocsRelatedList.json force-app/main/default/experiences/Consumable1/routes/recordDetail.json force-app/main/default/experiences/Consumable1/routes/recordList.json force-app/main/default/experiences/Consumable1/routes/register.json force-app/main/default/experiences/Consumable1/routes/relatedRecordList.json force-app/main/default/experiences/Consumable1/routes/reportBuilder.json force-app/main/default/experiences/Consumable1/routes/reportDetail.json force-app/main/default/experiences/Consumable1/routes/reportList.json force-app/main/default/experiences/Consumable1/routes/resources.json force-app/main/default/experiences/Consumable1/routes/search.json force-app/main/default/experiences/Consumable1/routes/streamDetail.json force-app/main/default/experiences/Consumable1/routes/streamList.json force-app/main/default/experiences/Consumable1/routes/topicCatalog.json force-app/main/default/experiences/Consumable1/routes/topicDetail.json force-app/main/default/experiences/Consumable1/routes/userProfile.json force-app/main/default/experiences/Consumable1/routes/userSettings.json force-app/main/default/experiences/Consumable1/routes/仪表板RelatedList.json force-app/main/default/experiences/Consumable1/routes/仪表板関連リスト.json force-app/main/default/experiences/Consumable1/routes/学会・培训Detail.json force-app/main/default/experiences/Consumable1/routes/学会・培训RelatedList.json force-app/main/default/experiences/Consumable1/routes/学会・培训詳細.json force-app/main/default/experiences/Consumable1/routes/学会・培训関連リスト.json force-app/main/default/experiences/Consumable1/routes/小组RelatedList.json force-app/main/default/experiences/Consumable1/routes/小组関連リスト.json force-app/main/default/experiences/Consumable1/routes/库存.json force-app/main/default/experiences/Consumable1/routes/库存上下限编辑.json force-app/main/default/experiences/Consumable1/routes/报表RelatedList.json force-app/main/default/experiences/Consumable1/routes/报表関連リスト.json force-app/main/default/experiences/Consumable1/routes/文件RelatedList.json force-app/main/default/experiences/Consumable1/routes/文件関連リスト.json force-app/main/default/experiences/Consumable1/routes/新建消耗品订单.json force-app/main/default/experiences/Consumable1/routes/流RelatedList.json force-app/main/default/experiences/Consumable1/routes/流関連リスト.json force-app/main/default/experiences/Consumable1/routes/消耗品订单列表.json force-app/main/default/experiences/Consumable1/routes/消耗品订单相关列表.json force-app/main/default/experiences/Consumable1/routes/消耗品订单详细信息.json force-app/main/default/experiences/Consumable1/routes/用户List.json force-app/main/default/experiences/Consumable1/routes/用户RelatedList.json force-app/main/default/experiences/Consumable1/routes/用户リスト.json force-app/main/default/experiences/Consumable1/routes/用户関連リスト.json force-app/main/default/experiences/Consumable1/themes/partnerCentral.json force-app/main/default/experiences/Consumable1/variations/defaultCustomComponentPropertiesComponentProperties.json force-app/main/default/experiences/Consumable1/variations/defaultNavigationMenuComponentProperties.json force-app/main/default/experiences/Consumable1/views/accountManagement.json force-app/main/default/experiences/Consumable1/views/cICList.json force-app/main/default/experiences/Consumable1/views/cICRelatedList.json force-app/main/default/experiences/Consumable1/views/cICリスト.json force-app/main/default/experiences/Consumable1/views/cIC関連リスト.json force-app/main/default/experiences/Consumable1/views/campaignList.json force-app/main/default/experiences/Consumable1/views/caseDetail.json force-app/main/default/experiences/Consumable1/views/checkPassword.json force-app/main/default/experiences/Consumable1/views/consumableDetailFix.json force-app/main/default/experiences/Consumable1/views/contactSupport.json force-app/main/default/experiences/Consumable1/views/createRecord.json force-app/main/default/experiences/Consumable1/views/dashboardDetail.json force-app/main/default/experiences/Consumable1/views/dashboardList.json force-app/main/default/experiences/Consumable1/views/error.json force-app/main/default/experiences/Consumable1/views/feedDetail.json force-app/main/default/experiences/Consumable1/views/fileDetail.json force-app/main/default/experiences/Consumable1/views/fileList.json force-app/main/default/experiences/Consumable1/views/flow.json force-app/main/default/experiences/Consumable1/views/forgotPassword.json force-app/main/default/experiences/Consumable1/views/groupDetail.json force-app/main/default/experiences/Consumable1/views/groupList.json force-app/main/default/experiences/Consumable1/views/home.json force-app/main/default/experiences/Consumable1/views/homeFlexible.json force-app/main/default/experiences/Consumable1/views/lexAgencyInfo.json force-app/main/default/experiences/Consumable1/views/lexArriveGoods.json force-app/main/default/experiences/Consumable1/views/lexArriveGoodsMain.json force-app/main/default/experiences/Consumable1/views/lexArriveGsDetails.json force-app/main/default/experiences/Consumable1/views/lexCancelRemoveBox.json force-app/main/default/experiences/Consumable1/views/lexConInvoiceView.json force-app/main/default/experiences/Consumable1/views/lexConsumable.json force-app/main/default/experiences/Consumable1/views/lexConsumableAccount.json force-app/main/default/experiences/Consumable1/views/lexConsumableAccountInfoPrint.json force-app/main/default/experiences/Consumable1/views/lexConsumableOrderManage.json force-app/main/default/experiences/Consumable1/views/lexInventory.json force-app/main/default/experiences/Consumable1/views/lexInventoryView.json force-app/main/default/experiences/Consumable1/views/lexOutboundorderImport.json force-app/main/default/experiences/Consumable1/views/lexOverdueStock.json force-app/main/default/experiences/Consumable1/views/lexProductLimitEdit.json force-app/main/default/experiences/Consumable1/views/lexRemoveBox.json force-app/main/default/experiences/Consumable1/views/lexSaleAndDelivery.json force-app/main/default/experiences/Consumable1/views/lexSummonsCreat.json force-app/main/default/experiences/Consumable1/views/lexTopPage.json force-app/main/default/experiences/Consumable1/views/login.json force-app/main/default/experiences/Consumable1/views/loginError.json force-app/main/default/experiences/Consumable1/views/mDFAndCoop.json force-app/main/default/experiences/Consumable1/views/messages.json force-app/main/default/experiences/Consumable1/views/myAccount.json force-app/main/default/experiences/Consumable1/views/neworder.json force-app/main/default/experiences/Consumable1/views/questionDetail.json force-app/main/default/experiences/Consumable1/views/quipDocsRelatedList.json force-app/main/default/experiences/Consumable1/views/recordDetail.json force-app/main/default/experiences/Consumable1/views/recordList.json force-app/main/default/experiences/Consumable1/views/register.json force-app/main/default/experiences/Consumable1/views/relatedRecordList.json force-app/main/default/experiences/Consumable1/views/reportBuilder.json force-app/main/default/experiences/Consumable1/views/reportDetail.json force-app/main/default/experiences/Consumable1/views/reportList.json force-app/main/default/experiences/Consumable1/views/resources.json force-app/main/default/experiences/Consumable1/views/search.json force-app/main/default/experiences/Consumable1/views/streamDetail.json force-app/main/default/experiences/Consumable1/views/streamList.json force-app/main/default/experiences/Consumable1/views/topicCatalog.json force-app/main/default/experiences/Consumable1/views/topicDetail.json force-app/main/default/experiences/Consumable1/views/userProfile.json force-app/main/default/experiences/Consumable1/views/userSettings.json force-app/main/default/experiences/Consumable1/views/仪表板RelatedList.json force-app/main/default/experiences/Consumable1/views/仪表板関連リスト.json force-app/main/default/experiences/Consumable1/views/学会・培训Detail.json force-app/main/default/experiences/Consumable1/views/学会・培训RelatedList.json force-app/main/default/experiences/Consumable1/views/学会・培训詳細.json force-app/main/default/experiences/Consumable1/views/学会・培训関連リスト.json force-app/main/default/experiences/Consumable1/views/小组RelatedList.json force-app/main/default/experiences/Consumable1/views/小组関連リスト.json force-app/main/default/experiences/Consumable1/views/库存.json force-app/main/default/experiences/Consumable1/views/库存上下限编辑.json force-app/main/default/experiences/Consumable1/views/报表RelatedList.json force-app/main/default/experiences/Consumable1/views/报表関連リスト.json force-app/main/default/experiences/Consumable1/views/文件RelatedList.json force-app/main/default/experiences/Consumable1/views/文件関連リスト.json force-app/main/default/experiences/Consumable1/views/流RelatedList.json force-app/main/default/experiences/Consumable1/views/流関連リスト.json force-app/main/default/experiences/Consumable1/views/消耗品订单列表.json force-app/main/default/experiences/Consumable1/views/消耗品订单相关列表.json force-app/main/default/experiences/Consumable1/views/消耗品订单详细信息.json force-app/main/default/experiences/Consumable1/views/用户List.json force-app/main/default/experiences/Consumable1/views/用户RelatedList.json force-app/main/default/experiences/Consumable1/views/用户リスト.json force-app/main/default/experiences/Consumable1/views/用户関連リスト.json force-app/main/default/experiences/Consumable_21.site-meta.xml force-app/main/default/experiences/Consumable_21/brandingSets/partnerCentral.json force-app/main/default/experiences/Consumable_21/config/consumable系统2.json force-app/main/default/experiences/Consumable_21/config/languages.json force-app/main/default/experiences/Consumable_21/config/loginAppPage.json force-app/main/default/experiences/Consumable_21/config/mainAppPage.json force-app/main/default/experiences/Consumable_21/routes/accountManagement.json force-app/main/default/experiences/Consumable_21/routes/cICList.json force-app/main/default/experiences/Consumable_21/routes/cICRelatedList.json force-app/main/default/experiences/Consumable_21/routes/campaignDetail.json force-app/main/default/experiences/Consumable_21/routes/campaignList.json force-app/main/default/experiences/Consumable_21/routes/campaignRelatedList.json force-app/main/default/experiences/Consumable_21/routes/caseDetail.json force-app/main/default/experiences/Consumable_21/routes/checkPassword.json force-app/main/default/experiences/Consumable_21/routes/contactSupport.json force-app/main/default/experiences/Consumable_21/routes/createRecord.json force-app/main/default/experiences/Consumable_21/routes/dashboardDetail.json force-app/main/default/experiences/Consumable_21/routes/dashboardList.json force-app/main/default/experiences/Consumable_21/routes/dashboardRelatedList.json force-app/main/default/experiences/Consumable_21/routes/error.json force-app/main/default/experiences/Consumable_21/routes/feedDetail.json force-app/main/default/experiences/Consumable_21/routes/fileDetail.json force-app/main/default/experiences/Consumable_21/routes/fileList.json force-app/main/default/experiences/Consumable_21/routes/fileRelatedList.json force-app/main/default/experiences/Consumable_21/routes/flow.json force-app/main/default/experiences/Consumable_21/routes/forgotPassword.json force-app/main/default/experiences/Consumable_21/routes/groupDetail.json force-app/main/default/experiences/Consumable_21/routes/groupList.json force-app/main/default/experiences/Consumable_21/routes/groupRelatedList.json force-app/main/default/experiences/Consumable_21/routes/home.json force-app/main/default/experiences/Consumable_21/routes/lexAgencyInfo.json force-app/main/default/experiences/Consumable_21/routes/lexArriveGoods.json force-app/main/default/experiences/Consumable_21/routes/lexArriveGoodsMain.json force-app/main/default/experiences/Consumable_21/routes/lexArriveGsDetails.json force-app/main/default/experiences/Consumable_21/routes/lexCancelRemoveBox.json force-app/main/default/experiences/Consumable_21/routes/lexConInvoiceView.json force-app/main/default/experiences/Consumable_21/routes/lexConsumable.json force-app/main/default/experiences/Consumable_21/routes/lexConsumableAccount.json force-app/main/default/experiences/Consumable_21/routes/lexConsumableAccountInfoPrint.json force-app/main/default/experiences/Consumable_21/routes/lexConsumableOrderManage.json force-app/main/default/experiences/Consumable_21/routes/lexInventory.json force-app/main/default/experiences/Consumable_21/routes/lexInventoryView.json force-app/main/default/experiences/Consumable_21/routes/lexOutboundorderImport.json force-app/main/default/experiences/Consumable_21/routes/lexOverdueStock.json force-app/main/default/experiences/Consumable_21/routes/lexProductLimitEdit.json force-app/main/default/experiences/Consumable_21/routes/lexRemoveBox.json force-app/main/default/experiences/Consumable_21/routes/lexSaleAndDelivery.json force-app/main/default/experiences/Consumable_21/routes/lexSummonsCreat.json force-app/main/default/experiences/Consumable_21/routes/lexTopPage.json force-app/main/default/experiences/Consumable_21/routes/login.json force-app/main/default/experiences/Consumable_21/routes/loginError.json force-app/main/default/experiences/Consumable_21/routes/mDFAndCoop.json force-app/main/default/experiences/Consumable_21/routes/messages.json force-app/main/default/experiences/Consumable_21/routes/myAccount.json force-app/main/default/experiences/Consumable_21/routes/questionDetail.json force-app/main/default/experiences/Consumable_21/routes/quipDocsRelatedList.json force-app/main/default/experiences/Consumable_21/routes/recordDetail.json force-app/main/default/experiences/Consumable_21/routes/recordList.json force-app/main/default/experiences/Consumable_21/routes/register.json force-app/main/default/experiences/Consumable_21/routes/relatedRecordList.json force-app/main/default/experiences/Consumable_21/routes/reportBuilder.json force-app/main/default/experiences/Consumable_21/routes/reportDetail.json force-app/main/default/experiences/Consumable_21/routes/reportList.json force-app/main/default/experiences/Consumable_21/routes/reportRelatedList.json force-app/main/default/experiences/Consumable_21/routes/resources.json force-app/main/default/experiences/Consumable_21/routes/search.json force-app/main/default/experiences/Consumable_21/routes/streamDetail.json force-app/main/default/experiences/Consumable_21/routes/streamList.json force-app/main/default/experiences/Consumable_21/routes/streamRelatedList.json force-app/main/default/experiences/Consumable_21/routes/topicCatalog.json force-app/main/default/experiences/Consumable_21/routes/topicDetail.json force-app/main/default/experiences/Consumable_21/routes/userList.json force-app/main/default/experiences/Consumable_21/routes/userProfile.json force-app/main/default/experiences/Consumable_21/routes/userRelatedList.json force-app/main/default/experiences/Consumable_21/routes/userSettings.json force-app/main/default/experiences/Consumable_21/routes/消耗品订单Detail.json force-app/main/default/experiences/Consumable_21/routes/消耗品订单List.json force-app/main/default/experiences/Consumable_21/routes/消耗品订单RelatedList.json force-app/main/default/experiences/Consumable_21/themes/partnerCentral.json force-app/main/default/experiences/Consumable_21/variations/defaultNavigationMenuComponentProperties.json force-app/main/default/experiences/Consumable_21/views/accountManagement.json force-app/main/default/experiences/Consumable_21/views/cICList.json force-app/main/default/experiences/Consumable_21/views/cICRelatedList.json force-app/main/default/experiences/Consumable_21/views/campaignDetail.json force-app/main/default/experiences/Consumable_21/views/campaignList.json force-app/main/default/experiences/Consumable_21/views/campaignRelatedList.json force-app/main/default/experiences/Consumable_21/views/caseDetail.json force-app/main/default/experiences/Consumable_21/views/checkPassword.json force-app/main/default/experiences/Consumable_21/views/consumableDetailFix.json force-app/main/default/experiences/Consumable_21/views/contactSupport.json force-app/main/default/experiences/Consumable_21/views/createRecord.json force-app/main/default/experiences/Consumable_21/views/dashboardDetail.json force-app/main/default/experiences/Consumable_21/views/dashboardList.json force-app/main/default/experiences/Consumable_21/views/dashboardRelatedList.json force-app/main/default/experiences/Consumable_21/views/error.json force-app/main/default/experiences/Consumable_21/views/feedDetail.json force-app/main/default/experiences/Consumable_21/views/fileDetail.json force-app/main/default/experiences/Consumable_21/views/fileList.json force-app/main/default/experiences/Consumable_21/views/fileRelatedList.json force-app/main/default/experiences/Consumable_21/views/flow.json force-app/main/default/experiences/Consumable_21/views/forgotPassword.json force-app/main/default/experiences/Consumable_21/views/groupDetail.json force-app/main/default/experiences/Consumable_21/views/groupList.json force-app/main/default/experiences/Consumable_21/views/groupRelatedList.json force-app/main/default/experiences/Consumable_21/views/home.json force-app/main/default/experiences/Consumable_21/views/homeFlexible.json force-app/main/default/experiences/Consumable_21/views/lexAgencyInfo.json force-app/main/default/experiences/Consumable_21/views/lexArriveGoods.json force-app/main/default/experiences/Consumable_21/views/lexArriveGoodsMain.json force-app/main/default/experiences/Consumable_21/views/lexArriveGsDetails.json force-app/main/default/experiences/Consumable_21/views/lexCancelRemoveBox.json force-app/main/default/experiences/Consumable_21/views/lexConInvoiceView.json force-app/main/default/experiences/Consumable_21/views/lexConsumable.json force-app/main/default/experiences/Consumable_21/views/lexConsumableAccount.json force-app/main/default/experiences/Consumable_21/views/lexConsumableAccountInfoPrint.json force-app/main/default/experiences/Consumable_21/views/lexConsumableOrderManage.json force-app/main/default/experiences/Consumable_21/views/lexInventory.json force-app/main/default/experiences/Consumable_21/views/lexInventoryView.json force-app/main/default/experiences/Consumable_21/views/lexOutboundorderImport.json force-app/main/default/experiences/Consumable_21/views/lexOverdueStock.json force-app/main/default/experiences/Consumable_21/views/lexProductLimitEdit.json force-app/main/default/experiences/Consumable_21/views/lexRemoveBox.json force-app/main/default/experiences/Consumable_21/views/lexSaleAndDelivery.json force-app/main/default/experiences/Consumable_21/views/lexSummonsCreat.json force-app/main/default/experiences/Consumable_21/views/lexTopPage.json force-app/main/default/experiences/Consumable_21/views/login.json force-app/main/default/experiences/Consumable_21/views/loginError.json force-app/main/default/experiences/Consumable_21/views/mDFAndCoop.json force-app/main/default/experiences/Consumable_21/views/messages.json force-app/main/default/experiences/Consumable_21/views/myAccount.json force-app/main/default/experiences/Consumable_21/views/questionDetail.json force-app/main/default/experiences/Consumable_21/views/quipDocsRelatedList.json force-app/main/default/experiences/Consumable_21/views/recordDetail.json force-app/main/default/experiences/Consumable_21/views/recordList.json force-app/main/default/experiences/Consumable_21/views/register.json force-app/main/default/experiences/Consumable_21/views/relatedRecordList.json force-app/main/default/experiences/Consumable_21/views/reportBuilder.json force-app/main/default/experiences/Consumable_21/views/reportDetail.json force-app/main/default/experiences/Consumable_21/views/reportList.json force-app/main/default/experiences/Consumable_21/views/reportRelatedList.json force-app/main/default/experiences/Consumable_21/views/resources.json force-app/main/default/experiences/Consumable_21/views/search.json force-app/main/default/experiences/Consumable_21/views/streamDetail.json force-app/main/default/experiences/Consumable_21/views/streamList.json force-app/main/default/experiences/Consumable_21/views/streamRelatedList.json force-app/main/default/experiences/Consumable_21/views/topicCatalog.json force-app/main/default/experiences/Consumable_21/views/topicDetail.json force-app/main/default/experiences/Consumable_21/views/userList.json force-app/main/default/experiences/Consumable_21/views/userProfile.json force-app/main/default/experiences/Consumable_21/views/userRelatedList.json force-app/main/default/experiences/Consumable_21/views/userSettings.json force-app/main/default/experiences/Consumable_21/views/消耗品订单Detail.json force-app/main/default/experiences/Consumable_21/views/消耗品订单List.json force-app/main/default/experiences/Consumable_21/views/消耗品订单RelatedList.json force-app/main/default/experiences/Partner21.site-meta.xml force-app/main/default/experiences/Partner21/brandingSets/partnerCentral.json force-app/main/default/experiences/Partner21/config/languages.json force-app/main/default/experiences/Partner21/config/loginAppPage.json force-app/main/default/experiences/Partner21/config/mainAppPage.json force-app/main/default/experiences/Partner21/config/partner2.json force-app/main/default/experiences/Partner21/routes/accountManagement.json force-app/main/default/experiences/Partner21/routes/cICリスト.json force-app/main/default/experiences/Partner21/routes/cIC関連リスト.json force-app/main/default/experiences/Partner21/routes/campaignList.json force-app/main/default/experiences/Partner21/routes/caseDetail.json force-app/main/default/experiences/Partner21/routes/checkPassword.json force-app/main/default/experiences/Partner21/routes/contactSupport.json force-app/main/default/experiences/Partner21/routes/createRecord.json force-app/main/default/experiences/Partner21/routes/dashboardDetail.json force-app/main/default/experiences/Partner21/routes/dashboardList.json force-app/main/default/experiences/Partner21/routes/error.json force-app/main/default/experiences/Partner21/routes/feedDetail.json force-app/main/default/experiences/Partner21/routes/fileDetail.json force-app/main/default/experiences/Partner21/routes/fileList.json force-app/main/default/experiences/Partner21/routes/flow.json force-app/main/default/experiences/Partner21/routes/forgotPassword.json force-app/main/default/experiences/Partner21/routes/groupDetail.json force-app/main/default/experiences/Partner21/routes/groupList.json force-app/main/default/experiences/Partner21/routes/home.json force-app/main/default/experiences/Partner21/routes/login.json force-app/main/default/experiences/Partner21/routes/loginError.json force-app/main/default/experiences/Partner21/routes/mDFAndCoop.json force-app/main/default/experiences/Partner21/routes/messages.json force-app/main/default/experiences/Partner21/routes/myAccount.json force-app/main/default/experiences/Partner21/routes/questionDetail.json force-app/main/default/experiences/Partner21/routes/quipDocsRelatedList.json force-app/main/default/experiences/Partner21/routes/recordDetail.json force-app/main/default/experiences/Partner21/routes/recordList.json force-app/main/default/experiences/Partner21/routes/register.json force-app/main/default/experiences/Partner21/routes/relatedRecordList.json force-app/main/default/experiences/Partner21/routes/reportBuilder.json force-app/main/default/experiences/Partner21/routes/reportDetail.json force-app/main/default/experiences/Partner21/routes/reportList.json force-app/main/default/experiences/Partner21/routes/resources.json force-app/main/default/experiences/Partner21/routes/search.json force-app/main/default/experiences/Partner21/routes/streamDetail.json force-app/main/default/experiences/Partner21/routes/streamList.json force-app/main/default/experiences/Partner21/routes/topicCatalog.json force-app/main/default/experiences/Partner21/routes/topicDetail.json force-app/main/default/experiences/Partner21/routes/userProfile.json force-app/main/default/experiences/Partner21/routes/userSettings.json force-app/main/default/experiences/Partner21/routes/仪表板関連リスト.json force-app/main/default/experiences/Partner21/routes/学会・培训詳細.json force-app/main/default/experiences/Partner21/routes/学会・培训関連リスト.json force-app/main/default/experiences/Partner21/routes/小组関連リスト.json force-app/main/default/experiences/Partner21/routes/报表関連リスト.json force-app/main/default/experiences/Partner21/routes/文件関連リスト.json force-app/main/default/experiences/Partner21/routes/流関連リスト.json force-app/main/default/experiences/Partner21/routes/用户リスト.json force-app/main/default/experiences/Partner21/routes/用户関連リスト.json force-app/main/default/experiences/Partner21/themes/partnerCentral.json force-app/main/default/experiences/Partner21/views/accountManagement.json force-app/main/default/experiences/Partner21/views/cICリスト.json force-app/main/default/experiences/Partner21/views/cIC関連リスト.json force-app/main/default/experiences/Partner21/views/campaignList.json force-app/main/default/experiences/Partner21/views/caseDetail.json force-app/main/default/experiences/Partner21/views/checkPassword.json force-app/main/default/experiences/Partner21/views/contactSupport.json force-app/main/default/experiences/Partner21/views/createRecord.json force-app/main/default/experiences/Partner21/views/dashboardDetail.json force-app/main/default/experiences/Partner21/views/dashboardList.json force-app/main/default/experiences/Partner21/views/error.json force-app/main/default/experiences/Partner21/views/feedDetail.json force-app/main/default/experiences/Partner21/views/fileDetail.json force-app/main/default/experiences/Partner21/views/fileList.json force-app/main/default/experiences/Partner21/views/flow.json force-app/main/default/experiences/Partner21/views/forgotPassword.json force-app/main/default/experiences/Partner21/views/groupDetail.json force-app/main/default/experiences/Partner21/views/groupList.json force-app/main/default/experiences/Partner21/views/home.json force-app/main/default/experiences/Partner21/views/login.json force-app/main/default/experiences/Partner21/views/loginError.json force-app/main/default/experiences/Partner21/views/mDFAndCoop.json force-app/main/default/experiences/Partner21/views/messages.json force-app/main/default/experiences/Partner21/views/myAccount.json force-app/main/default/experiences/Partner21/views/questionDetail.json force-app/main/default/experiences/Partner21/views/quipDocsRelatedList.json force-app/main/default/experiences/Partner21/views/recordDetail.json force-app/main/default/experiences/Partner21/views/recordList.json force-app/main/default/experiences/Partner21/views/register.json force-app/main/default/experiences/Partner21/views/relatedRecordList.json force-app/main/default/experiences/Partner21/views/reportBuilder.json force-app/main/default/experiences/Partner21/views/reportDetail.json force-app/main/default/experiences/Partner21/views/reportList.json force-app/main/default/experiences/Partner21/views/resources.json force-app/main/default/experiences/Partner21/views/search.json force-app/main/default/experiences/Partner21/views/streamDetail.json force-app/main/default/experiences/Partner21/views/streamList.json force-app/main/default/experiences/Partner21/views/topicCatalog.json force-app/main/default/experiences/Partner21/views/topicDetail.json force-app/main/default/experiences/Partner21/views/userProfile.json force-app/main/default/experiences/Partner21/views/userSettings.json force-app/main/default/experiences/Partner21/views/仪表板関連リスト.json force-app/main/default/experiences/Partner21/views/学会・培训詳細.json force-app/main/default/experiences/Partner21/views/学会・培训関連リスト.json force-app/main/default/experiences/Partner21/views/小组関連リスト.json force-app/main/default/experiences/Partner21/views/报表関連リスト.json force-app/main/default/experiences/Partner21/views/文件関連リスト.json force-app/main/default/experiences/Partner21/views/流関連リスト.json force-app/main/default/experiences/Partner21/views/用户リスト.json force-app/main/default/experiences/Partner21/views/用户関連リスト.json force-app/main/default/experiences/Site3.site-meta.xml force-app/main/default/experiences/Site3/brandingSets/buildYourOwn.json force-app/main/default/experiences/Site3/config/languages.json force-app/main/default/experiences/Site3/config/loginAppPage.json force-app/main/default/experiences/Site3/config/mainAppPage.json force-app/main/default/experiences/Site3/config/电子签收系统.json force-app/main/default/experiences/Site3/routes/checkPassword.json force-app/main/default/experiences/Site3/routes/createRecord.json force-app/main/default/experiences/Site3/routes/error.json force-app/main/default/experiences/Site3/routes/forgotPassword.json force-app/main/default/experiences/Site3/routes/home.json force-app/main/default/experiences/Site3/routes/login.json force-app/main/default/experiences/Site3/routes/loginError.json force-app/main/default/experiences/Site3/routes/recordDetail.json force-app/main/default/experiences/Site3/routes/recordList.json force-app/main/default/experiences/Site3/routes/register.json force-app/main/default/experiences/Site3/routes/relatedRecordList.json force-app/main/default/experiences/Site3/routes/search.json force-app/main/default/experiences/Site3/routes/奥林巴斯电子签收系统.json force-app/main/default/experiences/Site3/routes/进口单证明细.json force-app/main/default/experiences/Site3/themes/buildYourOwn.json force-app/main/default/experiences/Site3/views/checkPassword.json force-app/main/default/experiences/Site3/views/createRecord.json force-app/main/default/experiences/Site3/views/error.json force-app/main/default/experiences/Site3/views/forgotPassword.json force-app/main/default/experiences/Site3/views/home.json force-app/main/default/experiences/Site3/views/login.json force-app/main/default/experiences/Site3/views/loginError.json force-app/main/default/experiences/Site3/views/recordDetail.json force-app/main/default/experiences/Site3/views/recordList.json force-app/main/default/experiences/Site3/views/register.json force-app/main/default/experiences/Site3/views/relatedRecordList.json force-app/main/default/experiences/Site3/views/search.json force-app/main/default/experiences/Site3/views/奥林巴斯电子签收系统.json force-app/main/default/experiences/Site3/views/进口单证明细.json force-app/main/default/labels/CustomLabels.labels-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/customShipmentNumberComp/customShipmentNumberComp.html force-app/main/default/lwc/customShipmentNumberComp/customShipmentNumberComp.js force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.html force-app/main/default/lwc/customShippingUnitPriceComp/customShippingUnitPriceComp.js force-app/main/default/lwc/lexAgencyInfo/lexAgencyInfo.css force-app/main/default/lwc/lexAgencyInfo/lexAgencyInfo.html force-app/main/default/lwc/lexArriveGoods/lexArriveGoods.css 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/lexArriveGsDetails/lexArriveGsDetails.html force-app/main/default/lwc/lexArriveGsDetails/lexArriveGsDetails.js force-app/main/default/lwc/lexCancelRemoveBox/lexCancelRemoveBox.html force-app/main/default/lwc/lexCancelRemoveBox/lexCancelRemoveBox.js force-app/main/default/lwc/lexConInvoiceView/lexConInvoiceView.css 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/lexConsumableOrderManage/lexConsumableOrderManage.html force-app/main/default/lwc/lexCssUtility/lexCssUtility.css force-app/main/default/lwc/lexCustomDiffReasonComp/lexCustomDiffReasonComp.html force-app/main/default/lwc/lexCustomInventoryColor/lexCustomInventoryColor.html force-app/main/default/lwc/lexCustomLightningDatatable/customMyDrCheckBox.html force-app/main/default/lwc/lexCustomLightningDatatable/customShipmentNumber.html force-app/main/default/lwc/lexCustomLightningDatatable/customaccountUrl.html force-app/main/default/lwc/lexCustomLightningDatatable/customdeleteReason.html force-app/main/default/lwc/lexCustomLightningDatatable/lexCustomLightningDatatable.js force-app/main/default/lwc/lexInventory/lexInventory.css force-app/main/default/lwc/lexInventory/lexInventory.html force-app/main/default/lwc/lexInventory/lexInventory.js force-app/main/default/lwc/lexLookup/lexLookup.html force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.css force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.html force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.js force-app/main/default/lwc/lexNewAndEditContactPIPL/lexNewAndEditContactPIPL.js-meta.xml force-app/main/default/lwc/lexOutboundorderImport/lexOutboundorderImport.html force-app/main/default/lwc/lexOutboundorderImport/lexOutboundorderImport.js force-app/main/default/lwc/lexOverdueStock/lexOverdueStock.html force-app/main/default/lwc/lexOverdueStock/lexOverdueStock.js force-app/main/default/lwc/lexProductLimitEdit/lexProductLimitEdit.html force-app/main/default/lwc/lexProductLimitEdit/lexProductLimitEdit.js force-app/main/default/lwc/lexRemoveBox/lexRemoveBox.html force-app/main/default/lwc/lexRemoveBox/lexRemoveBox.js force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.html force-app/main/default/lwc/lexSaleAndDelivery/lexSaleAndDelivery.js force-app/main/default/lwc/lexSummonsCreat/lexSummonsCreat.css 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.css force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.html force-app/main/default/lwc/lexinventoryViewLWC/lexinventoryViewLWC.js force-app/main/default/networks/Consumable系统.network-meta.xml force-app/main/default/networks/Consumable系统2.network-meta.xml force-app/main/default/networks/Partner Sales.network-meta.xml force-app/main/default/networks/Partner2.network-meta.xml force-app/main/default/networks/消耗品管理系统.network-meta.xml force-app/main/default/networks/电子签收系统.network-meta.xml force-app/main/default/pages/DealerInquiryModifyState.page force-app/main/default/pages/DealerInquiryModifyState.page-meta.xml force-app/main/default/pages/OFSInsReportLayout.page force-app/main/default/pages/StraightBackAddress.page force-app/main/default/pages/StraightBackAddress.page-meta.xml force-app/main/default/permissionsets/Community_Consumable_LEX_PS.permissionset-meta.xml force-app/main/default/permissionsets/Community_LEX_PS.permissionset-meta.xml force-app/main/default/reports/ConsumableSalesReport.reportFolder-meta.xml force-app/main/default/reports/ConsumableSalesReport/Consumable_Outstock_Invoice_Lex.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/CurrentMonthSalesRankByAccount.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/CurrentMonthSalesRankByProduct.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/LastMonthSalesByAccount1.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/LastMonthSalesByProduct.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/Report_Outbound_Lex.report-meta.xml force-app/main/default/reports/ConsumableSalesReport/WeeklyReportForAgency.report-meta.xml force-app/main/default/reports/Consumable_KC/CurrentMonthSalesRankByAccount.report-meta.xml (deleted) force-app/main/default/reports/Consumable_KC/CurrentMonthSalesRankByProduct.report-meta.xml (deleted) force-app/main/default/reports/Consumable_KC/LastMonthSalesByAccount1.report-meta.xml (deleted) force-app/main/default/reports/Consumable_KC/LastMonthSalesByProduct.report-meta.xml (deleted) force-app/main/default/reports/Consumable_KC/WeeklyReportForAgency.report-meta.xml (deleted) force-app/main/default/reports/Store_Custom_ReportLink/Consumable_Outstock_Invoice_Lex.report-meta.xml (deleted) force-app/main/default/reports/Store_Custom_ReportLink/Report_Outbound_Lex.report-meta.xml (deleted) force-app/main/default/sites/Consumable.site-meta.xml force-app/main/default/sites/Consumable_2.site-meta.xml force-app/main/default/sites/Partner2.site-meta.xml force-app/main/default/sites/Partner_Sales.site-meta.xml force-app/main/default/sites/Site.site-meta.xml force-app/main/default/sites/Site2.site-meta.xml force-app/main/default/sites/extsurvey.site-meta.xml force-app/main/default/staticresources/lexdatatable.css force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger-meta.xml force-app/main/default/triggers/ConsumableOrderTrigger.trigger force-app/main/default/triggers/ContentDocumentLink.trigger force-app/main/default/triggers/ContentDocumentTrigger.trigger manifest/LEXC00basecmp.xml manifest/LEXC01packagelexcommunitynew.xml manifest/LEXC02packagelexcommunityupdate.xml manifest/LEXC03Dahsboard.xml manifest/LEXC03report.xml manifest/LEXC03reportanddashboard.xml (deleted) manifest/LEXC04packagecommdeploy.xml