From f34a1b290e86407998e8af77d1344e91b7be08ce Mon Sep 17 00:00:00 2001 From: Echo_chen <2710907404@qq.com> Date: Mon, 2 Sep 2024 09:32:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B5=E9=98=B3=E5=A7=94=E6=89=98=E9=80=81?= =?UTF-8?q?=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 15 + lib/jacob-1.20/jacob-1.20-x64.dll | Bin 0 -> 226816 bytes lib/jacob-1.20/jacob-1.20-x86.dll | Bin 0 -> 189440 bytes lib/jacob-1.20/jacob-1.20.zip | Bin 0 -> 506374 bytes .../jacob-1.20/jacob-1.20/LICENSE.TXT | 504 +++ .../docs/BuildingJacobFromSource.md | 140 + .../jacob-1.20/docs/EventCallbacks.md | 57 + .../jacob-1.20/docs/JacobComLifetime.md | 13 + .../jacob-1.20/docs/JacobThreading.md | 224 ++ .../jacob-1.20/docs/ReleaseNotes.md | 1006 +++++ .../jacob-1.20/jacob-1.20/docs/UsingJacob.md | 146 + .../jacob-1.20/docs/api/allclasses-frame.html | 46 + .../docs/api/allclasses-noframe.html | 46 + .../com/jacob/activeX/ActiveXComponent.html | 1009 +++++ .../jacob/activeX/ActiveXDispatchEvents.html | 396 ++ .../jacob/activeX/ActiveXInvocationProxy.html | 344 ++ .../activeX/class-use/ActiveXComponent.html | 194 + .../class-use/ActiveXDispatchEvents.html | 125 + .../class-use/ActiveXInvocationProxy.html | 125 + .../api/com/jacob/activeX/package-frame.html | 22 + .../com/jacob/activeX/package-summary.html | 158 + .../api/com/jacob/activeX/package-tree.html | 156 + .../api/com/jacob/activeX/package-use.html | 161 + .../docs/api/com/jacob/com/ComException.html | 569 +++ .../api/com/jacob/com/ComFailException.html | 417 ++ .../docs/api/com/jacob/com/ComThread.html | 528 +++ .../docs/api/com/jacob/com/Currency.html | 391 ++ .../docs/api/com/jacob/com/DateUtilities.html | 360 ++ .../docs/api/com/jacob/com/Dispatch.html | 1745 ++++++++ .../api/com/jacob/com/DispatchEvents.html | 451 +++ .../api/com/jacob/com/DispatchIdentifier.html | 1351 +++++++ .../docs/api/com/jacob/com/DispatchProxy.html | 381 ++ .../docs/api/com/jacob/com/EnumVariant.html | 464 +++ .../api/com/jacob/com/InvocationProxy.html | 402 ++ .../jacob/com/InvocationProxyAllVariants.html | 331 ++ .../api/com/jacob/com/JacobException.html | 297 ++ .../docs/api/com/jacob/com/JacobObject.html | 378 ++ .../api/com/jacob/com/JacobReleaseInfo.html | 301 ++ .../docs/api/com/jacob/com/LibraryLoader.html | 529 +++ .../docs/api/com/jacob/com/MainSTA.html | 307 ++ .../jacob/com/NotImplementedException.html | 280 ++ .../docs/api/com/jacob/com/ROT.html | 497 +++ .../docs/api/com/jacob/com/STA.html | 454 +++ .../docs/api/com/jacob/com/SafeArray.html | 3148 +++++++++++++++ .../docs/api/com/jacob/com/Variant.html | 3415 ++++++++++++++++ .../api/com/jacob/com/VariantUtilities.html | 411 ++ .../api/com/jacob/com/VariantViaEvent.html | 282 ++ .../com/jacob/com/WrongThreadException.html | 296 ++ .../com/jacob/com/class-use/ComException.html | 167 + .../jacob/com/class-use/ComFailException.html | 125 + .../com/jacob/com/class-use/ComThread.html | 125 + .../api/com/jacob/com/class-use/Currency.html | 210 + .../jacob/com/class-use/DateUtilities.html | 125 + .../api/com/jacob/com/class-use/Dispatch.html | 634 +++ .../jacob/com/class-use/DispatchEvents.html | 167 + .../com/class-use/DispatchIdentifier.html | 125 + .../jacob/com/class-use/DispatchProxy.html | 125 + .../com/jacob/com/class-use/EnumVariant.html | 165 + .../jacob/com/class-use/InvocationProxy.html | 221 ++ .../class-use/InvocationProxyAllVariants.html | 125 + .../jacob/com/class-use/JacobException.html | 202 + .../com/jacob/com/class-use/JacobObject.html | 302 ++ .../jacob/com/class-use/JacobReleaseInfo.html | 125 + .../jacob/com/class-use/LibraryLoader.html | 125 + .../api/com/jacob/com/class-use/MainSTA.html | 167 + .../class-use/NotImplementedException.html | 125 + .../docs/api/com/jacob/com/class-use/ROT.html | 125 + .../docs/api/com/jacob/com/class-use/STA.html | 170 + .../com/jacob/com/class-use/SafeArray.html | 202 + .../api/com/jacob/com/class-use/Variant.html | 747 ++++ .../jacob/com/class-use/VariantUtilities.html | 125 + .../jacob/com/class-use/VariantViaEvent.html | 125 + .../com/class-use/WrongThreadException.html | 125 + .../docs/api/com/jacob/com/package-frame.html | 47 + .../api/com/jacob/com/package-summary.html | 312 ++ .../docs/api/com/jacob/com/package-tree.html | 196 + .../docs/api/com/jacob/com/package-use.html | 254 ++ .../jacob-1.20/docs/api/constant-values.html | 876 ++++ .../jacob-1.20/docs/api/deprecated-list.html | 317 ++ .../jacob-1.20/docs/api/help-doc.html | 230 ++ .../jacob-1.20/docs/api/index-all.html | 2410 +++++++++++ .../jacob-1.20/jacob-1.20/docs/api/index.html | 75 + .../jacob-1.20/docs/api/overview-frame.html | 22 + .../jacob-1.20/docs/api/overview-summary.html | 143 + .../jacob-1.20/docs/api/overview-tree.html | 206 + .../jacob-1.20/docs/api/package-list | 2 + .../jacob-1.20/jacob-1.20/docs/api/script.js | 30 + .../jacob-1.20/docs/api/serialized-form.html | 205 + .../jacob-1.20/docs/api/stylesheet.css | 574 +++ .../jacob-1.20/jacob-1.20/jacob-1.20-x64.dll | Bin 0 -> 226816 bytes .../jacob-1.20/jacob-1.20/jacob-1.20-x86.dll | Bin 0 -> 189440 bytes lib/jacob-1.20/jacob-1.20_src.zip | Bin 0 -> 822795 bytes pom.xml | 251 ++ .../entrustment/EntrustmentApplication.java | 20 + .../FeignOauth2RequestInterceptor.java | 37 + .../Interceptor/URLInterceptor.javax | 44 + .../entrustment/Interceptor/WebConfig.javax | 23 + .../config/BaseMybatisList2JsonHandler.java | 57 + .../config/BaseMybatisMap2JsonHandler.java | 60 + .../entrustment/config/ErrorController.java | 72 + .../entrustment/config/MyDatasources.java | 21 + .../config/ProcessInfoListJsonHandler.java | 68 + .../config/StringListJsonHandler.java | 70 + .../config/WebSecurityConfigurer.java | 28 + .../config/properties/ApiPathProperties.java | 17 + .../constant/EntrustMarkConstants.java | 18 + .../controller/ATestController.javax | 87 + .../controller/CaseEventController.java | 679 ++++ .../controller/CaseEvidenceController.java | 427 ++ .../controller/CommonController.java | 175 + .../controller/DelivererController.javax | 196 + .../controller/EntrustmentController.java | 2359 +++++++++++ ...tmentIdentificationMaterialController.java | 1156 ++++++ .../controller/IdentificationController.java | 167 + .../controller/SampleBoxController.java | 315 ++ .../controller/SampleBoxInLogController.java | 97 + .../controller/SampleController.java | 104 + .../SampleStoreChangeDutyLogController.java | 97 + .../controller/SampleStoreController.java | 97 + .../controller/SampleStoreLogController.java | 99 + .../controller/StorageCabinetController.java | 100 + .../controller/StorageCellController.java | 97 + .../controller/StorageCellLogController.java | 97 + .../controller/SynchronizeDataController.java | 82 + .../controller/TakerController.java | 190 + .../controller/xHairJobController.javax | 97 + ...JobIdentificationMaterialControllerx.javax | 96 + .../entrustment/dto/EntrustmentDTO.java | 12 + .../platform/entrustment/dto/PrintDTO.java | 13 + .../entrustment/dto/SampleBoxDTO.java | 12 + .../entrustment/entity/AvoidIdentifier.java | 15 + .../entrustment/entity/CaseEvent.java | 107 + .../entrustment/entity/CaseEvidence.java | 211 + .../entrustment/entity/Deliverer.javax | 70 + .../entity/EntrustMaterialOfThirdSys.java | 35 + .../entrustment/entity/EntrustOfThirdSys.java | 64 + .../entrustment/entity/Entrustment.java | 749 ++++ .../EntrustmentIdentificationMaterial.java | 543 +++ .../platform/entrustment/entity/HairJob.javax | 107 + .../HairJobIdentificationMaterial.javax | 194 + .../entrustment/entity/Identification.java | 46 + .../entrustment/entity/SampleBoxInLog.java | 77 + .../entrustment/entity/SampleStore.java | 59 + .../entity/SampleStoreChangeDutyLog.java | 65 + .../entrustment/entity/SampleStoreLog.java | 83 + .../entrustment/entity/StorageCabinet.java | 53 + .../entrustment/entity/StorageCell.java | 77 + .../entrustment/entity/StorageCellLog.java | 53 + .../platform/entrustment/entity/Taker.java | 71 + .../enums/EntrustmentStatusConstants.java | 105 + .../handler/ActiveMQListener.javax | 58 + .../entrustment/handler/ActiveMqConfigs.javax | 84 + .../entrustment/handler/AppStartupRunner.java | 87 + .../entrustment/mapper/CaseEventMapper.java | 39 + .../mapper/CaseEvidenceMapper.java | 16 + .../entrustment/mapper/DelivererMapper.javax | 17 + .../mapper/EntrustDataMaterialVoMapper.java | 16 + .../mapper/EntrustDataVoMapper.java | 10 + ...trustmentIdentificationMaterialMapper.java | 26 + .../entrustment/mapper/EntrustmentMapper.java | 36 + .../mapper/IdentificationMapper.java | 23 + .../mapper/SampleBoxInLogMapper.java | 16 + .../entrustment/mapper/SampleBoxMapper.java | 19 + .../entrustment/mapper/SampleMapper.java | 16 + .../SampleStoreChangeDutyLogMapper.java | 16 + .../mapper/SampleStoreLogMapper.java | 16 + .../entrustment/mapper/SampleStoreMapper.java | 16 + .../mapper/StorageCabinetMapper.java | 16 + .../mapper/StorageCellLogMapper.java | 16 + .../entrustment/mapper/StorageCellMapper.java | 16 + .../entrustment/mapper/TakerMapper.java | 17 + ...xHairJobIdentificationMaterialMapper.javax | 17 + .../entrustment/mapper/xHairJobMapper.javax | 17 + .../entrustment/misc/ProcessFlowMapper.java | 50 + .../entrustment/misc/Template2html.javax | 58 + .../misc/VelocityBarCodeImage.javax | 102 + .../misc/VelocityQRCodeImage.javax | 107 + .../entrustment/service/CaseEventService.java | 78 + .../service/CaseEvidenceService.java | 47 + .../service/DelivererService.javax | 25 + ...rustmentIdentificationMaterialService.java | 115 + .../service/EntrustmentService.java | 244 ++ .../service/IdentificationService.java | 51 + .../service/SampleBoxInLogService.java | 14 + .../entrustment/service/SampleBoxService.java | 85 + .../entrustment/service/SampleService.java | 22 + .../SampleStoreChangeDutyLogService.java | 14 + .../service/SampleStoreLogService.java | 14 + .../service/SampleStoreService.java | 14 + .../service/StorageCabinetService.java | 14 + .../service/StorageCellLogService.java | 14 + .../service/StorageCellService.java | 14 + .../service/SynchronizeDataService.java | 43 + .../service/SynchronizeMaterialVoService.java | 16 + .../entrustment/service/TakerService.java | 22 + .../service/impl/CaseEventServiceImpl.java | 363 ++ .../service/impl/CaseEvidenceServiceImpl.java | 176 + .../service/impl/DelivererServiceImpl.javax | 60 + ...mentIdentificationMaterialServiceImpl.java | 1603 ++++++++ .../service/impl/EntrustmentServiceImpl.java | 3516 +++++++++++++++++ .../impl/IdentificationServiceImpl.java | 80 + .../impl/SampleBoxInLogServiceImpl.java | 18 + .../service/impl/SampleBoxServiceImpl.java | 321 ++ .../service/impl/SampleServiceImpl.java | 226 ++ .../SampleStoreChangeDutyLogServiceImpl.java | 18 + .../impl/SampleStoreLogServiceImpl.java | 18 + .../service/impl/SampleStoreServiceImpl.java | 18 + .../impl/StorageCabinetServiceImpl.java | 18 + .../impl/StorageCellLogServiceImpl.java | 18 + .../service/impl/StorageCellServiceImpl.java | 18 + .../impl/SynchronizeDataServiceImpl.java | 1391 +++++++ .../SynchronizeMaterialVoServiceImpl.java | 23 + .../service/impl/TakerServiceImpl.java | 62 + ...JobIdentificationMaterialServiceImpl.javax | 18 + .../service/impl/xHairJobServiceImpl.javax | 18 + ...HairJobIdentificationMaterialService.javax | 14 + .../entrustment/service/xHairJobService.javax | 14 + .../platform/entrustment/vo/CaseEventVO.java | 27 + .../EntrustmentIdentificationMaterialVO.java | 14 + .../entrustment/vo/EntrustmentVO.java | 41 + .../entrustment/vo/IdentificationVO.java | 20 + .../entrustment/vo/MaterialListForBookVo.java | 25 + .../entrustment/vo/SampleBoxLiteVO.java | 28 + .../platform/entrustment/vo/SampleBoxVO.java | 29 + src/main/resources/banner.txt | 39 + src/main/resources/bootstrap.yml | 89 + src/main/resources/logback-spring.xml | 61 + src/main/resources/mapper/CaseEventMapper.xml | 167 + .../resources/mapper/CaseEvidenceMapper.xml | 49 + .../resources/mapper/DelivererMapper.xmlx | 20 + ...ntrustmentIdentificationMaterialMapper.xml | 115 + .../resources/mapper/EntrustmentMapper.xml | 284 ++ .../resources/mapper/IdentificationMapper.xml | 55 + .../resources/mapper/SampleBoxInLogMapper.xml | 21 + src/main/resources/mapper/SampleBoxMapper.xml | 32 + src/main/resources/mapper/SampleMapper.xml | 37 + .../mapper/SampleStoreChangeDutyLogMapper.xml | 19 + .../resources/mapper/SampleStoreLogMapper.xml | 22 + .../resources/mapper/SampleStoreMapper.xml | 18 + .../resources/mapper/StorageCabinetMapper.xml | 17 + .../resources/mapper/StorageCellLogMapper.xml | 15 + .../resources/mapper/StorageCellMapper.xml | 21 + src/main/resources/mapper/TakerMapper.xml | 20 + .../xHairJobIdentificationMaterialMapper.xmlx | 40 + src/main/resources/mapper/xHairJobMapper.xmlx | 26 + 245 files changed, 55306 insertions(+) create mode 100644 Dockerfile create mode 100644 lib/jacob-1.20/jacob-1.20-x64.dll create mode 100644 lib/jacob-1.20/jacob-1.20-x86.dll create mode 100644 lib/jacob-1.20/jacob-1.20.zip create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/LICENSE.TXT create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/BuildingJacobFromSource.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/EventCallbacks.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobComLifetime.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobThreading.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/ReleaseNotes.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/UsingJacob.md create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-frame.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-noframe.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXComponent.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXDispatchEvents.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXInvocationProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXComponent.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXDispatchEvents.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXInvocationProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-frame.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-summary.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-tree.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-use.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComFailException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComThread.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Currency.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DateUtilities.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Dispatch.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchEvents.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchIdentifier.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/EnumVariant.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxyAllVariants.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobObject.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobReleaseInfo.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/LibraryLoader.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/MainSTA.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/NotImplementedException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ROT.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/STA.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/SafeArray.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Variant.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantUtilities.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantViaEvent.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/WrongThreadException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComFailException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComThread.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Currency.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DateUtilities.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Dispatch.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchEvents.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchIdentifier.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/EnumVariant.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxy.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxyAllVariants.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobObject.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobReleaseInfo.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/LibraryLoader.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/MainSTA.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/NotImplementedException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ROT.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/STA.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/SafeArray.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Variant.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantUtilities.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantViaEvent.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/WrongThreadException.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-frame.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-summary.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-tree.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-use.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/constant-values.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/deprecated-list.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/help-doc.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index-all.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-frame.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-summary.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-tree.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/package-list create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/script.js create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/serialized-form.html create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/stylesheet.css create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/jacob-1.20-x64.dll create mode 100644 lib/jacob-1.20/jacob-1.20/jacob-1.20/jacob-1.20-x86.dll create mode 100644 lib/jacob-1.20/jacob-1.20_src.zip create mode 100644 pom.xml create mode 100644 src/main/java/digital/laboratory/platform/entrustment/EntrustmentApplication.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/Interceptor/FeignOauth2RequestInterceptor.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/Interceptor/URLInterceptor.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/Interceptor/WebConfig.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisList2JsonHandler.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisMap2JsonHandler.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/MyDatasources.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/ProcessInfoListJsonHandler.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/StringListJsonHandler.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/WebSecurityConfigurer.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/config/properties/ApiPathProperties.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/ATestController.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/CaseEventController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/CaseEvidenceController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/CommonController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/DelivererController.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentIdentificationMaterialController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/IdentificationController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxInLogController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreChangeDutyLogController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreLogController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/StorageCabinetController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellLogController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/SynchronizeDataController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/TakerController.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobController.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobIdentificationMaterialControllerx.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/dto/EntrustmentDTO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/dto/PrintDTO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/dto/SampleBoxDTO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/AvoidIdentifier.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvent.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvidence.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/Deliverer.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialOfThirdSys.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/EntrustOfThirdSys.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/HairJob.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/HairJobIdentificationMaterial.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/Identification.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/SampleBoxInLog.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/SampleStore.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreChangeDutyLog.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreLog.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/StorageCabinet.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/StorageCell.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/StorageCellLog.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/Taker.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/enums/EntrustmentStatusConstants.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMQListener.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMqConfigs.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/handler/AppStartupRunner.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEventMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEvidenceMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/DelivererMapper.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataMaterialVoMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataVoMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentIdentificationMaterialMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/IdentificationMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxInLogMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreChangeDutyLogMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreLogMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCabinetMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellLogMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/TakerMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobIdentificationMaterialMapper.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobMapper.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/misc/ProcessFlowMapper.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/misc/Template2html.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/misc/VelocityBarCodeImage.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/misc/VelocityQRCodeImage.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/CaseEventService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/CaseEvidenceService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/DelivererService.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentIdentificationMaterialService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/IdentificationService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxInLogService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreChangeDutyLogService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreLogService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/StorageCabinetService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/StorageCellLogService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/StorageCellService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeDataService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeMaterialVoService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/TakerService.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEventServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEvidenceServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/DelivererServiceImpl.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/IdentificationServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxInLogServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreChangeDutyLogServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreLogServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCabinetServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellLogServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeDataServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeMaterialVoServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/TakerServiceImpl.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobIdentificationMaterialServiceImpl.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobServiceImpl.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/xHairJobIdentificationMaterialService.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/xHairJobService.javax create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/CaseEventVO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentIdentificationMaterialVO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/IdentificationVO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/MaterialListForBookVo.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxLiteVO.java create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxVO.java create mode 100644 src/main/resources/banner.txt create mode 100644 src/main/resources/bootstrap.yml create mode 100644 src/main/resources/logback-spring.xml create mode 100644 src/main/resources/mapper/CaseEventMapper.xml create mode 100644 src/main/resources/mapper/CaseEvidenceMapper.xml create mode 100644 src/main/resources/mapper/DelivererMapper.xmlx create mode 100644 src/main/resources/mapper/EntrustmentIdentificationMaterialMapper.xml create mode 100644 src/main/resources/mapper/EntrustmentMapper.xml create mode 100644 src/main/resources/mapper/IdentificationMapper.xml create mode 100644 src/main/resources/mapper/SampleBoxInLogMapper.xml create mode 100644 src/main/resources/mapper/SampleBoxMapper.xml create mode 100644 src/main/resources/mapper/SampleMapper.xml create mode 100644 src/main/resources/mapper/SampleStoreChangeDutyLogMapper.xml create mode 100644 src/main/resources/mapper/SampleStoreLogMapper.xml create mode 100644 src/main/resources/mapper/SampleStoreMapper.xml create mode 100644 src/main/resources/mapper/StorageCabinetMapper.xml create mode 100644 src/main/resources/mapper/StorageCellLogMapper.xml create mode 100644 src/main/resources/mapper/StorageCellMapper.xml create mode 100644 src/main/resources/mapper/TakerMapper.xml create mode 100644 src/main/resources/mapper/xHairJobIdentificationMaterialMapper.xmlx create mode 100644 src/main/resources/mapper/xHairJobMapper.xmlx diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1016983 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM moxm/java:1.8-full + +RUN mkdir -p /dlp-entrustment + +WORKDIR /dlp-entrustment + +ARG JAR_FILE=target/dlp-entrustment.jar + +COPY ${JAR_FILE} app.jar + +EXPOSE 5203 + +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom" + +CMD sleep 60; java -jar app.jar $JAVA_OPTS diff --git a/lib/jacob-1.20/jacob-1.20-x64.dll b/lib/jacob-1.20/jacob-1.20-x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..b43ebcdea6790f7f801853d0fc03879f2fb72cce GIT binary patch literal 226816 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 z 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 Hzx@0KP2Lo$ literal 0 HcmV?d00001 diff --git a/lib/jacob-1.20/jacob-1.20.zip b/lib/jacob-1.20/jacob-1.20.zip new file mode 100644 index 0000000000000000000000000000000000000000..73388faeee418360568e87a29d96e2ead9f3be6f GIT binary patch literal 506374 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

>`?heiU`M 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

2LH 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%0DiI7Px-MJ?5W2 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 literal 0 HcmV?d00001 diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/LICENSE.TXT b/lib/jacob-1.20/jacob-1.20/jacob-1.20/LICENSE.TXT new file mode 100644 index 0000000..a2a1d92 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/LICENSE.TXT @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/BuildingJacobFromSource.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/BuildingJacobFromSource.md new file mode 100644 index 0000000..5015921 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/BuildingJacobFromSource.md @@ -0,0 +1,140 @@ +# Overview + +JACOB is built on windows machines using ANT, most commonly from inside of Eclipse. The main steps for getting a working Jacob build are: + +1. Check out the source code or unpack the source zip file from sourceforge +2. Install the Development Environment +3. Configure the build by creating a _compilation_tools.properties_ file. +4. Run Eclipse and load the project into eclipse +5. Open the build.xml file in Eclipse and run the default ant target + +# Repository Organization + +Unpack the source archive zip file or check the files out of CVS into d:\jacob or some other familiar place. Source Java and JNI files are located in separate packages from the unit tests and the samples. + +||| +|-|-| +| docs | documentation +| jni | c++ code +| lib | libraries needed to compile unit tests +| release | a directory built by the ant script where jacob is constructed +| samples | sample programs +| src | Jacob Java source files +| unittest | JUnit 4.12 unit test programs. Run from the test target in build.xml +| vstudio | some out of date VC++ project files +| bulid.xml | the ant build script. It can be run from inside Eclipse + +The Servlet examples that required j2ee libraries to compile have temporarily been removed. + +# Development Environment + +The simplest build environment includes MS Visual Studio 16.0 (Studio 2019), Eclipse 2020.09 with the C/C++ module and JDK 1.8. In that situation, you would just create the _compilation_tools.properties_ using the example at the top of build.xml as a template. + +* Microsoft Visual Studio 2019 Community Edition. Installs to C:\ProgramFiles (X86) + * MSVC + * Windows 10 SDK + * C++ MFC CLI Modules - don't know which o fthese are needed +* Eclipse from www.eclipse.org as the Java IDE. +* Eclipse C/C++ plugin can be used for C coding in place of VC++ IDE. +* Java JDK 1.8 , latest available + +||||||| +|--- |--- |--- |--- |--- |--- | +|Release |C Version |Java Version|ANT Version |Eclipse Version Used|generated DLLs| +|up to 1.6|VC 98 (6.0) |? |MAKE |? |32 bit| +|1.7 |VC 98 (6.0) |1.4 (48) |1.? |? |32 bit| +|1.8 |VC 98 (6.0) |1.4 (48) |1.? |? |32 bit| +|1.9 |VC 98 (6.0) |1.4 (48) |1.? |? |32 bit| +|1.10 |VC 98 (6.0) |1.4 (48) |1.? |3.?? |32 bit| +|1.11 |VC 98 (6.0) & 2003 64bit libs|1.4.? (48) |1.6.? |3.2.1 |32 and 64 bit| +|1.12 |VC 98 (6.0) & 2003 64bit libs|1.4.2 (48) |1.6.5 |3.2.2 |32 and 64 bit| +|1.13 |VC 2005 (8) |1.4.2 (48) |1.7.0 |3.3 |32 and 64 bit| +|1.14 |VC 2005 (8) |1.5.0 (49) |1.7.0 |3.3 |32 and 64 bit| +|1.15 |VC 2005 (8) |1.5.0 (49) |1.7.0 |3.4 |32 and 64 bit| +|1.17 |VC 2005 (8) |1.5.0 (49) |1.8.4 Eclipse Embedded|4.3 |32 and 64 bit| +|1.18 |VS 2013 (12) Windows SDK 7.1A|1.6.0 (50) |1.8.4 Eclipse Embedded|4.3 |32 and 64 bit| +|1.19 |VS 2013 (12) Windows SDK 7.1A|1.8.0 (52) |1.10.1 Eclipse Provided|4.7 |32 and 64 bit| +|1.20 |VS 2019 (16) Windows SDK 10 |1.8.0 (52) |1.10.8 Eclipse Provided|2020 09 |32 and 64 bit| + +Microsoft Visual Studio 2019 supports 64 bit builds. so no additional tools are required. + +# Build Process + +The build process is based on ANT. You can run ANT from inside of eclipse or from the command line. Running from inside eclipse means you don't have any installation, pathing or configuration to do. You can just open the xml, select the target in the "Outline" pane, right mouse and then "run as ant" on the selected target.The ant process is driven off of a configuration file named `compilation_tools.properties` that describes the locations of the JDK and Microsoft C++ tools. The `build.xml` file in the root directory contains examples of the contents of this file. There are two main ant targets. + +* **ant default** executes the following steps when using the default target. + * Build the Java code + * Build the jni code + * create the dll + * create jar file +* **ant PackageRelease** runs the above listed steps and then + * builds the javadoc + * builds a source zip + * builds a binary zip with the javadoc +* **test** runs all the tests + * One of the Excel unit tests is hard coded against Office 2019 32 bit. + +# Eclipse Java IDE + +You can open the jacob-project in Eclipse. + +1. Open Eclipse +2. File-->New-->Other... +3. Java --> Java Project form Existing Ant Buildfile +4. Click "next" to go to "Create a Java Project from an Ant Buildfile" +5. Browse to and select build.xml in the project directory +6. Select any of the javac tasks. This wall cause that one source directory to be added as a eclipse source directory. + +Eclipse users have to do some minor tweaks to their project if they want to use the integrated build process. This is because the unit tests are files located in the "unittest" directory while the project source files themselves are in "src" the root directory. By default, eclipse will add the entire project as source. This messes up the package naming. In addition, the build directory should be set to be the same place the ANT build puts the compiled java classes. A couple small tweaks to the build path fix these problems: + +1. Open up the project properties and go to the "Java Build Path" properties panel. +2. Remove the root of the project from the build path if it is there +3. Add / verify the following folders are in the build path. Add them with "link source..." if they are missing `samples`, `src` and `unittest` to the build path in the Source tab. +4. Add junit as a library "Add Library...Junit...Junit 4" +5. Exclude *.txt from each of the newly added folders. +6. Set the default build output directory to `jacob-project/release/java` +7. Open "Windows-->Show View-->Project Explorer" + +## Troubleshooting Build Problems + +* Symptom: Build Failed can't find javac compiler. JAVA_HOME does not point to the JDK Problem: + The java library is pointed at a jre insted of the jdk. Update Project..Properties..Java Build Path to point at the JDK +* Symptom: The jar is built but no dlls were compiled. + Problem: compilation_tools.properties does not have the correct location for the Microsoft tools. +* Sympton: Can't find jni.h or can't find C++ compiler + Problem: compilation_tools.properties configured incorrectly. Either paths are wrong or the separator is wrong. It requires two backslashes for a separator. +* Symptom: Ant fails with the message `Could not create task or type of type: junit.`. + Problem: junit.jar must be copied from this project to the $ANT_HOME/lib directory. + +# Compilation_tools.properties +See build.xml for a sample +# Running Samples and Tests + +Samples and JUnit test programs can be found in the source jar or in sourceforge/git. The programs can be run from a bat file or from inside the Eclipse IDE. The java library path variable must be set to include the directory the jacob.dll is in. The simplest way to do that is to add it as a command line option. The following assume that your jacob development area is located in c:\dev\jacob: + +``` + -Djava.library.path=c:/dev/jacob/release/x86 + -Dcom.jacob.autogc=false + -Dcom.jacob.debug=false + -Xcheck:jni +``` + +JUnit test programs can be individually run from inside eclipse or en-masse via the `ant test` target. + +# Git Bash environment configuration + +Example `setenv.sh` environment configuration for windows machine for a gitbash terminal as of 2020/09 + +``` +JAVA_HOME="/c/Program Files/Amazon Corretto/jdk1.8.0_265" +ANT_HOME="/c/Users/joe/.p2/pool/plugins/org.apache.ant_1.10.8.v20200515-1239" +PATH=$ANT_HOME/bin:$JAVA_HOME/bin:$PATH +export PATH +export ANT_HOME +export JAVA_HOME +``` + +*** + +Last Modified 09/2020 1.19 +Converted from HTML to md 9/2020 \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/EventCallbacks.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/EventCallbacks.md new file mode 100644 index 0000000..d3cbb37 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/EventCallbacks.md @@ -0,0 +1,57 @@ +## Overview + +Jacob can register Java classes for MS application events or callbacks. + +## Sequence of Events + +The normal flow for this is: + +1. Application thread creates an instance of the event handler and registers it with Jacob +2. The application continues on doing other work. +3. Some time later, the MS application takes some action and initiates the event callback. +4. The Java VM receives the event and spins up a new thread to handle it. +5. The Jacob jni EventProxy in the dll is called by the VM. +6. The Jacob jni EventProxy creates Variant objects to handle the parameters of the passed in event. +7. The Jacob jni EventProxy sends the name of the callback and the array of Variant objects to the Java InvocationProxy that was registered to catch events. +8. The Java InvocationProxy uses reflection to map the event name to a method name with the exact same name. +9. The Java InvocationProxy sends the message to the registered event handler and returns if the event handler is of type void (standard behavior). +10. The Java InvocationProxy sends the message to the registered event handler and returns the Variant that resulted from the call back to the Jacob jni EventProxy that then returns it to the windows calling program. + +## SWING Issues + +Swing developers should note that this message comes in on a thread other than the event thread. All objects receiving events that require user intervention or drawing in the UI should use invokeLater() to post requests for actions onto the event queue. Failure to do so will insure random failures in the GUI. Java Web Start (JWS) and other launchers can have additional issues related to the class loader. The Jacob C++ library uses FindClass() to find the Variant class when building the parameter list. FindClass() uses the system class loader which includes only the classes specified at run time or in the CLASSPATH. Most of the application classes in this situation live in an alternate set of class loaders that were created when the launcher located and ran the application classes. This means that the search for Variant will fail usually with the silent and immediate termination of the Java application. The thread classloader probably can�t be used to try and find the class because this new thread does not have a classloader associated with it other than the system class loader. The end result is that the Variant class needs to be located via other means and that the thread classloader should be set to be the context class loader of the event handler class. + +## 1.8 and 1.9 behavior + +The Jacob EventProxy class has been modified (off of the 1.8 tree) so that it takes a two step approach towards fixing these problems. + +1. The EventProxy constructor now accepts an extra object, an instance of the Variant class. This gives the EventProxy a way to get to the Variant class and thus to its classloader. All of the callers of the constructor have been modified to pass a Variant object to the EventProxy without programmer intervention. +2. EventProxy first attempts to locate the Variant class using FindClass() +3. Failing that, it looks to see if a variant object had been passed in. If so, it calls class() and goes from there. +4. If all that fails, it logs a message and then fails in the spectacular fashion of the previous versions. + +## 1.10 behavior + +The Jacob EventProxy class has been modified so that it takes a different approach towards fixing this problem. + +1. All objects that request event notification are now wrapped in a Java InvocationProxy so that a standard interface is always presented to the JNI EventProxy object. +2. The EventProxy constructor accepts any Java class. It wraps the class if it is not an InvocationProxy or uses just the passed in object if it is an InvocationProxy. The JNI layer talks to the InvocationProxy instead of talking directly to the event listener as in previous releases. +3. The Java InvocationProxy has a method on it that will return the Variant class that the EventProxy. The JNI code uses this method to acquire the class so that it can call newInstance(). + +Developers can receive call back events in JWS other Java launching programs without implementing any additional code. They should be aware that their callback methods may need to set the class loader. If they expect to create any objects.: + +``` + Public xxx someHandler(Variant[] foo){ + Thread.currentThread().setContextClassLoader( + this.getClass().getClassLoader()); + // do something + } +``` + +There may still be a dual event queue issue in JWS applications that needs to be looked at. + +## 1.12 Experimental Behavior + +Release 1.12 adds experimental support for event handlers that accept java objects as parameters to closer match the signature of the windows callback. New ActiveXDispatchEvents and ActiveXInvocationProxy operate in tandem in the same way as DispatchEvents and InvocationProxy. DispatchEvents overrides getInvocationProxy() to create a new ActiveXInvocationProxy in place of the normal InvocationProxy. ActiveXInvocationProxy has its own invoke() method that uses reflection to call back using java objects as parameters.Issues with this approach + +* Event callbacks that use java signatures do not support parameter modification. Many windows callbacks let a user reject an event that is about to happen by modifying one of the parameters. In this situation, the old DispatchEvents/InvocationProxy pair must be used instead of the new handlers. \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobComLifetime.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobComLifetime.md new file mode 100644 index 0000000..59fd983 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobComLifetime.md @@ -0,0 +1,13 @@ +# COM Object Lifetime in JACOB + +## introduction + +JACOB Version 1.7 implements a new [Threading Model](JacobThreading.html) that is more compatible with COM apartments. There is also an incompatibility between the Java object lifetime model and that of COM objects. COM Objects live and die by their reference count, whereas Java objects are collected by the Garbage Collector (GC) based on algortihms that are hidden from the user. + +## COM Object Lifetime in JACOB Prior to Version 1.7 + +In version 1.6 and earlier, JACOB objects which wrapped COM objects had `finalize()` methods that would call a native `release` method which would call a COM `Release`.This has many problems. For one thing, the GC may take a long time to kick in and resource consumption may grow. However, the more problematic issue is that finalizers are called from a separate thread, and, as was discussed in the [Threading Model](JacobThreading.html) document, this can result in COM errors if the object is running in an STA. Even if the object is running in an MTA, the finalizer may decide to run after we have terminated the thread that holds the component, in which case we would get fatal errors and crashes. + +## COM Object Lifetime in JACOB in Version 1.7 + +In Version 1.7, all JACOB objects which wrap COM objects extend `com.jacob.com.JacobObject`. This object has some special code to register itself with a `com.jacob.com.ROT` object which represents a Running Object Table (ROT). This table maps a Thread to the set of JacobObjects created in that thread. Therefore, when you call `ComThread.Release()`, the ROT checks whether that thread has created any objects, and these objects are released by calling their native `release` method (which is public).This lifetime management method ties the lifecycle to the thread's lifecycle rather than the GC. The JacobObject's still have finalizers, but they will typically not perform the native `release` since that has already been called. The native `release` methods were written such that you can call them multiple times without worrying - since they zero out the native pointer when called the first time.If you choose to call `release` methods on your objects yourself, that is allowed. In that case, when the thread is released the release calls will be no-ops.It becomes important for you to call `ComThread.Release()` on any thread before you allow it to exit, otherwise you may get some random crashes later on in your code. \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobThreading.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobThreading.md new file mode 100644 index 0000000..f5a5a1f --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/JacobThreading.md @@ -0,0 +1,224 @@ +# COM Apartments in JACOB + +## introduction + +The COM model for Threading differs from the Java model. In COM, each component can declare whether or not it support multi-threading. You can find some basic information about COM threading at: + +* [http://www.execpc.com/~gopalan/com/com_threading.html](http://www.execpc.com/~gopalan/com/com_threading.html) +* [www.microsoft.com/msj/0297/apartment/apartment.htm](www.microsoft.com/msj/0297/apartment/apartment.htm) +* [http://www.cswl.com/whiteppr/white/multithreading.html](http://www.cswl.com/whiteppr/white/multithreading.html) + +The term **Single Threaded Apartment (STA)** refers to a thread where all COM objects created in that thread are single-threaded. This can manifest itself in two ways: +Either all calls into that component are made from the same thread that created the component +OR any call that is made from another thread gets serialized by COM. This serialization of calls is done by using a Windows message loop and posting messages to a hidden window (I'm not kidding). The way COM achieves this is by requiring any other thread to make calls through a local Proxy object rather than the original object (more on this when we discuss the JACOB DispatchProxy class).What does this mean for a Java application? If you are using a component that declares itself as **ThreadingModel "Apartment"** (you can find this out by looking in the registry under its CLSID), and you plan to create, use and destroy this component in one thread - then you are following the rules of an STA and you can declare the thread as an STA thread.On the other hand, if you need to make method calls from another thread (e.g. in a servlet) then you have a few choices. Either you create the component in its own STA, by extending `com.jacob.com.STA`, and use the `com.jacob.com.DispatchProxy` class to pass the Dispatch pointer between threads, or you can declare your thread as an MTA thread. In that case, COM will make the cross-thread calls into the STA that is running your component. If you create an Apartment threaded component in the MTA, COM will automatically create an STA for you and put your component in there, and then marshall all the calls.This brings us to the notion of a **Main STA**. COM requires that if there is any Apartment threaded component in your application, then the first STA created is tagged as the **Main STA**. COM uses the Main STA to create all the Apartment threaded components that are created from an MTA thread. The problem is that if you have already created an STA, then COM will pick that as the Main STA, and if you ever exit that thread - the whole application will exit. + +## COM Threads in JACOB Prior to Version 1.7 + +Up until version 1.7 of JACOB, there was only one model available in JACOB: + +* Before version 1.6: All threads were automatically initialized as STAs. +* In version 1.6: All threads were automatically initialized as MTAs. + +The reason for the change in default was that tagging a Java thread as an STA can cause problems. Any Java Swing application, as well as servlets and applets need to be able to make calls from multiple threads. If you try to make COM method calls across STA threads - it will fail!In most cases, the default chosen by JACOB 1.6 (MTA) works fine, however there are some notable exceptions that have caused people grief. One such exception is in the case of MAPI. It turns out that if you try to create a MAPI object from an MTA thread - it simply fails and exits. This has caused some people to recompile JACOB 1.6 back with the STA default.There is another problem with MTA threads: when you are using Apartment threaded components, we already noted that COM will create the components in the Main STA. If one doesn't exist, COM will create it. However, this means that **all** Apartment threaded components will be created in the **same STA**. This creates a bottleneck, and a dependency between unrelated components. Also, if that STA exits, then all components are destroyed and the application will likely crash. + +## COM Threads in JACOB Version 1.7 + +In Version 1.7 we have added finer grained control to allow the Java programmer to control how COM creates its components. Unfortunately, this means that you need to have a pretty good understanding of the dark and mystical subject of COM Apartments. There are a few different cases you need to consider: + +### Default + +If you simply run code that was created in Version 1.6 and ignore the COM threading issue, then you will get the same behavior as in 1.6: Each java thread will be an MTA thread, and all Apartment threaded components will be created by COM in its own Main STA. This typically works for most applications (exceptions noted above). + +### Create Your Own Apartment + +To declare an MTA thread use the following template: +``` + ComThread.InitMTA(); + ... + ... + ComThread.Release(); +``` +If you want JACOB to create its own Main STA (rather than having COM choose an STA for you), then you should use: + +``` + Thread 1: + ComThread.InitMTA(true); // a true tells JACOB to create a Main STA + ... + ... + ComThread.Release(); + ... + Thread 2: + ComThread.InitMTA(); + ... + ... + ComThread.Release(); + ... + ... + ComThread.quitMainSTA(); +``` + +In this case, you can also create the Main STA explicitly: + +``` + ComThread.startMainSTA(); + ... + ... + Thread 1: + ComThread.InitMTA(); + ... + ... + ComThread.Release(); + ... + Thread 2: + ComThread.InitMTA(); + ... + ... + ComThread.Release(); + ... + ... + ComThread.quitMainSTA(); +``` + + +In the latter case, all Apartment threaded components will be created in JACOB's main STA. This still has all the problems of components sharing the same Main STA and creating a bottleneck. To avoid that, you can also create STA threads yourself: + + +``` + ComThread.startMainSTA(); + ... + ... + Thread 1: + ComThread.InitSTA(); + ... + ... + ComThread.Release(); + ... + Thread 2: + ComThread.InitMTA(); + ... + ... + ComThread.Release(); + ... + ... + ComThread.quitMainSTA(); +``` + +In this example, thread 1 is an STA and thread 2 is an MTA. You could omit the call to ComThread.startMainSTA(), but if you do, then COM will make the first STA your main one, and then if you exit that thread, the application will crash.Actually, Thread 1 is _almost_ an STA. It's lacking a windows message loop. So, this type of STA is fine as long as you are creating a component and using it in the same thread, and not makind event callbacks. + +### JACOB's STA Class + +If you want to create an true STA where you can create a component and then let other threads call methods on it, then you need a windows message loop. JACOB provides a class called: `com.jacob.com.STA` which does exactly this. + +``` + public class com.jacob.com.STA extends java.lang.Thread + { + public com.jacob.com.STA(); + public boolean OnInit(); // you override this + public void OnQuit(); // you override this + public void quit(); // you can call this from ANY thread + } +``` + +The STA class extends `java.lang.Thread` and it provides you with two methods that you can override: `OnInit` and `OnQuit`. These methods are called from the thread's `run` method so they will execute in the new thread. These methods allow you to create COM components (Dispatch objects) and release them. To create an STA, you subclass it and override the OnInit.The `quit` method is the **only** other method that can be called from any thread. This method uses the Win32 function `PostThreadMessage` to force the STA's windows message loop to exit, thereby terminating the thread.You will then need to make calls into the component that is running in the STA thread. If you simply try to make calls from another thread on a Dispatch object created in the STA thread, you will get a COM Exception. For more details see: [Don Box 'Effective COM' Rule 29](http://www.develop.com/effectivecom): Don't Access raw interface pointers across apartment boundaries. + +### The DispatchProxy Class + +Since you cannot call methods directly on a Dispatch object created in another STA JACOB provides a method for the class that created the Dispatch object to marshal it to your thread. This is done via the `com.jacob.com.DispatchProxy` class. +``` + public class DispatchProxy extends JacobObject { + public DispatchProxy(Dispatch); + public Dispatch toDispatch(); + + public native void release(); + public void finalize(); + } +``` +This class works as follows: the thread that created the Dispatch object constructs an instance of DispatchProxy(Dispatch) with the Dispatch as a parameter. This instance can then be accessed from another thread, which will invoke its `toDispatch` method proxy as if it were local to your thread. COM will do the inter-thread marshalling transparently.The following example is part of samples/test/ScriptTest2.java in the JACOB distribution. It shows how you can create the ScriptControl in one STA thread and make method calls on it from another: + +``` + import com.jacob.com.*; + import com.jacob.activeX.*; + + class ScriptTest2 extends STA + { + public static ActiveXComponent sC; + public static Dispatch sControl = null; + public static DispatchProxy sCon = null; + + public boolean OnInit() + { + try + { + System.out.println("OnInit"); + System.out.println(Thread.currentThread()); + String lang = "VBScript"; + + sC = new ActiveXComponent("ScriptControl"); + sControl = (Dispatch)sC.getObject(); + + // sCon can be called from another thread + sCon = new DispatchProxy(sControl); + + Dispatch.put(sControl, "Language", lang); + return true; + } + catch (Exception e) + { + e.printStackTrace(); + return false; + } + } + + public void OnQuit() + { + System.out.println("OnQuit"); + } + + public static void main(String args[]) throws Exception + { + try { + ComThread.InitSTA(); + ScriptTest2 script = new ScriptTest2(); + Thread.sleep(1000); + + // get a thread-local Dispatch from sCon + Dispatch sc = sCon.toDispatch(); + + // call a method on the thread-local Dispatch obtained + // from the DispatchProxy. If you try to make the same + // method call on the sControl object - you will get a + // ComException. + Variant result = Dispatch.call(sc, "Eval", args[0]); + System.out.println("eval("+args[0]+") = "+ result); + script.quit(); + System.out.println("called quit"); + } catch (ComException e) { + e.printStackTrace(); + } + finally + { + ComThread.Release(); + } + } + } +``` + +You can try to modify the `Dispatch.call` invocation in the main thread to use `sControl` directly, and you will see that it fails. Notice that once we construct the ScriptTest2 object in the main thread, we sleep for a second to allow the other thread time to initialize itself.The STA thread calls `sCon = new DispatchProxy(sControl);` to save a global reference to the DispatchProxy that represents the `sControl` object. The main thread then calls: `Dispatch sc = sCon.toDispatch();` to get a local Dispatch proxy out of the DispatchProxy object.At most **one(!)** thread can call toDispatch(), and the call can be made only once. This is because a IStream object is used to pass the proxy, and it is only written once and closed when you read it. If you need multiple threads to access a Dispatch pointer, then create that many DispatchProxy objects. For more details please refer to the Don Box reference above. + +### Recommended Procedure + +* It is recommended that you always allow JACOB to manage the main STA rather than letting COM create one on its own or tag one of yours. +* Declare an STA thread using ComThread.InitSTA() if all your method calls for that component are going to come from the same thread. +* If you want an STA thread that allows other threads to call into it, use the `com.jacob.com.STA` class as outlined above. +* If you have a COM component that declares its ThreadingModel as "Free" or "Both", then use the MTA. +* In most cases, if you need to make method calls from multiple threads, you can simply use MTA threads, and allow COM to create the components in the Main STA. You should only create your own STA's and DispatchProxy if you understand COM well enough to know when the MTA solution will fail or have other shortcomings. + +There are 3 examples in the samples/test directory that demonstrate these cases: + +* ScriptTest.java - creates an STA for the ScriptControl component and runs all its method calls from that STA. +* ScriptTest2.java - creates a separate STA thread, and makes method calls into the component from another thread using DispatchProxy. +* ScriptTest3.java - creates a separate MTA thread, and makes method calls into the component from another MTA thread. This is simpler than ScriptTest2 for most applications. + +### Default Threading Model + +If you create a new thread, and don't call `ComThread.InitSTA()` or `ComThread.InitMTA()` on it, then the first time your java code creates a JacobObject, it will try to register itself with the ROT, and when it sees that the current thread is not initialized, it will initialize it as MTA. This means that the code to do this is no longer inside the native jni code - it is now in the `com.jacob.com.ROT` class. For more details on the ROT, see the [Object Lifetime](JacobComLifetime.html) document. \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/ReleaseNotes.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/ReleaseNotes.md new file mode 100644 index 0000000..ccbdb59 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/ReleaseNotes.md @@ -0,0 +1,1006 @@ +## JACOB 1.20 +### What's New +* Upgraded from VS2015 to VS 2019 +* Move from Sourceforge to GitHub +* Updated Junit jars +* VT_DATE and SafeArray +### Tracked Changes +| Item | Description | +|-|-| +| **Bugs** | | +| | none | +| **Patches** | | +| 48 | Update to VS2019 Community and Windows 10 libs | +| 1 | Support VT_DATE getting from SafeArray | +| **Feature Requests** | | +| | none | + +## JACOB 1.19 +### What's New +* Upgraded from Java 6 to Java 8 compilation +* Upgraded from junit 3.8.1 to 4.12 +* Migrated from CVS to GIT using sourceforge migration instructions https://sourceforge.net/p/forge/documentation/CVS/ +### Tracked Changes +| Item | Description | +|-|-| +| **Bugs** | | +| 132 | 32 bit ponters not convertd to 64 bit | +| 130 | Name value incorrect in Mainfest.MF affecting tamper check| +| **Patches** | | +| | none | +| **Feature Requests** | | +| | none | + +## JACOB 1.18 +### What's New +* (M2) Built with Java 1.6 and Visual Studio 2013 Microsoft Platform SDK V7.1A (introduced with VS2012)instead of v7.0A (vs2010) Targeting SDK V7.1 with USING_V110_SDK71" http://en.wikipedia.org/wiki/Microsoft_Windows_SDK +* (M2) Temporarily using AMD64 compiler instead of x86_amd64 because of installation issues on dev machine. Should generate same output even though dll files are different sizes between M1 and M2\. http://msdn.microsoft.com/en-us/library/x4d2c09s.aspx +* (M2) Dropped support for XP +### Tracked Changes +| Item | Description | +|-|-| +| **Bugs** | | +| 119 (new numbers) | (M?)Attribute lacking in MANIFEST.MF required since Java 1.7u45 | +| **Patches** | | +| 42 (new numbers) | (M3)Mapping of names to dispIDs implemented| +| **Feature Requests** | | +| | none | + + +## JACOB 1.17 +### What's New +* No new features +### Tracked Changes +| Item | Description | +|-|-| +| **Bugs** | | +| 3505940 | (M2)JacobVersion.properties accidently omitted from JAR. Must build from command line to get it included. | +| 3436102 | (M1)Fix memory pointer that was 32 bit. Causes defects in 64 bit systems above 2GB | +| 115 (new numbers) | (M3)Release problem if you've got two threads with the same name | +| 111 (new numbers) | (M3)m_pDispatch is not 0 if not attached | +| 117 (new numbers) | (M4) NullPointerException injacob-1.17-M2 | +| **Patches** | | +| 41 (new numbers) | (M3)Fix for SafeArray(String) constructor| +| **Feature Requests** | | +| | none | + +## JACOB 1.16 +### What's New +* No new features +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
3436143(M2)Remove Main-Class from MANIFEST because there is no main class entry point for this jar file
3435567(M2)Add HRESULT to error message when unknown COM error raised in Dispatch
 (M2)Added debug info to advise failure messages.
 (M2)Added support for null dispatch object in putVariantDispatch.
 (M2)Fixed memory leak in Variant.cpp zeroVariant method possibly related to previous fix proposed in SF 1689061 but never implemented. I guess we should fix it since people keep pointing it out
 (M2)Variant.getString() now returns null for NULL or EMPTY Variants instead of throwing exception.
3412922(M1)Fix for: When a DispatchEvent is created with a COM object, the COM object is never released totally, and the destructor function is never called.
  
**Patches**
3377279(M1)Fix possible exception. Added initializing Variant used to retrieve the next value from IEnum because some implementations call VariantClear on it before setting a new value
 (M1)Isolate compilation of SafeArrayTest.java because it is UTF-16 and not UTF-8
 (M1)Changed windows version _WIN32_WINNT to 0x0500 to fix build with VS2010\. (now 2000 or later)
 (M1)Fixed the leak in Java_com_jacob_com_Variant_putVariantNoParam
 (M1)Added Dispatch.Method to the invoke flags to call _NewEnum. There are some non-conforming legacy implementations that expose _NewEnum as a method.
  
**Feature Requests**
+ +## JACOB 1.15 +### What's New +* MS Libraries are now statically linked using /MT instead of /MD to reduce issues library compatibility issues, especially on older platforms. The VC++ redistributable library no longer needs to be installed as a stand alone product. +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
3065265(M4)Bit masking in Variant.getXXXRef() uses wrong mask allowing more than one type to be seen as the requested type. Code that passed in the correct type always worked but invalid types were not always detected.
2935662(M4)Error handling code crashes because of uninitialized data in Dispatch.cpp Check for NULL fails. pfnDeferredFillIn pointer is not initialized, but it's not NULL.
2819445(M3)SafeArray.fromLongArray fails when using VariantLongInt
2847577(M3) SafeArray#setString(*) incorrectly handles unicode strings
2721937(M2)System.getProperties call caused security exception in applet. _com.jacob.includeAllClassesInROT_ now acts as master switch for class/ROT control. This change also has the side benefit that the PutInROT property is not checked on every object creation for users who run in the standard _all classes in ROT_ mode.
  
**Patches**
2762275(M1)Support conversion of primitive arrays to Variant arrays.
2171967(M1)VariantUtils.populateVariant can cause VM crash with unrecognized type.
  
**Feature Requests**
3137337Add JNLP Applet example. Read the README to understand what jar file signing and file placement is required
2963102(M4)Convert API to use var args and remove the many overloaded Dispatch methods that each added one more parameter.
2927058(M4)a hasExited() method that allows polling until a COM server is terminated and implemented this method in JACOB
  
**Known Issues**
+ +## JACOB 1.14.3 +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
2011706Fixed windows memory corruption unhooking call back proxy
1986987Possible deadlock when multiple threads starting and stopping that rely on implicit ComThread.InitMTA
  
**Patches**
  
**Feature Requests**
  
**Known Issues**
+ +## JACOB 1.14.1 +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1919441Type: loading 64 bit jacob.dll. Computed dll name includes space that is not in name of actual dll
  
**Patches**
  
**Feature Requests**
  
**Known Issues**
+ +## JACOB 1.14 +### What's New +* Binaries are now compiled with Java 5\. JDK 1.4 support dropped. +* Jacob now loads dlls based on platform (32 bit /64 bit) and version number. +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1857439(M7) version.properties renamed to META-INF/JacobVersion.properties to remove collision with WebSphere version.properties.
1840487(M6) toJavaObject() converting to SafeArray did shallow copy that left two objects pointing at the same windows memory.
1829201(M5) DECIMAL rounding behavior externalized and old Variant decimal API restored.
1829201(M5) DECIMAL rounding behavior externalized and old Variant decimal API restored.
1829201(M4) Decimal type now throws IllegalArgumentException when more than 12 bytes worth the digits exist in BigDecimal. Rounding support added to reduce precision of BigDecimals when converting into VT_DECIMAL
1815163(M2) Double and Decimal conversion to Int fails for negative values
  
**Patches**
  
**Feature Requests**
1845039(M7) Jacob DLL name can now be customized to support bundling of Jacob in other products.
1845039(M6) Jacob DLL names are now qualified by platform and release. The JacobLibraryLoader now determines the correct 32bit or 64bit dll based on the system architecture. Jacob.jar now also knows the version of the dll it is looking for (by name) and loads the correct one. JWS clients will have to modify their dll loaders. See: The JWS classloader sample
1828371(M4) Added VT_I8 support to SafeArray.
1813458(M3) Expand type support. Changed currency support to use new Currency class. Added VT_I8 64 bit support. VT_I8 support requires Windows XP or later. VT_I8 not supported by windows in Windows 2000 and earlier. Added more primitive constructors to Variant.
1816863(M1) Migrate Jacob to JDK 5
  
**Known Issues**
This is now built with Java 5 compiler and Java 5 syntax. This release is not compatible with JDK 1.4.x and earlier.
This release requires the Visual C++ 2005 libraries. See 1.13 Known Issues for more information.
+ +## JACOB 1.13 +### What's New +* Binaries compiled with with Visual Studio 2005 in place of VC98\. +* Changed milestone release naming convention from "pre..." to "M..." +* The unittest directory now a JUnit 3.8.1 test repository +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1793362(M5) ERROR_MORE_DATA causes failures. Fix submitted for defect found while porting Jameleon to use current release of Jacob.
1775889(M4) Fixed leak SafeArray setString(int[],value) and other setString() methods
  
**Patches**
1794811(M5) Support Unicode strings in COM failure messages
1793346(M5) Replaced use of deprecated API and removed unused variables.
1701995(M2) Added option to exclude classes from ROT to try and manage memory in heavy event callback programs. Feature is 100% backwards compatible by default.
1709841(M1) Compiled with Visual Studio 2005\. Jacob now requires 2005 or later libraries. See the UsingJacob.html file for impact this has on NT, 2000 and Server 2003 users.
  
**Feature Requests**
1772783(M4) Added VT_DECIMAL support for BigDecimals whose scale less than 28
1761727(M3) unittest directory test programs converted to JUnit 3.8.1\. New ANT target created to run all unit tests.
  
**Known Issues**
Jacob 1.13 is built using VC++ 2005. That creates a dependency on the Visual C++ 2005 libraries and msvcr80.dll. This library is normally installed on XP systems but may have to be manually installed on older systems. The pagackage, often referred to as vcredist.exe can be obtained from the MS downloads site. If you are getting loader errors on this release or later when loading the dll then you may be missing this library.
+ +## JACOB 1.12 +### What's New +* Now compiles with with Visual versions later than VC 98 +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1651926(pre-release 1) ActiveXComponent: getPropertyAsString should call getString() instead of toString()
1569864(pre-release 1) IEnumVariant leak fixed in patch 1674179
1112667(pre-release 1) IEnumVariant leak fixed in patch 1674179
1465539(pre-release 1) IEnumVariant leak fixed in patch 1674179
1699946(pre-release 5) Unrecognized event callback id leaves thread attached to VM when ComFailException is thrown.
1699965(pre-release 5) toJavaObject() fails for Dispatch because getDispatchRef() called instead of getDispatch().
  
**Patches**
1674015(pre-release 1) ROT hashmap key generation when autogc=no (default) can lead to key collisions in hashmap. This causes objects to be garbage finalized when they shouldn't be resulting in vm failures with large (large) numbers of objects.
1674179(pre-release 1) Fixed Enum leaks with EnumVariants in Variant.cpp and EnumVariant.cpp
1687419(pre-release 3) Corrected calls to AttachCurrentThread in EventProxy
1689061(pre-release 4) C code changes to fix VC2003 compiler warnings.
1690420(pre-release 4) Incorrect memcpy lengths for Currency Variants
1650134(pre-release 6) Beta support for VT_VARIANT (VariantVariant). Includes support for putVariant, getVariant, toJavaObject, Variant(Object,flag). Enclosed variants are retreived as Java objects.
  
**Feature Requests**
1662887(pre-release 1) Dispatch static methods should throw runtime exceptions when null is passed in for the Dispatch object and when the Dispatch object is in an invalid state.
1702604(pre-release 6) Support java semantics in event callbacks. Create ActiveXInvocationProxy and ActiveXDispatchEvents that provide the supplemental API. See IETestActiveXProxy.java for an example.
  
**Known Issues**
1504120_Identified 1.11.1_ Microsoft 2003 Server crashes. Server crashes on MS 2003 Server have been reported over time. Some users have had say that Jacob must be built on MS2003 Server to run reliably. The Jacob distribution on Sourceforge is built on Windows XP SP2
1677933_Identified 1.11.1_ Process affinity may have to be set on dual core machines to avoid com exceptions.
no ticket_Identified 1.11.1_ Versions of JDK 1.5 prior to 1.5_10 are known to leak JNI handles. See the Sun bug tracking system http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399321 for more details.
+ +## JACOB 1.11.1 +### What's New +Bug fix release +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1602188Variant toString() causes stack overflow for byRef() Variants (This show stopper defect forced the 1.11.1 release)
1611487Variant toJavaObject() doesn't work for byRef Variables and returned the wrong value for unrecognized Variant types.
1607878Variant getJavaDateRef() fails.
  
**Patches**
SF1603631Concurrent modification of ROT causes VM crashes. Access to the ROT has been sychronized. No performance impact analysis has been done
  
**Feature Requests**
  
+ +## JACOB 1.11 +### What's New +* **Build** + * Build process now notifies developer if version property missing + * Build process now compiles 32 bit and/or 64 bit DLLs as appropriate for the build environment. +* **API Changes** + * Variant.noParam() changed to Variant.putNoParam() + * Variant.toString() now follows normal java semantics. This conflicted with the jacob toXXX() standard. + * Many Variant.toXXX() did type conversion in addition to a get. The methods have deprecated because folks didn't realize they were doing type conversion. Most calls to toXXX() methods should actually be getXXX() calls. This also allowed toString() to follow Java conventions + * Variant native methods are wrapped with java methods that do parameter and state checking to better armor the Variant + +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1550604Build process died with confusing error if version not set in properties file(pre1)
1511033Fix array index out of bounds problem due to coding error (pre1)
1570270~Event method in EventProxy may unhook java thread from VM. Can get JNI error because unhooking listner detatched Java VM thread (pre1)
1538011toString() non compliant with java standards. The toString() method converted the underlying data to a string and it shouldn't. This caused a rethinking of all toXXX() methods other than toDispatch(). Most of the toXXX() methods have now been deprecated and should be replaced with getXXX() methods. (pre1)
1478162Variant does not warn user if methods called after released. All putXXX() and getXXX() methods now check to see if they've been released prior to calling the JNI code. toXXX() methods are deprecated but protected in the same way.(pre1)
  
**Patches**
SF1493647Support command line parameter dll location specification. Applets and other tools can now specificy the dll location that is fed to a System.load() rather than System.loadLibrary for the situation where the app can't write the dll to a library path directory.(pre1)
  
**Feature Requests**
1580993Modify the build process to support 64 bit dll construction(pre2)
1550628Moved all LoadLibrary requests into LibraryLoader. Classes not subclassed off of JacobObject make calls to a static method on LibraryLoader to make sure DLL is loaded(pre1)
+ +## JACOB 1.10.1 +### What's New +* **Variants** + * Static constnats are no longer released + * obj2variant on Dispatch now supports passing a java.util.Date +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1474474Static constants in the Variant class can no longer have SafeRelease() called on them.
1477793obj2variant should accept java.util.Date the same way the Variant constructor does
  
**Patches**
  
**Feature Requests**
+ +## JACOB 1.10 +### What's New +* **Windows Processes** + * New proposed API to support ActiveXComponent connections to already running applications. Factory methods have been added to the ActiveXComponent to support this. (Feedback wanted) +* **Variants** + * Variant now accept Java Dates in the constructor. + * Redundant constructors removed + * Experimental toJavaObject() method added that automatically converts to appropriate java type + * Support added for "NOTHING", a Variant of type Dispatch with no value + * Non functional getNull() and getEmpty() methods deprecated. They were void methods +* **Event Callbacks** + * Jacob normally uses information in the registry to find the connection information needed to set up event callbacks. Excel and other programs don't put that information in the registry. A new optional parameter has been added to the DispatchEvents constructors that lets a user provide the location of the OLB or EXE that contains the information required to retrieve the events. + * Event handlers can now return a Variant to calling MS Windows program. Event handlers that do not return an object should still be defined as being of type "void". This means that support for event handler's returning values should be backwards compatible with previous releases. +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1340233Null Program Id in Dispatch Constructor does bad things to VM(pre1)
1341763Removed Variant serializable interface because it is not actually serializable on 2000/xp(pre1)
1435215Incorrect memory release in SafeArray.cpp (pre4)
1224219Memory leak in SafeArray.GetString() Olivier Laurent, Software AG Luxembourg and David Pierron, Software AG Luxembourg (pre3)
1224219Change from UTF to UNICODE SafeArray.fromStringArray() Olivier Laurent, Software AG Luxembourg and David Pierron, Software AG Luxembourg (pre3)
  
**Patches**
1386454Return values from event callbacks (pre3)
1394001Missing variable initialization (pre3)
1208570Support Excel and other objects events(pre1)
  
**Feature Requests**
1241037Support NULL VT_DISPATCH.(pre2)
1169851Support of VB's Nothing.(pre2)
1185167Provide methods to connect to running instance.(pre1)
959381Auto variant to object conversion method method added to Variant.(pre1)
1341779Variant should accept java.util.Date in Variant(Object) constructor(pre1)
+ +## JACOB 1.9.1 +### What's New +* **License** + * License standardized on LGPL. See LICENSE.TXT for more information +* **Event Callbacks** + * Event handlers are now wrapped in an InvocationProxy. The COM/JNI event code knows only about InvocationProxies and calls the appropriate methods on the Invocation proxy to get needed Variant instances and to forward events to the Java layer. +* **Variants** + * Automatic conversion between Windows Time and Java Date is now supported in Variant object. +* **SafeArray** + * Multi-dimensional (greater than 2) support + +### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1335897SafeArray() called toString() on objects when debug was turned on
  
**Patches**
1314116putString UNICODE string length not detected
  
**Feature Requests**
1264850Custom Event Dispatching
959382Time Conversion
1313892Multi-Dimensional SafeArray
+ +## JACOB 1.9 +### What's New +* **Event Callbacks** + * Variant parameters can now be modified by the receiver to be passed back to the COM caller + * Callbacks now create objects of class VariantViaEvent rather than Variant. This was aided to add debugging and tracing + * Callbacks can now be received when running in JWS other launchers where JACOB.jar is not in the system classloader's path. +* **Dispatch API Clarifications** + * All static method's first parameters have been more strongly typed to the Dispatch class, rather than Object. This may call for code changes in the cases of code that just asigned Dispatch objects to variables of type Object rather than Dispatch or one of its subclasses +* **Dispatch subclasses are now supported with pointer modifying constructor** + * Dispatch and ActiveXComponent now includes a constructor to be used by Dispatch subclasses that swaps the pointers around. This eliminates the need for every Dispatch subclass to have a constructor that swapped and nulled out the pointers to the COM layer. All samples have updated to use the new api +* **ActiveXComponent has been upgraded** + * ActiveXComponent methods return ActiveXComponets + * Methods have been added to the ActiveXComponents to retrieve parameters as Dispatch objects or ActiveX components. The Script Tests have been updated to show the same programs in Dispatch format or ActiveXComponentFormat +* **Memory Management** + * Beta test option that lets an application use automatic object object removal through the use of weak reference hash maps in the ROT class.  The default behavior of manual release via the COMThread class has been retained as the default behavior.  Developers can test automatic memory collection by using the command line option _-Dcom.JACOB.autogc=true_ +* **JNI Changes** + * Erroneous Array dimension checking fixed for certain boolean set and get functions + * Alternative method for finding Variant class for callbacks in JWS or other application lanchers where the system classloader does not know about JACOB classes. + * Unicode is supported for putString and putStringRef + * EventProxy zeros out the com object reference in the Variant objects that are created by EventProxy so that they are not double released, by both the Java VM and calling code from the COM side. The caller is supposed to be responsible for releasing the memory it created. This fix only applies to Variants created in callbacks. +* **Logging Additions** + * Debugging logging to standard out for JACOB can be turned on by using the command line option _-Dcom.JACOB.debug=true_ +* **Visual Studio** + * The VisualStudio directory in the CVS repository will be removed in the next release +* **Documentation** + * API documentation via Javadoc  is now being generated for all classes. + * The development team is looking for help in upgrading the quality of the class documentation +* **Build Changes** + * A static method has been added to JacobObject that returns the build version + * The project is now being built using ANT.  Most of the developers are running this from inside of Eclipse + * All makefiles have been purged + + ### Tracked Changes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**Bugs**
1116101jacob-msg 0284 : Access Violation while garbage collecting
1114159Problem with COM Error Trapping in JACOB DLL
1113610Bad error check in SafeArray.cpp
1066698Minor Memory leak in Dispatch.cpp
1065533Problem with unicode conversion
1053871solution for memory leak in 1.7
1053870JACOB0msg 2019 - Safe Array
1053866getHResult only returns 80020009
960646But in SafeArray:: getBoolean for 2D arrays
  
**Patches**
1115187EventCallbacks fail w/Variant ClassNotFoundException in JWS
1105915Fix for event handling memory corruption
1090104Weak Reference in teh ROT
1068544in/out parameter support for event handlers
981540jre 1.4.2 fix as patch
  
**Feature Requests**
1049390static Version information
1049224Javadocs or at least script to generate it
1049158API to get ProgId of ActiveXComponent
  
+ +## JACOB 1.8 + +### What's New + +* **Move To SourceForge** The project is not housed at [Sourceforge.net](http://sourceforge.net/projects/jacob-project/). +* **Licensing Change** All limitations on commercial use of JACOB have been removed and it is now being developed under a BSD license at [Sourceforge.net](http://sourceforge.net/projects/jacob-project/). +* **Compiled with Java 1.4.2** Version 1.8 was compiled with JSEE 1.4.2 and fixes the compilation bug that was remnant of compilation with JDK 1.1. +* **Baseline For Change** This version is the baseline for the first CVS checkin and we encourage people to start contributing to the project with this version. + +* ## JACOB 1.7 + + ### What's New + + * **Explicit COM Threading Model Support:** See a detailed discussion of [COM Apartments in JACOB](JacobThreading.html) + * **New COM Object Lifetime model:** See a detailed discussion of [COM Object Lifetime in JACOB](JacobComLifetime.html). + * **Improved Event Handling:** Thanks to code contributed by [Niels Olof Bouvin](mailto:n.o.bouvin@daimi.au.dk) and [Henning Jae](mailto:jehoej@daimi.au.dk) JACOB 1.7 can read the type information of a Connection Point interface by looking it up in the registry. This makes it possible to use events with IE as well as office products. + * **Improved Dispatch:** Error messages from Invoke failures are now printed out as well as allowing the passing in of arguments to a Get method. + * **EnumVariant Implementation:** Makes it easier to iterate over COM collections. Thanks to code contributed by [Thomas Hallgren](mailto:Thomas.Hallgren@eoncompany.com). + * **SafeArray leaks:** SafeArrays were not being properly freed prior to version 1.7, many other memory leaks were fixed as well. + * **Visual Studio Project:** For those who want to debug: vstudio/JACOB. At the moment all the native code is replicated there from the jni directory... + + ## Related Links + + * The best way to get support or the latest version of JACOB is on [http://sourceforge.net/projects/jacob-project](http://sourceforge.net/projects/jacob-project) **This is the preferred way to get support for JACOB**. It also includes an extensive archive. If you are doing any development with JACOB, please join sourceforge. + * Massimiliano Bigatti has developed [JACOBgen - a generator that automatically creates JACOB code from Type Libraries, now available on sourceforge](http://sourceforge.net/projects/jacob-project) + * Steven Lewis is developing a version of Java2Com that supports JACOB code generation. See: [http://www.lordjoe.com/Java2Com/index.html](http://www.lordjoe.com/Java2Com/index.html). + * To find documentation on the com.ms.com package, go to: [http://www.microsoft.com/java/download/dl_sdk40.htm](http://www.microsoft.com/java/download/dl_sdk40.htm) and at the bottom of the page is a link that says: Microsoft SDK for Java 4.0 Documentation Only. You should download that file and install it. Then, view sdkdocs.chm and look for "Microsoft Packages Reference". Hopefully, the next release of JACOB will include full javadoc (volunteers?)... \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/UsingJacob.md b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/UsingJacob.md new file mode 100644 index 0000000..ac02972 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/UsingJacob.md @@ -0,0 +1,146 @@ +Jacob is a Java library that lets Java applications communicate with Microsoft Windows DLLs or COM libraries. It does this through the use of a custom DLL that the Jacob Java classes communicate with via JNI. The Java library and dll isolate the Java developer from the underlying windows libraries so that the Java developer does not have to write custom JNI code.Jacob is not used for creating ActiveX plugins or other modules that live inside of Microsoft Windows applications. + +*** + +## The Jacob Packages + +The JACOB jar contains two main packages: the `com.jacob.com.*`> package and the `com.jacob.activeX` package. The `com.jacob.com.*` package contains classes map very closely to the com dispatch model with the `com.jacob.com.Dispatch` acting as the primary communication class. Dispatch operate as a function library with a set of static methods that map very closely to the C++ Dispatch APIs provided to the COM layer.`com.jacob.activex.ActiveXComponent` can be used in place of Dispatch to provide a more object like API. The only exception to this guideline is that the `ActiveXComponent` class is always used to make the initial connection to the target dll/COM component. + +*** + +## Considerations when doing server side automation of office + +Most office and many windows client type applications are not written to be used in high volume or multi-threaded server environment. There is a [support note](http://support.microsoft.com/kb/257757/) on the Microsoft web site that discusses some of the issues. + +*** + +## Determining the API of the target application + +Section not yet written. + +*** + +## The Jacob DLL + +Jacob.jar relies on a DLL file that it loads off of the library path or classpath. This means that you must either copy the appropriate jacob dll into your path or use VM options to add directory holding jacob dll to the path. Prior to 1.14M6, the jacob DLL name was always "jacob.dll". This made it hard to verify jacob was loading the correct dll when multiple copies of jacob were installed on a single system. It also was confusing on 64 bit systems where the 32 bit and 64 bit dlls have the same tames. Starting in 1.14M6, Jacob's library loader selects a dll with the appropriate name based on the jacob release and platform. The dll naming convention is: +`jacob..dll` + + Classloader issues + +The code is written so that the jacob.dll is only loaded one time per classloader. This works fine in the standard application but can cause problems if jacob.jar is loaded from more than one class loader. This can happen in the situation where multiple jacob dependent web applications run in the same container like a web server or JWS runtime. In the case of a web server, Jacob is normally put in the application specific WEB-INF/lib directory. This is the "right" way to do it and works in most situations. But, if Jacob is put in the WEB-INF/lib directory of each application's war file for more than one application then a problem occurs. In this situation, the web server uses a different classloader for each application. This means that each application will attempt to load the jacob.dll and errors are generated. The only way around this at this time (1.11) is to put the jacob.jar in the common/lib because that classloader is inherited by all of the applications so the DLLs will only get loaded once. This problem is described in SF 1645463 and should be fixed in some future release, fix method and time not yet determined. + +*** + +## Microsoft Visual C++ library dependencies. + +Jacob 1.15 is build with VC++ 2005 statically linked into the DLL. This removes the need for a separate msvcr80.dll installation. + +Jacob 1.13 is built with VC++ 2005 that creates a dependency on msvcr80.dll. Windows XP and later seem to already include the necessary components. NT/2000 and Server/2003 require that you download the Visual C 2005 redistributable package, vcredist_x86.exe from the Microsoft web site. Microsoft has a download available that supplies the necessary components. It is distributed as a redistributable package. + +If you see the following message then you probably don't have the right C++ libraries. + +

	Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\apps\...\jacob.dll: This application has 
+	failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem 
+
+ +[Visual C redistributable installer SP1](http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en) + +*** + +## Jacob Command Line Settings + +This library supports several different command line options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ dll path location and dll name customization +
    + java.library.path +Standard Java property used to add the location of the jacob dll to the JVM's library path. (Added 1.11)Example: `-Djava.library.path=d:/jacob/release/x86`
    + jacob.dll.name +Override the standard DLL name with a custom one. This stops jacob from using its 32bit/64bit detection and dll rendezvous logic. Sometimes used when Jacob is bundled with another application and the application wishes to tie the jacob dll version number to the application version number. (Added 1.14M7)Example: `-Djacob.dll.name=MyFunkyDllName.dll`
    + jacob.dll.name.x86 & jacob.dll.name.x64 +Override the standard 32 bit DLL name with custom ones. Sometimes used when Jacob is bundled with another application and the application wishes to tie the jacob dll version number to the application version number. (Added 1.14M7)Example to override 32 bit dll name: `-Djacob.dll.name.x86=MyFunkyDllName-32bit.dll`
+ Memory Management +
    + com.jacob.autogc +Determines if automatic garbage collection is enabled. This is the only way to free up objects created in event callbacks. Automatic garbage collection , based on Java gc rules, garbage collection can be enabled via the `com.java.autogc` command line option. _This feature was added in release 1.9 is not fully debugged._There are real reasons for managing the lifetime of JacobObjects on a per thread basis. Jacob normally manages the the com/Java object lifetime as described in the [JacobComLifetime.html](JacobComLifetime.html) document. Some users have run into situations where they wish to try and let the Java GC lifetime manage the lifetime of objects. This seems to usually be tied to long running threads or to objects created as part of event callbacks. Code was added to let users try and let the JVM manage the object life cycles even though the [JacobComLifetime.html](JacobComLifetime.html) document says this is a bad idea. Added 1.9.This value is cached at startup and cannot be changed on-the-fly via `System.setProperty();`The default value is _false_Example: `-Dcom.jacob.autogc=false`
    + com.jacob.includeAllClassesInROT +Acts as master switch for and .PutInROT. This property determines if the (experimental) PutInROT property is even checked. It was added in version 1.15 because the property check in PutInROT brok applets because they are not allowed to check system properties at run time. com.jacob.includeAllClassesInROT is checked at class initialization which is allowed. + +The default value of this flag is _true_ which matches all behavior prior to 1.13 and the default behavior for 1.13 on + +Setting this flag to false causes Jacob to check the and .PutInROT property for every Jacob object that is created. +
    + .PutInROT +Lets a program specify that instances of certain classes are to not be inserted into the ROT. This experimental (1.13) feature provides a mechanism for freeing VariantViaEvent objects that are created in Event threads. There is normally no way to free those objects because the thread terminates outside of any normally MTA/STA Startup/Teardown code. Each event occurs in a new thread and creates a new ROT entry so they grow without bounds.This option may cause VM crashes in certain situations where windows memory is freed outside of the thread it was created in but empirical evidence shows there are situations where this great reduces the long running memory footprint of applications that process a lot of events. _This function is still experimental_. The functionality was added 1.13\. Some of this overlaps the experimental `com.jacob.autogc` introduced in 1.9\. See the ROT.java test program for an example of the effects of this option.This value is checked every time and can be changed on-the-fly via `System.setProperty();`Example: `System.setProperty("com.jacob.com.VariantViaVariant.PutInROT","false");` +Example: `-Dcom.jacob.com.VariantViaVariant.PutInROT=false`
+ Debugging and Troubleshooting +
    + com.jacob.debug +Determines if debug output is enabled to standard out.This value is cached at startup and cannot be changed on-the-fly via `System.setProperty();`The default value is **false**Example: `-Dcom.jacob.debug=false`
    + -XCheck:jni +This turns on additional JVM checking for JNI issues. This is not an actual JACOB system property but a property used by the JVM.The default is "no additional checking" Example: `-XCheck:jni`
+*** + +## Finding the DLL version using windows command line + +The jacob.dll file includes the jacob release number in the version field. Run the following from the command prompt `dumpbin /version jacob.dll` . The dll version number is stored in the "image version" field of the "OPTIONAL HEADER VALUES" section. This information from [The Microsoft msdn web site](http://msdn2.microsoft.com/en-gb/library/h88b7dc8(VS.71).aspx) + +*** + +## Unit Tests + +Jacob must know the location of the DLL when running the unit tests in Eclipse. The simplest way to do this is to add the dll path to the unit as a VM argument. The argument should be specified based on where you installed the jacob source package. If you have jacob unpacked in c:/dev/jacob and built using build.xml, then the vm arguments would be: +`-Djava.library.path=c:/dev/jacob/release/x86` .Last Modified 4/2008 1.15 \ No newline at end of file diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-frame.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-frame.html new file mode 100644 index 0000000..dcda7a0 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-frame.html @@ -0,0 +1,46 @@ + + + + + +All Classes (JACOB : Java COM Bridge API Docs) + + + + + +

All Classes

+
+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-noframe.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-noframe.html new file mode 100644 index 0000000..cd735da --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/allclasses-noframe.html @@ -0,0 +1,46 @@ + + + + + +All Classes (JACOB : Java COM Bridge API Docs) + + + + + +

All Classes

+ + + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXComponent.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXComponent.html new file mode 100644 index 0000000..a955e8d --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXComponent.html @@ -0,0 +1,1009 @@ + + + + + +ActiveXComponent (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.activeX
+

Class ActiveXComponent

+
+
+ +
+
    +
  • +
    +
    +
    public class ActiveXComponent
    +extends Dispatch
    +
    This class provides a higher level, more object like, wrapper for top of the + Dispatch object. The Dispatch class's method essentially directly map to + Microsoft C API including the first parameter that is almost always the + target of the message. ActiveXComponent assumes the target of every message + is the MS COM object behind the ActiveXComponent. This removes the need to + pass the Dispatch object into every method. +

    + It is really up to the developer as to whether they want to use the Dispatch + interface or the ActiveXComponent interface. +

    + This class simulates com.ms.activeX.ActiveXComponent only in the sense that + it is used for creating Dispatch objects

    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        shouldLogEvents

        +
        public static boolean shouldLogEvents
        +
        This boolean determines if callback events should be logged
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ActiveXComponent

        +
        public ActiveXComponent(java.lang.String programId)
        +
        Normally used to create a new connection to a microsoft application. The + passed in parameter is the name of the program as registered in the + registry. It can also be the object name. +

        + This constructor causes a new Windows object of the requested type to be + created. The windows CoCreate() function gets called to create the + underlying windows object. + +

        + new ActiveXComponent("ScriptControl");
        + 
        +
        +
        Parameters:
        +
        programId -
        +
        +
      • +
      + + + +
        +
      • +

        ActiveXComponent

        +
        public ActiveXComponent(Dispatch dispatchToBeWrapped)
        +
        Creates an active X component that is built on top of the COM pointers + held in the passed in dispatch. This widens the Dispatch object to pick + up the ActiveXComponent API
        +
        +
        Parameters:
        +
        dispatchToBeWrapped -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getObject

        +
        public Dispatch getObject()
        +
        Probably was a cover for something else in the past. Should be + deprecated.
        +
        +
        Returns:
        +
        Now it actually returns this exact same object.
        +
        +
      • +
      + + + +
        +
      • +

        createNewInstance

        +
        public static ActiveXComponent createNewInstance(java.lang.String pRequestedProgramId)
        +
        Most code should use the standard ActiveXComponent(String) contructor and + not this factory method. This method exists for applications that need + special behavior. Experimental in release 1.9.2. +

        + Factory that returns a Dispatch object wrapped around the result of a + CoCreate() call. This differs from the standard constructor in that it + throws no exceptions and returns null on failure. +

        + This will fail for any prog id with a ":" in it.

        +
        +
        Parameters:
        +
        pRequestedProgramId -
        +
        Returns:
        +
        Dispatch pointer to the COM object or null if couldn't create
        +
        +
      • +
      + + + +
        +
      • +

        connectToActiveInstance

        +
        public static ActiveXComponent connectToActiveInstance(java.lang.String pRequestedProgramId)
        +
        Most code should use the standard ActiveXComponent(String) constructor + and not this factory method. This method exists for applications that + need special behavior. Experimental in release 1.9.2. +

        + Factory that returns a Dispatch wrapped around the result of a + getActiveObject() call. This differs from the standard constructor in + that it throws no exceptions and returns null on failure. +

        + This will fail for any prog id with a ":" in it

        +
        +
        Parameters:
        +
        pRequestedProgramId -
        +
        Returns:
        +
        Dispatch pointer to a COM object or null if wasn't already + running
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getProperty

        +
        public Variant getProperty(java.lang.String propertyName)
        +
        retrieves a property and returns it as a Variant
        +
        +
        Parameters:
        +
        propertyName -
        +
        Returns:
        +
        variant value of property
        +
        +
      • +
      + + + +
        +
      • +

        getPropertyAsComponent

        +
        public ActiveXComponent getPropertyAsComponent(java.lang.String propertyName)
        +
        retrieves a property and returns it as an ActiveX component
        +
        +
        Parameters:
        +
        propertyName -
        +
        Returns:
        +
        Dispatch representing the object under the property name
        +
        +
      • +
      + + + +
        +
      • +

        getPropertyAsBoolean

        +
        public boolean getPropertyAsBoolean(java.lang.String propertyName)
        +
        retrieves a property and returns it as a Boolean
        +
        +
        Parameters:
        +
        propertyName - property we are looking up
        +
        Returns:
        +
        boolean value of property
        +
        +
      • +
      + + + +
        +
      • +

        getPropertyAsByte

        +
        public byte getPropertyAsByte(java.lang.String propertyName)
        +
        retrieves a property and returns it as a byte
        +
        +
        Parameters:
        +
        propertyName - property we are looking up
        +
        Returns:
        +
        byte value of property
        +
        +
      • +
      + + + +
        +
      • +

        getPropertyAsString

        +
        public java.lang.String getPropertyAsString(java.lang.String propertyName)
        +
        retrieves a property and returns it as a String
        +
        +
        Parameters:
        +
        propertyName -
        +
        Returns:
        +
        String value of property
        +
        +
      • +
      + + + +
        +
      • +

        getPropertyAsInt

        +
        public int getPropertyAsInt(java.lang.String propertyName)
        +
        retrieves a property and returns it as a int
        +
        +
        Parameters:
        +
        propertyName -
        +
        Returns:
        +
        the property value as an int
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        Variant arg)
        +
        sets a property on this object
        +
        +
        Parameters:
        +
        propertyName - property name
        +
        arg - variant value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        Dispatch arg)
        +
        sets a property on this object
        +
        +
        Parameters:
        +
        propertyName - property name
        +
        arg - variant value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        java.lang.String propertyValue)
        +
        sets a property to be the value of the string
        +
        +
        Parameters:
        +
        propertyName -
        +
        propertyValue -
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        boolean propValue)
        +
        sets a property as a boolean value
        +
        +
        Parameters:
        +
        propertyName -
        +
        propValue - the boolean value we want the prop set to
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        byte propValue)
        +
        sets a property as a boolean value
        +
        +
        Parameters:
        +
        propertyName -
        +
        propValue - the boolean value we want the prop set to
        +
        +
      • +
      + + + +
        +
      • +

        setProperty

        +
        public void setProperty(java.lang.String propertyName,
        +                        int propValue)
        +
        sets the property as an int value
        +
        +
        Parameters:
        +
        propertyName -
        +
        propValue - the int value we want the prop to be set to.
        +
        +
      • +
      + + + +
        +
      • +

        logCallbackEvent

        +
        public void logCallbackEvent(java.lang.String description,
        +                             Variant[] args)
        +
        used by the doc and application listeners to get intelligent logging
        +
        +
        Parameters:
        +
        description - event description
        +
        args - args passed in (variants)
        +
        +
      • +
      + + + +
        +
      • +

        invokeGetComponent

        +
        public ActiveXComponent invokeGetComponent(java.lang.String callAction)
        +
        makes a dispatch call for the passed in action and no parameter
        +
        +
        Parameters:
        +
        callAction -
        +
        Returns:
        +
        ActiveXComponent representing the results of the call
        +
        +
      • +
      + + + +
        +
      • +

        invokeGetComponent

        +
        public ActiveXComponent invokeGetComponent(java.lang.String callAction,
        +                                           Variant... parameters)
        +
        makes a dispatch call for the passed in action and single parameter
        +
        +
        Parameters:
        +
        callAction -
        +
        parameters -
        +
        Returns:
        +
        ActiveXComponent representing the results of the call
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String actionCommand,
        +                      java.lang.String parameter)
        +
        invokes a single parameter call on this dispatch that returns no value
        +
        +
        Parameters:
        +
        actionCommand -
        +
        parameter -
        +
        Returns:
        +
        a Variant but that may be null for some calls
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String actionCommand,
        +                      boolean parameter)
        +
        makes a dispatch call to the passed in action with a single boolean + parameter
        +
        +
        Parameters:
        +
        actionCommand -
        +
        parameter -
        +
        Returns:
        +
        Variant result
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String actionCommand,
        +                      int parameter)
        +
        makes a dispatch call to the passed in action with a single int parameter
        +
        +
        Parameters:
        +
        actionCommand -
        +
        parameter -
        +
        Returns:
        +
        Variant result of the invoke (Dispatch.call)
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String actionCommand,
        +                      java.lang.String parameter1,
        +                      int parameter2)
        +
        makes a dispatch call to the passed in action with a string and integer + parameter (this was put in for some application)
        +
        +
        Parameters:
        +
        actionCommand -
        +
        parameter1 -
        +
        parameter2 -
        +
        Returns:
        +
        Variant result
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String actionCommand,
        +                      int parameter1,
        +                      int parameter2)
        +
        makes a dispatch call to the passed in action with two integer parameters + (this was put in for some application)
        +
        +
        Parameters:
        +
        actionCommand -
        +
        parameter1 -
        +
        parameter2 -
        +
        Returns:
        +
        a Variant but that may be null for some calls
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String callAction)
        +
        makes a dispatch call for the passed in action and no parameter
        +
        +
        Parameters:
        +
        callAction -
        +
        Returns:
        +
        a Variant but that may be null for some calls
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String name,
        +                      Variant... args)
        +
        This is really a cover for call(String,Variant[]) that should be + eliminated call with a variable number of args mainly used for quit.
        +
        +
        Parameters:
        +
        name -
        +
        args -
        +
        Returns:
        +
        Variant returned by the invoke (Dispatch.callN)
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXDispatchEvents.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXDispatchEvents.html new file mode 100644 index 0000000..94eda31 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXDispatchEvents.html @@ -0,0 +1,396 @@ + + + + + +ActiveXDispatchEvents (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.activeX
+

Class ActiveXDispatchEvents

+
+
+ +
+
    +
  • +
    +
    +
    public class ActiveXDispatchEvents
    +extends DispatchEvents
    +
    RELEASE 1.12 EXPERIMENTAL. +

    + Use this exactly like the DispatchEvents class. This class plugs in an + ActiveXInvocationProxy instead of an InvocationProxy. It is the + ActiveXInvocationProxy that implements the reflection calls and invoke the + found java event callbacks. See ActiveXInvocationProxy for details.

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink) +
      This is the most commonly used constructor.
      +
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId) +
      None of the samples use this constructor.
      +
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId, + java.lang.String typeLib) +
      Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ActiveXDispatchEvents

        +
        public ActiveXDispatchEvents(Dispatch sourceOfEvent,
        +                             java.lang.Object eventSink)
        +
        This is the most commonly used constructor. +

        + Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.

        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        +
      • +
      + + + +
        +
      • +

        ActiveXDispatchEvents

        +
        public ActiveXDispatchEvents(Dispatch sourceOfEvent,
        +                             java.lang.Object eventSink,
        +                             java.lang.String progId)
        +
        None of the samples use this constructor. +

        + Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.

        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        progId - ???
        +
        +
      • +
      + + + +
        +
      • +

        ActiveXDispatchEvents

        +
        public ActiveXDispatchEvents(Dispatch sourceOfEvent,
        +                             java.lang.Object eventSink,
        +                             java.lang.String progId,
        +                             java.lang.String typeLib)
        +
        Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback. + +
        + >ActiveXDispatchEvents de = 
        +                        new ActiveXDispatchEvents(someDispatch,someEventHAndler,
        +                                "Excel.Application",
        +                                "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE");
        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        progId - , mandatory if the typelib is specified
        +
        typeLib - The location of the typelib to use
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInvocationProxy

        +
        protected InvocationProxy getInvocationProxy(java.lang.Object pTargetObject)
        +
        Description copied from class: DispatchEvents
        +
        Returns an instance of the proxy configured with pTargetObject as its + target
        +
        +
        Overrides:
        +
        getInvocationProxy in class DispatchEvents
        +
        Returns:
        +
        InvocationProxy an instance of the proxy this DispatchEvents will + send to the COM layer
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXInvocationProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXInvocationProxy.html new file mode 100644 index 0000000..e493c3e --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/ActiveXInvocationProxy.html @@ -0,0 +1,344 @@ + + + + + +ActiveXInvocationProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.activeX
+

Class ActiveXInvocationProxy

+
+
+ +
+
    +
  • +
    +
    +
    public class ActiveXInvocationProxy
    +extends InvocationProxy
    +
    RELEASE 1.12 EXPERIMENTAL. +

    + This class that lets event handlers receive events with all java objects as + parameters. The standard Jacob event methods all accept an array of Variant + objects. When using this class, you can set up your event methods as regular + java methods with the correct number of parameters of the correct java type. + This does NOT work for any event that wishes to accept a call back and modify + the calling parameters to tell windows what to do. An example is when an + event lets the receiver cancel the action by setting a boolean flag to false. + The java objects cannot be modified and their values will not be passed back + into the originating Variants even if they could be modified. +

    + This class acts as a proxy between the windows event callback mechanism and + the Java classes that are looking for events. It assumes that all of the Java + classes that are looking for events implement methods with the same names as + the windows events and that the implemented methods native java objects of + the type and order that match the windows documentation. The methods can + return void or a Variant that will be returned to the calling layer. All + Event methods that will be recognized by InvocationProxyAllEvents have the + signature + + void eventMethodName(Object,Object...) or + Object eventMethodName(Object,Object...)

    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ActiveXInvocationProxy

        +
        public ActiveXInvocationProxy()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String methodName,
        +                      Variant[] targetParameters)
        +
        Description copied from class: InvocationProxy
        +
        The method actually invoked by EventProxy.cpp. The method name is + calculated by the underlying JNI code from the MS windows Callback + function name. The method is assumed to take an array of Variant objects. + The method may return a Variant or be a void. Those are the only two + options that will not blow up. +

        + Subclasses that override this should make sure mTargetObject is not null + before processing.

        +
        +
        Specified by:
        +
        invoke in class InvocationProxy
        +
        Parameters:
        +
        methodName - name of method in mTargetObject we will invoke
        +
        targetParameters - Variant[] that is the single parameter to the method
        +
        Returns:
        +
        an object that will be returned to the com event caller
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXComponent.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXComponent.html new file mode 100644 index 0000000..c1a3d28 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXComponent.html @@ -0,0 +1,194 @@ + + + + + +Uses of Class com.jacob.activeX.ActiveXComponent (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.activeX.ActiveXComponent

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXDispatchEvents.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXDispatchEvents.html new file mode 100644 index 0000000..46779b2 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXDispatchEvents.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.activeX.ActiveXDispatchEvents (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.activeX.ActiveXDispatchEvents

+
+
No usage of com.jacob.activeX.ActiveXDispatchEvents
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXInvocationProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXInvocationProxy.html new file mode 100644 index 0000000..d9c6d11 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/class-use/ActiveXInvocationProxy.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.activeX.ActiveXInvocationProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.activeX.ActiveXInvocationProxy

+
+
No usage of com.jacob.activeX.ActiveXInvocationProxy
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-frame.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-frame.html new file mode 100644 index 0000000..7f92138 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-frame.html @@ -0,0 +1,22 @@ + + + + + +com.jacob.activeX (JACOB : Java COM Bridge API Docs) + + + + + +

com.jacob.activeX

+ + + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-summary.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-summary.html new file mode 100644 index 0000000..d180042 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-summary.html @@ -0,0 +1,158 @@ + + + + + +com.jacob.activeX (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Package com.jacob.activeX

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ActiveXComponent +
    This class provides a higher level, more object like, wrapper for top of the + Dispatch object.
    +
    ActiveXDispatchEvents +
    RELEASE 1.12 EXPERIMENTAL.
    +
    ActiveXInvocationProxy +
    RELEASE 1.12 EXPERIMENTAL.
    +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-tree.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-tree.html new file mode 100644 index 0000000..bd57f58 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-tree.html @@ -0,0 +1,156 @@ + + + + + +com.jacob.activeX Class Hierarchy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Hierarchy For Package com.jacob.activeX

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-use.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-use.html new file mode 100644 index 0000000..79452c4 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/activeX/package-use.html @@ -0,0 +1,161 @@ + + + + + +Uses of Package com.jacob.activeX (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Package
com.jacob.activeX

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComException.html new file mode 100644 index 0000000..a1c8e3e --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComException.html @@ -0,0 +1,569 @@ + + + + + +ComException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class ComException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • + +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Direct Known Subclasses:
    +
    ComFailException
    +
    +
    +
    +
    public abstract class ComException
    +extends JacobException
    +
    Standard exception thrown by com jni code when there is a problem
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      protected inthr +
      COM code initializes this filed with an appropriate return code that was + returned by the underlying com code
      +
      protected intm_helpContext +
      No documentation is available at this time.
      +
      protected java.lang.Stringm_helpFile +
      No documentation is available at this time.
      +
      protected java.lang.Stringm_source +
      No documentation is available at this time.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      ComException() +
      constructor
      +
      ComException(int newHr) +
      constructor with error code?
      +
      ComException(int newHr, + java.lang.String description) 
      ComException(int newHr, + java.lang.String source, + java.lang.String helpFile, + int helpContext) 
      ComException(int newHr, + java.lang.String description, + java.lang.String source, + java.lang.String helpFile, + int helpContext) 
      ComException(java.lang.String description) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intgetHelpContext() 
      java.lang.StringgetHelpFile() 
      intgetHResult() 
      java.lang.StringgetSource() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        hr

        +
        protected int hr
        +
        COM code initializes this filed with an appropriate return code that was + returned by the underlying com code
        +
      • +
      + + + +
        +
      • +

        m_helpContext

        +
        protected int m_helpContext
        +
        No documentation is available at this time. Someone should document this + field
        +
      • +
      + + + +
        +
      • +

        m_helpFile

        +
        protected java.lang.String m_helpFile
        +
        No documentation is available at this time. Someone should document this + field
        +
      • +
      + + + +
        +
      • +

        m_source

        +
        protected java.lang.String m_source
        +
        No documentation is available at this time. Someone should document this + field
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ComException

        +
        public ComException()
        +
        constructor
        +
      • +
      + + + +
        +
      • +

        ComException

        +
        public ComException(int newHr)
        +
        constructor with error code?
        +
        +
        Parameters:
        +
        newHr - ??
        +
        +
      • +
      + + + +
        +
      • +

        ComException

        +
        public ComException(int newHr,
        +                    java.lang.String description)
        +
        +
        Parameters:
        +
        newHr -
        +
        description -
        +
        +
      • +
      + + + +
        +
      • +

        ComException

        +
        public ComException(int newHr,
        +                    java.lang.String source,
        +                    java.lang.String helpFile,
        +                    int helpContext)
        +
        +
        Parameters:
        +
        newHr -
        +
        source -
        +
        helpFile -
        +
        helpContext -
        +
        +
      • +
      + + + +
        +
      • +

        ComException

        +
        public ComException(int newHr,
        +                    java.lang.String description,
        +                    java.lang.String source,
        +                    java.lang.String helpFile,
        +                    int helpContext)
        +
        +
        Parameters:
        +
        newHr -
        +
        description -
        +
        source -
        +
        helpFile -
        +
        helpContext -
        +
        +
      • +
      + + + +
        +
      • +

        ComException

        +
        public ComException(java.lang.String description)
        +
        +
        Parameters:
        +
        description -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getHelpContext

        +
        public int getHelpContext()
        +
        +
        Returns:
        +
        int representation of the help context
        +
        +
      • +
      + + + +
        +
      • +

        getHelpFile

        +
        public java.lang.String getHelpFile()
        +
        +
        Returns:
        +
        String ??? help file
        +
        +
      • +
      + + + +
        +
      • +

        getHResult

        +
        public int getHResult()
        +
        +
        Returns:
        +
        int hr result ??
        +
        +
      • +
      + + + +
        +
      • +

        getSource

        +
        public java.lang.String getSource()
        +
        +
        Returns:
        +
        String source ??
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComFailException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComFailException.html new file mode 100644 index 0000000..8928961 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComFailException.html @@ -0,0 +1,417 @@ + + + + + +ComFailException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class ComFailException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class ComFailException
    +extends ComException
    +
    COM Fail Exception class raised when there is a problem
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      ComFailException() +
      No argument Constructor
      +
      ComFailException(int hrNew) +
      Constructor
      +
      ComFailException(int hrNew, + java.lang.String message) +
      Constructor
      +
      ComFailException(int hrNew, + java.lang.String source, + java.lang.String helpFile, + int helpContext) 
      ComFailException(int hrNew, + java.lang.String description, + java.lang.String source, + java.lang.String helpFile, + int helpContext) +
      Constructor
      +
      ComFailException(java.lang.String message) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException(int hrNew)
        +
        Constructor
        +
        +
        Parameters:
        +
        hrNew -
        +
        +
      • +
      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException(int hrNew,
        +                        java.lang.String message)
        +
        Constructor
        +
        +
        Parameters:
        +
        hrNew -
        +
        message -
        +
        +
      • +
      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException(int hrNew,
        +                        java.lang.String source,
        +                        java.lang.String helpFile,
        +                        int helpContext)
        +
        +
        Parameters:
        +
        hrNew -
        +
        source -
        +
        helpFile -
        +
        helpContext -
        +
        +
      • +
      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException(int hrNew,
        +                        java.lang.String description,
        +                        java.lang.String source,
        +                        java.lang.String helpFile,
        +                        int helpContext)
        +
        Constructor
        +
        +
        Parameters:
        +
        hrNew -
        +
        description -
        +
        source -
        +
        helpFile -
        +
        helpContext -
        +
        +
      • +
      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException()
        +
        No argument Constructor
        +
      • +
      + + + +
        +
      • +

        ComFailException

        +
        public ComFailException(java.lang.String message)
        +
        +
        Parameters:
        +
        message -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComThread.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComThread.html new file mode 100644 index 0000000..9d0b820 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ComThread.html @@ -0,0 +1,528 @@ + + + + + +ComThread (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class ComThread

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.ComThread
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public abstract class ComThread
    +extends java.lang.Object
    +
    Represents a COM level thread This is an abstract class because all the + methods are static and no instances are ever created.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static booleanhaveSTA +
      Comment for haveSTA
      +
      static MainSTAmainSTA +
      Comment for mainSTA
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      ComThread() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethod and Description
      static voiddoCoInitialize(int threadModel) 
      static voiddoCoUninitialize() 
      static voidInit(boolean createMainSTA, + int mode) +
      Initialize the current java thread to be part of the MTA/STA COM + Apartment
      +
      static voidInitMTA() +
      Initialize the current java thread to be part of the Multi-threaded COM + Apartment
      +
      static voidInitMTA(boolean createMainSTA) +
      Initialize the current java thread to be part of the Multi-threaded COM + Apartment, if createMainSTA is true, create a separate MainSTA thread + that will house all Apartment Threaded components
      +
      static voidInitSTA() +
      Initialize the current java thread to be an STA
      +
      static voidInitSTA(boolean createMainSTA) +
      Initialize the current java thread to be an STA COM Apartment, if + createMainSTA is true, create a separate MainSTA thread that will house + all Apartment Threaded components
      +
      static voidquitMainSTA() 
      static voidRelease() +
      Call CoUninitialize to release this java thread from COM
      +
      static voidRemoveObject(JacobObject o) +
      Deprecated.  +
      the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread. + + This will remove an object from the ROT
      +
      +
      static voidstartMainSTA() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        haveSTA

        +
        public static boolean haveSTA
        +
        Comment for haveSTA
        +
      • +
      + + + +
        +
      • +

        mainSTA

        +
        public static MainSTA mainSTA
        +
        Comment for mainSTA
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ComThread

        +
        public ComThread()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        InitMTA

        +
        public static void InitMTA()
        +
        Initialize the current java thread to be part of the Multi-threaded COM + Apartment
        +
      • +
      + + + +
        +
      • +

        InitSTA

        +
        public static void InitSTA()
        +
        Initialize the current java thread to be an STA
        +
      • +
      + + + +
        +
      • +

        InitMTA

        +
        public static void InitMTA(boolean createMainSTA)
        +
        Initialize the current java thread to be part of the Multi-threaded COM + Apartment, if createMainSTA is true, create a separate MainSTA thread + that will house all Apartment Threaded components
        +
        +
        Parameters:
        +
        createMainSTA -
        +
        +
      • +
      + + + +
        +
      • +

        InitSTA

        +
        public static void InitSTA(boolean createMainSTA)
        +
        Initialize the current java thread to be an STA COM Apartment, if + createMainSTA is true, create a separate MainSTA thread that will house + all Apartment Threaded components
        +
        +
        Parameters:
        +
        createMainSTA -
        +
        +
      • +
      + + + +
        +
      • +

        startMainSTA

        +
        public static void startMainSTA()
        +
      • +
      + + + +
        +
      • +

        quitMainSTA

        +
        public static void quitMainSTA()
        +
      • +
      + + + +
        +
      • +

        Init

        +
        public static void Init(boolean createMainSTA,
        +                        int mode)
        +
        Initialize the current java thread to be part of the MTA/STA COM + Apartment
        +
        +
        Parameters:
        +
        createMainSTA -
        +
        mode -
        +
        +
      • +
      + + + +
        +
      • +

        Release

        +
        public static void Release()
        +
        Call CoUninitialize to release this java thread from COM
        +
      • +
      + + + +
        +
      • +

        RemoveObject

        +
        @Deprecated
        +public static void RemoveObject(JacobObject o)
        +
        Deprecated. the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread. + + This will remove an object from the ROT
        +
        +
        Parameters:
        +
        o -
        +
        +
      • +
      + + + +
        +
      • +

        doCoInitialize

        +
        public static void doCoInitialize(int threadModel)
        +
        +
        Parameters:
        +
        threadModel -
        +
        +
      • +
      + + + +
        +
      • +

        doCoUninitialize

        +
        public static void doCoUninitialize()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Currency.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Currency.html new file mode 100644 index 0000000..92fdc9a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Currency.html @@ -0,0 +1,391 @@ + + + + + +Currency (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class Currency

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.Currency
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Currency
    +extends java.lang.Object
    +
    Most COM bridges use java.lang.Long as their Java data type for COM Currency + data. This is because COM currency is a 64 bit number where the last 4 digits + represent the milli-cents. We wanted to support 64 bit Long values for x64 + platforms so that meant we wanted to map Java.LONG to COM.LONG even though it + only works for 64 bit platforms. The end result was we needed a new + representation for Money so we have this. +

    + In the future, this should convert to and from BigDecimal or Double

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      Currency(long newValue) +
      constructor that takes a long already in COM representation
      +
      Currency(java.lang.String newValue) +
      constructor that takes a String already in COM representation
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intcompareTo(Currency anotherCurrency) +
      compares the values of two currencies
      +
      intcompareTo(java.lang.Object o) +
      standard comparison
      +
      booleanequals(java.lang.Object o)
      protected java.lang.LonggetLongValue() +
      getter to the inner storage so that cmpareTo can work
      +
      longlongValue() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Currency

        +
        public Currency(long newValue)
        +
        constructor that takes a long already in COM representation
        +
        +
        Parameters:
        +
        newValue -
        +
        +
      • +
      + + + +
        +
      • +

        Currency

        +
        public Currency(java.lang.String newValue)
        +
        constructor that takes a String already in COM representation
        +
        +
        Parameters:
        +
        newValue -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        longValue

        +
        public long longValue()
        +
        +
        Returns:
        +
        the currency as a primitive long
        +
        +
      • +
      + + + +
        +
      • +

        getLongValue

        +
        protected java.lang.Long getLongValue()
        +
        getter to the inner storage so that cmpareTo can work
        +
        +
        Returns:
        +
        the embedded long value
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(Currency anotherCurrency)
        +
        compares the values of two currencies
        +
        +
        Parameters:
        +
        anotherCurrency -
        +
        Returns:
        +
        the usual compareTo results
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(java.lang.Object o)
        +
        standard comparison
        +
        +
        Parameters:
        +
        o - must be Currency or Long
        +
        Returns:
        +
        the usual compareTo results
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals(java.lang.Object o)
        +
        +
        Overrides:
        +
        equals in class java.lang.Object
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DateUtilities.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DateUtilities.html new file mode 100644 index 0000000..16959eb --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DateUtilities.html @@ -0,0 +1,360 @@ + + + + + +DateUtilities (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class DateUtilities

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.DateUtilities
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class DateUtilities
    +extends java.lang.Object
    +
    java / windows date conversion utilities
    +
    +
    Author:
    +
    joe
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      DateUtilities() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static doubleconvertDateToWindowsTime(java.util.Date javaDate) +
      converts a java date to a windows time object (is this timezone safe?)
      +
      static doubleconvertMillisecondsToWindowsTime(long milliseconds) +
      Convert a Java time to a COM time.
      +
      static java.util.DateconvertWindowsTimeToDate(double comTime) +
      converts a windows time to a Java Date Object
      +
      static longconvertWindowsTimeToMilliseconds(double comTime) +
      Convert a COM time from functions Date(), Time(), Now() to a Java time + (milliseconds).
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DateUtilities

        +
        public DateUtilities()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        convertWindowsTimeToDate

        +
        public static java.util.Date convertWindowsTimeToDate(double comTime)
        +
        converts a windows time to a Java Date Object
        +
        +
        Parameters:
        +
        comTime -
        +
        Returns:
        +
        Date object representing the windows time as specified in comTime
        +
        +
      • +
      + + + +
        +
      • +

        convertWindowsTimeToMilliseconds

        +
        public static long convertWindowsTimeToMilliseconds(double comTime)
        +
        Convert a COM time from functions Date(), Time(), Now() to a Java time + (milliseconds). Visual Basic time values are based to 30.12.1899, Java + time values are based to 1.1.1970 (= 0 milliseconds). The difference is + added to the Visual Basic value to get the corresponding Java value. The + Visual Basic double value reads: .<1 + day percentage fraction>, e.g. "38100.6453" means: 38100 days since + 30.12.1899 plus (24 hours * 0.6453). Example usage: + Date javaDate = new Date(toMilliseconds (vbDate));.
        +
        +
        Parameters:
        +
        comTime - COM time.
        +
        Returns:
        +
        Java time.
        +
        +
      • +
      + + + +
        +
      • +

        convertDateToWindowsTime

        +
        public static double convertDateToWindowsTime(java.util.Date javaDate)
        +
        converts a java date to a windows time object (is this timezone safe?)
        +
        +
        Parameters:
        +
        javaDate - the java date to be converted to windows time
        +
        Returns:
        +
        the double representing the date in a form windows understands
        +
        +
      • +
      + + + +
        +
      • +

        convertMillisecondsToWindowsTime

        +
        public static double convertMillisecondsToWindowsTime(long milliseconds)
        +
        Convert a Java time to a COM time.
        +
        +
        Parameters:
        +
        milliseconds - Java time.
        +
        Returns:
        +
        COM time.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Dispatch.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Dispatch.html new file mode 100644 index 0000000..9312775 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Dispatch.html @@ -0,0 +1,1745 @@ + + + + + +Dispatch (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class Dispatch

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    ActiveXComponent
    +
    +
    +
    +
    public class Dispatch
    +extends JacobObject
    +
    Object represents MS level dispatch object. Each instance of this points at + some data structure on the MS windows side. + + +

    + You're going to live here a lot

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static intfdexNameCaseSensitive +
      One of legal values for GetDispId.
      +
      static intGet +
      used by callN() and callSubN()
      +
      static intLOCALE_SYSTEM_DEFAULT +
      Used to set the locale in a call.
      +
      longm_pDispatch +
      This is public because Dispatch.cpp knows its name and accesses it + directly to get the dispatch id.
      +
      static intMethod +
      used by callN() and callSubN()
      +
      static intPut +
      used by put()
      +
      static intPutRef +
      not used, probably intended for putRef()
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      ModifierConstructor and Description
       Dispatch() +
      zero argument constructor that sets the dispatch pointer to 0 This is the + only way to create a Dispatch without a value in the pointer field.
      +
       Dispatch(Dispatch dispatchToBeDisplaced) +
      Constructor to be used by subclass that want to swap themselves in for + the default Dispatch class.
      +
      protected Dispatch(long pDisp) +
      Constructor that only gets called from JNI QueryInterface calls JNI code + that looks up the object for the key passed in.
      +
       Dispatch(java.lang.String requestedProgramId) +
      This constructor calls createInstance with progid.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static Variantcall(Dispatch dispatchTarget, + int dispid) 
      static Variantcall(Dispatch dispatchTarget, + int dispid, + java.lang.Object... attributes) 
      static Variantcall(Dispatch dispatchTarget, + java.lang.String name) 
      static Variantcall(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... attributes) 
      static VariantcallN_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object[] values) +
      not implemented yet
      +
      static VariantcallN(Dispatch dispatchTarget, + int dispID, + java.lang.Object... args) 
      static VariantcallN(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... args) 
      static voidcallSub(Dispatch dispatchTarget, + int dispid) +
      makes call to native callSubN
      +
      static voidcallSub(Dispatch dispatchTarget, + int dispid, + java.lang.Object... attributes) +
      makes call to native callSubN
      +
      static voidcallSub(Dispatch dispatchTarget, + java.lang.String name) +
      makes call to native callSubN
      +
      static voidcallSub(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... attributes) +
      makes call to native callSubN
      +
      static voidcallSubN(Dispatch dispatchTarget, + int dispID, + java.lang.Object... args) 
      static voidcallSubN(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... args) 
      protected voidcoCreateInstance(java.lang.String pProgramIdentifier) +
      Wrapper around the native method
      +
      protected voidfinalize() 
      static Variantget_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name) +
      not implemented yet
      +
      static Variantget(Dispatch dispatchTarget, + int dispid) +
      Cover for call to underlying invokev()
      +
      static Variantget(Dispatch dispatchTarget, + java.lang.String name) +
      Cover for call to underlying invokev()
      +
      protected voidgetActiveInstance(java.lang.String pProgramIdentifier) +
      Wrapper around the native method
      +
      static intgetIDOfName(Dispatch dispatchTarget, + java.lang.String name) 
      static int[]getIDsOfNames(Dispatch dispatchTarget, + int lcid, + java.lang.String[] names) 
      static int[]getIDsOfNames(Dispatch dispatchTarget, + java.lang.String[] names) 
      java.lang.StringgetProgramId() +
      returns the program id if an activeX component created this otherwise it + returns null.
      +
      static inthasExited(Dispatch dispatchTarget) +
      The method is used to poll until it returns 1, indicating that the COM + server in gone.
      +
      static inthasExited(Dispatch disp, + int dispid, + int lcid) +
      Cover for native method
      +
      static Variantinvoke(Dispatch dispatchTarget, + int dispID, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static Variantinvoke(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static Variantinvoke(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidinvokeSub(Dispatch dispatchTarget, + int dispid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidinvokeSub(Dispatch dispatchTarget, + java.lang.String name, + int dispid, + int lcid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidinvokeSub(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidinvokeSubv(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidinvokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidinvokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static Variantinvokev(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static Variantinvokev(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static Variantinvokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static Variantinvokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr, + int wFlagsEx) 
      protected booleanisAttached() 
      static voidput_Casesensitive(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) +
      not implemented yet
      +
      static voidput(Dispatch dispatchTarget, + int dispid, + java.lang.Object val) 
      static voidput(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) 
      static voidputRef(Dispatch dispatchTarget, + int dispid, + java.lang.Object val) +
      cover for underlying call to invoke
      +
      static voidputRef(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) +
      cover for underlying call to invoke
      +
      DispatchQueryInterface(java.lang.String iid) +
      Return a different interface by IID string.
      +
      voidsafeRelease() +
      Finalizers call this method.
      +
      + +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        LOCALE_SYSTEM_DEFAULT

        +
        public static final int LOCALE_SYSTEM_DEFAULT
        +
        Used to set the locale in a call. The user locale is another option
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        Method

        +
        public static final int Method
        +
        used by callN() and callSubN()
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        Get

        +
        public static final int Get
        +
        used by callN() and callSubN()
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + + + + + +
        +
      • +

        PutRef

        +
        public static final int PutRef
        +
        not used, probably intended for putRef()
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        fdexNameCaseSensitive

        +
        public static final int fdexNameCaseSensitive
        +
        One of legal values for GetDispId. Not used in this layer and probably + not needed.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        m_pDispatch

        +
        public long m_pDispatch
        +
        This is public because Dispatch.cpp knows its name and accesses it + directly to get the dispatch id. You really can't rename it or make it + private
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Dispatch

        +
        public Dispatch()
        +
        zero argument constructor that sets the dispatch pointer to 0 This is the + only way to create a Dispatch without a value in the pointer field.
        +
      • +
      + + + +
        +
      • +

        Dispatch

        +
        public Dispatch(java.lang.String requestedProgramId)
        +
        This constructor calls createInstance with progid. This is the + constructor used by the ActiveXComponent or by programs that don't like + the activeX interface but wish to create new connections to windows + programs. +

        + This constructor always creates a new windows/program object because it + is based on the CoCreate() windows function. +

        +
        +
        Parameters:
        +
        requestedProgramId -
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if null is passed in as the program id +

        +
        +
      • +
      + + + +
        +
      • +

        Dispatch

        +
        protected Dispatch(long pDisp)
        +
        Constructor that only gets called from JNI QueryInterface calls JNI code + that looks up the object for the key passed in. The JNI CODE then creates + a new dispatch object using this constructor
        +
        +
        Parameters:
        +
        pDisp -
        +
        +
      • +
      + + + +
        +
      • +

        Dispatch

        +
        public Dispatch(Dispatch dispatchToBeDisplaced)
        +
        Constructor to be used by subclass that want to swap themselves in for + the default Dispatch class. Usually you will have a class like + WordDocument that is a subclass of Dispatch and it will have a + constructor public WordDocument(Dispatch). That constructor should just + call this constructor as super(Dispatch)
        +
        +
        Parameters:
        +
        dispatchToBeDisplaced -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getActiveInstance

        +
        protected void getActiveInstance(java.lang.String pProgramIdentifier)
        +
        Wrapper around the native method
        +
        +
        Parameters:
        +
        pProgramIdentifier - name of the program you wish to connect to
        +
        +
      • +
      + + + +
        +
      • +

        coCreateInstance

        +
        protected void coCreateInstance(java.lang.String pProgramIdentifier)
        +
        Wrapper around the native method
        +
        +
        Parameters:
        +
        pProgramIdentifier -
        +
        +
      • +
      + + + +
        +
      • +

        QueryInterface

        +
        public Dispatch QueryInterface(java.lang.String iid)
        +
        Return a different interface by IID string. +

        + Once you have a Dispatch object, you can navigate to the other interfaces + of a COM object by calling QueryInterafce. The argument is an IID string + in the format: "{9BF24410-B2E0-11D4-A695-00104BFF3241}". You typically + get this string from the idl file (it's called uuid in there). Any + interface you try to use must be derived from IDispatch. T The atl + example uses this. +

        + The Dispatch instance resulting from this query is instanciated in the + JNI code.

        +
        +
        Parameters:
        +
        iid -
        +
        Returns:
        +
        Dispatch a disptach that matches ??
        +
        +
      • +
      + + + +
        +
      • +

        getProgramId

        +
        public java.lang.String getProgramId()
        +
        returns the program id if an activeX component created this otherwise it + returns null. This was added to aid in debugging
        +
        +
        Returns:
        +
        the program id an activeX component was created against
        +
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        protected void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Description copied from class: JacobObject
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        +
      • +
      + + + +
        +
      • +

        isAttached

        +
        protected boolean isAttached()
        +
        +
        Returns:
        +
        true if there is an underlying windows dispatch object
        +
        +
      • +
      + + + +
        +
      • +

        put_Casesensitive

        +
        public static void put_Casesensitive(Dispatch dispatchTarget,
        +                                     java.lang.String name,
        +                                     java.lang.Object val)
        +
        not implemented yet
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        val -
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        invokeSubv

        +
        public static void invokeSubv(Dispatch dispatchTarget,
        +                              java.lang.String name,
        +                              int dispID,
        +                              int lcid,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        dispID -
        +
        lcid -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        invokeSubv

        +
        public static void invokeSubv(Dispatch dispatchTarget,
        +                              java.lang.String name,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        invokeSubv

        +
        public static void invokeSubv(Dispatch dispatchTarget,
        +                              int dispID,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispID -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        callN_CaseSensitive

        +
        public static Variant callN_CaseSensitive(Dispatch dispatchTarget,
        +                                          java.lang.String name,
        +                                          java.lang.Object[] values)
        +
        not implemented yet
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        values -
        +
        Returns:
        +
        never returns anything because
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        callSubN

        +
        public static void callSubN(Dispatch dispatchTarget,
        +                            java.lang.String name,
        +                            java.lang.Object... args)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        args - an array of argument objects
        +
        +
      • +
      + + + +
        +
      • +

        callSubN

        +
        public static void callSubN(Dispatch dispatchTarget,
        +                            int dispID,
        +                            java.lang.Object... args)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispID -
        +
        args - an array of argument objects
        +
        +
      • +
      + + + +
        +
      • +

        getIDOfName

        +
        public static int getIDOfName(Dispatch dispatchTarget,
        +                              java.lang.String name)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        Returns:
        +
        int id for the passed in name
        +
        +
      • +
      + + + +
        +
      • +

        getIDsOfNames

        +
        public static int[] getIDsOfNames(Dispatch dispatchTarget,
        +                                  int lcid,
        +                                  java.lang.String[] names)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        lcid -
        +
        names -
        +
        Returns:
        +
        int[] in id array for passed in names
        +
        +
      • +
      + + + +
        +
      • +

        getIDsOfNames

        +
        public static int[] getIDsOfNames(Dispatch dispatchTarget,
        +                                  java.lang.String[] names)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        names -
        +
        Returns:
        +
        int[] int id array for passed in names
        +
        +
      • +
      + + + +
        +
      • +

        callN

        +
        public static Variant callN(Dispatch dispatchTarget,
        +                            java.lang.String name,
        +                            java.lang.Object... args)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        args -
        +
        Returns:
        +
        Variant returned by call
        +
        +
      • +
      + + + +
        +
      • +

        callN

        +
        public static Variant callN(Dispatch dispatchTarget,
        +                            int dispID,
        +                            java.lang.Object... args)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispID -
        +
        args -
        +
        Returns:
        +
        Variant returned by call
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public static Variant invoke(Dispatch dispatchTarget,
        +                             java.lang.String name,
        +                             int dispID,
        +                             int lcid,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        dispID -
        +
        lcid -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by invoke
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public static Variant invoke(Dispatch dispatchTarget,
        +                             java.lang.String name,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by invoke
        +
        +
      • +
      + + + +
        +
      • +

        invoke

        +
        public static Variant invoke(Dispatch dispatchTarget,
        +                             int dispID,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispID -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by invoke
        +
        +
      • +
      + + + +
        +
      • +

        call

        +
        public static Variant call(Dispatch dispatchTarget,
        +                           java.lang.String name)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        Returns:
        +
        Variant returned by underlying callN
        +
        +
      • +
      + + + +
        +
      • +

        call

        +
        public static Variant call(Dispatch dispatchTarget,
        +                           java.lang.String name,
        +                           java.lang.Object... attributes)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        attributes -
        +
        Returns:
        +
        Variant returned by underlying callN
        +
        +
      • +
      + + + +
        +
      • +

        call

        +
        public static Variant call(Dispatch dispatchTarget,
        +                           int dispid)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        Returns:
        +
        Variant returned by underlying callN
        +
        +
      • +
      + + + +
        +
      • +

        call

        +
        public static Variant call(Dispatch dispatchTarget,
        +                           int dispid,
        +                           java.lang.Object... attributes)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        attributes - var arg list of attributes that will be passed to the + underlying function
        +
        Returns:
        +
        Variant returned by underlying callN
        +
        +
      • +
      + + + +
        +
      • +

        put

        +
        public static void put(Dispatch dispatchTarget,
        +                       java.lang.String name,
        +                       java.lang.Object val)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        val -
        +
        +
      • +
      + + + +
        +
      • +

        put

        +
        public static void put(Dispatch dispatchTarget,
        +                       int dispid,
        +                       java.lang.Object val)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        val -
        +
        +
      • +
      + + + +
        +
      • +

        invokev

        +
        public static Variant invokev(Dispatch dispatchTarget,
        +                              java.lang.String name,
        +                              int dispID,
        +                              int lcid,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        dispID -
        +
        lcid -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by underlying invokev
        +
        +
      • +
      + + + +
        +
      • +

        invokev

        +
        public static Variant invokev(Dispatch dispatchTarget,
        +                              java.lang.String name,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by underlying invokev
        +
        +
      • +
      + + + +
        +
      • +

        invokev

        +
        public static Variant invokev(Dispatch dispatchTarget,
        +                              java.lang.String name,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr,
        +                              int wFlagsEx)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        wFlagsEx -
        +
        Returns:
        +
        Variant returned by underlying invokev
        +
        +
      • +
      + + + +
        +
      • +

        invokev

        +
        public static Variant invokev(Dispatch dispatchTarget,
        +                              int dispID,
        +                              int wFlags,
        +                              Variant[] vArg,
        +                              int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispID -
        +
        wFlags -
        +
        vArg -
        +
        uArgErr -
        +
        Returns:
        +
        Variant returned by underlying invokev
        +
        +
      • +
      + + + +
        +
      • +

        invokeSub

        +
        public static void invokeSub(Dispatch dispatchTarget,
        +                             java.lang.String name,
        +                             int dispid,
        +                             int lcid,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        dispid -
        +
        lcid -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        invokeSub

        +
        public static void invokeSub(Dispatch dispatchTarget,
        +                             java.lang.String name,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        invokeSub

        +
        public static void invokeSub(Dispatch dispatchTarget,
        +                             int dispid,
        +                             int wFlags,
        +                             java.lang.Object[] oArg,
        +                             int[] uArgErr)
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        wFlags -
        +
        oArg -
        +
        uArgErr -
        +
        +
      • +
      + + + +
        +
      • +

        callSub

        +
        public static void callSub(Dispatch dispatchTarget,
        +                           java.lang.String name)
        +
        makes call to native callSubN
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        +
      • +
      + + + +
        +
      • +

        callSub

        +
        public static void callSub(Dispatch dispatchTarget,
        +                           java.lang.String name,
        +                           java.lang.Object... attributes)
        +
        makes call to native callSubN
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        attributes - var args list of attributes to be passed to underlying + functions
        +
        +
      • +
      + + + +
        +
      • +

        callSub

        +
        public static void callSub(Dispatch dispatchTarget,
        +                           int dispid)
        +
        makes call to native callSubN
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        +
      • +
      + + + +
        +
      • +

        callSub

        +
        public static void callSub(Dispatch dispatchTarget,
        +                           int dispid,
        +                           java.lang.Object... attributes)
        +
        makes call to native callSubN
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        attributes - var args list of attributes to be passed to underlying + function
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        public static Variant get(Dispatch dispatchTarget,
        +                          java.lang.String name)
        +
        Cover for call to underlying invokev()
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        Returns:
        +
        Variant returned by the request for retrieval of parameter
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        public static Variant get(Dispatch dispatchTarget,
        +                          int dispid)
        +
        Cover for call to underlying invokev()
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        Returns:
        +
        Variant returned by the request for retrieval of parameter
        +
        +
      • +
      + + + +
        +
      • +

        putRef

        +
        public static void putRef(Dispatch dispatchTarget,
        +                          java.lang.String name,
        +                          java.lang.Object val)
        +
        cover for underlying call to invoke
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        val -
        +
        +
      • +
      + + + +
        +
      • +

        putRef

        +
        public static void putRef(Dispatch dispatchTarget,
        +                          int dispid,
        +                          java.lang.Object val)
        +
        cover for underlying call to invoke
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        dispid -
        +
        val -
        +
        +
      • +
      + + + +
        +
      • +

        get_CaseSensitive

        +
        public static Variant get_CaseSensitive(Dispatch dispatchTarget,
        +                                        java.lang.String name)
        +
        not implemented yet
        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        name -
        +
        Returns:
        +
        Variant never returned
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        hasExited

        +
        public static int hasExited(Dispatch disp,
        +                            int dispid,
        +                            int lcid)
        +
        Cover for native method
        +
        +
        Parameters:
        +
        disp -
        +
        dispid -
        +
        lcid -
        +
        Returns:
        +
        0 if the dispatch is still active and 1 if it has exited
        +
        +
      • +
      + + + +
        +
      • +

        hasExited

        +
        public static int hasExited(Dispatch dispatchTarget)
        +
        The method is used to poll until it returns 1, indicating that the COM + server in gone. +

        + Sourceforge feature request 2927058

        +
        +
        Parameters:
        +
        dispatchTarget -
        +
        Returns:
        +
        0 if the dispatch is still active and 1 if it has exited
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchEvents.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchEvents.html new file mode 100644 index 0000000..9b6e9d1 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchEvents.html @@ -0,0 +1,451 @@ + + + + + +DispatchEvents (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class DispatchEvents

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    ActiveXDispatchEvents
    +
    +
    +
    +
    public class DispatchEvents
    +extends JacobObject
    +
    This class creates the scaffolding for event callbacks. Every instance of tis + acts as a wrapper around some java object that wants callbacks from the + microsoft side. It represents the connection between Java and COM for + callbacks. +

    + The callback mechanism will take any event that it receives and try and find + a java method with the same name that accepts the Variant... as a parameter. + It will then wrap the call back data in the Variant array and call the java + method of the object that this DispatchEvents object was initialized with. +

    + Instances of this class are created with "sink object" that will receive the + event messages. The sink object is wrapped in an Invocation handler that + actually receives the messages and then forwards them on to the "sink + object". The constructors recognize when an instance of InvocationProxy is + passed in and do not create a new InvocationProxy as a wrapper. They instead + use the passed in InvocationProxy.

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink) +
      This is the most commonly used constructor.
      +
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId) +
      None of the samples use this constructor.
      +
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId, + java.lang.String typeLib) +
      Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
      +
      +
    • +
    + + +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DispatchEvents

        +
        public DispatchEvents(Dispatch sourceOfEvent,
        +                      java.lang.Object eventSink)
        +
        This is the most commonly used constructor. +

        + Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback. +

        + Can be used on any object that implements IProvideClassInfo.

        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        +
      • +
      + + + +
        +
      • +

        DispatchEvents

        +
        public DispatchEvents(Dispatch sourceOfEvent,
        +                      java.lang.Object eventSink,
        +                      java.lang.String progId)
        +
        None of the samples use this constructor. +

        + Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback. +

        + Used when the program doesn't implement IProvideClassInfo. It provides a + way to find the TypeLib in the registry based on the programId. The + TypeLib is looked up in the registry on the path + HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/(CLID drived from + progid)/ProgID/Typelib

        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        progId - program id in the registry that has a TypeLib subkey. The + progrId is mapped to a CLSID that is they used to look up the + key to the Typelib
        +
        +
      • +
      + + + +
        +
      • +

        DispatchEvents

        +
        public DispatchEvents(Dispatch sourceOfEvent,
        +                      java.lang.Object eventSink,
        +                      java.lang.String progId,
        +                      java.lang.String typeLib)
        +
        Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback. +

        + This method was added because Excel doesn't implement IProvideClassInfo + and the registry entry for Excel.Application doesn't include a typelib + key. + +

        + DispatchEvents de = new DispatchEvents(someDispatch, someEventHAndler,
        +                "Excel.Application",
        +                "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE");
        + 
        +
        +
        Parameters:
        +
        sourceOfEvent - Dispatch object who's MS app will generate callbacks
        +
        eventSink - Java object that wants to receive the events
        +
        progId - , mandatory if the typelib is specified
        +
        typeLib - The location of the typelib to use
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInvocationProxy

        +
        protected InvocationProxy getInvocationProxy(java.lang.Object pTargetObject)
        +
        Returns an instance of the proxy configured with pTargetObject as its + target
        +
        +
        Parameters:
        +
        pTargetObject -
        +
        Returns:
        +
        InvocationProxy an instance of the proxy this DispatchEvents will + send to the COM layer
        +
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        protected void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Description copied from class: JacobObject
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchIdentifier.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchIdentifier.html new file mode 100644 index 0000000..81a65a9 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchIdentifier.html @@ -0,0 +1,1351 @@ + + + + + +DispatchIdentifier (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class DispatchIdentifier

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.DispatchIdentifier
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class DispatchIdentifier
    +extends java.lang.Object
    +
    A bunch of DispatchIds that were pulled out of the Dispatch class for version + 1.14.
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchProxy.html new file mode 100644 index 0000000..3a9a39d --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/DispatchProxy.html @@ -0,0 +1,381 @@ + + + + + +DispatchProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class DispatchProxy

+
+
+ +
+
    +
  • +
    +
    +
    public class DispatchProxy
    +extends JacobObject
    +
    If you need to pass a COM Dispatch object between STA threads, you have to + marshall the interface. This class is used as follows: the STA that creates + the Dispatch object must construct an instance of this class. Another thread + can then call toDispatch() on that instance and get a Dispatch pointer which + has been marshalled. WARNING: You can only call toDispatch() once! If you + need to call it multiple times (or from multiple threads) you need to + construct a separate DispatchProxy instance for each such case!
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        m_pStream

        +
        public long m_pStream
        +
        Comment for m_pStream
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DispatchProxy

        +
        public DispatchProxy(Dispatch localDispatch)
        +
        Marshals the passed in dispatch into the stream
        +
        +
        Parameters:
        +
        localDispatch -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        toDispatch

        +
        public Dispatch toDispatch()
        +
        +
        Returns:
        +
        Dispatch the dispatch retrieved from the stream
        +
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        public void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Description copied from class: JacobObject
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/EnumVariant.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/EnumVariant.html new file mode 100644 index 0000000..53b90e5 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/EnumVariant.html @@ -0,0 +1,464 @@ + + + + + +EnumVariant (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class EnumVariant

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.util.Enumeration<Variant>
    +
    +
    +
    +
    public class EnumVariant
    +extends JacobObject
    +implements java.util.Enumeration<Variant>
    +
    An implementation of IEnumVariant based on code submitted by Thomas Hallgren + (mailto:Thomas.Hallgren@eoncompany.com)
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        EnumVariant

        +
        protected EnumVariant(long pIEnumVARIANT)
        +
      • +
      + + + +
        +
      • +

        EnumVariant

        +
        public EnumVariant(Dispatch disp)
        +
        +
        Parameters:
        +
        disp -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        hasMoreElements

        +
        public boolean hasMoreElements()
        +
        Implements java.util.Enumeration
        +
        +
        Specified by:
        +
        hasMoreElements in interface java.util.Enumeration<Variant>
        +
        Returns:
        +
        boolean true if there are more elements in this enumeration
        +
        +
      • +
      + + + +
        +
      • +

        nextElement

        +
        public Variant nextElement()
        +
        Implements java.util.Enumeration
        +
        +
        Specified by:
        +
        nextElement in interface java.util.Enumeration<Variant>
        +
        Returns:
        +
        next element in the enumeration
        +
        +
      • +
      + + + +
        +
      • +

        Next

        +
        @Deprecated
        +public Variant Next()
        +
        Deprecated. use nextElement() instead
        +
        Get next element in collection or null if at end
        +
        +
        Returns:
        +
        Variant that is next in the collection
        +
        +
      • +
      + + + +
        +
      • +

        Next

        +
        public int Next(Variant[] receiverArray)
        +
        This should be private and wrapped to protect JNI layer.
        +
        +
        Parameters:
        +
        receiverArray -
        +
        Returns:
        +
        Returns the next variant object pointer as an int from windows + layer
        +
        +
      • +
      + + + +
        +
      • +

        Skip

        +
        public void Skip(int count)
        +
        This should be private and wrapped to protect JNI layer.
        +
        +
        Parameters:
        +
        count - number to skip
        +
        +
      • +
      + + + +
        +
      • +

        Reset

        +
        public void Reset()
        +
        This should be private and wrapped to protect JNI layer
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        protected void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Description copied from class: JacobObject
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxy.html new file mode 100644 index 0000000..539d97c --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxy.html @@ -0,0 +1,402 @@ + + + + + +InvocationProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class InvocationProxy

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.InvocationProxy
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    ActiveXInvocationProxy, InvocationProxyAllVariants
    +
    +
    +
    +
    public abstract class InvocationProxy
    +extends java.lang.Object
    +
    +
    Version:
    +
    $Id$
    +
    Author:
    +
    joe + + DispatchEvents wraps this class around any event handlers before making the + JNI call that sets up the link with EventProxy. This means that + EventProxy.cpp just calls invoke(String,Variant[]) against the instance of + this class. Then this class does reflection against the event listener to + call the actual event methods. The event methods can return void or return a + Variant. Any value returned will be passed back to the calling windows module + by the Jacob JNI layer. +

    + + The void returning signature is the standard legacy signature. The Variant + returning signature was added in 1.10 to support event handlers returning + values.

    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      protected java.lang.ObjectmTargetObject +
      the object we will try and forward to.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ModifierConstructor and Description
      protected InvocationProxy() +
      dummy constructor for subclasses that don't actually wrap anything and + just want to override the invoke() method
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethod and Description
      VariantgetVariant() +
      used by EventProxy.cpp to create variant objects in the right thread
      +
      abstract Variantinvoke(java.lang.String methodName, + Variant[] targetParameters) +
      The method actually invoked by EventProxy.cpp.
      +
      voidsetTarget(java.lang.Object pTargetObject) +
      Sets the target for this InvocationProxy.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        mTargetObject

        +
        protected java.lang.Object mTargetObject
        +
        the object we will try and forward to.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InvocationProxy

        +
        protected InvocationProxy()
        +
        dummy constructor for subclasses that don't actually wrap anything and + just want to override the invoke() method
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        invoke

        +
        public abstract Variant invoke(java.lang.String methodName,
        +                               Variant[] targetParameters)
        +
        The method actually invoked by EventProxy.cpp. The method name is + calculated by the underlying JNI code from the MS windows Callback + function name. The method is assumed to take an array of Variant objects. + The method may return a Variant or be a void. Those are the only two + options that will not blow up. +

        + Subclasses that override this should make sure mTargetObject is not null + before processing.

        +
        +
        Parameters:
        +
        methodName - name of method in mTargetObject we will invoke
        +
        targetParameters - Variant[] that is the single parameter to the method
        +
        Returns:
        +
        an object that will be returned to the com event caller
        +
        +
      • +
      + + + +
        +
      • +

        getVariant

        +
        public Variant getVariant()
        +
        used by EventProxy.cpp to create variant objects in the right thread
        +
        +
        Returns:
        +
        Variant object that will be used by the COM layer
        +
        +
      • +
      + + + +
        +
      • +

        setTarget

        +
        public void setTarget(java.lang.Object pTargetObject)
        +
        Sets the target for this InvocationProxy.
        +
        +
        Parameters:
        +
        pTargetObject -
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if target is not publicly accessible
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxyAllVariants.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxyAllVariants.html new file mode 100644 index 0000000..7ed6a44 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/InvocationProxyAllVariants.html @@ -0,0 +1,331 @@ + + + + + +InvocationProxyAllVariants (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class InvocationProxyAllVariants

+
+
+ +
+
    +
  • +
    +
    +
    public class InvocationProxyAllVariants
    +extends InvocationProxy
    +
    This class acts as a proxy between the windows event callback mechanism and + the Java classes that are looking for events. It assumes that all of the Java + classes that are looking for events implement methods with the same names as + the windows events and that the implemented methods accept an array of + variant objects. The methods can return void or a Variant that will be + returned to the calling layer. All Event methods that will be recognized by + InvocationProxyAllEvents have the signature + + void eventMethodName(Variant[]) or + Variant eventMethodName(Variant[])
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InvocationProxyAllVariants

        +
        public InvocationProxyAllVariants()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        invoke

        +
        public Variant invoke(java.lang.String methodName,
        +                      Variant[] targetParameters)
        +
        Description copied from class: InvocationProxy
        +
        The method actually invoked by EventProxy.cpp. The method name is + calculated by the underlying JNI code from the MS windows Callback + function name. The method is assumed to take an array of Variant objects. + The method may return a Variant or be a void. Those are the only two + options that will not blow up. +

        + Subclasses that override this should make sure mTargetObject is not null + before processing.

        +
        +
        Specified by:
        +
        invoke in class InvocationProxy
        +
        Parameters:
        +
        methodName - name of method in mTargetObject we will invoke
        +
        targetParameters - Variant[] that is the single parameter to the method
        +
        Returns:
        +
        an object that will be returned to the com event caller
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobException.html new file mode 100644 index 0000000..3d5cbb0 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobException.html @@ -0,0 +1,297 @@ + + + + + +JacobException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class JacobException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.lang.RuntimeException
        • +
        • +
            +
          • com.jacob.com.JacobException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Direct Known Subclasses:
    +
    ComException, NotImplementedException, WrongThreadException
    +
    +
    +
    +
    public class JacobException
    +extends java.lang.RuntimeException
    +
    The parent class of all Jacob exceptions. They all used to be based off of + RuntimeException or ComException but it was decided to base them all off of + one owned by this project.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      JacobException() +
      Default constructor.
      +
      JacobException(java.lang.String message) +
      standard constructor
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JacobException

        +
        public JacobException()
        +
        Default constructor. Calls super with a "No Message Provided" string
        +
      • +
      + + + +
        +
      • +

        JacobException

        +
        public JacobException(java.lang.String message)
        +
        standard constructor
        +
        +
        Parameters:
        +
        message -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobObject.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobObject.html new file mode 100644 index 0000000..b2d34f9 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobObject.html @@ -0,0 +1,378 @@ + + + + + +JacobObject (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class JacobObject

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.JacobObject
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    Dispatch, DispatchEvents, DispatchProxy, EnumVariant, SafeArray, Variant
    +
    +
    +
    +
    public class JacobObject
    +extends java.lang.Object
    +
    The superclass of all Jacob objects. It is used to create a standard API + framework and to facilitate memory management for Java and COM memory + elements. +

    + All instances of this class and subclasses are automatically managed by the + ROT. This means the ROT cannot be a subclass of JacobObject. +

    + All COM object created by JACOB extend this class so that we can + automatically release them when the thread is detached from COM - if we leave + it to the finalizer it will call the release from another thread, which may + result in a segmentation violation.

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JacobObject() +
      Standard constructor that adds this JacobObject to the memory management + pool.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethod and Description
      protected static voiddebug(java.lang.String istrMessage) +
      Very basic debugging function.
      +
      static java.lang.StringgetBuildDate() +
      Deprecated.  +
      use JacobReleaseInfo.getBuildDate() instead.
      +
      +
      static java.lang.StringgetBuildVersion() +
      Deprecated.  +
      use JacobReleaseInfo.getBuildVersion() instead.
      +
      +
      protected static booleanisDebugEnabled() 
      voidsafeRelease() +
      Finalizers call this method.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JacobObject

        +
        public JacobObject()
        +
        Standard constructor that adds this JacobObject to the memory management + pool.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
      • +
      + + + +
        +
      • +

        isDebugEnabled

        +
        protected static boolean isDebugEnabled()
        +
      • +
      + + + +
        +
      • +

        getBuildDate

        +
        @Deprecated
        +public static java.lang.String getBuildDate()
        +
        Deprecated. use JacobReleaseInfo.getBuildDate() instead.
        +
        Loads JacobVersion.Properties and returns the value of version in it
        +
        +
        Returns:
        +
        String value of version in JacobVersion.Properties or "" if none
        +
        +
      • +
      + + + +
        +
      • +

        getBuildVersion

        +
        @Deprecated
        +public static java.lang.String getBuildVersion()
        +
        Deprecated. use JacobReleaseInfo.getBuildVersion() instead.
        +
        Loads JacobVersion.Properties and returns the value of version in it
        +
        +
        Returns:
        +
        String value of version in JacobVersion.Properties or "" if none
        +
        +
      • +
      + + + +
        +
      • +

        debug

        +
        protected static void debug(java.lang.String istrMessage)
        +
        Very basic debugging function.
        +
        +
        Parameters:
        +
        istrMessage -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobReleaseInfo.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobReleaseInfo.html new file mode 100644 index 0000000..c834ec1 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/JacobReleaseInfo.html @@ -0,0 +1,301 @@ + + + + + +JacobReleaseInfo (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class JacobReleaseInfo

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.JacobReleaseInfo
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class JacobReleaseInfo
    +extends java.lang.Object
    +
    An interface to the version properties file. This code was removed from + JacobObject because it doesn't belong there.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      JacobReleaseInfo() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static java.lang.StringgetBuildDate() +
      loads PROPERT_FILE_NAME and returns the value of version in it
      +
      static java.lang.StringgetBuildVersion() +
      loads PROPERT_FILE_NAME and returns the value of version in it
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        JacobReleaseInfo

        +
        public JacobReleaseInfo()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getBuildDate

        +
        public static java.lang.String getBuildDate()
        +
        loads PROPERT_FILE_NAME and returns the value of version in it
        +
        +
        Returns:
        +
        String value of version in PROPERT_FILE_NAME or "" if none
        +
        +
      • +
      + + + +
        +
      • +

        getBuildVersion

        +
        public static java.lang.String getBuildVersion()
        +
        loads PROPERT_FILE_NAME and returns the value of version in it
        +
        +
        Returns:
        +
        String value of version in PROPERT_FILE_NAME or "" if none
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/LibraryLoader.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/LibraryLoader.html new file mode 100644 index 0000000..c6d259a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/LibraryLoader.html @@ -0,0 +1,529 @@ + + + + + +LibraryLoader (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class LibraryLoader

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.LibraryLoader
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class LibraryLoader
    +extends java.lang.Object
    +
    Utility class to centralize the way in which the jacob JNI library is loaded. +

    + + This supports defining the path or library name using system properties or a + custom resource file. If desired, jacob can auto-detect the correct version + of the DLL for 32 or 64 bit windows, as long as you have named them + differently. + +

      +
    1. If system property JACOB_DLL_PATH is defined, the file located + there will be loaded as the jacob dll using System.load().
    2. + +
    3. If system property JACOB_DLL_NAME is defined, the file located + there will be loaded as the jacob dll.
    4. +
    5. If system property JACOB_DLL_NAME_X86 and + JACOB_DLL_NAME_X64 are defined, the file located there will be + loaded as the jacob dll, depending on the version of Windows.
    6. + +
    7. If JACOB_DLL_NAME is defined in the + com.jacob.com.JacobLibraryLoader resource file, the specified dll + will be loaded from the java.library.path.
    8. +
    9. If JACOB_DLL_NAME_X86 and JACOB_DLL_NAME_X64 are + defined in the com.jacob.com.JacobLibraryLoader resource file, the + specified dll will be loaded from the java.library.path, depending + on the version of Windows.
    10. + +
    11. If none of the above are true, the default is to load the library named + "jacob-<version>-<arch>" (or + "jacob-<version>-<arch&rt;.dll") from the java.library.path. +
    12. +
    + + The standard behavior for most applications is that LoadLibrary() + will be called to load the dll. LoadLibary() searches directories + specified in the variable java.library.path. This is why most test + cases specify -Djava.library.path in their command line arguments. +

    + JACOB_DLL_PATH submitted sourceforge ticket 1493647 Added 1.11
    + JACOB_DLL_NAME, JACOB_DLL_NAME_32, JACOB_DLL_NAME_64 submitted sourceforge + ticket 1845039 Added 1.14M7

    +
    +
    Author:
    +
    Scott Dickerson (sjd78), Jason Smith
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.lang.StringDLL_NAME_MODIFIER_32_BIT +
      Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
      +
      static java.lang.StringDLL_NAME_MODIFIER_64_BIT +
      Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
      +
      static java.lang.StringJACOB_DLL_NAME +
      Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob').
      +
      static java.lang.StringJACOB_DLL_NAME_X64 +
      Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 64 + bit windows.
      +
      static java.lang.StringJACOB_DLL_NAME_X86 +
      Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 32 + bit windows.
      +
      static java.lang.StringJACOB_DLL_PATH +
      Name of system property (currently jacob.dll.path) that may + contain an absolute path to the JNI library.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      LibraryLoader() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static java.lang.StringgetPreferredDLLName() +
      Developer note: This method MUST be synchronized with the DLL names + created as part of the build process in build.xml
      +
      static voidloadJacobLibrary() +
      Load the jacob dll either from an absolute path or by a library name, + both of which may be defined in various ways.
      +
      protected static booleanshouldLoad32Bit() +
      Detects whether this is a 32-bit JVM.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        JACOB_DLL_PATH

        +
        public static final java.lang.String JACOB_DLL_PATH
        +
        Name of system property (currently jacob.dll.path) that may + contain an absolute path to the JNI library.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        JACOB_DLL_NAME

        +
        public static final java.lang.String JACOB_DLL_NAME
        +
        Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob').
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        JACOB_DLL_NAME_X86

        +
        public static final java.lang.String JACOB_DLL_NAME_X86
        +
        Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 32 + bit windows.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        JACOB_DLL_NAME_X64

        +
        public static final java.lang.String JACOB_DLL_NAME_X64
        +
        Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 64 + bit windows.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DLL_NAME_MODIFIER_32_BIT

        +
        public static final java.lang.String DLL_NAME_MODIFIER_32_BIT
        +
        Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DLL_NAME_MODIFIER_64_BIT

        +
        public static final java.lang.String DLL_NAME_MODIFIER_64_BIT
        +
        Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        LibraryLoader

        +
        public LibraryLoader()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        loadJacobLibrary

        +
        public static void loadJacobLibrary()
        +
        Load the jacob dll either from an absolute path or by a library name, + both of which may be defined in various ways.
        +
        +
        Throws:
        +
        java.lang.UnsatisfiedLinkError - if the library does not exist.
        +
        +
      • +
      + + + +
        +
      • +

        getPreferredDLLName

        +
        public static java.lang.String getPreferredDLLName()
        +
        Developer note: This method MUST be synchronized with the DLL names + created as part of the build process in build.xml +

        + The DLL name is "jacob\.release"

        +
        +
        Returns:
        +
        the preferred name of the DLL adjusted for this platform and + version without the ".dll" extension
        +
        +
      • +
      + + + +
        +
      • +

        shouldLoad32Bit

        +
        protected static boolean shouldLoad32Bit()
        +
        Detects whether this is a 32-bit JVM.
        +
        +
        Returns:
        +
        true if this is a 32-bit JVM.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/MainSTA.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/MainSTA.html new file mode 100644 index 0000000..f0aeed9 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/MainSTA.html @@ -0,0 +1,307 @@ + + + + + +MainSTA (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class MainSTA

+
+
+
    +
  • java.lang.Object
  • +
  • + +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.lang.Runnable
    +
    +
    +
    +
    public class MainSTA
    +extends STA
    +
    We provide our own main sta thread to avoid COM tagging a random thread as + the main STA - this is the thread in which all Apartment threaded components + will be created if the client chooses an MTA threading model for the java + side of the app.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class java.lang.Thread

        +java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
      • +
      +
    • +
    + +
      +
    • + + +

      Field Summary

      + +
        +
      • + + +

        Fields inherited from class java.lang.Thread

        +MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      MainSTA() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + +
        +
      • + + +

        Methods inherited from class java.lang.Thread

        +activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MainSTA

        +
        public MainSTA()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/NotImplementedException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/NotImplementedException.html new file mode 100644 index 0000000..0e5e52e --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/NotImplementedException.html @@ -0,0 +1,280 @@ + + + + + +NotImplementedException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class NotImplementedException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • + +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class NotImplementedException
    +extends JacobException
    +
    Thrown by java APIs that are not implemented either because they were never + implemented or because they are being deprecated This is a subclass of + ComException so callers can still just catch ComException.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      NotImplementedException(java.lang.String description) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        NotImplementedException

        +
        public NotImplementedException(java.lang.String description)
        +
        +
        Parameters:
        +
        description -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ROT.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ROT.html new file mode 100644 index 0000000..5dd0ef5 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/ROT.html @@ -0,0 +1,497 @@ + + + + + +ROT (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class ROT

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.ROT
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public abstract class ROT
    +extends java.lang.Object
    +
    The Running Object Table (ROT) maps each thread to a collection of all the + JacobObjects that were created in that thread. It always operates on the + current thread so all the methods are static and they implicitly get the + current thread. +

    + The clearObjects method is used to release all the COM objects created by + Jacob in the current thread prior to uninitializing COM for that thread. +

    + Prior to 1.9, manual garbage collection was the only option in Jacob, but + from 1.9 onward, setting the com.jacob.autogc system property allows the + objects referenced by the ROT to be automatically GCed. Automatic GC may be + preferable in systems with heavy event callbacks. +

    + Is [ 1116101 ] jacob-msg 0284 relevant???

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      protected static java.lang.BooleanINCLUDE_ALL_CLASSES_IN_ROT +
      If the code is ran from an applet that is called from javascript the Java + Plugin does not give full permissions to the code and thus System + properties cannot be accessed.
      +
      protected static java.lang.StringPUT_IN_ROT_SUFFIX +
      Suffix added to class name to make up property name that determines if + this object should be stored in the ROT.
      +
      protected static booleanUSE_AUTOMATIC_GARBAGE_COLLECTION +
      Manual garbage collection was the only option pre 1.9 Can staticly cache + the results because only one value and we don't let it change during a + run
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      ROT() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethod and Description
      protected static voidaddObject(JacobObject o) +
      Adds an object to the HashMap for the current thread.
      +
      protected static java.util.Map<JacobObject,java.lang.String>addThread() +
      adds a new thread storage area to rot
      +
      protected static voidclearObjects() +
      Iterates across all of the entries in the Hashmap in the rot that + corresponds to this thread.
      +
      protected static java.util.Map<JacobObject,java.lang.String>getThreadObjects(boolean createIfDoesNotExist) +
      Returns the pool for this thread if it exists.
      +
      protected static voidremoveObject(JacobObject o) +
      Deprecated.  +
      the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread.
      + This will remove an object from the ROT
      + This does not need to be synchronized because only the rot + modification related methods need to synchronized. Each + individual map is only modified in a single thread.
      +
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        USE_AUTOMATIC_GARBAGE_COLLECTION

        +
        protected static final boolean USE_AUTOMATIC_GARBAGE_COLLECTION
        +
        Manual garbage collection was the only option pre 1.9 Can staticly cache + the results because only one value and we don't let it change during a + run
        +
      • +
      + + + +
        +
      • +

        INCLUDE_ALL_CLASSES_IN_ROT

        +
        protected static final java.lang.Boolean INCLUDE_ALL_CLASSES_IN_ROT
        +
        If the code is ran from an applet that is called from javascript the Java + Plugin does not give full permissions to the code and thus System + properties cannot be accessed. They can be accessed at class + initialization time. + + The default behavior is to include all classes in the ROT, setting a + boolean here to indicate this prevents a call to System.getProperty as + part of the general call flow.
        +
      • +
      + + + +
        +
      • +

        PUT_IN_ROT_SUFFIX

        +
        protected static java.lang.String PUT_IN_ROT_SUFFIX
        +
        Suffix added to class name to make up property name that determines if + this object should be stored in the ROT. This 1.13 "feature" makes it + possible to cause VariantViaEvent objects to not be added to the ROT in + event callbacks. +

        + We don't have a static for the actual property because there is a + different property for each class that may make use of this feature.

        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ROT

        +
        public ROT()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        addThread

        +
        protected static java.util.Map<JacobObject,java.lang.String> addThread()
        +
        adds a new thread storage area to rot
        +
        +
        Returns:
        +
        Map corresponding to the thread that this call was made in
        +
        +
      • +
      + + + +
        +
      • +

        getThreadObjects

        +
        protected static java.util.Map<JacobObject,java.lang.String> getThreadObjects(boolean createIfDoesNotExist)
        +
        Returns the pool for this thread if it exists. can create a new one if + you wish by passing in TRUE
        +
        +
        Parameters:
        +
        createIfDoesNotExist -
        +
        Returns:
        +
        Map the collection that holds the objects created in the current + thread
        +
        +
      • +
      + + + +
        +
      • +

        clearObjects

        +
        protected static void clearObjects()
        +
        Iterates across all of the entries in the Hashmap in the rot that + corresponds to this thread. This calls safeRelease() on each entry and + then clears the map when done and removes it from the rot. All traces of + this thread's objects will disappear. This is called by COMThread in the + tear down and provides a synchronous way of releasing memory
        +
      • +
      + + + +
        +
      • +

        removeObject

        +
        @Deprecated
        +protected static void removeObject(JacobObject o)
        +
        Deprecated. the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread.
        + This will remove an object from the ROT
        + This does not need to be synchronized because only the rot + modification related methods need to synchronized. Each + individual map is only modified in a single thread.
        +
        +
        Parameters:
        +
        o -
        +
        +
      • +
      + + + +
        +
      • +

        addObject

        +
        protected static void addObject(JacobObject o)
        +
        Adds an object to the HashMap for the current thread.
        +

        + This method does not need to be threaded because the only concurrent + modification risk is on the hash map that contains all of the thread + related hash maps. The individual thread related maps are only used on a + per thread basis so there isn't a locking issue. +

        + In addition, this method cannot be threaded because it calls + ComThread.InitMTA. The ComThread object has some methods that call ROT so + we could end up deadlocked. This method should be safe without the + synchronization because the ROT works on per thread basis and the methods + that add threads and remove thread related entries are all synchronized

        +
        +
        Parameters:
        +
        o -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/STA.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/STA.html new file mode 100644 index 0000000..3bf9c76 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/STA.html @@ -0,0 +1,454 @@ + + + + + +STA (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class STA

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Thread
    • +
    • +
        +
      • com.jacob.com.STA
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.lang.Runnable
    +
    +
    +
    Direct Known Subclasses:
    +
    MainSTA
    +
    +
    +
    +
    public class STA
    +extends java.lang.Thread
    +
    A class that implements a Single Threaded Apartment. Users will subclass this + and override OnInit() and OnQuit() where they will create and destroy a COM + component that wants to run in an STA other than the main STA.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class java.lang.Thread

        +java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
      • +
      +
    • +
    + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      intthreadID +
      referenced by STA.cpp
      +
      +
        +
      • + + +

        Fields inherited from class java.lang.Thread

        +MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      STA() +
      constructor for STA
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voiddoMessagePump() +
      run a message pump for the main STA
      +
      booleanOnInit() +
      Override this method to create and initialize any COM component that you + want to run in this thread.
      +
      voidOnQuit() +
      Override this method to destroy any resource before the thread exits and + COM in uninitialized
      +
      voidquit() +
      calls quitMessagePump
      +
      voidquitMessagePump() +
      quit message pump for the main STA
      +
      voidrun() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Thread

        +activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        threadID

        +
        public int threadID
        +
        referenced by STA.cpp
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        STA

        +
        public STA()
        +
        constructor for STA
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        run

        +
        public void run()
        +
        +
        Specified by:
        +
        run in interface java.lang.Runnable
        +
        Overrides:
        +
        run in class java.lang.Thread
        +
        +
      • +
      + + + +
        +
      • +

        OnInit

        +
        public boolean OnInit()
        +
        Override this method to create and initialize any COM component that you + want to run in this thread. If anything fails, return false to terminate + the thread.
        +
        +
        Returns:
        +
        always returns true
        +
        +
      • +
      + + + +
        +
      • +

        OnQuit

        +
        public void OnQuit()
        +
        Override this method to destroy any resource before the thread exits and + COM in uninitialized
        +
      • +
      + + + +
        +
      • +

        quit

        +
        public void quit()
        +
        calls quitMessagePump
        +
      • +
      + + + +
        +
      • +

        doMessagePump

        +
        public void doMessagePump()
        +
        run a message pump for the main STA
        +
      • +
      + + + +
        +
      • +

        quitMessagePump

        +
        public void quitMessagePump()
        +
        quit message pump for the main STA
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/SafeArray.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/SafeArray.html new file mode 100644 index 0000000..50012a5 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/SafeArray.html @@ -0,0 +1,3148 @@ + + + + + +SafeArray (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class SafeArray

+
+
+ +
+
    +
  • +
    +
    +
    public class SafeArray
    +extends JacobObject
    +
    This creates an array wrapper around Variant objects(?). This supports 1, 2 + and n-dimensional arrays. It exists in this form because n-dimensional arrays + were a later addition.
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      SafeArray() +
      Constructor.
      +
      SafeArray(int vt) +
      Constructor.
      +
      SafeArray(int vt, + int celems) +
      Constructor for a single dimensional array whose lower bounds is 0 and + whose upper bound is specified as a parameter
      +
      SafeArray(int vt, + int[] lbounds, + int[] celems) +
      Constructor with support for N-dimensional array support
      +
      SafeArray(int vt, + int celems1, + int celems2) +
      Creates a two dimensional SafeArray whose base indexes are 0.
      +
      SafeArray(java.lang.String s) +
      Convert a string to a VT_UI1 array.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.StringasString() +
      Convert a VT_UI1 array to string.
      +
      java.lang.Objectclone() 
      protected voidfinalize()
      voidfromBooleanArray(boolean[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromByteArray(byte[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromCharArray(char[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromDoubleArray(double[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromFloatArray(float[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromIntArray(int[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromLongArray(long[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromShortArray(short[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromStringArray(java.lang.String[] ja) +
      populate the safe array from the passed in array of data
      +
      voidfromVariantArray(Variant[] ja) +
      populate the safe array from the passed in array of data
      +
      booleangetBoolean(int sa_idx) +
      boolean access
      +
      booleangetBoolean(int[] indices) +
      get boolean value from N-dimensional array
      +
      booleangetBoolean(int sa_idx1, + int sa_idx2) +
      boolean access
      +
      voidgetBooleans(int sa_idx, + int nelems, + boolean[] ja, + int ja_start) +
      boolean access
      +
      bytegetByte(int sa_idx) +
      byte access
      +
      bytegetByte(int[] indices) +
      get byte value from N-dimensional array
      +
      bytegetByte(int sa_idx1, + int sa_idx2) +
      byte access
      +
      voidgetBytes(int sa_idx, + int nelems, + byte[] ja, + int ja_start) +
      Fills byte array from contents of this array
      +
      chargetChar(int sa_idx) +
      char access
      +
      chargetChar(int[] indices) +
      get char value from N-dimensional array
      +
      chargetChar(int sa_idx1, + int sa_idx2) +
      char access
      +
      voidgetChars(int sa_idx, + int nelems, + char[] ja, + int ja_start) +
      char access
      +
      doublegetDate(int sa_idx) +
      get windows time from an single dimensional array
      +
      doublegetDouble(int sa_idx) +
      double access
      +
      doublegetDouble(int[] indices) +
      get double value from N-dimensional array
      +
      doublegetDouble(int sa_idx1, + int sa_idx2) +
      double access
      +
      voidgetDoubles(int sa_idx, + int nelems, + double[] ja, + int ja_start) +
      double access
      +
      intgetElemSize() 
      intgetFeatures() 
      floatgetFloat(int sa_idx) +
      float access
      +
      floatgetFloat(int[] indices) +
      get float value from N-dimensional array
      +
      floatgetFloat(int sa_idx1, + int sa_idx2) +
      float access
      +
      voidgetFloats(int sa_idx, + int nelems, + float[] ja, + int ja_start) +
      float access
      +
      intgetInt(int sa_idx) +
      get int from an single dimensional array
      +
      intgetInt(int[] indices) +
      get int value from N-dimensional array
      +
      intgetInt(int sa_idx1, + int sa_idx2) +
      get int from 2 dimensional array
      +
      voidgetInts(int sa_idx, + int nelems, + int[] ja, + int ja_start) +
      retrieves a group of ints from a single dimensional array
      +
      java.util.DategetJavaDate(int sa_idx1) +
      returns the Java Date contained in this array
      +
      intgetLBound() 
      intgetLBound(int dim) 
      longgetLong(int sa_idx) +
      get int from an single dimensional array
      +
      longgetLong(int[] indices) +
      get long value from N-dimensional array
      +
      longgetLong(int sa_idx1, + int sa_idx2) +
      get long from 2 dimensional array
      +
      voidgetLongs(int sa_idx, + int nelems, + long[] ja, + int ja_start) +
      retrieves a group of longs from a single dimensional array
      +
      intgetNumDim() 
      intgetNumLocks() +
      not implemented.
      +
      shortgetShort(int sa_idx) +
      short access
      +
      shortgetShort(int[] indices) +
      get short value from N-dimensional array
      +
      shortgetShort(int sa_idx1, + int sa_idx2) +
      short access
      +
      voidgetShorts(int sa_idx, + int nelems, + short[] ja, + int ja_start) +
      short access
      +
      java.lang.StringgetString(int sa_idx) +
      string access
      +
      java.lang.StringgetString(int[] indices) +
      get String value from N-dimensional array
      +
      java.lang.StringgetString(int sa_idx1, + int sa_idx2) +
      string access
      +
      voidgetStrings(int sa_idx, + int nelems, + java.lang.String[] ja, + int ja_start) +
      string access
      +
      intgetUBound() 
      intgetUBound(int dim) 
      VariantgetVariant(int sa_idx) +
      variant access
      +
      VariantgetVariant(int[] indices) +
      get Variant value from N-dimensional array
      +
      VariantgetVariant(int sa_idx1, + int sa_idx2) +
      variant access
      +
      voidgetVariants(int sa_idx, + int nelems, + Variant[] ja, + int ja_start) +
      variant access
      +
      intgetvt() 
      protected voidinit(int vt, + int[] lbounds, + int[] celems) 
      voidreinit(SafeArray sa) +
      Does anyone want to document this?
      +
      voidreinterpretType(int vt) +
      Does anyone want to document this?
      +
      voidsafeRelease() +
      Finalizers call this method.
      +
      voidsetBoolean(int[] indices, + boolean c) +
      set boolean value in N-dimensional array
      +
      voidsetBoolean(int sa_idx, + boolean c) +
      boolean access
      +
      voidsetBoolean(int sa_idx1, + int sa_idx2, + boolean c) +
      boolean access
      +
      voidsetBooleans(int sa_idx, + int nelems, + boolean[] ja, + int ja_start) +
      boolean access
      +
      voidsetByte(int[] indices, + byte c) +
      set byte value in N-dimensional array
      +
      voidsetByte(int sa_idx, + byte c) +
      byte access
      +
      voidsetByte(int sa_idx1, + int sa_idx2, + byte c) +
      byte access
      +
      voidsetBytes(int sa_idx, + int nelems, + byte[] ja, + int ja_start) +
      fills array with passed in bytes
      +
      voidsetChar(int[] indices, + char c) +
      set char value in N-dimensional array
      +
      voidsetChar(int sa_idx, + char c) +
      char access
      +
      voidsetChar(int sa_idx1, + int sa_idx2, + char c) +
      char access
      +
      voidsetChars(int sa_idx, + int nelems, + char[] ja, + int ja_start) +
      char access
      +
      voidsetDouble(int[] indices, + double c) +
      set double value in N-dimensional array
      +
      voidsetDouble(int sa_idx, + double c) +
      double access
      +
      voidsetDouble(int sa_idx1, + int sa_idx2, + double c) +
      double access
      +
      voidsetDoubles(int sa_idx, + int nelems, + double[] ja, + int ja_start) +
      double access
      +
      voidsetFloat(int[] indices, + float c) +
      set float value in N-dimensional array
      +
      voidsetFloat(int sa_idx, + float c) +
      float access
      +
      voidsetFloat(int sa_idx1, + int sa_idx2, + float c) +
      float access
      +
      voidsetFloats(int sa_idx, + int nelems, + float[] ja, + int ja_start) +
      float access
      +
      voidsetInt(int[] indices, + int c) +
      set int value in N-dimensional array
      +
      voidsetInt(int sa_idx, + int c) +
      sets the int value of an element in a single dimensional array
      +
      voidsetInt(int sa_idx1, + int sa_idx2, + int c) +
      sets the int value of a 2 dimensional array
      +
      voidsetInts(int sa_idx, + int nelems, + int[] ja, + int ja_start) +
      sets a group of ints into a single dimensional array
      +
      voidsetLong(int[] indices, + long c) +
      set long value in N-dimensional array
      +
      voidsetLong(int sa_idx1, + int sa_idx2, + long c) +
      sets the long value of a 2 dimensional array
      +
      voidsetLong(int sa_idx, + long c) +
      sets the long value of an element in a single dimensional array
      +
      voidsetLongs(int sa_idx, + int nelems, + long[] ja, + int ja_start) +
      sets a group of longs into a single dimensional array
      +
      voidsetShort(int[] indices, + short c) +
      set short value in N-dimensional array
      +
      voidsetShort(int sa_idx1, + int sa_idx2, + short c) +
      short access
      +
      voidsetShort(int sa_idx, + short c) +
      short access
      +
      voidsetShorts(int sa_idx, + int nelems, + short[] ja, + int ja_start) +
      short access
      +
      voidsetString(int[] indices, + java.lang.String c) +
      set Stringvalue in N-dimensional array
      +
      voidsetString(int sa_idx1, + int sa_idx2, + java.lang.String c) +
      puts a string into an element in a two dimensional array.
      +
      voidsetString(int sa_idx, + java.lang.String c) +
      puts a string into an element in a single dimensional safe array
      +
      voidsetStrings(int sa_idx, + int nelems, + java.lang.String[] ja, + int ja_start) +
      string access
      +
      voidsetVariant(int[] indices, + Variant v) +
      set Variant value in N-dimensional array
      +
      voidsetVariant(int sa_idx1, + int sa_idx2, + Variant c) +
      variant access
      +
      voidsetVariant(int sa_idx, + Variant c) +
      variant access
      +
      voidsetVariants(int sa_idx, + int nelems, + Variant[] ja, + int ja_start) +
      variant access
      +
      boolean[]toBooleanArray() +
      Retrieves the data from the array cast to a Java data type
      +
      byte[]toByteArray() +
      Retrieves the data from the array cast to a Java data type
      +
      char[]toCharArray() +
      Retrieves the data from the array cast to a Java data type
      +
      double[]toDoubleArray() +
      Retrieves the data from the array cast to a Java data type
      +
      float[]toFloatArray() +
      Retrieves the data from the array cast to a Java data type
      +
      int[]toIntArray() +
      Retrieves the data from the array cast to a Java data type
      +
      long[]toLongArray() +
      Retrieves the data from the array cast to a Java data type
      +
      short[]toShortArray() +
      Retrieves the data from the array cast to a Java data type
      +
      java.lang.StringtoString() +
      Standard toString() Warning, this creates new Variant objects!
      +
      java.lang.String[]toStringArray() +
      Retrieves the data from the array cast to a Java data type
      +
      Variant[]toVariantArray() +
      Retrieves the data from the array cast to a Java data type
      +
      + +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray()
        +
        Constructor. Why does this exist? Yeah, someone will post on sourceforge + about this comment.
        +
      • +
      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray(int vt)
        +
        Constructor.
        +
        +
        Parameters:
        +
        vt - type of array
        +
        +
      • +
      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray(int vt,
        +                 int celems)
        +
        Constructor for a single dimensional array whose lower bounds is 0 and + whose upper bound is specified as a parameter
        +
        +
        Parameters:
        +
        vt - type of the array
        +
        celems - length of the array
        +
        +
      • +
      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray(int vt,
        +                 int celems1,
        +                 int celems2)
        +
        Creates a two dimensional SafeArray whose base indexes are 0.
        +
        +
        Parameters:
        +
        vt - Type of the array
        +
        celems1 - length of the array in first dimension
        +
        celems2 - length of the array in second dimension
        +
        +
      • +
      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray(int vt,
        +                 int[] lbounds,
        +                 int[] celems)
        +
        Constructor with support for N-dimensional array support +

        + You create an N-D SafeArray by: SafeArray sa = new + SafeArray(Variant.VariantVariant, new int[] {0,0,0,0}, new int[] + {4,4,4,4}); Where the 1st array is lower bounds and 2nd has the lengths + of each dimension *

        +
        +
        Parameters:
        +
        vt -
        +
        lbounds -
        +
        celems -
        +
        +
      • +
      + + + +
        +
      • +

        SafeArray

        +
        public SafeArray(java.lang.String s)
        +
        Convert a string to a VT_UI1 array.
        +
        +
        Parameters:
        +
        s - source string
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        asString

        +
        public java.lang.String asString()
        +
        Convert a VT_UI1 array to string. Is this broken for unicode?
        +
        +
        Returns:
        +
        variant byte as a string
        +
        +
      • +
      + + + +
        +
      • +

        clone

        +
        public java.lang.Object clone()
        +
        +
        Overrides:
        +
        clone in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        protected void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        fromBooleanArray

        +
        public void fromBooleanArray(boolean[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromByteArray

        +
        public void fromByteArray(byte[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromCharArray

        +
        public void fromCharArray(char[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromDoubleArray

        +
        public void fromDoubleArray(double[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromFloatArray

        +
        public void fromFloatArray(float[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromIntArray

        +
        public void fromIntArray(int[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromLongArray

        +
        public void fromLongArray(long[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromShortArray

        +
        public void fromShortArray(short[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromStringArray

        +
        public void fromStringArray(java.lang.String[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        fromVariantArray

        +
        public void fromVariantArray(Variant[] ja)
        +
        populate the safe array from the passed in array of data
        +
        +
        Parameters:
        +
        ja -
        +
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int sa_idx)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        boolean representation
        +
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int[] indices)
        +
        get boolean value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean(int sa_idx1,
        +                          int sa_idx2)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        boolean representation
        +
        +
      • +
      + + + +
        +
      • +

        getBooleans

        +
        public void getBooleans(int sa_idx,
        +                        int nelems,
        +                        boolean[] ja,
        +                        int ja_start)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getByte

        +
        public byte getByte(int sa_idx)
        +
        byte access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        byte representaton
        +
        +
      • +
      + + + +
        +
      • +

        getByte

        +
        public byte getByte(int[] indices)
        +
        get byte value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getByte

        +
        public byte getByte(int sa_idx1,
        +                    int sa_idx2)
        +
        byte access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        byte representation
        +
        +
      • +
      + + + +
        +
      • +

        getBytes

        +
        public void getBytes(int sa_idx,
        +                     int nelems,
        +                     byte[] ja,
        +                     int ja_start)
        +
        Fills byte array from contents of this array
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getChar

        +
        public char getChar(int sa_idx)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        single character rpeesentation
        +
        +
      • +
      + + + +
        +
      • +

        getChar

        +
        public char getChar(int[] indices)
        +
        get char value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getChar

        +
        public char getChar(int sa_idx1,
        +                    int sa_idx2)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        single character representation
        +
        +
      • +
      + + + +
        +
      • +

        getChars

        +
        public void getChars(int sa_idx,
        +                     int nelems,
        +                     char[] ja,
        +                     int ja_start)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int sa_idx)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        double stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int[] indices)
        +
        get double value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble(int sa_idx1,
        +                        int sa_idx2)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        double stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getDoubles

        +
        public void getDoubles(int sa_idx,
        +                       int nelems,
        +                       double[] ja,
        +                       int ja_start)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getElemSize

        +
        public int getElemSize()
        +
        +
        Returns:
        +
        the size of each element?
        +
        +
      • +
      + + + +
        +
      • +

        getFeatures

        +
        public int getFeatures()
        +
        +
        Returns:
        +
        The ??features of the array?
        +
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat(int sa_idx)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        float held in array at location
        +
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat(int[] indices)
        +
        get float value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat(int sa_idx1,
        +                      int sa_idx2)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        float held in array at location
        +
        +
      • +
      + + + +
        +
      • +

        getFloats

        +
        public void getFloats(int sa_idx,
        +                      int nelems,
        +                      float[] ja,
        +                      int ja_start)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int sa_idx)
        +
        get int from an single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - array index
        +
        Returns:
        +
        int stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int[] indices)
        +
        get int value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt(int sa_idx1,
        +                  int sa_idx2)
        +
        get int from 2 dimensional array
        +
        +
        Parameters:
        +
        sa_idx1 - array index first dimension
        +
        sa_idx2 - array index of second dimension
        +
        Returns:
        +
        int stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getInts

        +
        public void getInts(int sa_idx,
        +                    int nelems,
        +                    int[] ja,
        +                    int ja_start)
        +
        retrieves a group of ints from a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - the index in the array to start the get
        +
        nelems - number of elements to retrieve
        +
        ja - the structure to be filled with the ints
        +
        ja_start - the start point in the java int array to start filling
        +
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int sa_idx)
        +
        get int from an single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - array index
        +
        Returns:
        +
        long stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int[] indices)
        +
        get long value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong(int sa_idx1,
        +                    int sa_idx2)
        +
        get long from 2 dimensional array
        +
        +
        Parameters:
        +
        sa_idx1 - array index first dimension
        +
        sa_idx2 - array index of second dimension
        +
        Returns:
        +
        long stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getLongs

        +
        public void getLongs(int sa_idx,
        +                     int nelems,
        +                     long[] ja,
        +                     int ja_start)
        +
        retrieves a group of longs from a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - the index in the array to start the get
        +
        nelems - number of elements to retrieve
        +
        ja - the structure to be filled with the longs
        +
        ja_start - the start point in the java longs array to start filling
        +
        +
      • +
      + + + +
        +
      • +

        getLBound

        +
        public int getLBound()
        +
        +
        Returns:
        +
        The lower bounds of the array?
        +
        +
      • +
      + + + +
        +
      • +

        getLBound

        +
        public int getLBound(int dim)
        +
        +
        Parameters:
        +
        dim - the dimension we are checking in a multidimensional array
        +
        Returns:
        +
        The lower bounds of the array?
        +
        +
      • +
      + + + +
        +
      • +

        getNumDim

        +
        public int getNumDim()
        +
        +
        Returns:
        +
        The number of dimensions in this array
        +
        +
      • +
      + + + +
        +
      • +

        getNumLocks

        +
        public int getNumLocks()
        +
        not implemented.
        +
        +
        Returns:
        +
        0
        +
        +
      • +
      + + + +
        +
      • +

        getShort

        +
        public short getShort(int sa_idx)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        short stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getShort

        +
        public short getShort(int[] indices)
        +
        get short value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getShort

        +
        public short getShort(int sa_idx1,
        +                      int sa_idx2)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        short stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getShorts

        +
        public void getShorts(int sa_idx,
        +                      int nelems,
        +                      short[] ja,
        +                      int ja_start)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int sa_idx)
        +
        string access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        String stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int[] indices)
        +
        get String value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString(int sa_idx1,
        +                                  int sa_idx2)
        +
        string access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        String stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getStrings

        +
        public void getStrings(int sa_idx,
        +                       int nelems,
        +                       java.lang.String[] ja,
        +                       int ja_start)
        +
        string access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getUBound

        +
        public int getUBound()
        +
        +
        Returns:
        +
        The upper bounds of the array?
        +
        +
      • +
      + + + +
        +
      • +

        getUBound

        +
        public int getUBound(int dim)
        +
        +
        Parameters:
        +
        dim - the dimension we are checking in a multidimensional array
        +
        Returns:
        +
        The upper bounds of the array?
        +
        +
      • +
      + + + +
        +
      • +

        getVariant

        +
        public Variant getVariant(int sa_idx)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        Returns:
        +
        Variant held in location in the array?
        +
        +
      • +
      + + + +
        +
      • +

        getVariant

        +
        public Variant getVariant(int[] indices)
        +
        get Variant value from N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        Returns:
        +
        the value at the specified location
        +
        +
      • +
      + + + +
        +
      • +

        getVariant

        +
        public Variant getVariant(int sa_idx1,
        +                          int sa_idx2)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        Returns:
        +
        Variant held in a location in the array?
        +
        +
      • +
      + + + +
        +
      • +

        getVariants

        +
        public void getVariants(int sa_idx,
        +                        int nelems,
        +                        Variant[] ja,
        +                        int ja_start)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        getvt

        +
        public int getvt()
        +
        +
        Returns:
        +
        the Variant type
        +
        +
      • +
      + + + +
        +
      • +

        init

        +
        protected void init(int vt,
        +                    int[] lbounds,
        +                    int[] celems)
        +
      • +
      + + + +
        +
      • +

        reinit

        +
        public void reinit(SafeArray sa)
        +
        Does anyone want to document this?
        +
        +
        Parameters:
        +
        sa -
        +
        +
      • +
      + + + +
        +
      • +

        reinterpretType

        +
        public void reinterpretType(int vt)
        +
        Does anyone want to document this?
        +
        +
        Parameters:
        +
        vt - the variant type?
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        Finalizers call this method. This method should release any COM data + structures in a way that it can be called multiple times. This can happen + if someone manually calls this and then a finalizer calls it.
        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        +
      • +
      + + + +
        +
      • +

        setBoolean

        +
        public void setBoolean(int sa_idx,
        +                       boolean c)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setBoolean

        +
        public void setBoolean(int[] indices,
        +                       boolean c)
        +
        set boolean value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setBoolean

        +
        public void setBoolean(int sa_idx1,
        +                       int sa_idx2,
        +                       boolean c)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setBooleans

        +
        public void setBooleans(int sa_idx,
        +                        int nelems,
        +                        boolean[] ja,
        +                        int ja_start)
        +
        boolean access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setByte

        +
        public void setByte(int sa_idx,
        +                    byte c)
        +
        byte access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setByte

        +
        public void setByte(int[] indices,
        +                    byte c)
        +
        set byte value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setByte

        +
        public void setByte(int sa_idx1,
        +                    int sa_idx2,
        +                    byte c)
        +
        byte access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setBytes

        +
        public void setBytes(int sa_idx,
        +                     int nelems,
        +                     byte[] ja,
        +                     int ja_start)
        +
        fills array with passed in bytes
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setChar

        +
        public void setChar(int sa_idx,
        +                    char c)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setChar

        +
        public void setChar(int[] indices,
        +                    char c)
        +
        set char value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setChar

        +
        public void setChar(int sa_idx1,
        +                    int sa_idx2,
        +                    char c)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setChars

        +
        public void setChars(int sa_idx,
        +                     int nelems,
        +                     char[] ja,
        +                     int ja_start)
        +
        char access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setDouble

        +
        public void setDouble(int sa_idx,
        +                      double c)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setDouble

        +
        public void setDouble(int[] indices,
        +                      double c)
        +
        set double value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setDouble

        +
        public void setDouble(int sa_idx1,
        +                      int sa_idx2,
        +                      double c)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setDoubles

        +
        public void setDoubles(int sa_idx,
        +                       int nelems,
        +                       double[] ja,
        +                       int ja_start)
        +
        double access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setFloat

        +
        public void setFloat(int sa_idx,
        +                     float c)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setFloat

        +
        public void setFloat(int[] indices,
        +                     float c)
        +
        set float value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setFloat

        +
        public void setFloat(int sa_idx1,
        +                     int sa_idx2,
        +                     float c)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setFloats

        +
        public void setFloats(int sa_idx,
        +                      int nelems,
        +                      float[] ja,
        +                      int ja_start)
        +
        float access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setInt

        +
        public void setInt(int sa_idx,
        +                   int c)
        +
        sets the int value of an element in a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - index into the array
        +
        c - the value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setInt

        +
        public void setInt(int[] indices,
        +                   int c)
        +
        set int value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setInt

        +
        public void setInt(int sa_idx1,
        +                   int sa_idx2,
        +                   int c)
        +
        sets the int value of a 2 dimensional array
        +
        +
        Parameters:
        +
        sa_idx1 - index on the first dimension
        +
        sa_idx2 - index on the second dimension
        +
        c - the value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setInts

        +
        public void setInts(int sa_idx,
        +                    int nelems,
        +                    int[] ja,
        +                    int ja_start)
        +
        sets a group of ints into a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - the index of the start of the array to put into
        +
        nelems - number of elements to be copied
        +
        ja - the new int values to be put into the array
        +
        ja_start - the start index in the array that we are copying into + SafeArray
        +
        +
      • +
      + + + +
        +
      • +

        setLong

        +
        public void setLong(int sa_idx,
        +                    long c)
        +
        sets the long value of an element in a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - index into the array
        +
        c - the value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setLong

        +
        public void setLong(int[] indices,
        +                    long c)
        +
        set long value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setLong

        +
        public void setLong(int sa_idx1,
        +                    int sa_idx2,
        +                    long c)
        +
        sets the long value of a 2 dimensional array
        +
        +
        Parameters:
        +
        sa_idx1 - index on the first dimension
        +
        sa_idx2 - index on the second dimension
        +
        c - the value to be set
        +
        +
      • +
      + + + +
        +
      • +

        setLongs

        +
        public void setLongs(int sa_idx,
        +                     int nelems,
        +                     long[] ja,
        +                     int ja_start)
        +
        sets a group of longs into a single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - the index of the start of the array to put into
        +
        nelems - number of elements to be copied
        +
        ja - the new long values to be put into the array
        +
        ja_start - the start index in the array that we are copying into + SafeArray
        +
        +
      • +
      + + + +
        +
      • +

        setShort

        +
        public void setShort(int sa_idx1,
        +                     int sa_idx2,
        +                     short c)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setShort

        +
        public void setShort(int sa_idx,
        +                     short c)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setShort

        +
        public void setShort(int[] indices,
        +                     short c)
        +
        set short value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setShorts

        +
        public void setShorts(int sa_idx,
        +                      int nelems,
        +                      short[] ja,
        +                      int ja_start)
        +
        short access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setString

        +
        public void setString(int sa_idx1,
        +                      int sa_idx2,
        +                      java.lang.String c)
        +
        puts a string into an element in a two dimensional array.
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setString

        +
        public void setString(int sa_idx,
        +                      java.lang.String c)
        +
        puts a string into an element in a single dimensional safe array
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setString

        +
        public void setString(int[] indices,
        +                      java.lang.String c)
        +
        set Stringvalue in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setStrings

        +
        public void setStrings(int sa_idx,
        +                       int nelems,
        +                       java.lang.String[] ja,
        +                       int ja_start)
        +
        string access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        setVariant

        +
        public void setVariant(int sa_idx1,
        +                       int sa_idx2,
        +                       Variant c)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx1 -
        +
        sa_idx2 -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setVariant

        +
        public void setVariant(int sa_idx,
        +                       Variant c)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        c -
        +
        +
      • +
      + + + +
        +
      • +

        setVariant

        +
        public void setVariant(int[] indices,
        +                       Variant v)
        +
        set Variant value in N-dimensional array
        +
        +
        Parameters:
        +
        indices - - length must equal Dimension of SafeArray
        +
        v -
        +
        +
      • +
      + + + +
        +
      • +

        getDate

        +
        public double getDate(int sa_idx)
        +
        get windows time from an single dimensional array
        +
        +
        Parameters:
        +
        sa_idx - array index
        +
        Returns:
        +
        date stored in array
        +
        +
      • +
      + + + +
        +
      • +

        getJavaDate

        +
        public java.util.Date getJavaDate(int sa_idx1)
        +
        returns the Java Date contained in this array
        +
        +
        Parameters:
        +
        sa_idx1 - array index
        +
        Returns:
        +
        Java date stored in array
        +
        Throws:
        +
        java.lang.IllegalStateException - if array is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        setVariants

        +
        public void setVariants(int sa_idx,
        +                        int nelems,
        +                        Variant[] ja,
        +                        int ja_start)
        +
        variant access
        +
        +
        Parameters:
        +
        sa_idx -
        +
        nelems -
        +
        ja -
        +
        ja_start -
        +
        +
      • +
      + + + +
        +
      • +

        toBooleanArray

        +
        public boolean[] toBooleanArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        boolean[] array of booleans contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        public byte[] toByteArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        byte[] byte array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toCharArray

        +
        public char[] toCharArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        char[] character array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toDoubleArray

        +
        public double[] toDoubleArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        double[] double array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toFloatArray

        +
        public float[] toFloatArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        float[] array of float contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toIntArray

        +
        public int[] toIntArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        int[] int array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toLongArray

        +
        public long[] toLongArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        long[] long array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toShortArray

        +
        public short[] toShortArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        short[] short array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Standard toString() Warning, this creates new Variant objects!
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        String contents of variant
        +
        +
      • +
      + + + +
        +
      • +

        toStringArray

        +
        public java.lang.String[] toStringArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        String[] String array contained in this collection
        +
        +
      • +
      + + + +
        +
      • +

        toVariantArray

        +
        public Variant[] toVariantArray()
        +
        Retrieves the data from the array cast to a Java data type
        +
        +
        Returns:
        +
        Variant[] array of variants contained in this collection
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Variant.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Variant.html new file mode 100644 index 0000000..abd692a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/Variant.html @@ -0,0 +1,3415 @@ + + + + + +Variant (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class Variant

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    VariantViaEvent
    +
    +
    +
    +
    public class Variant
    +extends JacobObject
    +
    The multi-format data type used for all call backs and most communications + between Java and COM. It provides a single class that can handle all data + types. +

    + Just loading this class creates 3 variants that get added to the ROT +

    + PROPVARIANT introduces new types so eventually Variant will need to be + upgraded to support PropVariant types. + http://blogs.msdn.com/benkaras/archive/2006/09/13/749962.aspx +

    + This object no longer implements Serializable because serialization is broken + (and has been since 2000/xp). The underlying marshalling/unmarshalling code + is broken in the JNI layer.

    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static VariantDEFAULT +
      Use this constant for optional parameters
      +
      static shortVariantArray +
      variant's type is array VT_ARRAY 0x2000
      +
      static shortVariantBoolean +
      variant's type is boolean VT_BOOL
      +
      static shortVariantByref +
      variant's type is a reference (to IDispatch?) VT_BYREF 0x4000
      +
      static shortVariantByte +
      variant's type is byte VT_UI1 This is an UNSIGNED byte
      +
      static shortVariantCurrency +
      variant's type is currency VT_CY
      +
      static shortVariantDate +
      variant's type is date VT_DATE
      +
      static shortVariantDecimal +
      variant's type is object VT_DECIMAL
      +
      static shortVariantDispatch +
      variant's type is dispatch VT_DISPATCH
      +
      static shortVariantDouble +
      variant's type is double VT_R8
      +
      static shortVariantEmpty +
      variant's type is empty : equivalent to VB Nothing and VT_EMPTY
      +
      static shortVariantError +
      variant's type is error VT_ERROR
      +
      static shortVariantFloat +
      variant's type is float VT_R4
      +
      static shortVariantInt +
      variant's type is int VT_I4, a Long in VC
      +
      static shortVariantLongInt +
      variant's type is 64 bit long integer VT_I8 - not yet implemented in + Jacob because we have to decide what to do with Currency and because its + only supported on XP and later.
      +
      static shortVariantNull +
      variant's type is null : equivalent to VB Null and VT_NULL
      +
      static shortVariantObject +
      variant's type is object VT_UNKNOWN
      +
      static shortVariantPointer +
      This value is for reference only and is not to be used by any callers
      +
      static shortVariantShort +
      variant's type is short VT_I2
      +
      static shortVariantString +
      variant's type is string also known as VT_BSTR
      +
      static shortVariantTypeMask +
      what is this? VT_TYPEMASK && VT_BSTR_BLOB 0xfff
      +
      static shortVariantVariant +
      variant's type is variant it encapsulate another variant VT_VARIANT
      +
      static VariantVT_FALSE +
      Use for true/false variant parameters
      +
      static VariantVT_MISSING +
      Same than DEFAULT
      +
      static VariantVT_TRUE +
      Use for true/false variant parameters
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      Variant() +
      public constructor, initializes and sets type to VariantEmpty
      +
      Variant(boolean in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(byte in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(double in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(float in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(int in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(long in) +
      Constructor that accepts a primitive rather than an object
      +
      Variant(java.lang.Object in) +
      Convenience constructor that calls the main one with a byRef value of + false
      +
      Variant(java.lang.Object pValueObject, + boolean fByRef) +
      Constructor that accepts the data object and information about whether + this is by reference or not.
      +
      Variant(short in) +
      Constructor that accepts a primitive rather than an object
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethod and Description
      VariantchangeType(short in) +
      Cover for native method so we can cover it.
      +
      java.lang.Objectclone() +
      this returns null
      +
      VariantcloneIndirect() +
      Deprecated.  +
      No longer used
      +
      +
      protected voidfinalize() 
      booleangetBoolean() 
      booleangetBooleanRef() +
      public cover for native method
      +
      bytegetByte() 
      bytegetByteRef() +
      public cover for native method
      +
      CurrencygetCurrency() +
      MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
      +
      CurrencygetCurrencyRef() +
      MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
      +
      doublegetDate() 
      doublegetDateRef() 
      java.math.BigDecimalgetDecimal() +
      return the BigDecimal value held in this variant (fails on other types)
      +
      java.math.BigDecimalgetDecimalRef() +
      return the BigDecimal value held in this variant (fails on other types)
      +
      DispatchgetDispatch() +
      cover for toDispatch() This method now matches other getXXX() + methods.
      +
      DispatchgetDispatchRef() +
      Dispatch and dispatchRef are treated the same This is just a cover for + toDispatch() with a flag check
      +
      doublegetDouble() 
      doublegetDoubleRef() 
      voidgetEmpty() +
      Deprecated.  +
      method never did anything
      +
      +
      intgetError() 
      intgetErrorRef() 
      floatgetFloat() 
      floatgetFloatRef() 
      intgetInt() +
      return the int value held in this variant if it is an int or a short.
      +
      intgetIntRef() +
      get the content of this variant as an int
      +
      java.util.DategetJavaDate() +
      returns the windows time contained in this Variant to a Java Date.
      +
      java.util.DategetJavaDateRef() +
      returns the windows time contained in this Variant to a Java Date should + return null if this is not a date reference Variant SF 959382
      +
      longgetLong() +
      64 bit Longs only available on x64.
      +
      longgetLongRef() +
      64 bit Longs only available on x64.
      +
      voidgetNull() +
      Deprecated.  +
      method never did anything
      +
      +
      shortgetShort() +
      return the int value held in this variant (fails on other types?)
      +
      shortgetShortRef() +
      get the content of this variant as an int
      +
      java.lang.StringgetString() 
      java.lang.StringgetStringRef() +
      gets the content of the variant as a string ref
      +
      java.lang.ObjectgetVariant() +
      Used to get the value from a windows type of VT_VARIANT or a jacob + Variant type of VariantVariant.
      +
      Variant[]getVariantArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      Variant[]getVariantArrayRef() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      shortgetvt() +
      Reports the type of the underlying Variant object
      +
      protected voidinit() +
      initializes the COM Variant and puts its reference in this instance
      +
      booleanisNull() 
      voidnoParam() +
      Deprecated.  +
      replaced by putNoParam()
      +
      +
      protected booleanobjectIsAConstant(Variant pVariant) +
      returns true if the passed in Variant is a constant that should not be + freed
      +
      voidputBoolean(boolean in) +
      puts a boolean into the variant and sets it's type
      +
      voidputBooleanRef(boolean in) +
      pushes a boolean into the variant by ref and sets the type of the variant + to boolean
      +
      voidputByte(byte in) +
      pushes a byte into the varaint and sets the type
      +
      voidputByteArray(java.lang.Object in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidputByteRef(byte in) +
      pushes a byte into the variant by ref and sets the type
      +
      voidputCharArray(java.lang.Object in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidputCurrency(Currency in) +
      Puts a value in as a currency and sets the variant type.
      +
      voidputCurrencyRef(Currency in) +
      Pushes a long into the variant as currency and sets the type.
      +
      voidputDate(java.util.Date inDate) +
      converts a java date to a windows time and calls putDate(double) SF + 959382
      +
      voidputDate(double in) +
      puts a windows date double into the variant and sets the type
      +
      voidputDateRef(java.util.Date inDate) +
      converts a java date to a windows time and calls putDateRef(double) SF + 959382
      +
      voidputDateRef(double in) +
      set the content of this variant to a date (VT_DATE|VT_BYREF)
      +
      voidputDecimal(java.math.BigDecimal in) +
      EXPERIMENTAL 1.14 feature to support rounded decimals.
      +
      voidputDecimalRef(java.math.BigDecimal in) +
      Set the value of this variant and set the type.
      +
      voidputDispatch(Dispatch in) +
      This acts a cover for putVariant Dispatch.
      +
      voidputDispatchRef(Dispatch in) +
      Dispatch and dispatchRef are treated the same This is a cover for + putVariantDispatch().
      +
      voidputDouble(double in) +
      wraps this Variant around the passed in double.
      +
      voidputDoubleRef(double in) +
      set the content of this variant to a double (VT_R8|VT_BYREF)
      +
      voidputEmpty() +
      sets the type to VariantEmpty
      +
      voidputError(int in) +
      puts an error code (I think) into the variant and sets the type
      +
      voidputErrorRef(int in) +
      pushes an error code into the variant by ref and sets the type
      +
      voidputFloat(float in) +
      fills the Variant with a float and sets the type to float
      +
      voidputFloatRef(float in) +
      pushes a float into the variant and sets the type
      +
      voidputInt(int in) +
      set the value of this variant and set the type
      +
      voidputIntRef(int in) +
      set the content of this variant to an int (VT_I4|VT_BYREF)
      +
      voidputLong(long in) +
      Puts a 64 bit Java Long into a 64 bit Variant Long.
      +
      voidputLongRef(long in) +
      Puts a 64 bit Java Long into a 64 bit Variant Long.
      +
      voidputNoParam() +
      sets the type to VT_ERROR and the error message to DISP_E_PARAMNOTFOIUND
      +
      voidputNothing() +
      Sets the type to VariantDispatch and sets the value to null Equivalent to + VB's nothing
      +
      voidputNull() +
      Set this Variant's type to VT_NULL (the VB equivalent of NULL)
      +
      voidputObject(java.lang.Object in) +
      Deprecated.  +
      should use putDispatch()
      +
      +
      voidputObjectRef(java.lang.Object in) +
      Deprecated.  
      +
      voidputSafeArray(SafeArray in) +
      have no idea...
      +
      voidputSafeArrayRef(SafeArray in) +
      have no idea...
      +
      voidputShort(short in) +
      set the content of this variant to a short (VT_I2)
      +
      voidputShortRef(short in) +
      set the content of this variant to a short (VT_I2|VT_BYREF)
      +
      voidputString(java.lang.String in) +
      put a string into the variant and set its type
      +
      voidputStringRef(java.lang.String in) +
      set the content of this variant to a string (VT_BSTR|VT_BYREF)
      +
      voidputVariant(java.lang.Object objectToBeWrapped) +
      Puts a variant into this variant making it type VT_VARIANT.
      +
      voidputVariantArray(Variant[] in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidputVariantArrayRef(Variant[] in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidsafeRelease() +
      This will release the "C" memory for the Variant unless this Variant is + one of the constants in which case we don't want to release the memory.
      +
      protected voidSerializationReadFromBytes(byte[] ba) +
      this is supposed to cause the underlying variant object struct to be + rebuilt from a previously serialized byte array.
      +
      protected byte[]SerializationWriteToBytes() +
      this is supposed to create a byte array that represents the underlying + variant object structure
      +
      booleantoBoolean() +
      Deprecated.  +
      should be replaced by changeType() followed by getBoolean()
      +
      +
      bytetoByte() +
      Deprecated.  +
      should be replaced by changeType() followed by getByte()
      +
      +
      java.lang.ObjecttoByteArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      java.lang.ObjecttoCharArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      CurrencytoCurrency() +
      Deprecated.  +
      should be replaced by changeType() followed by getCurrency
      +
      +
      doubletoDate() +
      Deprecated.  +
      should use changeType() followed by getDate()
      +
      +
      DispatchtoDispatch() 
      doubletoDouble() +
      Deprecated.  +
      should call changeType() then getDouble()
      +
      +
      EnumVarianttoEnumVariant() 
      inttoError() +
      Deprecated.  +
      should use changeType() followed by getError()
      +
      +
      floattoFloat() +
      Deprecated.  +
      should use changeType() and getFloat() instead
      +
      +
      inttoInt() +
      Deprecated.  +
      should use changeType() followed by getInt()
      +
      +
      java.util.DatetoJavaDate() +
      Deprecated.  +
      callers should use getDate()
      +
      +
      java.lang.ObjecttoJavaObject() +
      Convert a JACOB Variant value to a Java object (type conversions).
      +
      java.lang.ObjecttoObject() +
      Deprecated.  +
      this is a cover for toDispatch();
      +
      +
      SafeArraytoSafeArray() +
      By default toSafeArray makes a deep copy due to the fact that this + Variant owns the embedded SafeArray and will destroy it when it gc's + calls toSafeArray(true).
      +
      SafeArraytoSafeArray(boolean deepCopy) +
      This lets folk turn into a safe array without a deep copy.
      +
      java.lang.ObjecttoScriptObject() +
      Deprecated.  
      +
      shorttoShort() +
      Deprecated.  +
      callers should use changeType() followed by getShort()
      +
      +
      java.lang.StringtoString() +
      This method now correctly implements java toString() semantics Attempts + to return the content of this variant as a string + + "not initialized" if not initialized + "null" if VariantEmpty, + "null" if VariantError + "null" if VariantNull + "null" if Variant type didn't convert.
      +
      VarianttoVariant() +
      Deprecated.  +
      superseded by "this"
      +
      +
      Variant[]toVariantArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidVariantClear() +
      Clear the content of this variant
      +
      + +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT

        +
        public static final Variant DEFAULT
        +
        Use this constant for optional parameters
        +
      • +
      + + + +
        +
      • +

        VT_MISSING

        +
        public static final Variant VT_MISSING
        +
        Same than DEFAULT
        +
      • +
      + + + +
        +
      • +

        VT_TRUE

        +
        public static final Variant VT_TRUE
        +
        Use for true/false variant parameters
        +
      • +
      + + + +
        +
      • +

        VT_FALSE

        +
        public static final Variant VT_FALSE
        +
        Use for true/false variant parameters
        +
      • +
      + + + +
        +
      • +

        VariantEmpty

        +
        public static final short VariantEmpty
        +
        variant's type is empty : equivalent to VB Nothing and VT_EMPTY
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantNull

        +
        public static final short VariantNull
        +
        variant's type is null : equivalent to VB Null and VT_NULL
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantShort

        +
        public static final short VariantShort
        +
        variant's type is short VT_I2
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantInt

        +
        public static final short VariantInt
        +
        variant's type is int VT_I4, a Long in VC
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantFloat

        +
        public static final short VariantFloat
        +
        variant's type is float VT_R4
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantDouble

        +
        public static final short VariantDouble
        +
        variant's type is double VT_R8
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantCurrency

        +
        public static final short VariantCurrency
        +
        variant's type is currency VT_CY
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantDate

        +
        public static final short VariantDate
        +
        variant's type is date VT_DATE
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantString

        +
        public static final short VariantString
        +
        variant's type is string also known as VT_BSTR
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantDispatch

        +
        public static final short VariantDispatch
        +
        variant's type is dispatch VT_DISPATCH
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantError

        +
        public static final short VariantError
        +
        variant's type is error VT_ERROR
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantBoolean

        +
        public static final short VariantBoolean
        +
        variant's type is boolean VT_BOOL
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantVariant

        +
        public static final short VariantVariant
        +
        variant's type is variant it encapsulate another variant VT_VARIANT
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantObject

        +
        public static final short VariantObject
        +
        variant's type is object VT_UNKNOWN
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantDecimal

        +
        public static final short VariantDecimal
        +
        variant's type is object VT_DECIMAL
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantByte

        +
        public static final short VariantByte
        +
        variant's type is byte VT_UI1 This is an UNSIGNED byte
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantLongInt

        +
        public static final short VariantLongInt
        +
        variant's type is 64 bit long integer VT_I8 - not yet implemented in + Jacob because we have to decide what to do with Currency and because its + only supported on XP and later. No win2k, NT or 2003 server.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantPointer

        +
        public static final short VariantPointer
        +
        This value is for reference only and is not to be used by any callers
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantTypeMask

        +
        public static final short VariantTypeMask
        +
        what is this? VT_TYPEMASK && VT_BSTR_BLOB 0xfff
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantArray

        +
        public static final short VariantArray
        +
        variant's type is array VT_ARRAY 0x2000
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VariantByref

        +
        public static final short VariantByref
        +
        variant's type is a reference (to IDispatch?) VT_BYREF 0x4000
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Variant

        +
        public Variant()
        +
        public constructor, initializes and sets type to VariantEmpty
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(boolean in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(byte in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(double in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(float in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(int in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(long in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(java.lang.Object in)
        +
        Convenience constructor that calls the main one with a byRef value of + false
        +
        +
        Parameters:
        +
        in - object to be made into variant
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(java.lang.Object pValueObject,
        +               boolean fByRef)
        +
        Constructor that accepts the data object and information about whether + this is by reference or not. It calls the JavaVariantConverter to + actually push the data into the newly created Variant.
        +
        +
        Parameters:
        +
        pValueObject - The value object that will pushed down into windows memory. A + null object sets this to "empty"
        +
        fByRef -
        +
        +
      • +
      + + + +
        +
      • +

        Variant

        +
        public Variant(short in)
        +
        Constructor that accepts a primitive rather than an object
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        changeType

        +
        public Variant changeType(short in)
        +
        Cover for native method so we can cover it. +

        + This cannot convert an object to a byRef. It can convert from byref to + not byref

        +
        +
        Parameters:
        +
        in - type to convert this variant too
        +
        Returns:
        +
        Variant returns this same object so folks can change when + replacing calls toXXX() with changeType().getXXX()
        +
        +
      • +
      + + + +
        +
      • +

        clone

        +
        public java.lang.Object clone()
        +
        this returns null
        +
        +
        Overrides:
        +
        clone in class java.lang.Object
        +
        Returns:
        +
        ?? comment says null?
        +
        +
      • +
      + + + +
        +
      • +

        cloneIndirect

        +
        @Deprecated
        +public Variant cloneIndirect()
        +
        Deprecated. No longer used
        +
        +
        Returns:
        +
        null !
        +
        +
      • +
      + + + +
        +
      • +

        finalize

        +
        protected void finalize()
        +
        +
        Overrides:
        +
        finalize in class java.lang.Object
        +
        +
      • +
      + + + +
        +
      • +

        getBoolean

        +
        public boolean getBoolean()
        +
        +
        Returns:
        +
        returns the value as a boolean, throws an exception if its not.
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getBooleanRef

        +
        public boolean getBooleanRef()
        +
        public cover for native method
        +
        +
        Returns:
        +
        the boolean from a booleanRef
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getByte

        +
        public byte getByte()
        +
        +
        Returns:
        +
        returns the value as a boolean, throws an exception if its not.
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getByteRef

        +
        public byte getByteRef()
        +
        public cover for native method
        +
        +
        Returns:
        +
        the byte from a booleanRef
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getCurrency

        +
        public Currency getCurrency()
        +
        MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
        +
        +
        Returns:
        +
        returns the currency value as a long, throws exception if not a + currency type..
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getCurrencyRef

        +
        public Currency getCurrencyRef()
        +
        MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
        +
        +
        Returns:
        +
        returns the currency value as a long, throws exception if not a + currency type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDate

        +
        public double getDate()
        +
        +
        Returns:
        +
        double return the date (as a double) value held in this variant + (fails on other types?)
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDateRef

        +
        public double getDateRef()
        +
        +
        Returns:
        +
        returns the date value as a double, throws exception if not a + date type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDecimal

        +
        public java.math.BigDecimal getDecimal()
        +
        return the BigDecimal value held in this variant (fails on other types)
        +
        +
        Returns:
        +
        BigDecimal
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDecimalRef

        +
        public java.math.BigDecimal getDecimalRef()
        +
        return the BigDecimal value held in this variant (fails on other types)
        +
        +
        Returns:
        +
        BigDecimal
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDispatch

        +
        public Dispatch getDispatch()
        +
        cover for toDispatch() This method now matches other getXXX() + methods. It throws an IllegalStateException if the object is not of type + VariantDispatch
        +
        +
        Returns:
        +
        this object as a dispatch
        +
        Throws:
        +
        java.lang.IllegalStateException - if wrong variant type
        +
        +
      • +
      + + + +
        +
      • +

        getDispatchRef

        +
        public Dispatch getDispatchRef()
        +
        Dispatch and dispatchRef are treated the same This is just a cover for + toDispatch() with a flag check
        +
        +
        Returns:
        +
        the results of toDispatch()
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDouble

        +
        public double getDouble()
        +
        +
        Returns:
        +
        double return the double value held in this variant (fails on + other types?)
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getDoubleRef

        +
        public double getDoubleRef()
        +
        +
        Returns:
        +
        returns the double value, throws exception if not a Double type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getEmpty

        +
        @Deprecated
        +public void getEmpty()
        +
        Deprecated. method never did anything
        +
        Pointless method that was put here so that putEmpty() has a get method. + This would have returned null if the value was VT_EMPTY or if it wasn't + so it would have always returned the same value.
        +
      • +
      + + + +
        +
      • +

        getError

        +
        public int getError()
        +
        +
        Returns:
        +
        double return the error value held in this variant (fails on + other types?)
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getErrorRef

        +
        public int getErrorRef()
        +
        +
        Returns:
        +
        returns the error value as an int, throws exception if not a + Error type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getFloat

        +
        public float getFloat()
        +
        +
        Returns:
        +
        returns the value as a float if the type is of type float
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getFloatRef

        +
        public float getFloatRef()
        +
        +
        Returns:
        +
        returns the float value, throws exception if not a Float type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getInt

        +
        public int getInt()
        +
        return the int value held in this variant if it is an int or a short. + Throws for other types.
        +
        +
        Returns:
        +
        int contents of the windows memory
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getIntRef

        +
        public int getIntRef()
        +
        get the content of this variant as an int
        +
        +
        Returns:
        +
        int
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getJavaDate

        +
        public java.util.Date getJavaDate()
        +
        returns the windows time contained in this Variant to a Java Date. should + return null if this is not a date Variant SF 959382
        +
        +
        Returns:
        +
        java.util.Date returns the date if this is a VariantDate != 0, + null if it is a VariantDate == 0 and throws an + IllegalStateException if this isn't a date.
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getJavaDateRef

        +
        public java.util.Date getJavaDateRef()
        +
        returns the windows time contained in this Variant to a Java Date should + return null if this is not a date reference Variant SF 959382
        +
        +
        Returns:
        +
        java.util.Date
        +
        +
      • +
      + + + +
        +
      • +

        getLong

        +
        public long getLong()
        +
        64 bit Longs only available on x64. 64 bit long support added 1.14
        +
        +
        Returns:
        +
        returns the value as a long, throws exception if not a Long + type..
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getLongRef

        +
        public long getLongRef()
        +
        64 bit Longs only available on x64. 64 bit long support added 1.14
        +
        +
        Returns:
        +
        returns the value as a long, throws exception if not a long type
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getNull

        +
        @Deprecated
        +public void getNull()
        +
        Deprecated. method never did anything
        +
        This method would have returned null if the type was VT_NULL. But because + we return null if the data is not of the right type, this method should + have always returned null
        +
      • +
      + + + +
        +
      • +

        getShort

        +
        public short getShort()
        +
        return the int value held in this variant (fails on other types?)
        +
        +
        Returns:
        +
        int
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getShortRef

        +
        public short getShortRef()
        +
        get the content of this variant as an int
        +
        +
        Returns:
        +
        int
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getString

        +
        public java.lang.String getString()
        +
        +
        Returns:
        +
        string contents of the variant, null if is of type null or empty
        +
        Throws:
        +
        java.lang.IllegalStateException - if this variant is not of type String
        +
        +
      • +
      + + + +
        +
      • +

        getStringRef

        +
        public java.lang.String getStringRef()
        +
        gets the content of the variant as a string ref
        +
        +
        Returns:
        +
        String retrieved from the COM area.
        +
        Throws:
        +
        java.lang.IllegalStateException - if variant is not of the requested type
        +
        +
      • +
      + + + +
        +
      • +

        getVariant

        +
        public java.lang.Object getVariant()
        +
        Used to get the value from a windows type of VT_VARIANT or a jacob + Variant type of VariantVariant. Added 1.12 pre 6 - VT_VARIANT support is + at an alpha level
        +
        +
        Returns:
        +
        Object a java Object that represents the content of the enclosed + Variant
        +
        +
      • +
      + + + +
        +
      • +

        getVariantArray

        +
        @Deprecated
        +public Variant[] getVariantArray()
        +
        Deprecated. superseded by SafeArray
        +
        +
        Returns:
        +
        never returns anything
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        getVariantArrayRef

        +
        @Deprecated
        +public Variant[] getVariantArrayRef()
        +
        Deprecated. superseded by SafeArray
        +
        +
        Returns:
        +
        the Variant Array that represents the data in the Variant
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        getvt

        +
        public short getvt()
        +
        Reports the type of the underlying Variant object
        +
        +
        Returns:
        +
        returns the variant type as a short, one of the Variantxxx values + defined as statics in this class. returns VariantNull if not + initialized
        +
        Throws:
        +
        java.lang.IllegalStateException - if there is no underlying windows data structure
        +
        +
      • +
      + + + +
        +
      • +

        init

        +
        protected void init()
        +
        initializes the COM Variant and puts its reference in this instance
        +
      • +
      + + + +
        +
      • +

        isNull

        +
        public boolean isNull()
        +
        +
        Returns:
        +
        returns true if the variant is considered null
        +
        Throws:
        +
        java.lang.IllegalStateException - if there is no underlying windows memory
        +
        +
      • +
      + + + +
        +
      • +

        noParam

        +
        @Deprecated
        +public void noParam()
        +
        Deprecated. replaced by putNoParam()
        +
        sets the type to VT_ERROR and the error message to DISP_E_PARAMNOTFOIUND
        +
      • +
      + + + +
        +
      • +

        objectIsAConstant

        +
        protected boolean objectIsAConstant(Variant pVariant)
        +
        returns true if the passed in Variant is a constant that should not be + freed
        +
        +
        Parameters:
        +
        pVariant -
        +
        Returns:
        +
        boolean that is true if Variant is a type of constant, VT_FALSE, + VT_TRUE, VT_MISSING, DEFAULT
        +
        +
      • +
      + + + +
        +
      • +

        putBoolean

        +
        public void putBoolean(boolean in)
        +
        puts a boolean into the variant and sets it's type
        +
        +
        Parameters:
        +
        in - the new value
        +
        +
      • +
      + + + +
        +
      • +

        putBooleanRef

        +
        public void putBooleanRef(boolean in)
        +
        pushes a boolean into the variant by ref and sets the type of the variant + to boolean
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putByte

        +
        public void putByte(byte in)
        +
        pushes a byte into the varaint and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putByteArray

        +
        @Deprecated
        +public void putByteArray(java.lang.Object in)
        +
        Deprecated. superseded by SafeArray
        +
        +
        Parameters:
        +
        in - doesn't matter because this method does nothing
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        putByteRef

        +
        public void putByteRef(byte in)
        +
        pushes a byte into the variant by ref and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putCharArray

        +
        @Deprecated
        +public void putCharArray(java.lang.Object in)
        +
        Deprecated. superseded by SafeArray
        +
        +
        Parameters:
        +
        in - the object that would be wrapped by the Variant if this method + was implemented
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        putCurrency

        +
        public void putCurrency(Currency in)
        +
        Puts a value in as a currency and sets the variant type. MS Currency + objects are 64 bit fixed point numbers with 15 digits to the left and 4 + to the right of the decimal place.
        +
        +
        Parameters:
        +
        in - the long that will be put into the 64 bit currency object.
        +
        +
      • +
      + + + +
        +
      • +

        putCurrencyRef

        +
        public void putCurrencyRef(Currency in)
        +
        Pushes a long into the variant as currency and sets the type. MS Currency + objects are 64 bit fixed point numbers with 15 digits to the left and 4 + to the right of the decimal place.
        +
        +
        Parameters:
        +
        in - the long that will be put into the 64 bit currency object
        +
        +
      • +
      + + + +
        +
      • +

        putDate

        +
        public void putDate(java.util.Date inDate)
        +
        converts a java date to a windows time and calls putDate(double) SF + 959382
        +
        +
        Parameters:
        +
        inDate - a Java date to be converted
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if inDate = null
        +
        +
      • +
      + + + +
        +
      • +

        putDate

        +
        public void putDate(double in)
        +
        puts a windows date double into the variant and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putDateRef

        +
        public void putDateRef(java.util.Date inDate)
        +
        converts a java date to a windows time and calls putDateRef(double) SF + 959382
        +
        +
        Parameters:
        +
        inDate - a Java date to be converted
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if inDate = null
        +
        +
      • +
      + + + +
        +
      • +

        putDateRef

        +
        public void putDateRef(double in)
        +
        set the content of this variant to a date (VT_DATE|VT_BYREF)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putDecimal

        +
        public void putDecimal(java.math.BigDecimal in)
        +
        EXPERIMENTAL 1.14 feature to support rounded decimals. +

        + Set the value of this variant and set the type. This may throw exceptions + more often than the caller expects because most callers don't manage the + scale of their BigDecimal objects. +

        + This default set method throws exceptions if precision or size is out of + bounds +

        + There are 12 bytes available for the integer number. +

        + There is 1 byte for the scale.

        +
        +
        Parameters:
        +
        in - the BigDecimal that will be converted to VT_DECIMAL
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if the scale is > 28, the maximum for VT_DECIMAL or if there + are more than 12 bytes worth the digits
        +
        +
      • +
      + + + +
        +
      • +

        putDecimalRef

        +
        public void putDecimalRef(java.math.BigDecimal in)
        +
        Set the value of this variant and set the type. This may throw exceptions + more often than the caller expects because most callers don't manage the + scale of their BigDecimal objects. +

        + This default set method throws exceptions if precision or size is out of + bounds +

        + There are 12 bytes available for the integer number. +

        + There is 1 byte for the scale.

        +
        +
        Parameters:
        +
        in - the BigDecimal that will be converted to VT_DECIMAL
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if the scale is > 28, the maximum for VT_DECIMAL or if there + are more than 12 bytes worth the digits
        +
        +
      • +
      + + + +
        +
      • +

        putDispatch

        +
        public void putDispatch(Dispatch in)
        +
        This acts a cover for putVariant Dispatch.
        +
        +
        Parameters:
        +
        in - the Dispatch we're putting down in the COM variant space.
        +
        +
      • +
      + + + +
        +
      • +

        putDispatchRef

        +
        public void putDispatchRef(Dispatch in)
        +
        Dispatch and dispatchRef are treated the same This is a cover for + putVariantDispatch(). putDispatch and putDispatchRef are treated the same + because no one has written the COM code for putDispatchRef.
        +
        +
        Parameters:
        +
        in - the Dispatch we're putting down in the COM variant space.
        +
        +
      • +
      + + + +
        +
      • +

        putDouble

        +
        public void putDouble(double in)
        +
        wraps this Variant around the passed in double.
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putDoubleRef

        +
        public void putDoubleRef(double in)
        +
        set the content of this variant to a double (VT_R8|VT_BYREF)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putEmpty

        +
        public void putEmpty()
        +
        sets the type to VariantEmpty
        +
      • +
      + + + +
        +
      • +

        putError

        +
        public void putError(int in)
        +
        puts an error code (I think) into the variant and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putErrorRef

        +
        public void putErrorRef(int in)
        +
        pushes an error code into the variant by ref and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putFloat

        +
        public void putFloat(float in)
        +
        fills the Variant with a float and sets the type to float
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putFloatRef

        +
        public void putFloatRef(float in)
        +
        pushes a float into the variant and sets the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putInt

        +
        public void putInt(int in)
        +
        set the value of this variant and set the type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putIntRef

        +
        public void putIntRef(int in)
        +
        set the content of this variant to an int (VT_I4|VT_BYREF)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putLong

        +
        public void putLong(long in)
        +
        Puts a 64 bit Java Long into a 64 bit Variant Long. Only works on x64 + systems otherwise throws an error. 64 bit long support added 1.14
        +
        +
        Parameters:
        +
        in - the long that will be put into the 64 bit Long object.
        +
        +
      • +
      + + + +
        +
      • +

        putLongRef

        +
        public void putLongRef(long in)
        +
        Puts a 64 bit Java Long into a 64 bit Variant Long. Only works on x64 + systems otherwise throws an error. 64 bit long support added 1.14
        +
        +
        Parameters:
        +
        in - the long that will be put into the 64 bit Long object.
        +
        +
      • +
      + + + +
        +
      • +

        putNoParam

        +
        public void putNoParam()
        +
        sets the type to VT_ERROR and the error message to DISP_E_PARAMNOTFOIUND
        +
      • +
      + + + +
        +
      • +

        putNothing

        +
        public void putNothing()
        +
        Sets the type to VariantDispatch and sets the value to null Equivalent to + VB's nothing
        +
      • +
      + + + +
        +
      • +

        putNull

        +
        public void putNull()
        +
        Set this Variant's type to VT_NULL (the VB equivalent of NULL)
        +
      • +
      + + + +
        +
      • +

        putObject

        +
        @Deprecated
        +public void putObject(java.lang.Object in)
        +
        Deprecated. should use putDispatch()
        +
        Puts an object into the Variant -- converts to Dispatch. Acts as a cover + for putVariantDispatch(); This primarily exists to support jacobgen. This + should be deprecated.
        +
        +
        Parameters:
        +
        in - the object we are putting into the Variant, assumes a
        +
        See Also:
        +
        putDispatch(Dispatch)
        +
        +
      • +
      + + + +
        +
      • +

        putObjectRef

        +
        @Deprecated
        +public void putObjectRef(java.lang.Object in)
        +
        Deprecated. 
        +
        Just a cover for putObject(). We shouldn't accept any old random object. + This has been left in to support jacobgen. This should be deprecated.
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putSafeArray

        +
        public void putSafeArray(SafeArray in)
        +
        have no idea...
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putSafeArrayRef

        +
        public void putSafeArrayRef(SafeArray in)
        +
        have no idea...
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putShort

        +
        public void putShort(short in)
        +
        set the content of this variant to a short (VT_I2)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putShortRef

        +
        public void putShortRef(short in)
        +
        set the content of this variant to a short (VT_I2|VT_BYREF)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putString

        +
        public void putString(java.lang.String in)
        +
        put a string into the variant and set its type
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putStringRef

        +
        public void putStringRef(java.lang.String in)
        +
        set the content of this variant to a string (VT_BSTR|VT_BYREF)
        +
        +
        Parameters:
        +
        in -
        +
        +
      • +
      + + + +
        +
      • +

        putVariant

        +
        public void putVariant(java.lang.Object objectToBeWrapped)
        +
        Puts a variant into this variant making it type VT_VARIANT. Added 1.12 + pre 6
        +
        +
        Parameters:
        +
        objectToBeWrapped - A object that is to be referenced by this variant. If + objectToBeWrapped is already of type Variant, then it is used. + If objectToBeWrapped is not Variant then + new Variant(objectToBeWrapped) is called and the + result is passed into the com layer
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if inVariant = null or if inVariant is a Varint
        +
        +
      • +
      + + + +
        +
      • +

        putVariantArray

        +
        @Deprecated
        +public void putVariantArray(Variant[] in)
        +
        Deprecated. superseded by SafeArray
        +
        +
        Parameters:
        +
        in - doesn't matter because this method does nothing
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        putVariantArrayRef

        +
        @Deprecated
        +public void putVariantArrayRef(Variant[] in)
        +
        Deprecated. superseded by SafeArray
        +
        +
        Parameters:
        +
        in - the thing that would be come an array if this method was + implemented
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        safeRelease

        +
        public void safeRelease()
        +
        This will release the "C" memory for the Variant unless this Variant is + one of the constants in which case we don't want to release the memory. +

        +
        +
        Overrides:
        +
        safeRelease in class JacobObject
        +
        See Also:
        +
        JacobObject.safeRelease()
        +
        +
      • +
      + + + +
        +
      • +

        SerializationReadFromBytes

        +
        protected void SerializationReadFromBytes(byte[] ba)
        +
        this is supposed to cause the underlying variant object struct to be + rebuilt from a previously serialized byte array.
        +
        +
        Parameters:
        +
        ba -
        +
        +
      • +
      + + + +
        +
      • +

        SerializationWriteToBytes

        +
        protected byte[] SerializationWriteToBytes()
        +
        this is supposed to create a byte array that represents the underlying + variant object structure
        +
      • +
      + + + +
        +
      • +

        toBoolean

        +
        @Deprecated
        +public boolean toBoolean()
        +
        Deprecated. should be replaced by changeType() followed by getBoolean()
        +
        +
        Returns:
        +
        the value of this variant as boolean (after possible conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toByte

        +
        @Deprecated
        +public byte toByte()
        +
        Deprecated. should be replaced by changeType() followed by getByte()
        +
        attempts to return the content of this variant as a double (after + possible conversion)
        +
        +
        Returns:
        +
        byte
        +
        +
      • +
      + + + +
        +
      • +

        toByteArray

        +
        @Deprecated
        +public java.lang.Object toByteArray()
        +
        Deprecated. superseded by SafeArray
        +
        +
        Returns:
        +
        nothing because this method is not implemented
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        toCharArray

        +
        @Deprecated
        +public java.lang.Object toCharArray()
        +
        Deprecated. superseded by SafeArray
        +
        +
        Returns:
        +
        never returns anything
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        toCurrency

        +
        @Deprecated
        +public Currency toCurrency()
        +
        Deprecated. should be replaced by changeType() followed by getCurrency
        +
        +
        Returns:
        +
        the content of this variant as a long representing a monetary + amount
        +
        +
      • +
      + + + +
        +
      • +

        toDate

        +
        @Deprecated
        +public double toDate()
        +
        Deprecated. should use changeType() followed by getDate()
        +
        +
        Returns:
        +
        the value of this variant as a date (after possible conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toDispatch

        +
        public Dispatch toDispatch()
        +
        +
        Returns:
        +
        the content of this variant as a Dispatch object (after possible + conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toDouble

        +
        @Deprecated
        +public double toDouble()
        +
        Deprecated. should call changeType() then getDouble()
        +
        +
        Returns:
        +
        the content of this variant as a double (after possible + conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toEnumVariant

        +
        public EnumVariant toEnumVariant()
        +
        +
        Returns:
        +
        the value of this variant as an enumeration (java style)
        +
        +
      • +
      + + + +
        +
      • +

        toError

        +
        @Deprecated
        +public int toError()
        +
        Deprecated. should use changeType() followed by getError()
        +
        converts to an error type and returns the error
        +
        +
        Returns:
        +
        the error as an int (after conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toFloat

        +
        @Deprecated
        +public float toFloat()
        +
        Deprecated. should use changeType() and getFloat() instead
        +
        attempts to return the contents of this variant as a float (after + possible conversion)
        +
        +
        Returns:
        +
        float
        +
        +
      • +
      + + + +
        +
      • +

        toInt

        +
        @Deprecated
        +public int toInt()
        +
        Deprecated. should use changeType() followed by getInt()
        +
        +
        Returns:
        +
        the value of this variant as an int (after possible conversion)
        +
        +
      • +
      + + + +
        +
      • +

        toJavaDate

        +
        @Deprecated
        +public java.util.Date toJavaDate()
        +
        Deprecated. callers should use getDate()
        +
        Returns the windows time contained in this Variant as a Java Date + converts to a date like many of the other toXXX() methods SF 959382. +

        + This method added 12/2005 for possible use by jacobgen instead of its + conversion code +

        + This does not convert the data

        +
        +
        Returns:
        +
        java.util.Date version of this variant if it is a date, otherwise + null
        +
        +
      • +
      + + + +
        +
      • +

        toJavaObject

        +
        public java.lang.Object toJavaObject()
        +                              throws JacobException
        +
        Convert a JACOB Variant value to a Java object (type conversions). + provided in Sourceforge feature request 959381. See + JavaVariantConverter..convertVariantTJavaObject(Variant) for more + information.
        +
        +
        Returns:
        +
        Corresponding Java object of the type matching the Variant type.
        +
        Throws:
        +
        java.lang.IllegalStateException - if no underlying windows data structure
        +
        NotImplementedException - if unsupported conversion is requested
        +
        JacobException - if the calculated result was a JacobObject usually as a + result of error
        +
        +
      • +
      + + + +
        +
      • +

        toObject

        +
        @Deprecated
        +public java.lang.Object toObject()
        +
        Deprecated. this is a cover for toDispatch();
        +
        Acts a a cover for toDispatch. This primarily exists to support jacobgen.
        +
        +
        Returns:
        +
        Object returned by toDispatch()
        +
        See Also:
        +
        instead
        +
        +
      • +
      + + + +
        +
      • +

        toSafeArray

        +
        public SafeArray toSafeArray()
        +
        By default toSafeArray makes a deep copy due to the fact that this + Variant owns the embedded SafeArray and will destroy it when it gc's + calls toSafeArray(true).
        +
        +
        Returns:
        +
        the object converted to a SafeArray
        +
        +
      • +
      + + + +
        +
      • +

        toSafeArray

        +
        public SafeArray toSafeArray(boolean deepCopy)
        +
        This lets folk turn into a safe array without a deep copy. Should this + API be public?
        +
        +
        Parameters:
        +
        deepCopy -
        +
        Returns:
        +
        SafeArray constructed
        +
        +
      • +
      + + + +
        +
      • +

        toScriptObject

        +
        @Deprecated
        +public java.lang.Object toScriptObject()
        +
        Deprecated. 
        +
        I don't know what this is. Is it some legacy (pre 1.8) thing?
        +
        +
        Returns:
        +
        this object as a dispatch object by calling toDispatch()
        +
        +
      • +
      + + + +
        +
      • +

        toShort

        +
        @Deprecated
        +public short toShort()
        +
        Deprecated. callers should use changeType() followed by getShort()
        +
        attempts to return the contents of this Variant as a short (after + possible conversion)
        +
        +
        Returns:
        +
        short
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        This method now correctly implements java toString() semantics Attempts + to return the content of this variant as a string +
          +
        • "not initialized" if not initialized +
        • "null" if VariantEmpty, +
        • "null" if VariantError +
        • "null" if VariantNull +
        • "null" if Variant type didn't convert. This can happen for date + conversions where the returned value was 0. +
        • the value if we know how to describe one of that type +
        • three question marks if can't convert
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        String value conversion,
        +
        Throws:
        +
        java.lang.IllegalStateException - if there is no underlying windows data structure
        +
        +
      • +
      + + + +
        +
      • +

        toVariant

        +
        @Deprecated
        +public Variant toVariant()
        +
        Deprecated. superseded by "this"
        +
        Exists to support jacobgen. This would be deprecated if it weren't for + jacobgen
        +
        +
        Returns:
        +
        this same object
        +
        +
      • +
      + + + +
        +
      • +

        toVariantArray

        +
        @Deprecated
        +public Variant[] toVariantArray()
        +
        Deprecated. superseded by SafeArray
        +
        +
        Returns:
        +
        nothing because this method is not implemented
        +
        Throws:
        +
        NotImplementedException
        +
        +
      • +
      + + + +
        +
      • +

        VariantClear

        +
        public void VariantClear()
        +
        Clear the content of this variant
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantUtilities.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantUtilities.html new file mode 100644 index 0000000..4a5c9d9 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantUtilities.html @@ -0,0 +1,411 @@ + + + + + +VariantUtilities (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class VariantUtilities

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • com.jacob.com.VariantUtilities
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class VariantUtilities
    +extends java.lang.Object
    +
    A utility class used to convert between Java objects and Variants
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      protected static Variant[]objectsToVariants(java.lang.Object[] arrayOfObjectsToBeConverted) +
      converts an array of objects into an array of Variants by repeatedly + calling obj2Variant(Object)
      +
      protected static VariantobjectToVariant(java.lang.Object objectToBeMadeIntoVariant) +
      Map arguments based on msdn documentation.
      +
      protected static voidpopulateVariant(Variant targetVariant, + java.lang.Object pValueObject, + boolean fByRef) +
      Populates a variant object from a java object.
      +
      static java.math.BigDecimalroundToMSDecimal(java.math.BigDecimal sourceDecimal) +
      Rounds the scale and bit length so that it will pass + validateDecimalScaleBits().
      +
      protected static voidvalidateDecimalMinMax(java.math.BigDecimal in) +
      Does any validation that couldn't have been fixed by rounding or scale + modification.
      +
      protected static voidvalidateDecimalScaleAndBits(java.math.BigDecimal in) +
      Verifies that we have a scale 0 <= x <= 28 and now more than 96 bits of + data.
      +
      protected static java.lang.ObjectvariantToObject(Variant sourceData) +
      Convert a JACOB Variant value to a Java object (type conversions).
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        populateVariant

        +
        protected static void populateVariant(Variant targetVariant,
        +                                      java.lang.Object pValueObject,
        +                                      boolean fByRef)
        +
        Populates a variant object from a java object. This method attempts to + figure out the appropriate Variant type
        +
        +
        Parameters:
        +
        targetVariant -
        +
        pValueObject -
        +
        fByRef -
        +
        +
      • +
      + + + +
        +
      • +

        objectToVariant

        +
        protected static Variant objectToVariant(java.lang.Object objectToBeMadeIntoVariant)
        +
        Map arguments based on msdn documentation. This method relies on the + variant constructor except for arrays.
        +
        +
        Parameters:
        +
        objectToBeMadeIntoVariant -
        +
        Returns:
        +
        Variant that represents the object
        +
        +
      • +
      + + + +
        +
      • +

        objectsToVariants

        +
        protected static Variant[] objectsToVariants(java.lang.Object[] arrayOfObjectsToBeConverted)
        +
        converts an array of objects into an array of Variants by repeatedly + calling obj2Variant(Object)
        +
        +
        Parameters:
        +
        arrayOfObjectsToBeConverted -
        +
        Returns:
        +
        Variant[]
        +
        +
      • +
      + + + +
        +
      • +

        variantToObject

        +
        protected static java.lang.Object variantToObject(Variant sourceData)
        +
        Convert a JACOB Variant value to a Java object (type conversions). + provided in Sourceforge feature request 959381. A fix was done to handle + byRef bug report 1607878. +

        + Unlike other toXXX() methods, it does not do a type conversion except for + special data types (it shouldn't do any!) +

        + Converts Variant.VariantArray types to SafeArrays

        +
        +
        Returns:
        +
        Corresponding Java object of the type matching the Variant type.
        +
        Throws:
        +
        java.lang.IllegalStateException - if no underlying windows data structure
        +
        NotImplementedException - if unsupported conversion is requested
        +
        JacobException - if the calculated result was a JacobObject usually as a + result of error
        +
        +
      • +
      + + + +
        +
      • +

        validateDecimalScaleAndBits

        +
        protected static void validateDecimalScaleAndBits(java.math.BigDecimal in)
        +
        Verifies that we have a scale 0 <= x <= 28 and now more than 96 bits of + data. The roundToMSDecimal method will attempt to adjust a BigDecimal to + pass this set of tests
        +
        +
        Parameters:
        +
        in -
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if out of bounds
        +
        +
      • +
      + + + +
        +
      • +

        validateDecimalMinMax

        +
        protected static void validateDecimalMinMax(java.math.BigDecimal in)
        +
        Does any validation that couldn't have been fixed by rounding or scale + modification.
        +
        +
        Parameters:
        +
        in - The BigDecimal to be validated
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if the number is too large or too small or null
        +
        +
      • +
      + + + +
        +
      • +

        roundToMSDecimal

        +
        public static java.math.BigDecimal roundToMSDecimal(java.math.BigDecimal sourceDecimal)
        +
        Rounds the scale and bit length so that it will pass + validateDecimalScaleBits(). Developers should call this method if they + really want MS Decimal and don't want to lose precision. +

        + Changing the scale on a number that can fit in an MS Decimal can change + the number's representation enough that it will round to a number too + large to be represented by an MS VT_DECIMAL

        +
        +
        Parameters:
        +
        sourceDecimal -
        +
        Returns:
        +
        BigDecimal a new big decimal that was rounded to fit in an MS + VT_DECIMAL
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantViaEvent.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantViaEvent.html new file mode 100644 index 0000000..a29cd86 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/VariantViaEvent.html @@ -0,0 +1,282 @@ + + + + + +VariantViaEvent (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class VariantViaEvent

+
+
+ +
+
    +
  • +
    +
    +
    public class VariantViaEvent
    +extends Variant
    +
    a public class to variant that is used to track which variant objects are + created by event callbacks This is solely used for that purpose.
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        VariantViaEvent

        +
        public VariantViaEvent()
        +
        Standard constructor used by JNI event handling layer
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/WrongThreadException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/WrongThreadException.html new file mode 100644 index 0000000..2612b86 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/WrongThreadException.html @@ -0,0 +1,296 @@ + + + + + +WrongThreadException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + + +
+
com.jacob.com
+

Class WrongThreadException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • + +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class WrongThreadException
    +extends JacobException
    +
    thrown in util.cpp
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      WrongThreadException() +
      standard 0 arg constructor with no message
      +
      WrongThreadException(java.lang.String s) +
      standard constructor with a string message
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        WrongThreadException

        +
        public WrongThreadException()
        +
        standard 0 arg constructor with no message
        +
      • +
      + + + +
        +
      • +

        WrongThreadException

        +
        public WrongThreadException(java.lang.String s)
        +
        standard constructor with a string message
        +
        +
        Parameters:
        +
        s -
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComException.html new file mode 100644 index 0000000..e811204 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComException.html @@ -0,0 +1,167 @@ + + + + + +Uses of Class com.jacob.com.ComException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.ComException

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComFailException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComFailException.html new file mode 100644 index 0000000..de8b0f4 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComFailException.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.ComFailException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.ComFailException

+
+
No usage of com.jacob.com.ComFailException
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComThread.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComThread.html new file mode 100644 index 0000000..ef6f23f --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ComThread.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.ComThread (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.ComThread

+
+
No usage of com.jacob.com.ComThread
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Currency.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Currency.html new file mode 100644 index 0000000..0984fe4 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Currency.html @@ -0,0 +1,210 @@ + + + + + +Uses of Class com.jacob.com.Currency (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.Currency

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use Currency 
    PackageDescription
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of Currency in com.jacob.com

      + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com that return Currency 
      Modifier and TypeMethod and Description
      CurrencyVariant.getCurrency() +
      MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
      +
      CurrencyVariant.getCurrencyRef() +
      MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
      +
      CurrencyVariant.toCurrency() +
      Deprecated.  +
      should be replaced by changeType() followed by getCurrency
      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com with parameters of type Currency 
      Modifier and TypeMethod and Description
      intCurrency.compareTo(Currency anotherCurrency) +
      compares the values of two currencies
      +
      voidVariant.putCurrency(Currency in) +
      Puts a value in as a currency and sets the variant type.
      +
      voidVariant.putCurrencyRef(Currency in) +
      Pushes a long into the variant as currency and sets the type.
      +
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DateUtilities.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DateUtilities.html new file mode 100644 index 0000000..d35a079 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DateUtilities.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.DateUtilities (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.DateUtilities

+
+
No usage of com.jacob.com.DateUtilities
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Dispatch.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Dispatch.html new file mode 100644 index 0000000..97d20d1 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Dispatch.html @@ -0,0 +1,634 @@ + + + + + +Uses of Class com.jacob.com.Dispatch (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.Dispatch

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use Dispatch 
    PackageDescription
    com.jacob.activeX 
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of Dispatch in com.jacob.activeX

      + + + + + + + + + + + + +
      Subclasses of Dispatch in com.jacob.activeX 
      Modifier and TypeClass and Description
      class ActiveXComponent +
      This class provides a higher level, more object like, wrapper for top of the + Dispatch object.
      +
      + + + + + + + + + + + + +
      Methods in com.jacob.activeX that return Dispatch 
      Modifier and TypeMethod and Description
      DispatchActiveXComponent.getObject() +
      Probably was a cover for something else in the past.
      +
      + + + + + + + + + + + + +
      Methods in com.jacob.activeX with parameters of type Dispatch 
      Modifier and TypeMethod and Description
      voidActiveXComponent.setProperty(java.lang.String propertyName, + Dispatch arg) +
      sets a property on this object
      +
      + + + + + + + + + + + + + + + + + + + +
      Constructors in com.jacob.activeX with parameters of type Dispatch 
      Constructor and Description
      ActiveXComponent(Dispatch dispatchToBeWrapped) +
      Creates an active X component that is built on top of the COM pointers + held in the passed in dispatch.
      +
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink) +
      This is the most commonly used constructor.
      +
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId) +
      None of the samples use this constructor.
      +
      ActiveXDispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId, + java.lang.String typeLib) +
      Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
      +
      +
    • +
    • + + +

      Uses of Dispatch in com.jacob.com

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com that return Dispatch 
      Modifier and TypeMethod and Description
      DispatchVariant.getDispatch() +
      cover for Variant.toDispatch() This method now matches other getXXX() + methods.
      +
      DispatchVariant.getDispatchRef() +
      Dispatch and dispatchRef are treated the same This is just a cover for + toDispatch() with a flag check
      +
      DispatchDispatch.QueryInterface(java.lang.String iid) +
      Return a different interface by IID string.
      +
      DispatchVariant.toDispatch() 
      DispatchDispatchProxy.toDispatch() 
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com with parameters of type Dispatch 
      Modifier and TypeMethod and Description
      static VariantDispatch.call(Dispatch dispatchTarget, + int dispid) 
      static VariantDispatch.call(Dispatch dispatchTarget, + int dispid, + java.lang.Object... attributes) 
      static VariantDispatch.call(Dispatch dispatchTarget, + java.lang.String name) 
      static VariantDispatch.call(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... attributes) 
      static VariantDispatch.callN_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object[] values) +
      not implemented yet
      +
      static VariantDispatch.callN(Dispatch dispatchTarget, + int dispID, + java.lang.Object... args) 
      static VariantDispatch.callN(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... args) 
      static voidDispatch.callSub(Dispatch dispatchTarget, + int dispid) +
      makes call to native callSubN
      +
      static voidDispatch.callSub(Dispatch dispatchTarget, + int dispid, + java.lang.Object... attributes) +
      makes call to native callSubN
      +
      static voidDispatch.callSub(Dispatch dispatchTarget, + java.lang.String name) +
      makes call to native callSubN
      +
      static voidDispatch.callSub(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... attributes) +
      makes call to native callSubN
      +
      static voidDispatch.callSubN(Dispatch dispatchTarget, + int dispID, + java.lang.Object... args) 
      static voidDispatch.callSubN(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... args) 
      static VariantDispatch.get_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name) +
      not implemented yet
      +
      static VariantDispatch.get(Dispatch dispatchTarget, + int dispid) +
      Cover for call to underlying invokev()
      +
      static VariantDispatch.get(Dispatch dispatchTarget, + java.lang.String name) +
      Cover for call to underlying invokev()
      +
      static intDispatch.getIDOfName(Dispatch dispatchTarget, + java.lang.String name) 
      static int[]Dispatch.getIDsOfNames(Dispatch dispatchTarget, + int lcid, + java.lang.String[] names) 
      static int[]Dispatch.getIDsOfNames(Dispatch dispatchTarget, + java.lang.String[] names) 
      static intDispatch.hasExited(Dispatch dispatchTarget) +
      The method is used to poll until it returns 1, indicating that the COM + server in gone.
      +
      static intDispatch.hasExited(Dispatch disp, + int dispid, + int lcid) +
      Cover for native method
      +
      static VariantDispatch.invoke(Dispatch dispatchTarget, + int dispID, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static VariantDispatch.invoke(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static VariantDispatch.invoke(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidDispatch.invokeSub(Dispatch dispatchTarget, + int dispid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidDispatch.invokeSub(Dispatch dispatchTarget, + java.lang.String name, + int dispid, + int lcid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidDispatch.invokeSub(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr, + int wFlagsEx) 
      static voidDispatch.put_Casesensitive(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) +
      not implemented yet
      +
      static voidDispatch.put(Dispatch dispatchTarget, + int dispid, + java.lang.Object val) 
      static voidDispatch.put(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) 
      voidVariant.putDispatch(Dispatch in) +
      This acts a cover for putVariant Dispatch.
      +
      voidVariant.putDispatchRef(Dispatch in) +
      Dispatch and dispatchRef are treated the same This is a cover for + putVariantDispatch().
      +
      static voidDispatch.putRef(Dispatch dispatchTarget, + int dispid, + java.lang.Object val) +
      cover for underlying call to invoke
      +
      static voidDispatch.putRef(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object val) +
      cover for underlying call to invoke
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors in com.jacob.com with parameters of type Dispatch 
      Constructor and Description
      Dispatch(Dispatch dispatchToBeDisplaced) +
      Constructor to be used by subclass that want to swap themselves in for + the default Dispatch class.
      +
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink) +
      This is the most commonly used constructor.
      +
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId) +
      None of the samples use this constructor.
      +
      DispatchEvents(Dispatch sourceOfEvent, + java.lang.Object eventSink, + java.lang.String progId, + java.lang.String typeLib) +
      Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
      +
      DispatchProxy(Dispatch localDispatch) +
      Marshals the passed in dispatch into the stream
      +
      EnumVariant(Dispatch disp) 
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchEvents.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchEvents.html new file mode 100644 index 0000000..c505de5 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchEvents.html @@ -0,0 +1,167 @@ + + + + + +Uses of Class com.jacob.com.DispatchEvents (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.DispatchEvents

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchIdentifier.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchIdentifier.html new file mode 100644 index 0000000..28777b3 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchIdentifier.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.DispatchIdentifier (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.DispatchIdentifier

+
+
No usage of com.jacob.com.DispatchIdentifier
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchProxy.html new file mode 100644 index 0000000..6397945 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/DispatchProxy.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.DispatchProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.DispatchProxy

+
+
No usage of com.jacob.com.DispatchProxy
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/EnumVariant.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/EnumVariant.html new file mode 100644 index 0000000..95e288a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/EnumVariant.html @@ -0,0 +1,165 @@ + + + + + +Uses of Class com.jacob.com.EnumVariant (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.EnumVariant

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxy.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxy.html new file mode 100644 index 0000000..8d0b3b3 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxy.html @@ -0,0 +1,221 @@ + + + + + +Uses of Class com.jacob.com.InvocationProxy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.InvocationProxy

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxyAllVariants.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxyAllVariants.html new file mode 100644 index 0000000..9b5beb7 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/InvocationProxyAllVariants.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.InvocationProxyAllVariants (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.InvocationProxyAllVariants

+
+
No usage of com.jacob.com.InvocationProxyAllVariants
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobException.html new file mode 100644 index 0000000..b2233ae --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobException.html @@ -0,0 +1,202 @@ + + + + + +Uses of Class com.jacob.com.JacobException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.JacobException

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use JacobException 
    PackageDescription
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of JacobException in com.jacob.com

      + + + + + + + + + + + + + + + + + + + + + + + + +
      Subclasses of JacobException in com.jacob.com 
      Modifier and TypeClass and Description
      class ComException +
      Standard exception thrown by com jni code when there is a problem
      +
      class ComFailException +
      COM Fail Exception class raised when there is a problem
      +
      class NotImplementedException +
      Thrown by java APIs that are not implemented either because they were never + implemented or because they are being deprecated This is a subclass of + ComException so callers can still just catch ComException.
      +
      class WrongThreadException +
      thrown in util.cpp
      +
      + + + + + + + + + + + + +
      Methods in com.jacob.com that throw JacobException 
      Modifier and TypeMethod and Description
      java.lang.ObjectVariant.toJavaObject() +
      Convert a JACOB Variant value to a Java object (type conversions).
      +
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobObject.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobObject.html new file mode 100644 index 0000000..7f08455 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobObject.html @@ -0,0 +1,302 @@ + + + + + +Uses of Class com.jacob.com.JacobObject (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.JacobObject

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use JacobObject 
    PackageDescription
    com.jacob.activeX 
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of JacobObject in com.jacob.activeX

      + + + + + + + + + + + + + + + + +
      Subclasses of JacobObject in com.jacob.activeX 
      Modifier and TypeClass and Description
      class ActiveXComponent +
      This class provides a higher level, more object like, wrapper for top of the + Dispatch object.
      +
      class ActiveXDispatchEvents +
      RELEASE 1.12 EXPERIMENTAL.
      +
      +
    • +
    • + + +

      Uses of JacobObject in com.jacob.com

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Subclasses of JacobObject in com.jacob.com 
      Modifier and TypeClass and Description
      class Dispatch +
      Object represents MS level dispatch object.
      +
      class DispatchEvents +
      This class creates the scaffolding for event callbacks.
      +
      class DispatchProxy +
      If you need to pass a COM Dispatch object between STA threads, you have to + marshall the interface.
      +
      class EnumVariant +
      An implementation of IEnumVariant based on code submitted by Thomas Hallgren + (mailto:Thomas.Hallgren@eoncompany.com)
      +
      class SafeArray +
      This creates an array wrapper around Variant objects(?).
      +
      class Variant +
      The multi-format data type used for all call backs and most communications + between Java and COM.
      +
      class VariantViaEvent +
      a public class to variant that is used to track which variant objects are + created by event callbacks This is solely used for that purpose.
      +
      + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com that return types with arguments of type JacobObject 
      Modifier and TypeMethod and Description
      protected static java.util.Map<JacobObject,java.lang.String>ROT.addThread() +
      adds a new thread storage area to rot
      +
      protected static java.util.Map<JacobObject,java.lang.String>ROT.getThreadObjects(boolean createIfDoesNotExist) +
      Returns the pool for this thread if it exists.
      +
      + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com with parameters of type JacobObject 
      Modifier and TypeMethod and Description
      protected static voidROT.addObject(JacobObject o) +
      Adds an object to the HashMap for the current thread.
      +
      protected static voidROT.removeObject(JacobObject o) +
      Deprecated.  +
      the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread.
      + This will remove an object from the ROT
      + This does not need to be synchronized because only the rot + modification related methods need to synchronized. Each + individual map is only modified in a single thread.
      +
      +
      static voidComThread.RemoveObject(JacobObject o) +
      Deprecated.  +
      the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread. + + This will remove an object from the ROT
      +
      +
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobReleaseInfo.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobReleaseInfo.html new file mode 100644 index 0000000..c45a1ce --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/JacobReleaseInfo.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.JacobReleaseInfo (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.JacobReleaseInfo

+
+
No usage of com.jacob.com.JacobReleaseInfo
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/LibraryLoader.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/LibraryLoader.html new file mode 100644 index 0000000..c96dfc8 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/LibraryLoader.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.LibraryLoader (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.LibraryLoader

+
+
No usage of com.jacob.com.LibraryLoader
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/MainSTA.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/MainSTA.html new file mode 100644 index 0000000..f22e9d7 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/MainSTA.html @@ -0,0 +1,167 @@ + + + + + +Uses of Class com.jacob.com.MainSTA (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.MainSTA

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/NotImplementedException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/NotImplementedException.html new file mode 100644 index 0000000..55a9ebd --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/NotImplementedException.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.NotImplementedException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.NotImplementedException

+
+
No usage of com.jacob.com.NotImplementedException
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ROT.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ROT.html new file mode 100644 index 0000000..2a2e78a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/ROT.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.ROT (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.ROT

+
+
No usage of com.jacob.com.ROT
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/STA.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/STA.html new file mode 100644 index 0000000..c4a121e --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/STA.html @@ -0,0 +1,170 @@ + + + + + +Uses of Class com.jacob.com.STA (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.STA

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use STA 
    PackageDescription
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of STA in com.jacob.com

      + + + + + + + + + + + + +
      Subclasses of STA in com.jacob.com 
      Modifier and TypeClass and Description
      class MainSTA +
      We provide our own main sta thread to avoid COM tagging a random thread as + the main STA - this is the thread in which all Apartment threaded components + will be created if the client chooses an MTA threading model for the java + side of the app.
      +
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/SafeArray.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/SafeArray.html new file mode 100644 index 0000000..7eec7d1 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/SafeArray.html @@ -0,0 +1,202 @@ + + + + + +Uses of Class com.jacob.com.SafeArray (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.SafeArray

+
+
+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Variant.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Variant.html new file mode 100644 index 0000000..a0d2e57 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/Variant.html @@ -0,0 +1,747 @@ + + + + + +Uses of Class com.jacob.com.Variant (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.Variant

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use Variant 
    PackageDescription
    com.jacob.activeX 
    com.jacob.com 
    +
  • +
  • +
      +
    • + + +

      Uses of Variant in com.jacob.activeX

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.activeX that return Variant 
      Modifier and TypeMethod and Description
      VariantActiveXComponent.getProperty(java.lang.String propertyName) +
      retrieves a property and returns it as a Variant
      +
      VariantActiveXComponent.invoke(java.lang.String callAction) +
      makes a dispatch call for the passed in action and no parameter
      +
      VariantActiveXComponent.invoke(java.lang.String actionCommand, + boolean parameter) +
      makes a dispatch call to the passed in action with a single boolean + parameter
      +
      VariantActiveXComponent.invoke(java.lang.String actionCommand, + int parameter) +
      makes a dispatch call to the passed in action with a single int parameter
      +
      VariantActiveXComponent.invoke(java.lang.String actionCommand, + int parameter1, + int parameter2) +
      makes a dispatch call to the passed in action with two integer parameters + (this was put in for some application)
      +
      VariantActiveXComponent.invoke(java.lang.String actionCommand, + java.lang.String parameter) +
      invokes a single parameter call on this dispatch that returns no value
      +
      VariantActiveXComponent.invoke(java.lang.String actionCommand, + java.lang.String parameter1, + int parameter2) +
      makes a dispatch call to the passed in action with a string and integer + parameter (this was put in for some application)
      +
      VariantActiveXComponent.invoke(java.lang.String name, + Variant... args) +
      This is really a cover for call(String,Variant[]) that should be + eliminated call with a variable number of args mainly used for quit.
      +
      VariantActiveXInvocationProxy.invoke(java.lang.String methodName, + Variant[] targetParameters) 
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.activeX with parameters of type Variant 
      Modifier and TypeMethod and Description
      VariantActiveXComponent.invoke(java.lang.String name, + Variant... args) +
      This is really a cover for call(String,Variant[]) that should be + eliminated call with a variable number of args mainly used for quit.
      +
      VariantActiveXInvocationProxy.invoke(java.lang.String methodName, + Variant[] targetParameters) 
      ActiveXComponentActiveXComponent.invokeGetComponent(java.lang.String callAction, + Variant... parameters) +
      makes a dispatch call for the passed in action and single parameter
      +
      voidActiveXComponent.logCallbackEvent(java.lang.String description, + Variant[] args) +
      used by the doc and application listeners to get intelligent logging
      +
      voidActiveXComponent.setProperty(java.lang.String propertyName, + Variant arg) +
      sets a property on this object
      +
      +
    • +
    • + + +

      Uses of Variant in com.jacob.com

      + + + + + + + + + + + + +
      Subclasses of Variant in com.jacob.com 
      Modifier and TypeClass and Description
      class VariantViaEvent +
      a public class to variant that is used to track which variant objects are + created by event callbacks This is solely used for that purpose.
      +
      + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields in com.jacob.com declared as Variant 
      Modifier and TypeField and Description
      static VariantVariant.DEFAULT +
      Use this constant for optional parameters
      +
      static VariantVariant.VT_FALSE +
      Use for true/false variant parameters
      +
      static VariantVariant.VT_MISSING +
      Same than DEFAULT
      +
      static VariantVariant.VT_TRUE +
      Use for true/false variant parameters
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com that return Variant 
      Modifier and TypeMethod and Description
      static VariantDispatch.call(Dispatch dispatchTarget, + int dispid) 
      static VariantDispatch.call(Dispatch dispatchTarget, + int dispid, + java.lang.Object... attributes) 
      static VariantDispatch.call(Dispatch dispatchTarget, + java.lang.String name) 
      static VariantDispatch.call(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... attributes) 
      static VariantDispatch.callN_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object[] values) +
      not implemented yet
      +
      static VariantDispatch.callN(Dispatch dispatchTarget, + int dispID, + java.lang.Object... args) 
      static VariantDispatch.callN(Dispatch dispatchTarget, + java.lang.String name, + java.lang.Object... args) 
      VariantVariant.changeType(short in) +
      Cover for native method so we can cover it.
      +
      VariantVariant.cloneIndirect() +
      Deprecated.  +
      No longer used
      +
      +
      static VariantDispatch.get_CaseSensitive(Dispatch dispatchTarget, + java.lang.String name) +
      not implemented yet
      +
      static VariantDispatch.get(Dispatch dispatchTarget, + int dispid) +
      Cover for call to underlying invokev()
      +
      static VariantDispatch.get(Dispatch dispatchTarget, + java.lang.String name) +
      Cover for call to underlying invokev()
      +
      VariantInvocationProxy.getVariant() +
      used by EventProxy.cpp to create variant objects in the right thread
      +
      VariantSafeArray.getVariant(int sa_idx) +
      variant access
      +
      VariantSafeArray.getVariant(int[] indices) +
      get Variant value from N-dimensional array
      +
      VariantSafeArray.getVariant(int sa_idx1, + int sa_idx2) +
      variant access
      +
      Variant[]Variant.getVariantArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      Variant[]Variant.getVariantArrayRef() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      static VariantDispatch.invoke(Dispatch dispatchTarget, + int dispID, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static VariantDispatch.invoke(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      static VariantDispatch.invoke(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + java.lang.Object[] oArg, + int[] uArgErr) 
      VariantInvocationProxyAllVariants.invoke(java.lang.String methodName, + Variant[] targetParameters) 
      abstract VariantInvocationProxy.invoke(java.lang.String methodName, + Variant[] targetParameters) +
      The method actually invoked by EventProxy.cpp.
      +
      static VariantDispatch.invokev(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr, + int wFlagsEx) 
      VariantEnumVariant.Next() +
      Deprecated.  +
      use nextElement() instead
      +
      +
      VariantEnumVariant.nextElement() +
      Implements java.util.Enumeration
      +
      protected static Variant[]VariantUtilities.objectsToVariants(java.lang.Object[] arrayOfObjectsToBeConverted) +
      converts an array of objects into an array of Variants by repeatedly + calling obj2Variant(Object)
      +
      protected static VariantVariantUtilities.objectToVariant(java.lang.Object objectToBeMadeIntoVariant) +
      Map arguments based on msdn documentation.
      +
      VariantVariant.toVariant() +
      Deprecated.  +
      superseded by "this"
      +
      +
      Variant[]Variant.toVariantArray() +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      Variant[]SafeArray.toVariantArray() +
      Retrieves the data from the array cast to a Java data type
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods in com.jacob.com with parameters of type Variant 
      Modifier and TypeMethod and Description
      voidSafeArray.fromVariantArray(Variant[] ja) +
      populate the safe array from the passed in array of data
      +
      voidSafeArray.getVariants(int sa_idx, + int nelems, + Variant[] ja, + int ja_start) +
      variant access
      +
      VariantInvocationProxyAllVariants.invoke(java.lang.String methodName, + Variant[] targetParameters) 
      abstract VariantInvocationProxy.invoke(java.lang.String methodName, + Variant[] targetParameters) +
      The method actually invoked by EventProxy.cpp.
      +
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static voidDispatch.invokeSubv(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + int dispID, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int dispID, + int lcid, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr) 
      static VariantDispatch.invokev(Dispatch dispatchTarget, + java.lang.String name, + int wFlags, + Variant[] vArg, + int[] uArgErr, + int wFlagsEx) 
      intEnumVariant.Next(Variant[] receiverArray) +
      This should be private and wrapped to protect JNI layer.
      +
      protected booleanVariant.objectIsAConstant(Variant pVariant) +
      returns true if the passed in Variant is a constant that should not be + freed
      +
      protected static voidVariantUtilities.populateVariant(Variant targetVariant, + java.lang.Object pValueObject, + boolean fByRef) +
      Populates a variant object from a java object.
      +
      voidVariant.putVariantArray(Variant[] in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidVariant.putVariantArrayRef(Variant[] in) +
      Deprecated.  +
      superseded by SafeArray
      +
      +
      voidSafeArray.setVariant(int[] indices, + Variant v) +
      set Variant value in N-dimensional array
      +
      voidSafeArray.setVariant(int sa_idx1, + int sa_idx2, + Variant c) +
      variant access
      +
      voidSafeArray.setVariant(int sa_idx, + Variant c) +
      variant access
      +
      voidSafeArray.setVariants(int sa_idx, + int nelems, + Variant[] ja, + int ja_start) +
      variant access
      +
      protected static java.lang.ObjectVariantUtilities.variantToObject(Variant sourceData) +
      Convert a JACOB Variant value to a Java object (type conversions).
      +
      +
    • +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantUtilities.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantUtilities.html new file mode 100644 index 0000000..227c823 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantUtilities.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.VariantUtilities (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.VariantUtilities

+
+
No usage of com.jacob.com.VariantUtilities
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantViaEvent.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantViaEvent.html new file mode 100644 index 0000000..795c744 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/VariantViaEvent.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.VariantViaEvent (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.VariantViaEvent

+
+
No usage of com.jacob.com.VariantViaEvent
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/WrongThreadException.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/WrongThreadException.html new file mode 100644 index 0000000..58c1984 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/class-use/WrongThreadException.html @@ -0,0 +1,125 @@ + + + + + +Uses of Class com.jacob.com.WrongThreadException (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Class
com.jacob.com.WrongThreadException

+
+
No usage of com.jacob.com.WrongThreadException
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-frame.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-frame.html new file mode 100644 index 0000000..6403c06 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-frame.html @@ -0,0 +1,47 @@ + + + + + +com.jacob.com (JACOB : Java COM Bridge API Docs) + + + + + +

com.jacob.com

+ + + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-summary.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-summary.html new file mode 100644 index 0000000..a5cb6ed --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-summary.html @@ -0,0 +1,312 @@ + + + + + +com.jacob.com (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Package com.jacob.com

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ComThread +
    Represents a COM level thread This is an abstract class because all the + methods are static and no instances are ever created.
    +
    Currency +
    Most COM bridges use java.lang.Long as their Java data type for COM Currency + data.
    +
    DateUtilities +
    java / windows date conversion utilities
    +
    Dispatch +
    Object represents MS level dispatch object.
    +
    DispatchEvents +
    This class creates the scaffolding for event callbacks.
    +
    DispatchIdentifier +
    A bunch of DispatchIds that were pulled out of the Dispatch class for version + 1.14.
    +
    DispatchProxy +
    If you need to pass a COM Dispatch object between STA threads, you have to + marshall the interface.
    +
    EnumVariant +
    An implementation of IEnumVariant based on code submitted by Thomas Hallgren + (mailto:Thomas.Hallgren@eoncompany.com)
    +
    InvocationProxy 
    InvocationProxyAllVariants +
    This class acts as a proxy between the windows event callback mechanism and + the Java classes that are looking for events.
    +
    JacobObject +
    The superclass of all Jacob objects.
    +
    JacobReleaseInfo +
    An interface to the version properties file.
    +
    LibraryLoader +
    Utility class to centralize the way in which the jacob JNI library is loaded.
    +
    MainSTA +
    We provide our own main sta thread to avoid COM tagging a random thread as + the main STA - this is the thread in which all Apartment threaded components + will be created if the client chooses an MTA threading model for the java + side of the app.
    +
    ROT +
    The Running Object Table (ROT) maps each thread to a collection of all the + JacobObjects that were created in that thread.
    +
    SafeArray +
    This creates an array wrapper around Variant objects(?).
    +
    STA +
    A class that implements a Single Threaded Apartment.
    +
    Variant +
    The multi-format data type used for all call backs and most communications + between Java and COM.
    +
    VariantUtilities +
    A utility class used to convert between Java objects and Variants
    +
    VariantViaEvent +
    a public class to variant that is used to track which variant objects are + created by event callbacks This is solely used for that purpose.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    ComException +
    Standard exception thrown by com jni code when there is a problem
    +
    ComFailException +
    COM Fail Exception class raised when there is a problem
    +
    JacobException +
    The parent class of all Jacob exceptions.
    +
    NotImplementedException +
    Thrown by java APIs that are not implemented either because they were never + implemented or because they are being deprecated This is a subclass of + ComException so callers can still just catch ComException.
    +
    WrongThreadException +
    thrown in util.cpp
    +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-tree.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-tree.html new file mode 100644 index 0000000..0497dcd --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-tree.html @@ -0,0 +1,196 @@ + + + + + +com.jacob.com Class Hierarchy (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Hierarchy For Package com.jacob.com

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-use.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-use.html new file mode 100644 index 0000000..9581dc7 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/com/jacob/com/package-use.html @@ -0,0 +1,254 @@ + + + + + +Uses of Package com.jacob.com (JACOB : Java COM Bridge API Docs) + + + + + + + + + + + +
+

Uses of Package
com.jacob.com

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use com.jacob.com 
    PackageDescription
    com.jacob.activeX 
    com.jacob.com 
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in com.jacob.com used by com.jacob.activeX 
    Class and Description
    Dispatch +
    Object represents MS level dispatch object.
    +
    DispatchEvents +
    This class creates the scaffolding for event callbacks.
    +
    InvocationProxy 
    JacobObject +
    The superclass of all Jacob objects.
    +
    Variant +
    The multi-format data type used for all call backs and most communications + between Java and COM.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in com.jacob.com used by com.jacob.com 
    Class and Description
    ComException +
    Standard exception thrown by com jni code when there is a problem
    +
    Currency +
    Most COM bridges use java.lang.Long as their Java data type for COM Currency + data.
    +
    Dispatch +
    Object represents MS level dispatch object.
    +
    EnumVariant +
    An implementation of IEnumVariant based on code submitted by Thomas Hallgren + (mailto:Thomas.Hallgren@eoncompany.com)
    +
    InvocationProxy 
    JacobException +
    The parent class of all Jacob exceptions.
    +
    JacobObject +
    The superclass of all Jacob objects.
    +
    MainSTA +
    We provide our own main sta thread to avoid COM tagging a random thread as + the main STA - this is the thread in which all Apartment threaded components + will be created if the client chooses an MTA threading model for the java + side of the app.
    +
    SafeArray +
    This creates an array wrapper around Variant objects(?).
    +
    STA +
    A class that implements a Single Threaded Apartment.
    +
    Variant +
    The multi-format data type used for all call backs and most communications + between Java and COM.
    +
    +
  • +
+
+ + + + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/constant-values.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/constant-values.html new file mode 100644 index 0000000..917a684 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/constant-values.html @@ -0,0 +1,876 @@ + + + + + +Constant Field Values (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

com.jacob.*

+ +
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/deprecated-list.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/deprecated-list.html new file mode 100644 index 0000000..6ac764e --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/deprecated-list.html @@ -0,0 +1,317 @@ + + + + + +Deprecated List (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+ +
+
+ + + +
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/help-doc.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/help-doc.html new file mode 100644 index 0000000..70799df --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/help-doc.html @@ -0,0 +1,230 @@ + + + + + +API Help (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index-all.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index-all.html new file mode 100644 index 0000000..0fdc3d4 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index-all.html @@ -0,0 +1,2410 @@ + + + + + +Index (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
A C D E F G H I J L M N O P Q R S T U V W  + + +

A

+
+
ActiveXComponent - Class in com.jacob.activeX
+
+
This class provides a higher level, more object like, wrapper for top of the + Dispatch object.
+
+
ActiveXComponent(String) - Constructor for class com.jacob.activeX.ActiveXComponent
+
+
Normally used to create a new connection to a microsoft application.
+
+
ActiveXComponent(Dispatch) - Constructor for class com.jacob.activeX.ActiveXComponent
+
+
Creates an active X component that is built on top of the COM pointers + held in the passed in dispatch.
+
+
ActiveXDispatchEvents - Class in com.jacob.activeX
+
+
RELEASE 1.12 EXPERIMENTAL.
+
+
ActiveXDispatchEvents(Dispatch, Object) - Constructor for class com.jacob.activeX.ActiveXDispatchEvents
+
+
This is the most commonly used constructor.
+
+
ActiveXDispatchEvents(Dispatch, Object, String) - Constructor for class com.jacob.activeX.ActiveXDispatchEvents
+
+
None of the samples use this constructor.
+
+
ActiveXDispatchEvents(Dispatch, Object, String, String) - Constructor for class com.jacob.activeX.ActiveXDispatchEvents
+
+
Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
+
+
ActiveXInvocationProxy - Class in com.jacob.activeX
+
+
RELEASE 1.12 EXPERIMENTAL.
+
+
ActiveXInvocationProxy() - Constructor for class com.jacob.activeX.ActiveXInvocationProxy
+
 
+
addObject(JacobObject) - Static method in class com.jacob.com.ROT
+
+
Adds an object to the HashMap for the current thread.
+
+
addThread() - Static method in class com.jacob.com.ROT
+
+
adds a new thread storage area to rot
+
+
asString() - Method in class com.jacob.com.SafeArray
+
+
Convert a VT_UI1 array to string.
+
+
+ + + +

C

+
+
call(Dispatch, String) - Static method in class com.jacob.com.Dispatch
+
 
+
call(Dispatch, String, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
call(Dispatch, int) - Static method in class com.jacob.com.Dispatch
+
 
+
call(Dispatch, int, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
callN(Dispatch, String, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
callN(Dispatch, int, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
callN_CaseSensitive(Dispatch, String, Object[]) - Static method in class com.jacob.com.Dispatch
+
+
not implemented yet
+
+
callSub(Dispatch, String) - Static method in class com.jacob.com.Dispatch
+
+
makes call to native callSubN
+
+
callSub(Dispatch, String, Object...) - Static method in class com.jacob.com.Dispatch
+
+
makes call to native callSubN
+
+
callSub(Dispatch, int) - Static method in class com.jacob.com.Dispatch
+
+
makes call to native callSubN
+
+
callSub(Dispatch, int, Object...) - Static method in class com.jacob.com.Dispatch
+
+
makes call to native callSubN
+
+
callSubN(Dispatch, String, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
callSubN(Dispatch, int, Object...) - Static method in class com.jacob.com.Dispatch
+
 
+
changeType(short) - Method in class com.jacob.com.Variant
+
+
Cover for native method so we can cover it.
+
+
clearObjects() - Static method in class com.jacob.com.ROT
+
+
Iterates across all of the entries in the Hashmap in the rot that + corresponds to this thread.
+
+
clone() - Method in class com.jacob.com.SafeArray
+
 
+
clone() - Method in class com.jacob.com.Variant
+
+
this returns null
+
+
cloneIndirect() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
No longer used
+
+
+
coCreateInstance(String) - Method in class com.jacob.com.Dispatch
+
+
Wrapper around the native method
+
+
com.jacob.activeX - package com.jacob.activeX
+
 
+
com.jacob.com - package com.jacob.com
+
 
+
ComException - Exception in com.jacob.com
+
+
Standard exception thrown by com jni code when there is a problem
+
+
ComException() - Constructor for exception com.jacob.com.ComException
+
+
constructor
+
+
ComException(int) - Constructor for exception com.jacob.com.ComException
+
+
constructor with error code?
+
+
ComException(int, String) - Constructor for exception com.jacob.com.ComException
+
 
+
ComException(int, String, String, int) - Constructor for exception com.jacob.com.ComException
+
 
+
ComException(int, String, String, String, int) - Constructor for exception com.jacob.com.ComException
+
 
+
ComException(String) - Constructor for exception com.jacob.com.ComException
+
 
+
ComFailException - Exception in com.jacob.com
+
+
COM Fail Exception class raised when there is a problem
+
+
ComFailException(int) - Constructor for exception com.jacob.com.ComFailException
+
+
Constructor
+
+
ComFailException(int, String) - Constructor for exception com.jacob.com.ComFailException
+
+
Constructor
+
+
ComFailException(int, String, String, int) - Constructor for exception com.jacob.com.ComFailException
+
 
+
ComFailException(int, String, String, String, int) - Constructor for exception com.jacob.com.ComFailException
+
+
Constructor
+
+
ComFailException() - Constructor for exception com.jacob.com.ComFailException
+
+
No argument Constructor
+
+
ComFailException(String) - Constructor for exception com.jacob.com.ComFailException
+
 
+
compareTo(Currency) - Method in class com.jacob.com.Currency
+
+
compares the values of two currencies
+
+
compareTo(Object) - Method in class com.jacob.com.Currency
+
+
standard comparison
+
+
ComThread - Class in com.jacob.com
+
+
Represents a COM level thread This is an abstract class because all the + methods are static and no instances are ever created.
+
+
ComThread() - Constructor for class com.jacob.com.ComThread
+
 
+
connectToActiveInstance(String) - Static method in class com.jacob.activeX.ActiveXComponent
+
+
Most code should use the standard ActiveXComponent(String) constructor + and not this factory method.
+
+
convertDateToWindowsTime(Date) - Static method in class com.jacob.com.DateUtilities
+
+
converts a java date to a windows time object (is this timezone safe?)
+
+
convertMillisecondsToWindowsTime(long) - Static method in class com.jacob.com.DateUtilities
+
+
Convert a Java time to a COM time.
+
+
convertWindowsTimeToDate(double) - Static method in class com.jacob.com.DateUtilities
+
+
converts a windows time to a Java Date Object
+
+
convertWindowsTimeToMilliseconds(double) - Static method in class com.jacob.com.DateUtilities
+
+
Convert a COM time from functions Date(), Time(), Now() to a Java time + (milliseconds).
+
+
createNewInstance(String) - Static method in class com.jacob.activeX.ActiveXComponent
+
+
Most code should use the standard ActiveXComponent(String) contructor and + not this factory method.
+
+
Currency - Class in com.jacob.com
+
+
Most COM bridges use java.lang.Long as their Java data type for COM Currency + data.
+
+
Currency(long) - Constructor for class com.jacob.com.Currency
+
+
constructor that takes a long already in COM representation
+
+
Currency(String) - Constructor for class com.jacob.com.Currency
+
+
constructor that takes a String already in COM representation
+
+
+ + + +

D

+
+
DateUtilities - Class in com.jacob.com
+
+
java / windows date conversion utilities
+
+
DateUtilities() - Constructor for class com.jacob.com.DateUtilities
+
 
+
debug(String) - Static method in class com.jacob.com.JacobObject
+
+
Very basic debugging function.
+
+
DEFAULT - Static variable in class com.jacob.com.Variant
+
+
Use this constant for optional parameters
+
+
Dispatch - Class in com.jacob.com
+
+
Object represents MS level dispatch object.
+
+
Dispatch() - Constructor for class com.jacob.com.Dispatch
+
+
zero argument constructor that sets the dispatch pointer to 0 This is the + only way to create a Dispatch without a value in the pointer field.
+
+
Dispatch(String) - Constructor for class com.jacob.com.Dispatch
+
+
This constructor calls createInstance with progid.
+
+
Dispatch(long) - Constructor for class com.jacob.com.Dispatch
+
+
Constructor that only gets called from JNI QueryInterface calls JNI code + that looks up the object for the key passed in.
+
+
Dispatch(Dispatch) - Constructor for class com.jacob.com.Dispatch
+
+
Constructor to be used by subclass that want to swap themselves in for + the default Dispatch class.
+
+
DispatchEvents - Class in com.jacob.com
+
+
This class creates the scaffolding for event callbacks.
+
+
DispatchEvents(Dispatch, Object) - Constructor for class com.jacob.com.DispatchEvents
+
+
This is the most commonly used constructor.
+
+
DispatchEvents(Dispatch, Object, String) - Constructor for class com.jacob.com.DispatchEvents
+
+
None of the samples use this constructor.
+
+
DispatchEvents(Dispatch, Object, String, String) - Constructor for class com.jacob.com.DispatchEvents
+
+
Creates the event callback linkage between the the MS program represented + by the Dispatch object and the Java object that will receive the + callback.
+
+
DispatchIdentifier - Class in com.jacob.com
+
+
A bunch of DispatchIds that were pulled out of the Dispatch class for version + 1.14.
+
+
DispatchProxy - Class in com.jacob.com
+
+
If you need to pass a COM Dispatch object between STA threads, you have to + marshall the interface.
+
+
DispatchProxy(Dispatch) - Constructor for class com.jacob.com.DispatchProxy
+
+
Marshals the passed in dispatch into the stream
+
+
DISPID_ABOUTBOX - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_APPEARANCE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_AUTOCLIP - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_BACKCOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_CHARSET - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_CODEPAGE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_DISPLAYASDEFAULT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_DISPLAYNAME - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_FONT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_FORECOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_LOCALEID - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_MESSAGEREFLECT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_PALETTE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_SCALEUNITS - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_SHOWGRABHANDLES - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_SHOWHATCHING - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_SUPPORTSMNEMONICS - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_TEXTALIGN - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_TRANSFERPRIORITY - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_UIDEAD - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AMBIENT_USERMODE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_APPEARANCE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_AUTOSIZE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BACKCOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BACKSTYLE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BORDERCOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BORDERSTYLE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BORDERVISIBLE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_BORDERWIDTH - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_CAPTION - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_CLICK - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_COLLECT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_CONSTRUCTOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DBLCLICK - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DESTRUCTOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DOCLICK - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DRAWMODE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DRAWSTYLE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_DRAWWIDTH - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_ENABLED - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_ERROREVENT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_EVALUATE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_FILLCOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_FILLSTYLE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_FONT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_FORECOLOR - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_HWND - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_KEYDOWN - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_KEYPRESS - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_KEYUP - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_MOUSEDOWN - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_MOUSEICON - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_MOUSEMOVE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_MOUSEPOINTER - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_MOUSEUP - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_NEWENUM - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_PICTURE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_PROPERTYPUT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_READYSTATE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_READYSTATECHANGE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_REFRESH - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_TABSTOP - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_TEXT - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_UNKNOWN - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_VALID - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DISPID_VALUE - Static variable in class com.jacob.com.DispatchIdentifier
+
 
+
DLL_NAME_MODIFIER_32_BIT - Static variable in class com.jacob.com.LibraryLoader
+
+
Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
+
+
DLL_NAME_MODIFIER_64_BIT - Static variable in class com.jacob.com.LibraryLoader
+
+
Appended to "jacob" when building DLL name This string must EXACTLY match + the string in the build.xml file
+
+
doCoInitialize(int) - Static method in class com.jacob.com.ComThread
+
 
+
doCoUninitialize() - Static method in class com.jacob.com.ComThread
+
 
+
doMessagePump() - Method in class com.jacob.com.STA
+
+
run a message pump for the main STA
+
+
+ + + +

E

+
+
EnumVariant - Class in com.jacob.com
+
+
An implementation of IEnumVariant based on code submitted by Thomas Hallgren + (mailto:Thomas.Hallgren@eoncompany.com)
+
+
EnumVariant(long) - Constructor for class com.jacob.com.EnumVariant
+
 
+
EnumVariant(Dispatch) - Constructor for class com.jacob.com.EnumVariant
+
 
+
equals(Object) - Method in class com.jacob.com.Currency
+
+ + + +

F

+
+
fdexNameCaseSensitive - Static variable in class com.jacob.com.Dispatch
+
+
One of legal values for GetDispId.
+
+
finalize() - Method in class com.jacob.activeX.ActiveXComponent
+
 
+
finalize() - Method in class com.jacob.com.Dispatch
+
 
+
finalize() - Method in class com.jacob.com.DispatchEvents
+
 
+
finalize() - Method in class com.jacob.com.DispatchProxy
+
 
+
finalize() - Method in class com.jacob.com.EnumVariant
+
 
+
finalize() - Method in class com.jacob.com.SafeArray
+
finalize() - Method in class com.jacob.com.Variant
+
 
+
fromBooleanArray(boolean[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromByteArray(byte[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromCharArray(char[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromDoubleArray(double[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromFloatArray(float[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromIntArray(int[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromLongArray(long[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromShortArray(short[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromStringArray(String[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
fromVariantArray(Variant[]) - Method in class com.jacob.com.SafeArray
+
+
populate the safe array from the passed in array of data
+
+
+ + + +

G

+
+
Get - Static variable in class com.jacob.com.Dispatch
+
+
used by callN() and callSubN()
+
+
get(Dispatch, String) - Static method in class com.jacob.com.Dispatch
+
+
Cover for call to underlying invokev()
+
+
get(Dispatch, int) - Static method in class com.jacob.com.Dispatch
+
+
Cover for call to underlying invokev()
+
+
get_CaseSensitive(Dispatch, String) - Static method in class com.jacob.com.Dispatch
+
+
not implemented yet
+
+
getActiveInstance(String) - Method in class com.jacob.com.Dispatch
+
+
Wrapper around the native method
+
+
getBoolean(int) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
getBoolean(int[]) - Method in class com.jacob.com.SafeArray
+
+
get boolean value from N-dimensional array
+
+
getBoolean(int, int) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
getBoolean() - Method in class com.jacob.com.Variant
+
 
+
getBooleanRef() - Method in class com.jacob.com.Variant
+
+
public cover for native method
+
+
getBooleans(int, int, boolean[], int) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
getBuildDate() - Static method in class com.jacob.com.JacobObject
+
+
Deprecated. +
use JacobReleaseInfo.getBuildDate() instead.
+
+
+
getBuildDate() - Static method in class com.jacob.com.JacobReleaseInfo
+
+
loads PROPERT_FILE_NAME and returns the value of version in it
+
+
getBuildVersion() - Static method in class com.jacob.com.JacobObject
+
+
Deprecated. +
use JacobReleaseInfo.getBuildVersion() instead.
+
+
+
getBuildVersion() - Static method in class com.jacob.com.JacobReleaseInfo
+
+
loads PROPERT_FILE_NAME and returns the value of version in it
+
+
getByte(int) - Method in class com.jacob.com.SafeArray
+
+
byte access
+
+
getByte(int[]) - Method in class com.jacob.com.SafeArray
+
+
get byte value from N-dimensional array
+
+
getByte(int, int) - Method in class com.jacob.com.SafeArray
+
+
byte access
+
+
getByte() - Method in class com.jacob.com.Variant
+
 
+
getByteRef() - Method in class com.jacob.com.Variant
+
+
public cover for native method
+
+
getBytes(int, int, byte[], int) - Method in class com.jacob.com.SafeArray
+
+
Fills byte array from contents of this array
+
+
getChar(int) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
getChar(int[]) - Method in class com.jacob.com.SafeArray
+
+
get char value from N-dimensional array
+
+
getChar(int, int) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
getChars(int, int, char[], int) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
getCurrency() - Method in class com.jacob.com.Variant
+
+
MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
+
+
getCurrencyRef() - Method in class com.jacob.com.Variant
+
+
MS Currency objects are 64 bit fixed point numbers with 15 digits to the + left and 4 to the right of the decimal place.
+
+
getDate(int) - Method in class com.jacob.com.SafeArray
+
+
get windows time from an single dimensional array
+
+
getDate() - Method in class com.jacob.com.Variant
+
 
+
getDateRef() - Method in class com.jacob.com.Variant
+
 
+
getDecimal() - Method in class com.jacob.com.Variant
+
+
return the BigDecimal value held in this variant (fails on other types)
+
+
getDecimalRef() - Method in class com.jacob.com.Variant
+
+
return the BigDecimal value held in this variant (fails on other types)
+
+
getDispatch() - Method in class com.jacob.com.Variant
+
+
cover for Variant.toDispatch() This method now matches other getXXX() + methods.
+
+
getDispatchRef() - Method in class com.jacob.com.Variant
+
+
Dispatch and dispatchRef are treated the same This is just a cover for + toDispatch() with a flag check
+
+
getDouble(int) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
getDouble(int[]) - Method in class com.jacob.com.SafeArray
+
+
get double value from N-dimensional array
+
+
getDouble(int, int) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
getDouble() - Method in class com.jacob.com.Variant
+
 
+
getDoubleRef() - Method in class com.jacob.com.Variant
+
 
+
getDoubles(int, int, double[], int) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
getElemSize() - Method in class com.jacob.com.SafeArray
+
 
+
getEmpty() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
method never did anything
+
+
+
getError() - Method in class com.jacob.com.Variant
+
 
+
getErrorRef() - Method in class com.jacob.com.Variant
+
 
+
getFeatures() - Method in class com.jacob.com.SafeArray
+
 
+
getFloat(int) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
getFloat(int[]) - Method in class com.jacob.com.SafeArray
+
+
get float value from N-dimensional array
+
+
getFloat(int, int) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
getFloat() - Method in class com.jacob.com.Variant
+
 
+
getFloatRef() - Method in class com.jacob.com.Variant
+
 
+
getFloats(int, int, float[], int) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
getHelpContext() - Method in exception com.jacob.com.ComException
+
 
+
getHelpFile() - Method in exception com.jacob.com.ComException
+
 
+
getHResult() - Method in exception com.jacob.com.ComException
+
 
+
getIDOfName(Dispatch, String) - Static method in class com.jacob.com.Dispatch
+
 
+
getIDsOfNames(Dispatch, int, String[]) - Static method in class com.jacob.com.Dispatch
+
 
+
getIDsOfNames(Dispatch, String[]) - Static method in class com.jacob.com.Dispatch
+
 
+
getInt(int) - Method in class com.jacob.com.SafeArray
+
+
get int from an single dimensional array
+
+
getInt(int[]) - Method in class com.jacob.com.SafeArray
+
+
get int value from N-dimensional array
+
+
getInt(int, int) - Method in class com.jacob.com.SafeArray
+
+
get int from 2 dimensional array
+
+
getInt() - Method in class com.jacob.com.Variant
+
+
return the int value held in this variant if it is an int or a short.
+
+
getIntRef() - Method in class com.jacob.com.Variant
+
+
get the content of this variant as an int
+
+
getInts(int, int, int[], int) - Method in class com.jacob.com.SafeArray
+
+
retrieves a group of ints from a single dimensional array
+
+
getInvocationProxy(Object) - Method in class com.jacob.activeX.ActiveXDispatchEvents
+
 
+
getInvocationProxy(Object) - Method in class com.jacob.com.DispatchEvents
+
+
Returns an instance of the proxy configured with pTargetObject as its + target
+
+
getJavaDate(int) - Method in class com.jacob.com.SafeArray
+
+
returns the Java Date contained in this array
+
+
getJavaDate() - Method in class com.jacob.com.Variant
+
+
returns the windows time contained in this Variant to a Java Date.
+
+
getJavaDateRef() - Method in class com.jacob.com.Variant
+
+
returns the windows time contained in this Variant to a Java Date should + return null if this is not a date reference Variant SF 959382
+
+
getLBound() - Method in class com.jacob.com.SafeArray
+
 
+
getLBound(int) - Method in class com.jacob.com.SafeArray
+
 
+
getLong(int) - Method in class com.jacob.com.SafeArray
+
+
get int from an single dimensional array
+
+
getLong(int[]) - Method in class com.jacob.com.SafeArray
+
+
get long value from N-dimensional array
+
+
getLong(int, int) - Method in class com.jacob.com.SafeArray
+
+
get long from 2 dimensional array
+
+
getLong() - Method in class com.jacob.com.Variant
+
+
64 bit Longs only available on x64.
+
+
getLongRef() - Method in class com.jacob.com.Variant
+
+
64 bit Longs only available on x64.
+
+
getLongs(int, int, long[], int) - Method in class com.jacob.com.SafeArray
+
+
retrieves a group of longs from a single dimensional array
+
+
getLongValue() - Method in class com.jacob.com.Currency
+
+
getter to the inner storage so that cmpareTo can work
+
+
getNull() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
method never did anything
+
+
+
getNumDim() - Method in class com.jacob.com.SafeArray
+
 
+
getNumLocks() - Method in class com.jacob.com.SafeArray
+
+
not implemented.
+
+
getObject() - Method in class com.jacob.activeX.ActiveXComponent
+
+
Probably was a cover for something else in the past.
+
+
getPreferredDLLName() - Static method in class com.jacob.com.LibraryLoader
+
+
Developer note: This method MUST be synchronized with the DLL names + created as part of the build process in build.xml
+
+
getProgramId() - Method in class com.jacob.com.Dispatch
+
+
returns the program id if an activeX component created this otherwise it + returns null.
+
+
getProperty(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as a Variant
+
+
getPropertyAsBoolean(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as a Boolean
+
+
getPropertyAsByte(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as a byte
+
+
getPropertyAsComponent(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as an ActiveX component
+
+
getPropertyAsInt(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as a int
+
+
getPropertyAsString(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
retrieves a property and returns it as a String
+
+
getShort(int) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
getShort(int[]) - Method in class com.jacob.com.SafeArray
+
+
get short value from N-dimensional array
+
+
getShort(int, int) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
getShort() - Method in class com.jacob.com.Variant
+
+
return the int value held in this variant (fails on other types?)
+
+
getShortRef() - Method in class com.jacob.com.Variant
+
+
get the content of this variant as an int
+
+
getShorts(int, int, short[], int) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
getSource() - Method in exception com.jacob.com.ComException
+
 
+
getString(int) - Method in class com.jacob.com.SafeArray
+
+
string access
+
+
getString(int[]) - Method in class com.jacob.com.SafeArray
+
+
get String value from N-dimensional array
+
+
getString(int, int) - Method in class com.jacob.com.SafeArray
+
+
string access
+
+
getString() - Method in class com.jacob.com.Variant
+
 
+
getStringRef() - Method in class com.jacob.com.Variant
+
+
gets the content of the variant as a string ref
+
+
getStrings(int, int, String[], int) - Method in class com.jacob.com.SafeArray
+
+
string access
+
+
getThreadObjects(boolean) - Static method in class com.jacob.com.ROT
+
+
Returns the pool for this thread if it exists.
+
+
getUBound() - Method in class com.jacob.com.SafeArray
+
 
+
getUBound(int) - Method in class com.jacob.com.SafeArray
+
 
+
getVariant() - Method in class com.jacob.com.InvocationProxy
+
+
used by EventProxy.cpp to create variant objects in the right thread
+
+
getVariant(int) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
getVariant(int[]) - Method in class com.jacob.com.SafeArray
+
+
get Variant value from N-dimensional array
+
+
getVariant(int, int) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
getVariant() - Method in class com.jacob.com.Variant
+
+
Used to get the value from a windows type of VT_VARIANT or a jacob + Variant type of VariantVariant.
+
+
getVariantArray() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
getVariantArrayRef() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
getVariants(int, int, Variant[], int) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
getvt() - Method in class com.jacob.com.SafeArray
+
 
+
getvt() - Method in class com.jacob.com.Variant
+
+
Reports the type of the underlying Variant object
+
+
+ + + +

H

+
+
hasExited(Dispatch, int, int) - Static method in class com.jacob.com.Dispatch
+
+
Cover for native method
+
+
hasExited(Dispatch) - Static method in class com.jacob.com.Dispatch
+
+
The method is used to poll until it returns 1, indicating that the COM + server in gone.
+
+
hasMoreElements() - Method in class com.jacob.com.EnumVariant
+
+
Implements java.util.Enumeration
+
+
haveSTA - Static variable in class com.jacob.com.ComThread
+
+
Comment for haveSTA
+
+
hr - Variable in exception com.jacob.com.ComException
+
+
COM code initializes this filed with an appropriate return code that was + returned by the underlying com code
+
+
+ + + +

I

+
+
INCLUDE_ALL_CLASSES_IN_ROT - Static variable in class com.jacob.com.ROT
+
+
If the code is ran from an applet that is called from javascript the Java + Plugin does not give full permissions to the code and thus System + properties cannot be accessed.
+
+
Init(boolean, int) - Static method in class com.jacob.com.ComThread
+
+
Initialize the current java thread to be part of the MTA/STA COM + Apartment
+
+
init(int, int[], int[]) - Method in class com.jacob.com.SafeArray
+
 
+
init() - Method in class com.jacob.com.Variant
+
+
initializes the COM Variant and puts its reference in this instance
+
+
InitMTA() - Static method in class com.jacob.com.ComThread
+
+
Initialize the current java thread to be part of the Multi-threaded COM + Apartment
+
+
InitMTA(boolean) - Static method in class com.jacob.com.ComThread
+
+
Initialize the current java thread to be part of the Multi-threaded COM + Apartment, if createMainSTA is true, create a separate MainSTA thread + that will house all Apartment Threaded components
+
+
InitSTA() - Static method in class com.jacob.com.ComThread
+
+
Initialize the current java thread to be an STA
+
+
InitSTA(boolean) - Static method in class com.jacob.com.ComThread
+
+
Initialize the current java thread to be an STA COM Apartment, if + createMainSTA is true, create a separate MainSTA thread that will house + all Apartment Threaded components
+
+
InvocationProxy - Class in com.jacob.com
+
 
+
InvocationProxy() - Constructor for class com.jacob.com.InvocationProxy
+
+
dummy constructor for subclasses that don't actually wrap anything and + just want to override the invoke() method
+
+
InvocationProxyAllVariants - Class in com.jacob.com
+
+
This class acts as a proxy between the windows event callback mechanism and + the Java classes that are looking for events.
+
+
InvocationProxyAllVariants() - Constructor for class com.jacob.com.InvocationProxyAllVariants
+
 
+
invoke(String, String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
invokes a single parameter call on this dispatch that returns no value
+
+
invoke(String, boolean) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call to the passed in action with a single boolean + parameter
+
+
invoke(String, int) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call to the passed in action with a single int parameter
+
+
invoke(String, String, int) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call to the passed in action with a string and integer + parameter (this was put in for some application)
+
+
invoke(String, int, int) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call to the passed in action with two integer parameters + (this was put in for some application)
+
+
invoke(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call for the passed in action and no parameter
+
+
invoke(String, Variant...) - Method in class com.jacob.activeX.ActiveXComponent
+
+
This is really a cover for call(String,Variant[]) that should be + eliminated call with a variable number of args mainly used for quit.
+
+
invoke(String, Variant[]) - Method in class com.jacob.activeX.ActiveXInvocationProxy
+
 
+
invoke(Dispatch, String, int, int, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invoke(Dispatch, String, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invoke(Dispatch, int, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invoke(String, Variant[]) - Method in class com.jacob.com.InvocationProxy
+
+
The method actually invoked by EventProxy.cpp.
+
+
invoke(String, Variant[]) - Method in class com.jacob.com.InvocationProxyAllVariants
+
 
+
invokeGetComponent(String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call for the passed in action and no parameter
+
+
invokeGetComponent(String, Variant...) - Method in class com.jacob.activeX.ActiveXComponent
+
+
makes a dispatch call for the passed in action and single parameter
+
+
invokeSub(Dispatch, String, int, int, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokeSub(Dispatch, String, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokeSub(Dispatch, int, int, Object[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokeSubv(Dispatch, String, int, int, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokeSubv(Dispatch, String, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokeSubv(Dispatch, int, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokev(Dispatch, String, int, int, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokev(Dispatch, String, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
invokev(Dispatch, String, int, Variant[], int[], int) - Static method in class com.jacob.com.Dispatch
+
 
+
invokev(Dispatch, int, int, Variant[], int[]) - Static method in class com.jacob.com.Dispatch
+
 
+
isAttached() - Method in class com.jacob.com.Dispatch
+
 
+
isDebugEnabled() - Static method in class com.jacob.com.JacobObject
+
 
+
isNull() - Method in class com.jacob.com.Variant
+
 
+
+ + + +

J

+
+
JACOB_DLL_NAME - Static variable in class com.jacob.com.LibraryLoader
+
+
Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob').
+
+
JACOB_DLL_NAME_X64 - Static variable in class com.jacob.com.LibraryLoader
+
+
Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 64 + bit windows.
+
+
JACOB_DLL_NAME_X86 - Static variable in class com.jacob.com.LibraryLoader
+
+
Name of system property (currently jacob.dll.name) that may + contain an alternate name for the JNI library (default is 'jacob'), 32 + bit windows.
+
+
JACOB_DLL_PATH - Static variable in class com.jacob.com.LibraryLoader
+
+
Name of system property (currently jacob.dll.path) that may + contain an absolute path to the JNI library.
+
+
JacobException - Exception in com.jacob.com
+
+
The parent class of all Jacob exceptions.
+
+
JacobException() - Constructor for exception com.jacob.com.JacobException
+
+
Default constructor.
+
+
JacobException(String) - Constructor for exception com.jacob.com.JacobException
+
+
standard constructor
+
+
JacobObject - Class in com.jacob.com
+
+
The superclass of all Jacob objects.
+
+
JacobObject() - Constructor for class com.jacob.com.JacobObject
+
+
Standard constructor that adds this JacobObject to the memory management + pool.
+
+
JacobReleaseInfo - Class in com.jacob.com
+
+
An interface to the version properties file.
+
+
JacobReleaseInfo() - Constructor for class com.jacob.com.JacobReleaseInfo
+
 
+
+ + + +

L

+
+
LibraryLoader - Class in com.jacob.com
+
+
Utility class to centralize the way in which the jacob JNI library is loaded.
+
+
LibraryLoader() - Constructor for class com.jacob.com.LibraryLoader
+
 
+
loadJacobLibrary() - Static method in class com.jacob.com.LibraryLoader
+
+
Load the jacob dll either from an absolute path or by a library name, + both of which may be defined in various ways.
+
+
LOCALE_SYSTEM_DEFAULT - Static variable in class com.jacob.com.Dispatch
+
+
Used to set the locale in a call.
+
+
logCallbackEvent(String, Variant[]) - Method in class com.jacob.activeX.ActiveXComponent
+
+
used by the doc and application listeners to get intelligent logging
+
+
longValue() - Method in class com.jacob.com.Currency
+
 
+
+ + + +

M

+
+
m_helpContext - Variable in exception com.jacob.com.ComException
+
+
No documentation is available at this time.
+
+
m_helpFile - Variable in exception com.jacob.com.ComException
+
+
No documentation is available at this time.
+
+
m_pDispatch - Variable in class com.jacob.com.Dispatch
+
+
This is public because Dispatch.cpp knows its name and accesses it + directly to get the dispatch id.
+
+
m_pStream - Variable in class com.jacob.com.DispatchProxy
+
+
Comment for m_pStream
+
+
m_source - Variable in exception com.jacob.com.ComException
+
+
No documentation is available at this time.
+
+
mainSTA - Static variable in class com.jacob.com.ComThread
+
+
Comment for mainSTA
+
+
MainSTA - Class in com.jacob.com
+
+
We provide our own main sta thread to avoid COM tagging a random thread as + the main STA - this is the thread in which all Apartment threaded components + will be created if the client chooses an MTA threading model for the java + side of the app.
+
+
MainSTA() - Constructor for class com.jacob.com.MainSTA
+
 
+
Method - Static variable in class com.jacob.com.Dispatch
+
+
used by callN() and callSubN()
+
+
mTargetObject - Variable in class com.jacob.com.InvocationProxy
+
+
the object we will try and forward to.
+
+
+ + + +

N

+
+
Next() - Method in class com.jacob.com.EnumVariant
+
+
Deprecated. +
use nextElement() instead
+
+
+
Next(Variant[]) - Method in class com.jacob.com.EnumVariant
+
+
This should be private and wrapped to protect JNI layer.
+
+
nextElement() - Method in class com.jacob.com.EnumVariant
+
+
Implements java.util.Enumeration
+
+
noParam() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
replaced by putNoParam()
+
+
+
NotImplementedException - Exception in com.jacob.com
+
+
Thrown by java APIs that are not implemented either because they were never + implemented or because they are being deprecated This is a subclass of + ComException so callers can still just catch ComException.
+
+
NotImplementedException(String) - Constructor for exception com.jacob.com.NotImplementedException
+
 
+
+ + + +

O

+
+
objectIsAConstant(Variant) - Method in class com.jacob.com.Variant
+
+
returns true if the passed in Variant is a constant that should not be + freed
+
+
objectsToVariants(Object[]) - Static method in class com.jacob.com.VariantUtilities
+
+
converts an array of objects into an array of Variants by repeatedly + calling obj2Variant(Object)
+
+
objectToVariant(Object) - Static method in class com.jacob.com.VariantUtilities
+
+
Map arguments based on msdn documentation.
+
+
OnInit() - Method in class com.jacob.com.STA
+
+
Override this method to create and initialize any COM component that you + want to run in this thread.
+
+
OnQuit() - Method in class com.jacob.com.STA
+
+
Override this method to destroy any resource before the thread exits and + COM in uninitialized
+
+
+ + + +

P

+
+
populateVariant(Variant, Object, boolean) - Static method in class com.jacob.com.VariantUtilities
+
+
Populates a variant object from a java object.
+
+
Put - Static variable in class com.jacob.com.Dispatch
+
+
used by put()
+
+
put(Dispatch, String, Object) - Static method in class com.jacob.com.Dispatch
+
 
+
put(Dispatch, int, Object) - Static method in class com.jacob.com.Dispatch
+
 
+
put_Casesensitive(Dispatch, String, Object) - Static method in class com.jacob.com.Dispatch
+
+
not implemented yet
+
+
PUT_IN_ROT_SUFFIX - Static variable in class com.jacob.com.ROT
+
+
Suffix added to class name to make up property name that determines if + this object should be stored in the ROT.
+
+
putBoolean(boolean) - Method in class com.jacob.com.Variant
+
+
puts a boolean into the variant and sets it's type
+
+
putBooleanRef(boolean) - Method in class com.jacob.com.Variant
+
+
pushes a boolean into the variant by ref and sets the type of the variant + to boolean
+
+
putByte(byte) - Method in class com.jacob.com.Variant
+
+
pushes a byte into the varaint and sets the type
+
+
putByteArray(Object) - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
putByteRef(byte) - Method in class com.jacob.com.Variant
+
+
pushes a byte into the variant by ref and sets the type
+
+
putCharArray(Object) - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
putCurrency(Currency) - Method in class com.jacob.com.Variant
+
+
Puts a value in as a currency and sets the variant type.
+
+
putCurrencyRef(Currency) - Method in class com.jacob.com.Variant
+
+
Pushes a long into the variant as currency and sets the type.
+
+
putDate(Date) - Method in class com.jacob.com.Variant
+
+
converts a java date to a windows time and calls putDate(double) SF + 959382
+
+
putDate(double) - Method in class com.jacob.com.Variant
+
+
puts a windows date double into the variant and sets the type
+
+
putDateRef(Date) - Method in class com.jacob.com.Variant
+
+
converts a java date to a windows time and calls putDateRef(double) SF + 959382
+
+
putDateRef(double) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to a date (VT_DATE|VT_BYREF)
+
+
putDecimal(BigDecimal) - Method in class com.jacob.com.Variant
+
+
EXPERIMENTAL 1.14 feature to support rounded decimals.
+
+
putDecimalRef(BigDecimal) - Method in class com.jacob.com.Variant
+
+
Set the value of this variant and set the type.
+
+
putDispatch(Dispatch) - Method in class com.jacob.com.Variant
+
+
This acts a cover for putVariant Dispatch.
+
+
putDispatchRef(Dispatch) - Method in class com.jacob.com.Variant
+
+
Dispatch and dispatchRef are treated the same This is a cover for + putVariantDispatch().
+
+
putDouble(double) - Method in class com.jacob.com.Variant
+
+
wraps this Variant around the passed in double.
+
+
putDoubleRef(double) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to a double (VT_R8|VT_BYREF)
+
+
putEmpty() - Method in class com.jacob.com.Variant
+
+
sets the type to VariantEmpty
+
+
putError(int) - Method in class com.jacob.com.Variant
+
+
puts an error code (I think) into the variant and sets the type
+
+
putErrorRef(int) - Method in class com.jacob.com.Variant
+
+
pushes an error code into the variant by ref and sets the type
+
+
putFloat(float) - Method in class com.jacob.com.Variant
+
+
fills the Variant with a float and sets the type to float
+
+
putFloatRef(float) - Method in class com.jacob.com.Variant
+
+
pushes a float into the variant and sets the type
+
+
putInt(int) - Method in class com.jacob.com.Variant
+
+
set the value of this variant and set the type
+
+
putIntRef(int) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to an int (VT_I4|VT_BYREF)
+
+
putLong(long) - Method in class com.jacob.com.Variant
+
+
Puts a 64 bit Java Long into a 64 bit Variant Long.
+
+
putLongRef(long) - Method in class com.jacob.com.Variant
+
+
Puts a 64 bit Java Long into a 64 bit Variant Long.
+
+
putNoParam() - Method in class com.jacob.com.Variant
+
+
sets the type to VT_ERROR and the error message to DISP_E_PARAMNOTFOIUND
+
+
putNothing() - Method in class com.jacob.com.Variant
+
+
Sets the type to VariantDispatch and sets the value to null Equivalent to + VB's nothing
+
+
putNull() - Method in class com.jacob.com.Variant
+
+
Set this Variant's type to VT_NULL (the VB equivalent of NULL)
+
+
putObject(Object) - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should use putDispatch()
+
+
+
putObjectRef(Object) - Method in class com.jacob.com.Variant
+
+
Deprecated. 
+
+
PutRef - Static variable in class com.jacob.com.Dispatch
+
+
not used, probably intended for putRef()
+
+
putRef(Dispatch, String, Object) - Static method in class com.jacob.com.Dispatch
+
+
cover for underlying call to invoke
+
+
putRef(Dispatch, int, Object) - Static method in class com.jacob.com.Dispatch
+
+
cover for underlying call to invoke
+
+
putSafeArray(SafeArray) - Method in class com.jacob.com.Variant
+
+
have no idea...
+
+
putSafeArrayRef(SafeArray) - Method in class com.jacob.com.Variant
+
+
have no idea...
+
+
putShort(short) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to a short (VT_I2)
+
+
putShortRef(short) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to a short (VT_I2|VT_BYREF)
+
+
putString(String) - Method in class com.jacob.com.Variant
+
+
put a string into the variant and set its type
+
+
putStringRef(String) - Method in class com.jacob.com.Variant
+
+
set the content of this variant to a string (VT_BSTR|VT_BYREF)
+
+
putVariant(Object) - Method in class com.jacob.com.Variant
+
+
Puts a variant into this variant making it type VT_VARIANT.
+
+
putVariantArray(Variant[]) - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
putVariantArrayRef(Variant[]) - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
+ + + +

Q

+
+
QueryInterface(String) - Method in class com.jacob.com.Dispatch
+
+
Return a different interface by IID string.
+
+
quit() - Method in class com.jacob.com.STA
+
+
calls quitMessagePump
+
+
quitMainSTA() - Static method in class com.jacob.com.ComThread
+
 
+
quitMessagePump() - Method in class com.jacob.com.STA
+
+
quit message pump for the main STA
+
+
+ + + +

R

+
+
reinit(SafeArray) - Method in class com.jacob.com.SafeArray
+
+
Does anyone want to document this?
+
+
reinterpretType(int) - Method in class com.jacob.com.SafeArray
+
+
Does anyone want to document this?
+
+
Release() - Static method in class com.jacob.com.ComThread
+
+
Call CoUninitialize to release this java thread from COM
+
+
RemoveObject(JacobObject) - Static method in class com.jacob.com.ComThread
+
+
Deprecated. +
the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread. + + This will remove an object from the ROT
+
+
+
removeObject(JacobObject) - Static method in class com.jacob.com.ROT
+
+
Deprecated. +
the java model leave the responsibility of clearing up + objects to the Garbage Collector. Our programming model + should not require that the user specifically remove object + from the thread.
+ This will remove an object from the ROT
+ This does not need to be synchronized because only the rot + modification related methods need to synchronized. Each + individual map is only modified in a single thread.
+
+
+
Reset() - Method in class com.jacob.com.EnumVariant
+
+
This should be private and wrapped to protect JNI layer
+
+
ROT - Class in com.jacob.com
+
+
The Running Object Table (ROT) maps each thread to a collection of all the + JacobObjects that were created in that thread.
+
+
ROT() - Constructor for class com.jacob.com.ROT
+
 
+
roundToMSDecimal(BigDecimal) - Static method in class com.jacob.com.VariantUtilities
+
+
Rounds the scale and bit length so that it will pass + validateDecimalScaleBits().
+
+
run() - Method in class com.jacob.com.STA
+
 
+
+ + + +

S

+
+
SafeArray - Class in com.jacob.com
+
+
This creates an array wrapper around Variant objects(?).
+
+
SafeArray() - Constructor for class com.jacob.com.SafeArray
+
+
Constructor.
+
+
SafeArray(int) - Constructor for class com.jacob.com.SafeArray
+
+
Constructor.
+
+
SafeArray(int, int) - Constructor for class com.jacob.com.SafeArray
+
+
Constructor for a single dimensional array whose lower bounds is 0 and + whose upper bound is specified as a parameter
+
+
SafeArray(int, int, int) - Constructor for class com.jacob.com.SafeArray
+
+
Creates a two dimensional SafeArray whose base indexes are 0.
+
+
SafeArray(int, int[], int[]) - Constructor for class com.jacob.com.SafeArray
+
+
Constructor with support for N-dimensional array support
+
+
SafeArray(String) - Constructor for class com.jacob.com.SafeArray
+
+
Convert a string to a VT_UI1 array.
+
+
safeRelease() - Method in class com.jacob.com.Dispatch
+
 
+
safeRelease() - Method in class com.jacob.com.DispatchEvents
+
 
+
safeRelease() - Method in class com.jacob.com.DispatchProxy
+
 
+
safeRelease() - Method in class com.jacob.com.EnumVariant
+
 
+
safeRelease() - Method in class com.jacob.com.JacobObject
+
+
Finalizers call this method.
+
+
safeRelease() - Method in class com.jacob.com.SafeArray
+
+
Finalizers call this method.
+
+
safeRelease() - Method in class com.jacob.com.Variant
+
+
This will release the "C" memory for the Variant unless this Variant is + one of the constants in which case we don't want to release the memory.
+
+
SerializationReadFromBytes(byte[]) - Method in class com.jacob.com.Variant
+
+
this is supposed to cause the underlying variant object struct to be + rebuilt from a previously serialized byte array.
+
+
SerializationWriteToBytes() - Method in class com.jacob.com.Variant
+
+
this is supposed to create a byte array that represents the underlying + variant object structure
+
+
setBoolean(int, boolean) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
setBoolean(int[], boolean) - Method in class com.jacob.com.SafeArray
+
+
set boolean value in N-dimensional array
+
+
setBoolean(int, int, boolean) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
setBooleans(int, int, boolean[], int) - Method in class com.jacob.com.SafeArray
+
+
boolean access
+
+
setByte(int, byte) - Method in class com.jacob.com.SafeArray
+
+
byte access
+
+
setByte(int[], byte) - Method in class com.jacob.com.SafeArray
+
+
set byte value in N-dimensional array
+
+
setByte(int, int, byte) - Method in class com.jacob.com.SafeArray
+
+
byte access
+
+
setBytes(int, int, byte[], int) - Method in class com.jacob.com.SafeArray
+
+
fills array with passed in bytes
+
+
setChar(int, char) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
setChar(int[], char) - Method in class com.jacob.com.SafeArray
+
+
set char value in N-dimensional array
+
+
setChar(int, int, char) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
setChars(int, int, char[], int) - Method in class com.jacob.com.SafeArray
+
+
char access
+
+
setDouble(int, double) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
setDouble(int[], double) - Method in class com.jacob.com.SafeArray
+
+
set double value in N-dimensional array
+
+
setDouble(int, int, double) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
setDoubles(int, int, double[], int) - Method in class com.jacob.com.SafeArray
+
+
double access
+
+
setFloat(int, float) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
setFloat(int[], float) - Method in class com.jacob.com.SafeArray
+
+
set float value in N-dimensional array
+
+
setFloat(int, int, float) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
setFloats(int, int, float[], int) - Method in class com.jacob.com.SafeArray
+
+
float access
+
+
setInt(int, int) - Method in class com.jacob.com.SafeArray
+
+
sets the int value of an element in a single dimensional array
+
+
setInt(int[], int) - Method in class com.jacob.com.SafeArray
+
+
set int value in N-dimensional array
+
+
setInt(int, int, int) - Method in class com.jacob.com.SafeArray
+
+
sets the int value of a 2 dimensional array
+
+
setInts(int, int, int[], int) - Method in class com.jacob.com.SafeArray
+
+
sets a group of ints into a single dimensional array
+
+
setLong(int, long) - Method in class com.jacob.com.SafeArray
+
+
sets the long value of an element in a single dimensional array
+
+
setLong(int[], long) - Method in class com.jacob.com.SafeArray
+
+
set long value in N-dimensional array
+
+
setLong(int, int, long) - Method in class com.jacob.com.SafeArray
+
+
sets the long value of a 2 dimensional array
+
+
setLongs(int, int, long[], int) - Method in class com.jacob.com.SafeArray
+
+
sets a group of longs into a single dimensional array
+
+
setProperty(String, Variant) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets a property on this object
+
+
setProperty(String, Dispatch) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets a property on this object
+
+
setProperty(String, String) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets a property to be the value of the string
+
+
setProperty(String, boolean) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets a property as a boolean value
+
+
setProperty(String, byte) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets a property as a boolean value
+
+
setProperty(String, int) - Method in class com.jacob.activeX.ActiveXComponent
+
+
sets the property as an int value
+
+
setShort(int, int, short) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
setShort(int, short) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
setShort(int[], short) - Method in class com.jacob.com.SafeArray
+
+
set short value in N-dimensional array
+
+
setShorts(int, int, short[], int) - Method in class com.jacob.com.SafeArray
+
+
short access
+
+
setString(int, int, String) - Method in class com.jacob.com.SafeArray
+
+
puts a string into an element in a two dimensional array.
+
+
setString(int, String) - Method in class com.jacob.com.SafeArray
+
+
puts a string into an element in a single dimensional safe array
+
+
setString(int[], String) - Method in class com.jacob.com.SafeArray
+
+
set Stringvalue in N-dimensional array
+
+
setStrings(int, int, String[], int) - Method in class com.jacob.com.SafeArray
+
+
string access
+
+
setTarget(Object) - Method in class com.jacob.com.InvocationProxy
+
+
Sets the target for this InvocationProxy.
+
+
setVariant(int, int, Variant) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
setVariant(int, Variant) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
setVariant(int[], Variant) - Method in class com.jacob.com.SafeArray
+
+
set Variant value in N-dimensional array
+
+
setVariants(int, int, Variant[], int) - Method in class com.jacob.com.SafeArray
+
+
variant access
+
+
shouldLoad32Bit() - Static method in class com.jacob.com.LibraryLoader
+
+
Detects whether this is a 32-bit JVM.
+
+
shouldLogEvents - Static variable in class com.jacob.activeX.ActiveXComponent
+
+
This boolean determines if callback events should be logged
+
+
Skip(int) - Method in class com.jacob.com.EnumVariant
+
+
This should be private and wrapped to protect JNI layer.
+
+
STA - Class in com.jacob.com
+
+
A class that implements a Single Threaded Apartment.
+
+
STA() - Constructor for class com.jacob.com.STA
+
+
constructor for STA
+
+
startMainSTA() - Static method in class com.jacob.com.ComThread
+
 
+
+ + + +

T

+
+
threadID - Variable in class com.jacob.com.STA
+
+
referenced by STA.cpp
+
+
toBoolean() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should be replaced by changeType() followed by getBoolean()
+
+
+
toBooleanArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toByte() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should be replaced by changeType() followed by getByte()
+
+
+
toByteArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toByteArray() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
toCharArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toCharArray() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
toCurrency() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should be replaced by changeType() followed by getCurrency
+
+
+
toDate() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should use changeType() followed by getDate()
+
+
+
toDispatch() - Method in class com.jacob.com.DispatchProxy
+
 
+
toDispatch() - Method in class com.jacob.com.Variant
+
 
+
toDouble() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should call changeType() then getDouble()
+
+
+
toDoubleArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toEnumVariant() - Method in class com.jacob.com.Variant
+
 
+
toError() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should use changeType() followed by getError()
+
+
+
toFloat() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should use changeType() and getFloat() instead
+
+
+
toFloatArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toInt() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
should use changeType() followed by getInt()
+
+
+
toIntArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toJavaDate() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
callers should use getDate()
+
+
+
toJavaObject() - Method in class com.jacob.com.Variant
+
+
Convert a JACOB Variant value to a Java object (type conversions).
+
+
toLongArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toObject() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
this is a cover for toDispatch();
+
+
+
toSafeArray() - Method in class com.jacob.com.Variant
+
+
By default toSafeArray makes a deep copy due to the fact that this + Variant owns the embedded SafeArray and will destroy it when it gc's + calls toSafeArray(true).
+
+
toSafeArray(boolean) - Method in class com.jacob.com.Variant
+
+
This lets folk turn into a safe array without a deep copy.
+
+
toScriptObject() - Method in class com.jacob.com.Variant
+
+
Deprecated. 
+
+
toShort() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
callers should use changeType() followed by getShort()
+
+
+
toShortArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toString() - Method in class com.jacob.com.SafeArray
+
+
Standard toString() Warning, this creates new Variant objects!
+
+
toString() - Method in class com.jacob.com.Variant
+
+
This method now correctly implements java toString() semantics Attempts + to return the content of this variant as a string + + "not initialized" if not initialized + "null" if VariantEmpty, + "null" if VariantError + "null" if VariantNull + "null" if Variant type didn't convert.
+
+
toStringArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toVariant() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by "this"
+
+
+
toVariantArray() - Method in class com.jacob.com.SafeArray
+
+
Retrieves the data from the array cast to a Java data type
+
+
toVariantArray() - Method in class com.jacob.com.Variant
+
+
Deprecated. +
superseded by SafeArray
+
+
+
+ + + +

U

+
+
USE_AUTOMATIC_GARBAGE_COLLECTION - Static variable in class com.jacob.com.ROT
+
+
Manual garbage collection was the only option pre 1.9 Can staticly cache + the results because only one value and we don't let it change during a + run
+
+
+ + + +

V

+
+
validateDecimalMinMax(BigDecimal) - Static method in class com.jacob.com.VariantUtilities
+
+
Does any validation that couldn't have been fixed by rounding or scale + modification.
+
+
validateDecimalScaleAndBits(BigDecimal) - Static method in class com.jacob.com.VariantUtilities
+
+
Verifies that we have a scale 0 <= x <= 28 and now more than 96 bits of + data.
+
+
Variant - Class in com.jacob.com
+
+
The multi-format data type used for all call backs and most communications + between Java and COM.
+
+
Variant() - Constructor for class com.jacob.com.Variant
+
+
public constructor, initializes and sets type to VariantEmpty
+
+
Variant(boolean) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(byte) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(double) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(float) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(int) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(long) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
Variant(Object) - Constructor for class com.jacob.com.Variant
+
+
Convenience constructor that calls the main one with a byRef value of + false
+
+
Variant(Object, boolean) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts the data object and information about whether + this is by reference or not.
+
+
Variant(short) - Constructor for class com.jacob.com.Variant
+
+
Constructor that accepts a primitive rather than an object
+
+
VariantArray - Static variable in class com.jacob.com.Variant
+
+
variant's type is array VT_ARRAY 0x2000
+
+
VariantBoolean - Static variable in class com.jacob.com.Variant
+
+
variant's type is boolean VT_BOOL
+
+
VariantByref - Static variable in class com.jacob.com.Variant
+
+
variant's type is a reference (to IDispatch?) VT_BYREF 0x4000
+
+
VariantByte - Static variable in class com.jacob.com.Variant
+
+
variant's type is byte VT_UI1 This is an UNSIGNED byte
+
+
VariantClear() - Method in class com.jacob.com.Variant
+
+
Clear the content of this variant
+
+
VariantCurrency - Static variable in class com.jacob.com.Variant
+
+
variant's type is currency VT_CY
+
+
VariantDate - Static variable in class com.jacob.com.Variant
+
+
variant's type is date VT_DATE
+
+
VariantDecimal - Static variable in class com.jacob.com.Variant
+
+
variant's type is object VT_DECIMAL
+
+
VariantDispatch - Static variable in class com.jacob.com.Variant
+
+
variant's type is dispatch VT_DISPATCH
+
+
VariantDouble - Static variable in class com.jacob.com.Variant
+
+
variant's type is double VT_R8
+
+
VariantEmpty - Static variable in class com.jacob.com.Variant
+
+
variant's type is empty : equivalent to VB Nothing and VT_EMPTY
+
+
VariantError - Static variable in class com.jacob.com.Variant
+
+
variant's type is error VT_ERROR
+
+
VariantFloat - Static variable in class com.jacob.com.Variant
+
+
variant's type is float VT_R4
+
+
VariantInt - Static variable in class com.jacob.com.Variant
+
+
variant's type is int VT_I4, a Long in VC
+
+
VariantLongInt - Static variable in class com.jacob.com.Variant
+
+
variant's type is 64 bit long integer VT_I8 - not yet implemented in + Jacob because we have to decide what to do with Currency and because its + only supported on XP and later.
+
+
VariantNull - Static variable in class com.jacob.com.Variant
+
+
variant's type is null : equivalent to VB Null and VT_NULL
+
+
VariantObject - Static variable in class com.jacob.com.Variant
+
+
variant's type is object VT_UNKNOWN
+
+
VariantPointer - Static variable in class com.jacob.com.Variant
+
+
This value is for reference only and is not to be used by any callers
+
+
VariantShort - Static variable in class com.jacob.com.Variant
+
+
variant's type is short VT_I2
+
+
VariantString - Static variable in class com.jacob.com.Variant
+
+
variant's type is string also known as VT_BSTR
+
+
variantToObject(Variant) - Static method in class com.jacob.com.VariantUtilities
+
+
Convert a JACOB Variant value to a Java object (type conversions).
+
+
VariantTypeMask - Static variable in class com.jacob.com.Variant
+
+
what is this? VT_TYPEMASK && VT_BSTR_BLOB 0xfff
+
+
VariantUtilities - Class in com.jacob.com
+
+
A utility class used to convert between Java objects and Variants
+
+
VariantVariant - Static variable in class com.jacob.com.Variant
+
+
variant's type is variant it encapsulate another variant VT_VARIANT
+
+
VariantViaEvent - Class in com.jacob.com
+
+
a public class to variant that is used to track which variant objects are + created by event callbacks This is solely used for that purpose.
+
+
VariantViaEvent() - Constructor for class com.jacob.com.VariantViaEvent
+
+
Standard constructor used by JNI event handling layer
+
+
VT_FALSE - Static variable in class com.jacob.com.Variant
+
+
Use for true/false variant parameters
+
+
VT_MISSING - Static variable in class com.jacob.com.Variant
+
+
Same than Variant.DEFAULT
+
+
VT_TRUE - Static variable in class com.jacob.com.Variant
+
+
Use for true/false variant parameters
+
+
+ + + +

W

+
+
WrongThreadException - Exception in com.jacob.com
+
+
thrown in util.cpp
+
+
WrongThreadException() - Constructor for exception com.jacob.com.WrongThreadException
+
+
standard 0 arg constructor with no message
+
+
WrongThreadException(String) - Constructor for exception com.jacob.com.WrongThreadException
+
+
standard constructor with a string message
+
+
+A C D E F G H I J L M N O P Q R S T U V W 
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index.html new file mode 100644 index 0000000..0b89d64 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/index.html @@ -0,0 +1,75 @@ + + + + + +JACOB : Java COM Bridge API Docs + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-frame.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-frame.html new file mode 100644 index 0000000..c3ebe43 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-frame.html @@ -0,0 +1,22 @@ + + + + + +Overview List (JACOB : Java COM Bridge API Docs) + + + + + + +
+

Packages

+ +
+

 

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-summary.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-summary.html new file mode 100644 index 0000000..4dc174a --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-summary.html @@ -0,0 +1,143 @@ + + + + + +Overview (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

JACOB : Java COM Bridge

+
+
+ + + + + + + + + + + + + + + + +
Other Packages 
PackageDescription
com.jacob.activeX 
com.jacob.com 
+
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-tree.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-tree.html new file mode 100644 index 0000000..8afe725 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/overview-tree.html @@ -0,0 +1,206 @@ + + + + + +Class Hierarchy (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/package-list b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/package-list new file mode 100644 index 0000000..e393ef8 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/package-list @@ -0,0 +1,2 @@ +com.jacob.activeX +com.jacob.com diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/script.js b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/serialized-form.html b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/serialized-form.html new file mode 100644 index 0000000..0baca03 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/serialized-form.html @@ -0,0 +1,205 @@ + + + + + +Serialized Form (JACOB : Java COM Bridge API Docs) + + + + + + + + +
+ + + + + + + +
+ + +
+

Serialized Form

+
+
+
    +
  • +

    Package com.jacob.com

    +
      +
    • + + +

      Class com.jacob.com.ComException extends JacobException implements Serializable

      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          hr

          +
          int hr
          +
          COM code initializes this filed with an appropriate return code that was + returned by the underlying com code
          +
        • +
        • +

          m_helpContext

          +
          int m_helpContext
          +
          No documentation is available at this time. Someone should document this + field
          +
        • +
        • +

          m_helpFile

          +
          java.lang.String m_helpFile
          +
          No documentation is available at this time. Someone should document this + field
          +
        • +
        • +

          m_source

          +
          java.lang.String m_source
          +
          No documentation is available at this time. Someone should document this + field
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class com.jacob.com.ComFailException extends ComException implements Serializable

      +
      +
      serialVersionUID:
      +
      -266047261992987700L
      +
      +
    • +
    • + + +

      Class com.jacob.com.JacobException extends java.lang.RuntimeException implements Serializable

      +
      +
      serialVersionUID:
      +
      -1637125318746002715L
      +
      +
    • +
    • + + +

      Class com.jacob.com.NotImplementedException extends JacobException implements Serializable

      +
      +
      serialVersionUID:
      +
      -9169900832852356445L
      +
      +
    • +
    • + + +

      Class com.jacob.com.WrongThreadException extends JacobException implements Serializable

      +
      +
      serialVersionUID:
      +
      6308780364980228692L
      +
      +
    • +
    +
  • +
+
+ +
+ + + + + + + +
+ + +

http://jacob-project.sourceforge.net

+ + diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/stylesheet.css b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/lib/jacob-1.20/jacob-1.20/jacob-1.20/docs/api/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/lib/jacob-1.20/jacob-1.20/jacob-1.20/jacob-1.20-x64.dll b/lib/jacob-1.20/jacob-1.20/jacob-1.20/jacob-1.20-x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..b43ebcdea6790f7f801853d0fc03879f2fb72cce GIT binary patch literal 226816 zcmdqKeSF>X{r`W`G;Ml$QhF*zHHa+~%cQdqBZs8kAt7j~i&nZ4wJAkHO)t`=q4~TW zE5nL0`wW}UY-2+khIFl7s3vt?>rk8V&f=n&Ud%YZ`}6sFU!9Ya3)^nrKYqR4(sR!H zb@hBbFCMSw>-oBP*POE~k{yXe2J@FpMj|Wulz-*=f8YP*W)KZ z-n9Re*%x0~F!zefF1ljooPt?1FTM1#hJx>0Sa3z-r3DvXT2OK783l7LyWqmZM~xa@ z=vF;EddkdGE-g61`-=@Zu;gTZ$A%nKvXRfn_A4wY*Utk>PSnqXO6oOz|B^~RPq}pe zBi8C~lW+HggGws+y?a7I$*KBzfPS8S@vPa>MsGc;t&Bu2xNd0V`>W@i@8#JZIiO&~ zpwat8$_GUvN6=aRt;y#zPro+l6ZuZ^5PcMUMmED$nEJcngGsLQ3%O;!Zn0QuSvpKCH|AL(o4tK_Tbk+1yx(<|ar;*rQLBuDNcU7GxE z&wPhpape`WNK)RxL(O+drhFG(av2$gm%`IXE}xh7$ag$X|9|<!gFUH{6;ide~m#>59jp7Z|2?ad_{czDSP<{@7%cE4(t>eh4&0MUS9=w?pH}O6g?UrYJS%=?{47e;R@u9%?T_uQ8hd?ZNz$Tl zxwUR}l7H2$^9#!>OWLJGLCFiw9;atTR*LkkofnWPTE5z{*E@5ex!SHMEU&gZEqk-c zyuq@!JAXMXE3)|WVUa;i(Uv?cqRO6JT-|zaVUtwR(%z6$Wp^YuSJ|iJCSzyPWxnNA z&)SxZRq>;G)-KCl9i0F_+UuK-nH*`{QI)->D)F?I&fet`@~%flS0pPEZyQ0?)rp*Y z&V`}&tB_~ejrb4VW!j%yi%K-lX+faPtL8epL25_ zr8!5NoO6Sm`efGKVq0VkgGFp_(G%O`hk=d7iQ0;URi2D(KNf~1a!xyEP~`CnDwB@4 zntV<^&H9Dx7njvn95ugokd-(+tMMOJV(irQ(Qg+QZAI+Tu~7+sb9l90R1$`Q)8i@hwc*0qaW zVi8Tp42d-EOw?vA{wEKPTl5`kxs@1PsohFgQLAkI)x)i}?UFm0j9SfaZMW=I&P?g; z#J8#w4TZ%uEjt8#oiiIlW=f47Q)iAv2~ zMW6CWBlDgna|4;3ADf)zG~t#{))pHs-atA!lF&MZiU z`Bup$=UoNX3kyV;@$=4~ac)?iD$c2{Kz>H< z#;Hn?&4V$08vWW8x%4xcz8XggdM3FDyG-#V6z?m$~8-StMh-RMgk(WhC-l?bt?V z5YW&iMp*KKh4|=s!A!a=&}1cQ@+uO?=OkmBOwqBX=vi*jb?YLL?rNk#smfeLI!;R3 zS;;&E@8&(h&3mWhh1nv@tYj?|W!KoxAlqEE0caKPg!BTD>?mP?ZKRdBuvi5=T}13j zxLn4zDe>Oqdn>MxvD>2FHMvqP zmHunSAW;|*Wj?}o>-^w!X==q9xZFjT-L~(b|#a(dz!Df7fHpg;^rI09c#)hHqG4amK!bQ3c?+8l`$_( z8H+?2n|Al3jQCvr=wlAk4x^8>$~ck%Z}vM)^>H6Q{-5jP;S6WtA){}+X*x2bkA2|H z(o)qo7YP2zY({kB=GE}NK}HIZTTNav7D>r>gfd{G^Igdo2A8(;0=04Le8;WxSjn47 zo*BXAp`Bk+o{Qg`JD4Ks6EK9xcRS~ZNv=p+iuFNOm5lyR-ouY7drL)Y&0x#^h!G*z z8&t*ttw)`zLOzlY6>^6^sEqc8I3B69fX`9jISeHX`IbFIUC)l>vS~S(_pEIdtry~5 zUYLJUV&va28C<*3-x?I**M0Jf@_;NJ-EPEHS+axQMV0mkl`U^aZybWTS29*S;rR~B zs_oI0;sMG?FBHs{CV0lYK)TgYZExeLjC9l~Zpu7&jEhca($ z#K;=suEcRyR$ZNq_h>b5+wT0~Q)-&H%}ShypVhLp;oy`JuA;T1+FqxV3?1P{PZCY4 zidMYQosF9UD@ayTg&R7?*$a&6cAV6@FGKN=m0TBev$||Se)NVshS3Te z-q{NZY{Zm^opKIhvFE^_=fsP#*HyP(QdlIjE%9V(iz@70_-(BZ30nn??*67Yqnnbk zTloSS-gXM!ra1K|bg{GL*sKU_UU)fG=6d|Ghg6DV`!c*tE=%VwJaxJ2*P@Q&7Uwke zofY9@Z}P=fqT|$fUSX+aH!zWHUQ=*Bec`w0wEx7NFNgjA#Dj%-|H8{${N8rysGW0S zv6%WAtF>jD`Y0^|2TY@@?MG+xO$?t=XI_=PTl=}Cy0vB*#$VmqxU{-;!R9akl%A}; z{U#p+0DvaUPK@mmJ5ftRC}geGl8i37k*;~x>1u_TW`&)YMz-n%oT2tAnbvM`vPfa1 zJz1v2iJTJb(NnT*&ZneRCQig+I#3*bGiVEY657#{=bR3%Biv6tw7hN$;3yzZ}4djACao;P1dTna9__p0(?p|!p&`!Ej#92 zgw-rvRyC`WX=_zg;uxKW#QyOOu~0C|wIMV@jL27D=j3kp7v{M_Gh-nys>QfaurA*G zLDn_*SJ)6EF%a-H5vx$O>(F_K0Ccs{#+;Kp`2_P2QymKFT=s#?K@fW7axt~de~(1$ zC+mds_V#rZh39<^z_cV6mNqA|7fwi=`mddO2}XoJ0#6d9Hvg-AXRoqW!OFLZ~uVafJ`P_7ucV?dACM_f*?s zKT_GfzRLgVZS%_I3uQd=R0#5-+I<-MGhBuABl| z)2NXJXjAc&!aDTct(%F8w6FEURcew7D_h=gm=kY)KTE{hxRiK;;NdeyWegsAqTJ;) zb)g+b{sarE68oY8FD7GeeO+Y2G;|wZs=d)L?jb$meLw4(UsPb)Q`9z%9@ezH-7pMG zNXEJ-hJr;~-&X6naG4|>V|eO~C1OR=*|>~&*ufU(_wNxRQvf!33{(pScYmu*!XD1l z4-h|=8E+d-#qpK$kj^l6JFgrq0Vcs@snNNJx}^N#FC<*nSXf~w>M&lgPOVpV*JTD18BG=|Pq(L)sU_K9saf zK^C!>Vr{1?`7;T(1g(jG?nVMI3JLABPUo+&6#uLofUiHqbI)@t?T>KJ#dT|WA-ZG{ zJPjuEP0WHDcUBPeiZ9-UMGrJ0)A=5?Onl2qNF)#m5|OD8BdoUnSl>DUH&~3(kI3vl zQJftsTJf1>ziA>eL&RMclLJCxKf^(ew;2eT4m&z3B%p(rf~Drld}XsVXVXEO4%&1u zabcc-w>Nhdz69~)Gnh#;M3+_(zkoF$jxgUj_X`wAyr60^h1C|YRRA-nm;oo(x#hep zh}4Kg)LI4COPQOW>x=U_Yn>2C?p5ZQiCPb{S~fHc1uO^vETd2mwzlkHguLIO>qctc zcx=SB_`NMs8RV5Ct(6E@CsQp=Jgv6xlPFP*?Nr-OitSa)$XjDsty62o!oPxrG{$t0 zOT_L&kDR;}7)S>>83dm4JYf4xGDnvrl;|vt@VsQ=asmXP?^UiI)JG>&KufYcUb=5e zbZ%e=c|EDh5Hmc?BToDxVun6(#|mZ?;Dj6ET8doa zb_#LCn_h+#=QstMPOFvR4V*fl+9pg;S%9wQsKKs}C&!?i1)|lK$=13cUvwc~2988! zK3V^X53M1Ab1+JIa4==#D>1XAv~ljEqD{p8D8=aLh7@Qo^fMv)AQsTU2x2AfTh7nG zK_xn99kn38;a&;TiLhH9Bt4p!Q%lQ29)w5`Yq9)f-WEN$vQ8QzWHA+8pZ8U@FKHR7 zYjW)^mOTdKYuS2@Q2TQh>AGql7Lhy0GCaVDZ-KygV>Nj?_n_isu(U+Bt|{LcW19$eQwF~kHsDnQ|E$O7~M~O z^6ouM)W>2WO;jlV_ex?BEk&0+gp+2}sOvuYni#c;Y|gzh3rfV^KOUAZ;<-15WEwv| zPFo2$kA)kYv2Ree=OFcp`V)*>W+r2}!1%e|d7kB9%idEYb$XuqcdU_gI^Wm%Sg+%! zy{5XgJl|?1lGR~Z#_CwBlD9XsBcLUi7l0h zIlLTdwf>}#7;waXv%YNJq-gVao-ZRKl6+S^=p>Vl_IbnY%6FT$4Lv5i0a7c6CRayS zSd+?LyW-`p_f)MUe>eGC7s!kxSz9h`JntvHYESLf=X2$`3}0x#s}Q+Ur9cody7YE^ zDo<)&^_CEoe1@gyigSwNtrO~7wl)r{wm+nqWcT;0)~ykISc#pmT=~~(`?IQO`5LRa zJ+~@){2F2IN}N5>w?nHFv+;kh)SR1k3!-eo**}YKsz3~IaopHpPTSv58v^Jbt{hC2 zRXg9+`egl6>Jfr%$ZM^n*z{^Qqwx0XZF+& z$q=;%wGO_!n<&%N4;dJ!DY@((C8OreWb7y8jwjc!OjcF)X7q+R3QR8fC$u-~ z*Eady`lurxcFyk#JTKrL9|$AeUAKx{P084#0W=0$3kE>X`Dz9l;V{{eXt^8GoS? zaX4LHqc|~m4^gmE<7*ZRdX_Iub37i_uHtukjt8STLvtGWG83ENlHPa$eZ-_H^U^XU zVuh@~CSyDHGkt9Q1{oPuf{~=0AG6`N5CnoJV_V58nd~je*gEq)KN)+{d?Wq$=35c# z*XCPsGWJuxVSO!+!85TUaiOuV*=kEAFX;N_i_luK!QP&z#kaa~e`!PqputK7 z)eHzwQlpLcP^4^a!w4Na&!C9-I-j9P(=|uZaLl;lfYtZNv&V9ROC+-oE$y7iNg2CS zgAK1}fH}66^Jb?%2 z8wwsVJRseV?3;;kyD8;Qj5oF$(k5Qz#%k62d9 z6N#SA|3W0GVLE?gYI9h3O{Y_X9MmR7d|CQk4)nGB3DFEZw=0Bbi581o zn1D&^f^uxHS&5k%`pKPKTSgmK+@%j*;(;tAbRCU{1R95^4}{6LH2q7DPt9b74$Ynn z5E@#cp_ffSqJI-S{VRgA?kwd9E!*i_aleqBu2MbcA93O}Jyhy7V(HNFlm`xdsFcvb zOg-W*p~yVVBjsr=-s!x1pGQiM5MCNT((UmyL&uRG9U(MSOK<;D_LyyIb5xPggivh* zw@29v$@FNN*omFfFiyNjmUNaBisjVE$`t&Re#p?u4#sK_GLiF=wAq@qEn5x+#v9`yWiiKppiQDaxMZ8VRrL1xsisk z>*7k3WmgI9_F4G=2+?r?gHvHbR($0ks1tf>NfAWT)v*l?hpJ@exxd>R_Lbi*HzkYw zGW_IM^JiZ)PM3~LWzncge9FeZ6(6D%}YQd$rO z9Yv#-eO5tonYeR)CL=oN^T_I1Mf0N4NW-_Gr(EipXeG|x#X#EecUhFkeq1=@G`=cT z?g=WsEWa@i=Tc$4eX8X=3|z9nFx>5s28mA%=`T@Opk|tc=mojU&-c7Q^-s4)SH(vr z+vQo{WtvE?xBoa_6r?#6$aPUuWN6vXH^l7I^HU{hCF_b;OFTYp_f|Pm>RO^()0p$t zVWBVV;m+?W^Gmi?vzeiFIzYeMUR^2S8|HHSnltb5A*`gt?G06rdx2b;2G%c&udC$T zMKW1q6Y6VkWXs-$O8c#@-wA_4v#aJ~$|H@R`qQiE51S>!^7LJnY&v+>i{lQG5lFUI zUQk#r@#V=nw~}RLrZT{`%&p>U2Nx2rzaSJjJ!4N98ftRc{L4Q!Gx!A8L@VCv9xG|V zGea(sH`71S0v0BsH-1W4mYJ&ru1+kkwg(TQZT`#-3GJKl{HyZ`BQ7{_?OSs!c z*;OcUhbpsPu`;VX(j@x64*e3x#+8JFkjZfyyu z`FFzjvNhEHh>+1yXO~8A{0ja_g}t-FPFDH*ccT-^BLt6@P?OL)*{VG1(4o8A?-Bi9n)f2b*B0hQ`fq~_DBI1BhKSV%)sY+yr3@gg& zk=kT|XNiX$P55j_i-28Lbjb{USoSHkOwCJy*mae7I$05rmN+h_QxMsjMI;a(=~!EVRXUa7Z=Nhx~S^LV~umP5@@q6g;O1=L9@v3Dd>;;Mp6INH)b$Pm%i2l}j{k0uB zlQ$q@;?3`6q48{6%dMLA=jhVEQhT+1Axj36&aGPY4#4qwNdM0)sIdv*((xt<)2bYt z0ktD}S($Q5H;7CU(h17Rj3Ju|!yQot;z*6XNw!PLOpgAT34@l?-=@$2RkEu2gZy}M zU2}I73(YU`X464qdSI)fk zN`Jf3znOgxqYdS1FkwxH{wB?2==IIS)9o+S8FsGCYp9yF2C0;bR7^ZuNF`dK8`x;h z?7flZHq!y8gVi6O)0?pu;=nc8Yn`upMn!LiYj30oTlvMHgesuJNwRa}y{v2Q5{S^Q z6-iXArdD7(hocgN#1v$01F~$fl)fe|tn-%krmtQ(2-xm^*7ZH)!+0r!tg@WbnLIR( zvh3q?`BB3UaS%y}7l~UWPvgZ6d+Vc|GbQhMH?PcL8uO}JbCsxEog5aKrh0lj;rY<+ zC(wZ;&ePc=QHjQwcy4*l@K2M;#2E}eoz6bbvD$*K9Gc|Cqbnk9^deHWDti5N2A}8> znvXO)gPM26qSr4M2we_x-P@K-#_c7G-#ZEBWv@zZi>?@6-@JQR!&g=gqjY`Q`e@7d z6mRL7om<7)5DgvAm-1XzY$Wf9hJ99!@bVt#=8dk%;zG&V-_078mHLPOmO7{cN74j>)VehtVEx9V%@@lpS^7vdkS6ks*sExr5 zthbmpx?eIx=0ulN!o-z1UemX^6?mO8+47=G=1I0ZvUQ!!H}iOp=#okDcn^6z)_=Tb z!}TloG!=GT>^~hBT_VdPE62Ghr}`;-MVFi*DSNpo-}F<4M3>ypg6zs6CMDXk6Je>| zxI8y>3}pw2WE<*b+nh05Zgj~s$(HM7dmv-B(THNSm*qM)3-eCaY$B`8+6|w|`$5qq zw?#x9VEuV+&MMo=Ma$}2vsSBICa!AUH8y%ZfqJ7_RV$2YRh*orTH^!N!V}PLN?n%C z_?ETWd_~*%ZhAeUVSJ!qZzu$yfI;i#D{AJK7}KzCpkxn*OFR}?YMKyLKj3an(nm60*w0I-qtw|3 z+lg@g>?wv@eQ@QQK|!|y#e0cgtlxBSYOT7-G)3y~o-R zp67k6B=|v1-#3(CB>`|J%Br^6;iX}FhFD^xTby5N?e4e{MC8mk68tv(!N~~XD+LT; zx@eMea`8c;_|Wn?bLq68shk;r&?GWNk>nE*&QT_W8YO(zjn zKS}LnTNdIVbT|+5-QGer7W^c@%z7BxQY5O34=fXpS>4eUOSF1My^)P<#HcQ0oid)o z%H!6Ra#*=urp{K&`_UWknqUu3Z=e6w?3p#eZy1hi z7942qX==$EXCX5hW@&IKbrIDZzO;a_@N#!`J#KQ_ zhYZE_Evp*F>biWagswu2b0F5+eTXXpPVDTXJwpUCFQ2u#CcE94`zPTQX*(m@Yf#Bp zfc8DtlY%U7VFB~Q79cECA@tP$R;g5m0uP^5|G|A{nV3eu`VTFc^`DA;{pWk{`oA3s zpaU5ta4*#x36RO)6LFgxm%0*&d>qZIc%9Kfa7&=+M4Lq653MBAi_Y@?M)AqS5 zfxr$wz8IM)8mxoRS#)3=Kz|ceV({*uxw$^st9wPZ9&M2N^HIcy#Uc zndI?4o86oU)b%Tm)n6z@o^4K3-pWvMGZlOCxQ_3=%fsnI9%JdSkq1+(Kpsu}5Q`vM zmRE6CNFJZ0%HuGo^DW{oe4Q+^&qdMd+PsM%XPfZ_l8JS);2j0xiz%tdg2 zL&18;p=bbd=wT0^(O^$|n8SLq(jM4{;d{V;#t|bf9kR`V z85Yu0?7#l z4vHa7m0tw#iV9$CSO7(&rwZU1s*O1FUUCJH{AY>)ESMq!aL}e60w@@m0DAEMvma#Q z|D3%=|7oXR{+|Ginf1Rp;QtW5_s;*#8TdcN<^L^IZ}`s)-_!qv3w(b_#^dt?0l4F_ zD}dkb4hi7p?h~A6juI!`99$77kpu+Muh(SO=f{+}P8&Q2qDs-RN@@$+NrcM18-5@bJ$ zafW!#$u{RUDy=BnzK}(&PN!9V*xNmLF`kvqH(DPlY!a?AJBYT7kZ^;UAxxm}CGYF* zWt}0&>9iZ4C8sPM;%W@#QXa2WiMVp5j5s&C8O9vQF5;<+s(D&Z$yTk2`&depz4Mj! zEp$7&Yhj?F;F^VJAgjZ20Oh%ZnMbnH|P=v@=C!zQ_`SQ<9H zI8B?Nh9bTspNW@!5WS(CDRi~1oiKe5W)9*;l?UvGDJ<1t0nC-?|H2M0-c08SG8mSp zcV2f4-4t}bfqjPP(hr49rm3ehiS{Q|+JRAi2k^Z84wP(2#;znKxjJ6<#{3()Bt~Pr z$7jZgC)nxy4Xf=c`H&L<=IciJ8vHZ+m7CuyuEFO+-9|1F!G!&9QMZLL z)a@ogg61{Fx~o%+g#D_rZ%aJT={sCiGaE#Vm$3;=JCyoRG$y2*oC3bv+v}S-Gdi-d zUi7TCWGk$*>Vx^9Di8cK^$7or+BgTYD5t!EPh(`ao$(Q9yX#Zo1dPxKL#<4|r}=dH zQ=4;L&TK^6Q?mrj;G0mDTY)C&`R{UJ$!@@0Ry**B&Hl?o?9#D@%?qjQh<2G+*3u%o z5L6@YfuQDHSq)LY@i%C^8$VijCOUgKIif2n3TKOH5$ZAuxt^y+lWlf*aym5`i}A?Z z8zv8mRLD9>fBPSDj_sN~{3br3iLTj5T=-j@jNTF^i)KbdTTU0{)~z9a{f|GwH5}w?#~i8=T-dbGXn#sgXci79IP~L>4aesRr=u-QlRd0Fj9OjQl)cZ% z*nF~Ls~QMnhpxdUaq=>1>yhL}00BLft^s{J13gB8MPFvS`l$R8;WU2R)n7xz&X0N_ z!c*zADl!tR4TTu%N!EM{9^{*orgd?96E=BbQ0agE`sV zWv@pQ!>Ol&6Dq%y>g+!h-ot0b#80H6QiwiAiXWrJH&a|VQc84KqjWlajMRN*eZNnt`P2SA#kKqlQ8C`j24BIF1UL*&FE zC(shhHB)NNBZ2*W^m0CXFj-b*FPT z)@(p5jPLCqrsMlnNZ#Okf#UlqXz|Es-o`KK7a@^^T^Naou}^w&qrVFv%ep&&Sf35X|S-w?XM^+ILNSt@7tL-SNR5W@3(9tF$^ z;rYAor!i+VO(~vBe@k6t7q)OPIc3O03V)=qWGm?UI*FnW!O#YZt9=i-O8DSm@c}N1 z&l`z-+nByl2|OQv_n{(7yKJhVtF<1OJMJ(r%B`SNI5LsEWb}fQ3fh-KQ`zc!M+d#H}ogrUhISJ@mFcLqF z%)6UZ(Yl+Beq9~tm#OVqX;ieUYX(W4d8vMd@Um)_^7F9)teQa{UR?yJ}N`L)9 zI8=@fuxDEC1Q9;{tUJsny9MwKhcOF|0XmC=O3JL&}#e3DRuJp#Nd2=K0}%Qb^g=6>*QzbkxJczE}tT*Hc=H+rn7 z%ZPVR&{`_qJuuwEJM~z7yo-BurQqFGo~Gel5sw1qgz#>slg6C=Xv*Ln%<=IKws?3K z@?Bq`u)=L0csK5H;X^v!Eggz|-ihfNl}G^}*Lm$5@7@%SWWu|J(3FCAo5(5t>0xeb zz2F@~83wxj-LSTKc=tclnSyt(ku6|nNY{QzLJHn>B6ILg6ix9CMtXRMei^*8-9`)g z!n==Lyjy#j@Ka~eA-pSPCD}PytuNJ7#THO;=CUzu1t;xsSr$sfzo>8dV{}QUk9m)J znCD?!GIldXDiV`Q2n9qFEE+{TpU_3U0QAH$OUFCfeE6L(pF()oM1uHZ!WhN7NfLdT zR3Xk|M!;LDfG05t{4wK)dB~TJPA=ln{PDD6ag+(H_bwOA@2fxHa<-BFkNM!vs05dVfXWl^`M(0g|Fh5$nW@6ErZ1KzEOu6vUZjS4b1 zokNZQ@MgF}?oen-1H36@jJFN#33vyRkOFuo(L~opjHR-Km5zAqr=H@Dz%ar?)17Z; z>4KLq$Hzy1DAq3-_;K)@9{jkQRb}DFZ{}v?MSq&ARm6>HG+jc2%V=pwiP&tGq@8QA zE|)J~et>vNIFxCCm=1{y5Qq5=@q@0#j`W)AbA;%4E3A&*#+KPs>Z+r`^c7?a_!}A_ zt|K8u8Gnrybj|npTdZFVe=l?SiwT-aze8E&Zh?-_Dcm*q)YCt{?P9~J_&MEiYbzU#8|G|=A6G> zB(?66LfG|su^Qrx*Hb9E;`~8CX)<;NKTRtY{#%mOsnB@!B->eg;`3RQOT*`T$rx{wwR{nH$Rw^LA;l!_pb5oi zS>jJ0uLftt=M$+za~JeIUiFI4m(~m0l{Fqd|5aD1JDpE3p+50>IE|;`^R6#oQU-ip z_PSwK2%iz|A(R(pg@E*GG6u{FIqZ{3NMY6-no>~K?w5M_44XWB4teYal-7KO1I6bv zFBHC{qK`-vK5!sjRdoQBUM$tfCoiPv18_FH|^W^z&;`3X73Ue)l&kvCx_^iF}1D|z|j=|?&{u}swInDHq&&xyjEG;NL zAECuk8JW?azxX>o2zaX`Z|G8Pr}F`J&@+CKN6o45xb~mub!a{A?$^Tlc%JLdmr^bb z9$Uy5ZT`RfH9E9x@3tDkL2hr_PjFvYCDrNnC&lQVEv)mVYUeIPdt4rh}w zU`_}QzePd{b7s(#TA$4Ox`Y{qEhoEd34!6BlqFYT*EdKr{OB34J+n^u;NhPauU*fg zw6hh{{deOR6GTli!QWG_ro}HtkyGGrj@w$F=vPeX0R2vJwe4A+rl8;6JP6nsLOTc2{0vGIuq^4E?iTur6q1z)De?JBTEY_FlY4FSe_!_UC4>JtOe#u^4=-f- zSJeAP?5rogK13s__*(yID!v{|jzHtR`0y5_ZcZ zufqN`fE}ALKD>b{By&L+Vf)6{FV6K@;o<9*y71lUG-D!$6?GZ$^-fw#bvIl8kr`k2 zCue}Kx*kS2;0c}zb3);OTpk6?355e*eIboGUwq=?tMs>AkrrHlEna*WhI!F|-%(h3 z*hhSL$2r1>bbOu7O0aY7437_Ae)|8ka3mAH&VZ(r`0%gEDGE5sZLLpy-TZu5+r0Sj zcd66WHUo)mWDD3C!dJQdli@1B*WZ3D_^M3O_%Mv@5g+~@g;cxxiVt_W@!|W=HvCM* z*L>E$or!9Fsn8JM>!+Iod>tEI@-l{kU|9@%LQO{Tbup9}e7&EC|2e+iM4JJhLik!o z0{F^?Jr7`IVX6;=y~jh?+Xs%Y2hxZ%AWLEW&-SGSMcB7HrC2H(74Kxe|Fvo4N}cb& zC;2nX_cP#Q*ICj=%KF(1R;ookF9k1p;^Q*vPQ}N`+f(szKXUZM$CW%y!^a#R#oGq; z#K)I9(jefo4_$oJ;Wz|&=*yst`1k--C=P`(_v3%Qai-4-45blgfjfCB%n2cxvnkA+kpH=YgcSetjSpOWl>YkbXRyV?$B+Yh zGleBvVITPT%2eS)IzC#gN;~Ib>V^+r9v^=y9La=_$3jyIJ|@U1Tz?-_!h(|WLWPnNN}UURuqpcF?SQ&?-_ zk>8cB;~?H4#EXNdlXVH!wz9oS3%t2L%;J!v_!|<0#fx1QmuvQUJk7x3?mCPpw{fz{ zk4B2s%xHvVfQ`b~B5H{wW0zB07|PzN!@Zi6p}c;~V`#T~y7AF2!?8*XyqD2IM(N<6 zyq}O6j<>ybPOUJ^1KO{+>i8z>uFl72XqCc$IUnlnu9f2u?(W)PU+x6A;IRnMX``TQ z?w{>S&y<#lGq&JvuEl0V*Ve96-2IBbEERJ#ppiPdqOL*AQwuwZydpK-OxrlmHHf!) zstnaF?yP2%@IZ-`vzt0wXXlXFNSnb%-d}43C^P54Mpp1Ng8;jl$fYtoE!7yjwxwLg zwq5%;->Wy>KDrM!2Jp_iMx0kEM96O7v`)A(R`#lCc;`+%2@8)4jEvb=zFYU#e&k$t zigYi$e?ktS?qZ498KF(N??mSCo!MX8zqvA-h*M_nPw_(yDB?H3!$V z!kJVU09?rWib-HRI7yCymV+C~*cWR=a4b8$s^BJX$rEsscU!T^qMDnZ^klMJG2mhz zhJQQN$jOg4=l?*Cs>~JUa@+kM3Y(x(Fny_fx~viLM_VL?JtAddwZ(jout#ITI*Mq= z_>|qs6FHl&x>=mspPL|36oR1NDIUFCi_Mmmz`miFZ6OnsVm80g5vAB1Q2CYKaAP!P zMk*+Z)>!hUBRmQ^IAM^y+EIm7CLx$jh zIsZ{Ew_kAvM6lI0LS^9WWGr7v69(3^0v2ZArTpf`kFT*(;<1QZ+4bsWjdbblBR4Gy zGw>6(ZVLkoV4%LeUfwpv5t0xq@gD%-->vF{l~1w*145izYdlusl_)D2?dDNZSvgb* z$3il*vd%KBM3yN$5PdJ#>wSasS2tAoeB3YK;}om7+&cyrq(p>5;Qm)tsW?`sAeGDdrzpN2_Hv`x zL!hPm%wE)f%wLSGx=uz`-*DC5gnBxjb|p1kJJXBOo6{`j<$mrUT*WI@LF+o#B81t^ zdIHWf2<}T)^swUgYkITwZfC=ZhVQ8uQU(S%r$8DNSo+SfV8GI0<8)}0N1=i0L?PQB zsCGZ)p4A$ONTV(9_I>FsnkPe7yHL#hnXP?iK`}8K z#|vbNrTDQr+-ibp*`nF ztyf>+$ptAmblf#5Jv3ga-kQS2nx=Q^?FA_+VSY+C^<)^w|HS~E`zwWS=P{Z!>n-~; z;#^-Vp4)SOOuL~<@P{kedO4qRX@%6IQ_+zO6YrwoT@R~Fm?<7iA0(nADdQP1x_&Gv zXhea6^y5#sejb$v#|e)UznsCln!;h#PhV z^>tU`UyW!ygx3;NtkBCRjWW1w4DuJU&sFlrpzU_t09U0MS;`bGWH3xSB`MnKum5si zS8ymb9)0X18FTASNa4n7psf4ydbqI<%}LNvxbf;%QhuJojR$dueXqB%%AK7|rjXAC z-nEKHEq$pI?cZ45^hJmR@N6!1xWH(R+;RX``7z1mhm_Fr>AW~HLrLgd1f2nA_7|(x zg>!~Y!CkrKJI()yKDOIExO~R(lG~dZdK0{7SUq;OsP?4{y}?L{Hu#4xy|FUpP7fy_ zDd!GKcl}M3%o`w6Cxs8U$)r#yt!oHohM&T;4y+({$e3 zFAL{8;!Vj^&hJ=>E*+=5E_8Vzsa)$0l!D57}XVj1~40tJ8==y3#6V3lA z{I9K)8QU)2s^h#=ZrIPDcaU%oBtoE*8GD?wwXH`An}i8+U5f7ja)Fatr+0VOUJ$Ey zMJRmAoFwFlIB%8fg%P;|C@=F}uUUXSx9FH9r&9H1GhCj4xfi(RJ%^gDSvTl>N14p~ z64c1!*`3w1cFViQ5_izvvXXWjn8K!GCUQ}{ivf&f9RW|V{CO*=EV(+lj$-pWyc^D} zSxdBf@F||Xu6oukQWsQdeMMeg1Ibbm-J2mz*oL=aqWWu-*cIY87s+F@+$=ETJHAb!Wj0%rw+)ql(CW|z|$d{j* z2R*8XhyWOJ)ztlPUsyf+S+6+!*py!Xg4O1(A9=m*den>`jF++3U%_k$VtRwe0@Ae0 zDTBw6u69Ks*zbC1@Q6OPq_D|UPw&y3W2vUQL_5vx(SD+|!+fGZQe}j=n%0Bv?j0AR zdl?~Qyfph^Dn!U`tZa*jIR0%Z=OLo!|NovvWM^%;sgkL~0FN-rFp?*#aFh0@#|g#< zAJNE|@GgsN-9#ykX>*?-NrAd>xs$5PR-XDibJfLu*;SSfqbyPKbRVwl;x$aFBgUWK z@q3q3H7_fk8D=>js#0fI`v_D-T#I}>KXb*(tlcd@n1%jq`yCZ}xb#Z*8C-6b2lK)g{EdG}XzXyF!4SHSP`y)6 z{Yfc0>lPQlI<0JE#I55vf6j1d&^$Lu9=SA6-9JHR&;5%G5l@&Xl#4=X%nG>g`ZM(v z;((_D(vOaoW_&;z$s%^woyrst=MNPYXWcOR9~>AhI%?z+Y6^w~5j z{;b$k4b62g2zvbfLz(dCTdrm;qNLyRFdlK;XOpSkbz*-_Jqk#BG-d##A4;kK(mT(G zd%IMPB{Luecw~ee2Be2drMKyTbU-IY_D#3SF9%4A;7Zrc+MynRv=6isvk>OZ73O^} z0HlY08&(&rKmq9_3iwP50LdszhpQ|LD5{9G2LZV-B3&Q}!m1}Wi#m0>h%~)Sy4(jM z^@2w&-;#3ac(juxT4%UcnPy_b_H;bj@Eg}&+pRDjt;c0Z!J~^^t*N35J|2nPWbl!0 z<8cZe`S)EKJW{pt0qInszyqY0yU$Cx?=py2F6|UTJDg%5pc@_5$rIs&A}Q{ARUlDK zc6(J~>||N&WL7eAo-_A)p^=O`e=QYcLZ;mQkV);611YRRq~cNbky5#jNAp=U?z+p^ zPBQis4SIO={SH!^CB?_1Q%Mf+UZBT|kXI2YClexl{wvqara(Z@+Z}2y znGh+!BO~N69u-WIo~7f_%`Emh_qi2*IXwChqFns$fk!r!yLhxsm^a5|9`nHhk^*(% zq?O{)<2>y}UF?@#Wub8Q|52IvNI7YU^nxS^A|3pksEUV38&$7+MWkNv=+h&FRq1$i z5lhg{_qD_pnqAxr;pOW-Ej7NUw)A7irCdH${neb?iq>7QPSs(6geTmTBHy#-whw*6H z*QHcC9u13H-itG&+O)lde2M-SZRnrgdchvsWeZ+LVt z9q{o;^kpD;^oiin-2on%vsFGG9VRrS;?dv`9$mUtNbGRN(WfvTjh135cr*w+y3WI+ zmCn?KLLRQspYN3#GPy=Y1IMEb)3vt`l?Hq`n$BW!V3|LqQGp|IzR!IIv4=c`64CdGU4;=dQ&!xY99tb!D0si0G@KeG)YnGO>! zijq&UCp#1NeDuGrL0L2&^ziR$8kw+12AIGfQlW<7XN-0>9e$cw-=)?vkkhs zBu*g9!)Z5O&4+l`9eQ4P$0Wpy7mXn)&=BSo>JI&ir#{d8>6y`w4x=C2env&&3T3B3 z&pJsE=-F?zXom+q?S~0zy+V&W9$%6vUi7zvrD!_-oW<(0^IffV0Qhq-RAumowxr|F zMXuI7Ao)FiC_6L$BzT0#`- zS&H?AJ+ECOya9XaBxgqKk^OB03mEl1Uzx!c#1IO-%6fAUKiQk+J^LI*XTtH5U;i|d zeR}be<0!duEUZ-A7Bn)mTX`LF6OS=aJ?X$bFw~OsP*bUa$ea<20ywUGhf(d|ER&9yznA2PS!XNX_#O&@$b z5^Kre58cS)6g=WS{Lt)7t;h$Y0wKTyq*oM>#)bfC=95BShck>0g#jr`ilqQj+T_e? z6xsl!&O4=sOwLfjKmn<5JnA@5TJpW36ItdC@Tis6Jv>@~7Kia@JZU}s1rLvYODb;- z?}0~hWqT8k!6N}FJcifrpk7&E8k7l-o|aV6x^XlgnCD70v_9}CQ@sAK2c&fMJXWs* zK)RcTJU}|;%@&IWAPyJqo07-I&;`RT$U4-a^iS~6r0cr&;L9k@(mDD`+ zxDYCW93=AY&OR2@QsdW8Qd9wHP#PfJD+!_+pS1~lJwUpvP`ca)AoYSr&lE_xbUgYN zOT^AeTIB%nXc#1A@Q=*fAVPTL#jjf>zvmx`wG0H0`ix)y@W<5X0n*Fzwjh>cg1GhO zl|o>LGY_i|$F1i|u>g>I#I0A(723d~<0NB7Jjxq59_fDEDP}>F{TOUwlf~bP3DSmc zWY+x{h!o*I#tO5uK`l3Br@(n~DLcW$cWyHf^)=U2Sm#1ylyz>&Tqv~c;BDeKojQEu zjD%P&)$%R~*fdwm393eyjLC{bf-Jh# zuZm>%T@Xj|)y%a84rNMFRMC2Ygw;D_4=|Sx|KV1pf&CLHG^ViwQBVYBOdXZPyGrm4zG@gjoiL$kt_ot+k37+Pub1$o z&f<)eXBcJQ9ACOGr++H)vwbR4Nc_4lV^ei~#;QfU&ynJa_W{kM;{AGeyAki}kHGX& zwN-!o_1JGjxz7#0RP*F(+CSNkRUjK#)pM?~*$%f&?SCI5W3&0&+Ya{_3&YNa{Uk|N z>!l^$H7Uk#Hjcj}r={k4yI#GK&f5-`_b8=pN_Q>83MnI}Q$+5eU0TW5|K6+vSFjWA zBl;-%a+;JpO-iboh>oaS_NPEdP3{lWWCbZ6Y354he$}Kxix@TeqNkdSC)rh#;d~9$ z#5)r8lbZr1F-?Y)WP(kq4wQg8lZKEq z+GADPZ&iwWv)dW6x6IFXfkcf)b#(NY#{#iq?@Oa>zm{EmsyhAG{GT2AL5`vr(KGw4L_Cp|^kNE6($LRcKM| ziL<#~dX7#PGU%|K?`%moIQM~kWsA4I8&hSb+9WvhdrdO??PVYQr_mea)!)^~v)tdu zhg=b0!-1C<@BAiUh+|q{nvQepBHT4aN08E1@_EL6b(t|1uhv!%#0Cg54j?W222HUGHn-aq>0wUxxWrvG=~2*PKhoiN>p5=9|+o>=}%0W69Y01U2ev zgB#NE*mx)tXDvXX5x*5`HaZ(6pDY`?gB6+YNw@%nrUg60_mCrQbyDP)Y|(}*-L-9c z)~eYV#``)+Xc+5{iMLX_GncBnkJ4gJ17+%)ONWKr#oJv9swCSU)x3vVNMQJago7YK zthijHZHX1j{f@=voD}=v!~4IBt7I5|&6yeVnc-eCEzEe4Wn<@^d`Z&kO#G_JQrQ&F^QrK84P!@scZVyLcf1 zi(oG2jgPmn_JkK19T^F2y;y{dZXZ5K~HPxS+6 zHrvH(L+bgQilNgvREjST)DsUZivs@m*qG-Yz1g$UDCH@sO4%7w%81aj6_e@yCWV~0 zDtf5o5VzIGB-25vlDdUF8N20wgtNVD5cg-fE_*^O_x%xdID--85jGUL^AU4Bn~o@7 zeEq~&R z8prI-VI*kB4>obLOR4SpIP8~ilqo1CAYz^U0ZcvSc0yU?ZY z%UKg1i|2>OV(pWU6%Syc^umc_zulWdypylxQ_sLxx8K8E2l-!f=8q9E>padq4=6_d z0c){N7UlK)-rV?%bLEZ5kC?+-iOThlGk`Hh@uD@^79ZQWR9v0PHTqbeyw4MR!5S+u zwRGYFP8pNw4jx5URF*QljA)#Xu_eypK*2_Hpl{hc*laIYU$O(YplrdKMW?v@qT2S> z1BwByRKUy910Md zoJ#YlAiKypQL`B(O2+P1^4AL?bx^Q5Ou=8SC(_e4LQQDuW*v%ZHZ$Jxn8VjcLfn>& z#H~|^c_mDokamw{uk9Wr$1n_gL-OwkSFfLBv(?8xGycj5jhD$C8^jXX`FyZ01}H3W{2)Xy@O#>a&0p9_H`mP zbFjgGN6IE@7j$-K-}X>_ou2sixav*HNN$Qkt&*`RQZ?5*m+UCx#*IanNz38)p+L}0 zG!eWvCUn0^9SN}X9QS=FH>mn8U7{b}i>1^vlij}FoT~|^m5|C>X>Q?7RrXr(TkGW5 zy6{A}yi`7$*9fb49ppCt-oh%~Hv$^!z2*8%1Y21bh7QX%&6}49h}5M~b2ykIhtjIf zv7c*^ysNu!bnTAwx1RjQjFvp z!t#TF=a-2507P|pLh`$Z1mt&|3@(J@nAiL5Y~z|m=m`ldCeS|NnS6qPVBsc zDQ1+HYgCNlMqaNsi@Z#aU3-IuPM$JxF~hLYHKYcdbtIA6<)ljFU8Dw7xmuh{>SPr!&;fLl+#`cVk3u6-9kqSGdQ7^ zvCcHQ@JAwkg~rUX((x>?uZM?clGlN(YCA__dIOTzVUXNYUK4oQyS!E{PLbE(u)Kbm zF0V((+?Txk>x!E-WAE}ZH7iSz*Zbt|RbFZL>+etA;MVJqy>4$Z@=CqGxre;GEk?*o zsQtI)l{GArysl)~*trhV8<4yfKypucUB=Vi{uhp#5IMk=BibMFb6g)IFdw7@-3PbX`GAyq&JY2Ovw|_zYe#Y%(p1iKqysNt&^6l&16nUBYJ^Ol{+{nwgF4u(K|D5iB zGJcIAZ^rxewq2|8`jY;OP>j^X{Z#*@?*Yub-&f~jb>if|mz_QzlXbNjcObOOu|E}B zoxZO&aPup1MmfQ*{sogHnNihpzXQ}WcPaHA^B!29*wY!grxs6~-mcTB93C+#!}XB$ z2#nwn!&KUQ{7&Ybde=wdj4Zuvp`Bd#x^*han$67AlCcJ7r#9AA$b$)vXKGO9xt~n?7v6M%1)s zeKPhNzA1$So~N!4Ur)t*#a2V2#;|-6SJTA8U&{ncpstHftL6#6xtgkz$-U0-HU{FSx`hwR?KuQ2b(U8u*Ok#rnLz8L&+sG6 zPII3Z;5$Ve^w*NH!L%SyT);Ys`?Zw$KVPHFTI!UPwnzc|!RalkAF)aYTG`_aizA{kJ1TO;$eRa8@?U^fuXz`u)6@_u{Yl-FZo2dso7$#POIIFUEm%YA_85s<**C_$% zxAFP=gUzN_Z)J!H4wvKXu9B<1{;t>J>=K=|$H9RKtR29CT3x%|%!I?|z-Y^USvg=X z$1zMWo1+d+Souz6sc5w>c8%r@H6`uQG1*q@33*H@wkqDNyh>#64M{|ycQ%^wOD1OV zKZw-p<0IB^by;OgvSFcQZ6XDhv+hb(S8p!YYE7<{{71|| z&TaFl_nh--mAs&fSf4}}>CUlPFboYnz-8Kb{FD+>1K3#d0(hi38s88FsuKg2Fj#Hc z8?E}Wm+_`6`*~dvD9&In1&~kcG;FVrCr)E2#xogS&9$K+E8=5@%RleFAdzK(ZgybE zR8}Tpt8Qb6vmI_J0VQixX*+m?(!Q#z8k-pi8E&8?7b~l=hk&lnkilxvTTIZr14X#s<2mC zW&vSYKHSpwiL3IKShywazt20j^@1!@X@A@bH=_wN5Flbv~Az=CeTUPUoUxLF{!>44ByNoN$W#);`su z&(0>YqQ~~D+Jr`lp{c^|6wgRJ0#C!`;zbiq?Qn)usVI4!UchW_Y2tQ5oE-NWA6Y@; zrn7rb+`5srX7Kve@yry{GO> zGY!A4J3RVtcu%-e5nX{@kQc{u>SZ1Yh`Q8>S_vp=&p=Nf{ny}s&Y1%wBgQJ~h{kC2 zv7TN9@2FRWGi>nx?+2exGwr{k`%wC4!@g}J${B=@%54Oq%X6cTh2@|kNhhP9_Maz| zFY+H?`_lh0|JDAR_FvJ>AOq?DnE!JBb^Rdc%mKD9{U6ep(W}&%D1hTj-hAnY|EHPu zU%{zU)$R*IvA=!WhJ^cX**)Z+PDVfN%UXrVe}L_eqyIx2^9W$~Gyw5?dRjm~?Vo1a ze?>R8^e_MMZA0Du? z|D$*OInA{HN@8I0FK8R>_8*s`HkWZGM8y7?i0H5X8sE=3bAauO{B!=R@;B|j;`vzp z=>Pb(od2@?iT#WG2iX2t`aisJbcRW#C-{E&J=3)Jj_2t0)8G8I;ckEXYBLNu{j~oU zad!G!Kfv}y-h&(SSOEDi+51e>{yVzcWgzxGI4p1I_z&&Fg^2H3ugZ)5+P$S$>^v3 zkBH@q{0G=Rukk6(Z9K%?0GNz*%%XVcWiY{LQGM|Y6)Zx55& za$SD7G>zcAh({A+-=6v!2X7{liKc$&d7f}R{5f-g^o-6RkyNLrpY~>&_TItm8;Cya z-8Rzg|3H0CZC^It1utza(8$ckX_3@dzpp(%FP)OM{D_FvamE$OXCL9h*6&Cs*lbN` zo6|iqr8oM)6r6c@1M_h42bqgXSkASZe)tnNRISxbDgEomx1uX@>!XjqHR{TtR`a~v zNW)j_n|EhjRlxtl8iw%y@a`OwFp7y$FlE)R4`ro_PAPQx$Npc>Y2)_i?LFtO%UKyf zamEjXP{YJ;=)|>pCgJ4`dL^#h)=Vrldh4qCUO3s4o{XWmVTPO=aWB6V`<|Qu`-q(p zPVbw2h1$^`?0df}m3>~kHDo^-={@@@W#1dPg9D`3ux}Lf>gp-`Hsz~KhppD$*%yq@ z7?!LjMGw}{+U{u4$KiFQ4aC|pk5dLt4-+urPz$ERKh~k;VnLsQ<U`xMjc zyZtKDeh2R20QteH6YYO~p3je?Aw{RhkP>D{n3^8(@DONxM9jV?&OJo%AI5xh;DjBm zgk1n(B^xlxK`WbJ4=-Pcp17WU9@CbdoXr|pUF!)WW!DGjv68)L@;aQ>lLx!Tn=*W) z1yo#nNFU$iivEoBZF5Jw6vSjQnzLsow-0#M-(B%-o0d3tW>^7`2@jY^!{ zccca%<8`Hukv%R;YATQZ_50#0R16>B{tZwJ#=gcw>q`90|J1&^F4y)i9eDfuxG?kA zvrz@Z$X@`=lGy+#YtZ`?;>Q6 z8C*K>cE@VFcTI!;Y-WpO9v*x=3E_Rl_AfT=e}H>8zy!pQ6;jgcY5oFYdvrYSN;PnlV9~{`l4o1J4=n z{gDlGlpm)IoF3zTE|>~GbZcW~1@+y}!OH0#{?o6w{d@k?-iF@0ar*|yKjS}bngY{g z_gOMF9Man)+%ho#NkrKb&u+Rz`8ICgbmXfXE1^SiW!(w6gCm2QG9a6Q)PC@EjA{Qi z+{pp*fxsGi^voHw&!$gtJj~GMLTW$l{p@?%->-hz_NGdE;`V23FKjQ&(_gEyH#?vF zNd{e(k~gxEDZ1na%2wOZ`U-mu%x)mrWj4mpa~tlX_FuMxnf)Cj$f~=6c;s#c(i6x> z%N8z+xjOe=pDw#|*s!!RQUGNm*4MW(+H^Y3Ycj8#++$wH#)Z4I;~Tr>rGXFg-PP~F zIS@8>z52SZ)jh^1uYY@{_D{~CW$52GzN`Fx3@>zm{X4-`?}>EI>#Ddvt!zU3+G&1= z>$Jn-25F~#=SJ0l&OM?WH62~g_skvr;LmC|9je+lsyJI9?Fj5WFzI z@7iZ335d4O`_KFS@$w;a_St7&*Is+=wbxpEZC(Gh|9Slm0lBvss)4~B1Z0B_1_h_b zuSer07!H3R_kYOo)Bq$z-yU@+cQV^)%vPAhe-8}7Vx!|HG(p5%L7*b`n^vam?MoS^ zXN0(6EPywu3owv$j8kO>z(hu!8y7`PC6~knh{F7QS$smx%aWW^YE@!hfSu)+C@L%a zx|9m!Yo=@tky&3B7sz*JNK^!0`q(k^X=Sw*h+?=qOJ}EXVvWgMa~xm6FmtHNIh6mK zSs>1uD_wSq!h{U_r$>R-eG*zOOL-D7UlqxU_y$$tkh$E}3X@q_>jQxt(2^zRZ1 z&`uj1=N983B+f3zL&)fQNCO+2nwnueRIIT7r01B}&SF=+P8X$V%ki?6I9l5hRuG#7 zRw+R?B9Y{|t3{gIlw9IlU?#;$gNB_{Hx70ab#dC5ON@9NbDnFoSy#Yuo{}A-*P2Gh z$Uk(GxI56`y!s-6>?DC~vjh+Mmz^Jn?jJD%gy=?~6FCDR$J+9-8#JKLg?-h4&Y1#g zn=UaBVn+qZ6%!{NCFXz{c3*X9wAhjTw^PR6TRv0<)b^!Z8RN_~W6o5cP6tzg~CcrVlp*R`*5P?HDMJwfi?thVwt1fp%vtO-I)j z@evXGEaGv*vAZWNK3m`nCAiKfC^6j;XWfd{i?nGWdWEJ{_pt#xG3 zThuWeE5^(XW3NMuJOwYZGG;x+AlrI7s`)*AE0Y6+Ln+OxqC7zV_xbEte4PH(5rbBl zYf3{&Kd)DNjL7fguy%kMH7NplTI>ntMrYT|38CgxnNtnoo@ z@F#Z6>z#J=^Kd5cm_ejv&-RH`aWy3$(6GmpvdGN9xJaE^<$-@a%2l`MI@A6r!Uycp znNPn{?-dH)Fb18`_Bazk#-%*R3V)ce^di#-J{Q4W{yV~wrH{Zz_^5I4Sra(~KD$}O zRo{y__&92TJ|;gs{2>(ze5wULwWIL)k<*SJ%U1zA1Sw}QYS~xAnQ-j;Widy~N-Yjn zLWqPM5P*MT@TggmzZN*O;3MWg@+0+OX#5IcJjZ%hO{mwz?XsJ@FzShMy{I)tP!E*sr_K zF&a+9>r`1{!PlnF;rLNp0|)}hv2w@!#mNhj@05(J&D?k3{R7H_%t~p!rjrm!p&0Ri z#f_+$uSx+Fm-XGG%j2fwgrw%6#v;nPpRy?CYZN06iZJem5!TSaymc+dBgqd1lXYDz zA30tj#j{DnQdrvSH1flBlu^eTot=r%qTXJHrMt1}QZQ_%IT{}TyICi@tcmiisLPrl z&k0>tkvu1MSw49dcUgtFH|Bm#4R@F;AWaU5)UE zt7a8;!PytkbZy4ENqrh)QL}ADe%or+wTyEhP9PBo8KFU}N}WC_!^1~v%HyPs92svC z60liAaYXIS*QUREeFxlPqwI_m5OJ*5$KC}(+3(u26i|p`Bz=Hnkv>48hj$b)#xP3H zr;ny5UqDFDunoiDedG)p+kc_Jm6dd?^l|b8;$g=ur+9w*EA_C6%4&CE$phrsTW9@W1O@jJfV zVgbBAl$y!?Zi8xu*k~ngY-VfXb?-fpN!&P};H8y`8?VtMG&##p`s6Gh-(~MZFfdTq zLK6pOmAjCXtF$|l0khAA-<>JDnZfoAE|?v7;!6fQH!M3YQ#QR(pDZZBu=)VI4EA|M z^n1;wJQonu>#TDcMMUetxejB#%S!ZCX3GADGFgC{WsRPoUYaefZEbcXTIch34KL3I zI8c>%y;8ly(#(=S{RYeSoP=32*(@L0*80KN0Rn zeZt9GsPYgkrl+Xy@y-p)zirb+dd})e7pm(zTrRDltLfx9wFNNy+#HL>#mtWn)C)G`KHd694<bstiG-OTt= ziTB)bZbk2xk;DVW0QX8V#^QHszDWJEFg=K(4}AwhqT9ELE&?Y%qtP7A69`rgz5GSm z^3a{~A?{Uo63|_e^z^fcmg;21wAL9PW0iLznL9T;2@G6DsISZW-t0V=TE}ijEt@_H zfywHcF8xwOIgb&aeyv+hS21X#W8F5RhpaApSNukF{Lw?$LM8?EHzib(yoSh;<1akReo)(Q4ZUw&`2 zzUNk-l~`AqeueSlsE1(6(EWK zBRe0OY!lvRBR8rmVOzD#$;l;iJ#3f5<(P@Tj704X=CI2XwYSBNG%+=6YHjxH+ZoN@ zX0;ARPuv!1?Yr2X?6>SjKhv6rZ#d-6H)0d$+#?A{a2AB@&e&4#OoK-YsvHZ55& zdR~q`aQ*w_im1%BCOkAEeJYPuZEZ4U?zkapPd!O=Y)$n$_AWkpf!Y3N*Pf=-w_ST! z*81~xbo{NTO>W2*gZQj}ui){A|Bb7!zNEJy&$Tyxgw@;YU$Bp>-1o-w_V!u58~j5% zm@Z_tY|fy~FSnA50#>paLmA75fI|CZ9Q9a+m})=A;*#@scg^1!ssB@KI*SE|Yc0FX z3_?`5Tloisw`u0IpU{!Y^zZva6#-3PTf~NAAU?%+STEJ(abeFb!;jlzkm#}+}mc=-pt*DJ+)nOK1;gpfX`rpxcptPeEK zI%5F!T}W#e0hguDF*440T?GQ~)pDXC&{#7x`=hBwk7^*R9rjc#7~ZMzI(%%8xo>AE zzbDk$=!rq0x9DBs?=1Uy^)N#DLkaWvonp2RDQ^Nko32<%_wYJ*Y=XlgJoLV1ot;kT zb*6KBtS<4IJ60(_MDb&--`bzaq`m4U9>%I3vQ=^*XRADi@QmYXVs-vnuYN6u zfM?eobTkL;+4pid39>!m-AsmMu49ml>MJ9eO!v+%ydngja3^N`E6hwcI@j}Q!235| zWI0fOAW=t8>{9g)D7pHU{H);zGWvJcOo+@gJk;X}P0~+M%ber^zCYl6zem2G&i4WD zN(!Y8SMaP1#OzJl670ytFH{{;AUonjtqZXXi*>zjW(*?Uzg9A6ZF7FqE;)h1%*?io z_bU{oVdVI%(Ts=QnTbpc^kBojMocHvZ{eX<%DfaBA-rUDuzSDlokRZ4o)sm|t~y8- z{4-_-lipfBs3rTdkO?Ga{3%4EOEV#&lK*eMq0tAcRR00NRc{|VBbj-Va%u2aRSzSWiFp&5{CIG*#?!~u z7{kcRn{;x^y|MWJK z1n%ZKhL|0TFx%`xMv;K=zi#NuG(DT&p;8xS35dVwUlP-o=wcw)cgZ zc`h?C=nf^l8wjTHt>*0^pbdUPDeJxZJ$HOU+Dh#qTcG2~)orZ(OVQ#9;fcNEO_625 zdmasu(nHCTvk4k&|1sG}$WcNfjwj+twtlYUv~uU$v5S|HV(Q|>6z|?@_5L|vP26hH ztAIF537pV(eqa1b+xyx%d9K8uZ@{~Y00`_#dS4=B4)+COwTZ#NfVYQN_QQO5nh+bn z{H>uAcZTYB#^D4gsbY7-?s!R}M#CZ~Okhm2CCOgiy^$C|5YzMjYoc1=&6w{kA+ z|5{I9;-uf0;GtgseDkc-&ntrOfs5_0_fVs~YYnb7U8<)_??ycKrsq#tBTZE6;aXtD zQcZiz)muG8RN`1sUNdDsK39nGcNNL3)Yo?Mkwt~gH~ul@3+UZoC9bcioTI(FT1e|C4)_fVk4x5=0LMH} z`nALf)-iKx9f)7@Ne%Hrt)_YY6zKmGK?vqX+AKqkB+~l;<0h@<a-h1Sc z^p0F8Z_=Hl_kFSsc()THwGMcnBP5+4@cu3vavV3`)I)(Kn6w9XdKk(IQ56|I+kR%ZKok-Xd9@5v+S^^<(SJA6T|Z+i$ieS0?>$~9N|wwE}z zeAR3-I4WLp_0_ca5*b9@Hd(v0+&Ks{!M!jwGICFfY(bQe>=ET$Z>H>di3g3(%AqmF zW3rKK9z)>)L6{be!1x1@Vl!o5)Wuz+naW_62h)z;oZ4>DpMNE_)i}eCR(Yv2rMk0 zQJSX~>&fix;G-qF_3ZZ3N_>X1J1OrSI^God#%FX8Oz0ht_fFYmhb{YPr|jmBDBBt< z`?QZKd(BmcYxk3SwvTR>Y2Q~!2V00>#5Z&rHIMNp0lqGluQtrOo5hYKY63}y``odT zQSHSwdu3(TOWvr!g=uODzysFXf9UG@1g=dyBk>14Q_(-rWJKhHy>TZ`Jf#YiJz*DE&lUYR0N!3){=o znjuY~>z1`|E3coBS11-DvxrXg`K6`9!jnJIqYj9mFkns(sUqw+_1~fzRor)EgL1-hFFOfa0VHN-7-S>>d|yC z^XIWOL46g!wjBJNpDwcMj)~FL%gDMtzBe^fpJljO9JmfYXSL>8`MrtTJ+3>Bind3rIS#Eu5U~4}&cMJI`j^QkVJa`zbop8?N7YYdT$I z@;#lOoaq-ra}rJUIZeI)kfyFP?dJD)yk;inVz!4sAX?Wwn)+~8Do=7+ag0AdEAj? zQACsV?0$+u7Wu)Ea-4A>XUVyD`@NN%*JGTrXeZk$f?I1cj;FERMrE9aZdzchi0=;D zBQ?XS8kQntPh=4dcWy8`U}TX`ls)}>#DsQZd8mHmjxwuP1qiGt?#y6wXd2-WDb1ei zGc!G7kT1;+YN-q=kk?~sCFlB*jphGQs;U1bRk9I^InyIW+7sk>OmcQbxW3ouoC_h7 zj%E6FzwoHGI~m_8Qj@uG9fm)=RU|Ggh+*(v6hP>L;AMF=7aFfPR}K_3OXwnhRuH3k zMR@L;D_(`+-VHb)`~#=Zr5c1=VIykKTLL}3lcG5^8%4k&qi6UnzftPuIB&oxjre)3 zHcHI^??K+>b2INj-dlKYHvC;}luT3$QOw1*mCoxTqckaBtYo{yP|^J-%3Ju$tSp!E z{GQbszAl;!|1xTaZ{htX#;WiNo&yovDsQrbfk^(vzNY+{KGNMt{68Z0%%HH%^m!&% zkTiXr>0>3Eo`^8dlk=X5*hf&>OO9TgWC3d+yhVs@rtJ5yyLh8BteWT40Z#M4Oz);m z04QpkevsswI}c={Nz*4H&(RsvaS$Fvt9n59_nSzyLzzjl{69@N_1`4ip%S%?5; z>ksav=w_d~D^~}uEY%mX1*?S;urJkase@5_mQMu5E{J=+)neJR{2|+?<%UGdZdx{b zY^MdMwm8DNtvyR-9B~X81H)5<>hbkw8{S=A;v-i)k zD1|0+6~G2GL_2mbFpbZz+iNTul-&X^F>HhuZR6*bjq=6;&h+2{mjQCDYr@pA*AnT|GeR9?kf#mj`D5j> zt|f+$tFvUyhk*&QC0|+z<)FXxk3IIcKEa#rEr?(Y=lkMb7`V9i8CUR|?zOTn6lrZ` z6gtY*64}Ta;gE!nVn+@9Q1RyD=kO$TmjtCnj**lP0p3`Q$BRteTleRH!SM*9R%+^7XxA+>(dt&(*hJWz^0yp19aY zqKhX)lbD8DB(x^<*%Ku9@h)5E_vq{%(#!i3GkM3xGU(~cy-WUrY$W*$@FfaIq>C-4 zSf|wDY<;UP_7R5_##sH?s{5op)|_XxNOq6M4_(c zNqvUjQyR@jmf!0~%4WolG%5$J#H)KGUPl_G6QfnVO$=x6P@&Nwk|g64b5FFs#5^I- zb=%QH>xdbHKi_s6r$lsq#;MeAwfE}5JjHAyex>0Ll`@FY(nlki4J3Y$$VVlzMaucNOifI;h=bXR9a0_3&kU z`@d`aVq~aRcqQ?7htY)eZ4Z;zFMSy9HN?V{0T7t;jp|ET+IyR-`m#WeEi_JXr%M=8 z@&gRNaY~UcL)y99Y9GqNcM*VVkq^!CA?U!jnaH3-R!d}n?A62sB*t&}i%a9bkP@@t z%>ne7apPIaPHc#zo>Bql9t}>+gZ!8bl}=<53Lu%@2mc$(e%UF$Wqxe1S{h&&eC10m0Sv(d{ zj-hO92B`YL@kn^@X(211ln#$!<%7Itaj}QsR{nM`;Ac<#1%XNqBu8fH7uDoY>z^7H z1yG@odmKKw!GY28HKI7>Ys{d0jc^qIB6uM+q`w3Dj`jx)A@pn2W}#ml?ak0HG}9mr zz%wCZE3M?5x07@BFG$Y$pleR1Pu~BTobx{NgE{*og6BKQIqykO;|uS5lXKoB{QuQ^-{y7}>EHLdQmeKhK#yM+)c}GQUeT|XmX6>*KSos+{^qwbLzsI=y zXQbi9CohTb@{+jYJ-^H7_^J~ucE^t9bFtoKMDpGoKrKKe7^k+PE z5e3JNL+JBsLMn5l7U52ER#!2+|1QyX^gX|+^$n4HE;)Kpjhp}-uxG)>thXEdILCCVzYap<+VCF?O8m!u4Bkea^HugzLA(FOW2pQA~z-MHoYyQ`6H@7r7sE zo5@*LNb=Foru=8k43dC}cCB9)w=MIIXi5J2bKoF@5bP} zid2%kR^mige&`bb}>1y7{f@N+%ie!M=gUrR=2;lHf*oPrAe| z*+g1;cDB?+NB&6cY;>}%T&ovDMVFH7d>J(1tdl?941edUBX(z zApC<5)IDjy`xp^YA68X`%0~yY)_=MjyW|qd3%H9_1z8d$Gk7Ph2HA7$*Yk$RLOaAh zXH;esWlxk?=4TosC)#dw{G24w)(BhsbDka)`Oob>u1U+^0^AS}u^}%?99Die7`CrM z$d+dQ#co2(z#ho|F{w@4MB10X2XRdPIxBy`s^58Qm83_U^br-9_8g>cnT_H4zFU7J zM8jjROXsr*60m|dV)23G4Vww}Dj%M+IpU2GQr0jiY7f<9%(|t%n9w?-SXmiQQdNn zk&5Uy&mBc}W3iP_QG13PJ#DeG%;5rm>{QG4-Xd}&nh#06T<}7y7Q~oAEDkzOmOzqR zgXtFX`C`XL>?WCS&Sl{`jZdeUl)jK6-LZ=!_B;~M)PKq7N+GWkXllI(dEsU?1v54? zao1#@(fNpcue-qLct`^Fq)6%tpE?a6BUCu_CF0DwyUJrmr1jI~>TayWF#XHN=9D{b zU!ei9E(6kpZR%fX}tTzym z#2PR-iQj0YuB2m^RH`C6#`&GP>&ls13*Vv#t=G|fY}gqI7JeqS7+|QR+=a@?l5Do^ z{}`9;%&}}^8KPuZIgTpO!=Mm8gvaW^>#}`t=BwDZ;YoiS7t#{t7MmX306O&NXvzZr z;Y-$Y+d;&BPCd!UM(ukmwvvR_%Vl(fk{WP}8H=_Ue_ri^pjf2Z$tMIKcAZ-MrgZQU zHZ++0cT_ye2NWLN_f}|qtNmgZ`hCjR=K^I-)EBg|ELO|W0f$*o&%7q3ey8F=$t*Wb z$ojf%*QJ!-Nan;+ z49ptTPYFlurM2oo0?yqSR-&cWrGAK>5LUZPZnEw|rN{2pO1DeB=UcqZbdkUgNPm@>%f zA4c90?pk0h-sxLl+|^Sb?lBU@WRBW*KFnyGwC(_=iYvJ}rHw)svj3Y^zQ7`(Q5x>5 zA27a*nWak<7L3A|QMQ9q7h!BYuPfVns`9Co6KG7B!zX_YarWbS3c6V+@dpe6EvPm8 zO%}xs;srN6AMYe#Wt2AURG$+WxIG)uWe=LaIZ%yt!X7VDb8;Vu4A~7Rnlg8tuj+}7 z+Ktt6Vg~KmBCFLG&3~0%vxRy=orCoSLNE&BlgG?#A=8RYA?_8qo+JVFMhO_0c~-YC zRDXTN&9P4pwJ=kYH!(I?%8bW^5%RdH8^j<8xePxjt+E_o6AEHG( zgpu-wE&#yGtZ}RRnKi(-4fw9_5xw1&{|?V1$t#gq&l)GOKJ0YJCL1TQK5Q~d3W#b) zlG_u^soNN!|BX$E;Hpr*wm0 z+imBzJta_LR*Bu80|||4*H>U0yq?~}?7t*JMw8QR4rF;$x90KD;}K zYJXO!(-mY*9sfXvotEzLQ)FhMmGy>5i zb9beVUwf5svWL*an=1w(hP4`Tz0JrS9b#D7UdJ?SWBp=aSJPIup3uh!39$*$Xc(ni zOO1{=b4B(2Gm{C~KN9*KvY&cbQYDu9U9nGz@zV*V!jbM&50J>Jo9~Z>+Aq+$>4x?T zw66MWjjvivO_6M%LV&7P%nSu`f|3sMs0Zmj6Q@(ml0+0v*I_1qr+$uUV&YEV|HVSS z=nPCjl5Eky4%?XGG_6#1f6+63rOf!YaWnp5Bk@ZBfQD-&B8Zx&WyW_&_ZITk!jun= zPWd)d=KMdTgN~BY`10>HOlHZXZ_767QJM7LX2vl)dZ_wQ6l1GZH&h@OVPEUS-9}s@ z?dETbcT?V-SH)Ql^gKHsAbSq5W+@IezJI__<&l zcUMg9aZqHg&8Nc6Je%3(F-Mt@Z33O3yy@wg)fMoX1@V5YaibK(QNNN?o|3uQJZ^3l zW!Iph@oP{7@ren`Fs4oVxMbtz=3$djQg&`O>$z#k+-#A#8I-x%Qs4BjarZ*aNx-Z! zV|Hu-M(xiE3Li9M)W$2ct|zw#In+MA=4EY~>s?byswp` zHacD=5{A;ST9H!F34t~4G;OA4Fd^i+-&j|cxv1!QyP;PP6 z0Guz0H2~p*vH*1A4gsJK09G9)vBdpv064<|U;(Z1#ZJ}`l(0K?tOlWkJuyRI=1PYvf?oym6DeE<3sF#!qhHQ+_Jh9gg1U{EkyOUw|tb9T!*HT52-kx2V{)uzuRxIy#;PPc?Gku`>tR(vU-%ARse^(tg z8gXD4G&+94_bk`@-#|M5)*IWG2TlOcw|yFOmFl`hzSum~%d!;Zln4=4s|DA!EfzFZ zIs2Tb{XA3)E&#h7XMZGYgjnK4>~+M*HilxHjJ$h*EcCY8*n|Pqp9yywCS{Be{xghK?i@-V{;&kj_i!P!>;V< zGLgWs)iI~?SAmjYtPk=KAnHLf=YUvfI%A^s*Q4@C$M$u~8Hck^Jy!OsDQ^@xjCB~h+K`UdcD1MIAb^v?p~Jb2 ztk4e4W7+$&TZ%wv`VT8)0gFx-W{IC*sH>$dG`*#Rzb^jnc__p77z?jfjm&$X(^ zc?$@Vfm2JGt>mw>yYK6Q*cWKty*X;H07GY4l4=owg%Vh5&sxfz=Zb3WS+#_A%V@%- zh9^S99+hq)@KZn00SpNrkbvC`skn^I*uDC?diClbW$q{`&x+RFI6pRJphNeBdFWC% z=`7YFnJ__fwQT3~9+JtbuAU^d?UbCA7N(kaB1yjHSx(u#?3m*S(FO5ek``U3)528h zTNTrHU}qT66-=OlL`%@6+yt18(wU^SR0J5p(I>IdmJPn?CgT& zcC*L!rAwlzOL)Dg+`htNPvV@m*9{+hz1Snr1`#GX70Xe43$2GbnO=uG{~AB5{Q|90 z`DEfQcGMO2MWcK5CFn*G2W_N6Mh>Xl_G1wN>g2;#c4|`RhR&6-|e(roy%)h zxFB<`{aL{kSR*YHxw=n1-XzkVnx1HC+N@t4$T0i0@wbW20E=IT0ASAQ3w6WOHoHSz z9MBbmAvsoe^4N@3O+_c?z+PT)$R>@Z&#txWOJz|s$Zs3KW&a8}= z4CD(QJ1J|Nl&6|@gp`Ac{dr3Qk;JlUSA2?^&c0zF7?i|%g>dp|sV73f?0Hki&dRh$ zn(SWH%I@FZiOj&K{)*{#a_Lf#No$G7AUAN1(j$kP5%Plx=xT&&J~n82AL*=NVf$5m zJQlecX7<@L3N2c+7UI=XH~)T=2rSe-EjFn&v=?)!6_yLZ+V#|*(1NuE?C(%@Cf*dm zT2nR}!P-oM_M)Zge4bg{SEm!s1gjIvaVHukP+Kpht#uNA0$_U znmtN?tmOR_vinW@6F<}uP#h=5O65`r-9$>rc4{mJDvD*ZSYr`_)`+c9b=ZEEr60m4 zC99n*iz~NVixmXL+KC-9rK%l(M7FuS zqQW!$i~UCFuPfTfZB)`WOjJ869^@^XWs`bHVA#lRVvm!JR?-7n8A3WnCnT|Hzo1zn zq^D{?W}dfj_}v-t~6phL8~+l;I3w*BiSlbx|G~(Ud9YDQ`PE z(z?OQztm^07Howkt4n+U^*kY^Etc&EQ{yFc{a$L0+8%#;Vkq~Pzb=<|jpSA9$tV=` zGdmIamkU8%2#i8P*IAg58VcRDhJL^XQJuyPAZzb_0zqx>?(kr;Z~QhV%8kljJF8av zvx2_k_K$tawzN=uly}b>rj3(|L*5aJ3~7bPZ^<4$3w>YRS;m*X%!_*DC0Q%BM(l8P zw6&!;l6ck=&HuBye=Hhi5&7NO6T+RtcU^9^a(>6tCIc~F-9n;>eJu;}NTk(MVdak~ zOXmZtMCZ}kgiX0;rOXw4kxW5b#5|p3W;RPL6u083biVn7TdtCJ8TWoc`VMk5o88)a z9FRN5+5@8{){^wN2#bO3d0Ec<}R8L7bE{b zhsXl;OBq@i69UNiVNBo=hEs`vy;HjD)TPG*OGrNIV#O^_%$zWrR5aFCh)c!*x zd3AYHa&`bZ;6GTG0@j$m;8|~k&l-*-8+|ogg8FJ04oED!7tz@Rb#-?&hV53rS^s_< z?cAQ=Z`@}62k`>An0l2v*zrcp8}1m6A0rc*q1>dlf$W)q`uaNy^@K`uXY}VXd;f!!C}X-U(S3uJXveg3 zl_-+irg|hq_oOH?T8HKFJqbb)98pAoNYxx)q-vd2zxB>@48I$DAubNql6H}xN9(uV z#$hLpP)ScJ)dVfnft$mar*4*S$zRjw8GiI-yAH`0sSEmUn>sGzHdJZyT8X2Dx=YB2 zXd|br4GLO`ID;eST6c|R88!Hy5b>{lkR$!df({FZmGSN+POH0%=s`~1o!uwd(_Y|f zdK!%T4+v0Es`%Ud;YF_TJ+%KNzabXOgIBZ;+_8v|*)(R~BnzKUmWA>VQ`{dJ=#?ct z?UPibTM0_(K+b+q-dRdhC<&N9lY(>+OM(+`utvS~BxQxL>Mj4R1^oJME7bn&o-(MdZNDYZ1F66Kus^G_g4osqZ&BUXyY~&iWSuO`Le>*h;{T zGpyg)S4m2-q?m{=4Wsj$d`REaWdC;G{4Oy^K$`=b4vo%~<-aRPCe|qNEAaQsTVmwO z_-Ub3BYrlw(5LO3j#6KP>;V3w7#5v7Q?_aUXujj*{`1s~?>~$j@}3T->co0ar2h4x zg_@@I@ij62D@EZ;4kKVM^&v^t;dUvJFC5GojNEgt?reHO(>=e|A@D(Hqa3T5FUZnz z5dLTRGiE0O(OOzuvjOJeWI5QCDyx(p$k}%(U0i5LRyoZ34{#zEuA(K3rL#BG#T1cE zt8*#oU$Vzbl@0SyVM?M5$|}xfeqdZd@6wHf%GpMyH7w>X%6ZBu=V>YD1Lngaa+jqzbdzLD@PfBG{NU1BNxL@e$wSzIEWj_2(Q&yT&dHPuBTAVk*?;5am)N&3#~fx%=2#GN&fZzwjSrB_R`rN>1u`glEY_MMOznJE-5{|E zeR55T{7=d|%PH^bgL7*8n$h|XsU;)F>Bnjj``d%li?#uY3(PP}h&1|n$pK9Z((<=; z*lBsT*}oVqkgcpANXmgZ|Ip&lI9$Wf3r?&=Oy_+#E{RWFkes5*PItMUJc{(may4`+ z*|G;M5XWFT+GsrC5udK^rc@+v0mEHj;U*=nC?o!&WdGf1WIuuI>1Tk}7!F}uCun5v zLggPnm3rl8JB;~{Bty2oWz-jv(PmIhTYE>kuCEDNvP%fc3t}xWQ5sr+DR*fa)5HA> zLUpB_=}7c)x`lS^k#-a;2q%wB|2TpmFg}$wb1gA#M!uA7^0_+cQ2KN!FThtsXbS9#nc^-;9Z`57=p7i>_;=)13- zZdycT<%AlSie*d-Wr&XLnxZz+om|%*_~eIBsoUc-yWEjXZ$}P|UYFt9Mb4FyQ)AJy zIXUFZAfSNa;3{q$SB0Ec%wcQo6v%w0SC8~NQmWVNnv&is*g&;iZoZAy`i6Y(=ewFR zTJ58T9$^`r2f3qqNz{0wa9^0(cNbb-hgZ$c4caR zfy?aXf02gS2D8f-$@H-H-a6#0PcU7hJTmN;a5RpiTs=P3A^a=R%_-^}DLadAMY?QK zR$t9D>xuo@ScL+O7O*dK<4$c!u`0+lCB4N=nFn;M>id?g#_*;^>|`bHknoqnJJn*8 z$4zYU0^AekJ?cj898h z@3_UwTtWI0^%R6c$zY=+TViL`khVG7H(|j1^Tf1i^!REsGE}Vz+;7@{5ES$a zf{R_}&)IM?Bc?l$eYp~687={>dh}#kkQmGiiFviSwn{baR_|%{HO#)TxPAW+Y+L;J zXsQWO`VE)?vbUSZsW=Ij!jTX>Nyg~-D+NaD9<1d(egjgIN^$!@AOR(U2a zNEU`_D<&Ep#S#f)oEXT1@w)XdLoCAVmBVy#QzitPUx|kutp!NUouKwzKGY| z!^*7MldWv?=t-&oJyxB$8snwvF~Bq60<#2qC#Nrmc}ia@?acKPR*8mZ`siADd|$do zN~if+alcl$Z|x#gojF=&iMn>Q%rslyt1_Y58%AQB9Bel$)Z z%n7JsI2W;5Ym?^I_eYIc{hZZcHmtbqWc5pQb$S-2#U3&KYxO`bf+>G1_RB*$8wEKM z>MiOjVX{!0#gE97 zwPq;|AP3c_;g_21eS%?i0+)&zp|0yIE)-rhAUJ{b!}W4F{_lD53G$^@hRuuRL@j&; zbWT1mqB(;!M@npwSc|#cC4fO_**Rb8N`~8rTNz5;@C|CY;X(c$4Rzh{>uB;va@h`# z9{mvOQgCurT6BzKgPv&n2BPruhZPgFND?49aTFF9k z+llF0WMFR)yf_+X;@(i#C(;m2CtYkosH+0eK}u>T``?yz-cF5Bj%g-&WL@t z#^LXaQ=|N^a5olBAZ$~*m=d`{EWlDY99$@6I+QiX@e$G$m)EqL``MB0S@n(iQ|#wVaZ&bZerAX$>awv?h|d z*h;SpSIu-<6Hd--j$~$P-y~SL8((VIi1rao5%Z5*`9j@$vHq%IV^V;Nh~A;%;a=P) zife9tXDg2Fk1~y?H>*c4m(>P`k(qouKV6WRm|=Q45d-xf+|hIB@Qi0@Xvcp9ji>5ortyS*H17tZITIo`v80d@=l6Za`>Uc_-sCg_)k z?F)9{6@_(7-S!8)Q3*bYgCK)COpC z{fIcNWJ*>qO{7E`-z+~1xy|sItdHyz5=1gz5yL&4ZzHd6r_<8A~ zQ^OCxqWN}78-H8WjhPMI?uP2vKJ)xu906x6BfJeZ*vhPf`|Zk;RO80x=8AC_&|C%h zz{dTuRVr2&94|wFGI*BXt`c!#kn>4T0|jC)Ete%Mh>wuXq0~i1YTboUH#zq(%P;e- zNVz35ITN)faMTDI8no(Xl_OQd;53~dJZm^n?}F)lBbJw}5~Q&-g}E7-5p+f01(V$i zfD*v4|2APs%Tc!|#)kPMvn#@i?$+760C+x`yPCh?Qw9Pb{xQ`u}O(x@VjA z+*4EL?uJh-DK&nfEaT~3HUpKrk*Fi3-;nZbv&gH^A^xU)4gX5DXXP?bhq$n}F z+OuyLFRU0>bT^s}fmmh3iLv7vs$!EHPK!-wsE*GfjW2CV%5*)y?({kQ2GVEno0mQ% z(RwzZtLCqPQ*A+4a(Qik|mUsKQW}6)wjLvUJ1aLlhNIGLg z+l`e&(|9_3l7knT+0e)VX0ZA}Kk6P6^uWweMy&1&a2CJqdV`BkP} zkNTQ}N4;yBoBR8klZ#Is;<6n*=5>oJjeD=)<>QCk-pr8a587Zs@hQDSp5*LP6Z;u- z@iia^fZmZI9%9gcmkWrnnV8s(^7ASAsgxfyD-3#-)DEcnWYEQ=PhOs;YeSFoa`2#^ z0a+dTwxl`SpjRgs*ABJkGC5Ugf36R9dA-Qs2oyuHRw1t)Zfnzb=~4qV+D!jrxwPm4nOKbAF^{g zt9U?cslIp2=%B`?$kb22l$EO>Hru6MaHd#-q3$}X=kbvn{nVka9s!c16z?Ra?+xJB$XCoTRnF!FF-GSm|Uy=bY~Wto_o zI8D6`=w$&pdwf%!yA!%iv*Dunlwmg~>|~A)n5VLFU?Sn3`dO${!zJ;P^+&OfKuK>mI$!16fZ0&MW9UUEEbRQy1}7|y8G4Ez08`#pdo#C0v314K&}x9?!rT~s z#FaD~hQ7&@a#$5yLn(fo^b5z*(?VDJMJ=LFZzg4lye}XiT}oeT*>lRf^BQX6N4MSX zJ}b_GGBb~l6Qn4rOE)x}t3RDR`e|bB)AUp4Hw2a(%L>?It#$kF)^=cc3SPIkkP<}r zFnWwt1B5H5vGW?%v=h*FXG9 z+>o5QiC$Ws&JUl})7@)+vj5>%jQe}Sw8Fz;acqC6p}9JE{_||Q&fgr*4|e}6*cEG- zBN9pbrn9SVYOZ=~cwKS4ESj2)EONb-(ksN{0rddpDbdugga}6D9;(Ha&gy1%Y>7>h z7}-3=J?;zAQ>_$sN%m%r=V^J9F!Ie}t9>6-hLdmt%6#cXdGAmj+2c;)^^aFeqI0Q7 z)KHt$vw$^mf$NTA$>XGq*_LzaF9UKu2&8#LaX%W5U1@@eV#A|u6fT${uPP|qWJAxIvB<6<< zp4$5GTgKPcr3)T+bKA}KD0cdy&&eiQW4XJtc^^(o^Hdv@J7ljQKcew#=LrFNV%B z{*DQ$m0C96do8b4>sFEX4r5A=@rT|m#iv_|Cq=yFLN#Y|I}co4R+Qxx+q`5WO!7TG z60ilgj1Ys-h)yfJ3xvCryqt#(j&L4UgwX7uz1UkxLH9WYy(V!*(Ud)3BzMO|ZCl67 ziF;jDWZO_Qe?w%Of+zGDPYXXNJ9}h7JZtU7S{~I%POwE6c`o9U0QPih5TyeLIUtA+ zyJPXha=feDA|-Hq#ERPDxD3xvU-8pzv#r5@L##A{C@9k_@iT`#K~H=ymTEnr?#X_$ z?cJquPpI3>i`eZWG7_mdc@im74kT0EZuscTy6!x)dr(;F%(_swI7@jGcKp;?(B-3Z z?TBN!f_RA*s7^UCPXMvWX=uJ?R|lya--$$=8fiFbNx8LlI#tP^W@>zFYxngxnv2C7 z301T;l;SQXITu`zt%?vm$FZHWKM;I~G$e-dVpC;zH!ZQhD25yX%$p~z(wL|3SYkzJ z%#PQ6GFE^nAbPT52Lsrv&reSn9SMbRIBUd8&2CorpQ$xWr?bs=r-6Or{HWa~hyeaa zjZjav(Ak0RIU{D5f1t4$Py@Qz^QFaKaZqMED6@^zC7_IO@mX={DWa zb)nkMVw7d>e!^myaOzgh8Kesd{D`zPqE{7C%e2JuW|tUY&9>U=s;M+H+me@lcXg&Qi*-R+ zbcsdYDFY~~25sAu9Y=gD4!a;fKfhAM&KCvnIu1zVifv`nwQfjJgEokSgq9OA~6QbkOUKCu)Jx^RB#8+ z(Ofic{2t3MCmO8!-^V*S)QPE4LAuPIRmo$L@x-jk1q8g^msWO7>Yo*qi_(}})#G*0 z+4+^w6d%d433fJeoNWYjvqnT&vcjGV}GXULkK`?_uHt2zbypQIj#aruz=!uVTFA2Di}-m|m;2OkOWoNa266H7kXO zl(#Lr+{N@ZI{uH0yV)#C44a^3f5EEJqRXdwgYux-zP#dWWWeGT6$>%bSr=2c<*9J7WyXj$PSBKAgIv}RV-n@|DFaF;j7 z?KJX6WB_J}W<^t9aadmpj8w97WxR93okI#`AL|s#(gfd3d4fpjFGV+({;E)ZA=%6u zQPnzh`@=Bm-tr+B#Xhg$bJvYI*u?Joc(}Y-rQvesC|pjKrU^u{jJYHJ5xA<$fU?u? zN75(jeoqIrn=vwhy_jq1UbpuO3>-L}K>Bh0I`Z)S5}j0s$O%5uPzQy5q;&+93d$+w z(?Q}Z(_NPin~9=K`a(;*659Jj^-@1z88i3bkVbtT<%VoM+^}{0E@CJP+Lj{t^0?~} z1J>{3vZaZcbe_8=JCR3KiQ{!uhih8Swg8?^TS@Pav??6`NMr5eMOiUXeFe4*Wkn>( zJwzv>r?B$hOfRMZ-A9dK#sq1X)~a2K$S-0arLL~i!mc>8s8IA4J{6%H3Q5#{GG0&e z!(~2#oNLf`xYSf9d(4w5#5mf37wEU@{}u1jFQVY^aUd<0A4;AmJr0he(DY+|j!c_a z28a)dQP1z;YLwonNSn%|$uP(<4_P$xiLN7=2M+Tr6Df-|<60vU!7K z-HDCNAn)wnw|y*P=84q$+zxB5wMGl|rt^`fD+lHQBuZ39wT zt8Ur_gyUy8$!46wi!jnBl{hMgHuJ*n1I2>|GfY0iCQzZ7JBMI|#&Z?0dE9=tduy&QKgi9nmbkB*} z{&kEd=5)D!v6scXgy9A@3pdgX$Gn6g=e(P}m)j|DXXjOK-|yUM#VIxCA}KW&Qo){& zyHm2aT+Jjx)VhlVr!4sZUV_gER=9VUKHw-tBma?P7sMj$9g6keqg~w4EJ)XgB10wj9@R`!(7Hz4gK?m#rO?)3lo~MpMExhdO_V-YTXIVtlhWQ6N(FuO6Jk}F9?s7vMoznR zZ_0clF;cpuV6_Oe``UX$6tx;*G0qexVK~~;XWF4&kIWy<3u`tQxA#w?6cn0|b4~AC zfCC%2L{CMsRy`yiQqx`{PT-4a-24C(WC_J4ne5{XuB3lz@wjq+GFpx_AIn0%&mH$Y zk^3HSz9TpA9X#HFh#XrIAMHYRr^zIlxf?T-NPW*@Lp?$p9BUuElbB-KG(o+`QpA}y zR6VHrfB8po@ni2$(}NO=aX05ctorvBms(Y?z*W|A(hcG4jvothew0bibF1Y5HGVOo(#R$_!!rM|L~VA_Y=1_IlQ_xFwQciL-HE?1Ae+#kEWy%s58Pwb}l+AquV zn)X`K_r#joYq?~wCw4)5Ev|ZdVrR71-Y3sMd+o3Dc$T);{)VUhQarepvRvtN*NQYT zea6~Oc~q|LmdEt99r8G4ZM!^C|N6t7Ll!@Krw9=L2+Bl|Ac_DtFFV03c1Kh532 z9_gu$oFJH=yva9oBqRLcg#i*Rn>mfYhuQ~X9yr4Cv{F{NBdKI1#)0)3Cq^-KR1VQL z!`ca$jZRTa=_z=R_he!)y|I1ld+-|N{ob>jEg6IuSa#Ww@~wU=4rOcBSvv-^Q#@04 z^&rhnm7KkcX;Um)e7R5k0^ZcLiMlEI31mD+A~O4_lk#pJYKRF+)Q_F0uS?YLBnnB8 zB%jpp{n<<0GReEYpNC$TR3$0I7i3LO`+n_<@BSV~HW6ZRDA%UP4&&5}JrmRUVj=I3 ztfyE|f5sZ;3TI^wDSM|+)8E|w zS5`l{{iPPBJyrIlj4V-^vVIZ)gX4vgbCO!eXUYbN70~#kocsEv2Kfx5$N8WWrN%5j zkSrP6| zj=8#bM;!8&+b?kr@~=G z8MusYt2-g?rJLy@Zq@A=rX&4`kNw{!mWf z&>ct?mvR=S$8$Uw*U*b+umVARBm20dVQ}#oR`09%O~x+=q3&E>7pd>PZ7Nq{XvnB_ z2uSoYpn`^=m2+0v!KN(jl2f~*hXkr?aBIXNccWu2xR5>8ev}%(;5&8QQJ7wTcONMB z-Vm2~y42sAC^9weTRXTvd9{Za7CD%WyTcMXXZ9bVQ^{!+@}Se+VC@BQmg;wyrIwYv zGsx@>>fH+1%ezIVK%uZUH@_1nD3nJr^DJ?k`3{KftYuh4pHE|+L^essXwbq*Xpue# zWG_j1*d!yKp?EpqpDkUzgB^~UIN**SWru@|cyikJVXTtg`}nQdkp8Sbv5>qIIsGQ} zNF#H3592yT4koB#$|joD)hZWZ`vBW)TOV)`&o_1Fvwp(*h-A91HvZ3K$%VR1NpB^~ z&gVsK(8Sa!;wc@5`iR^$tAo?dTgP}H_=UO|a{#FJb!Mr%qrlmXAERvVy_i&`PnM>h zE#LuRb<8BTTQ%h3F_{O0FvqD^MR-!(7>A_m8pq${^v>eHci7$xdv10gm9A)ecZQsv zLH^texf65~6OP)m5vpUdh>5P*?eEymZD5&Ry{l96Ps=qjcC(z|?k->+U1uepmyH$~ zPse$CW_`nq*g4LD3Jji4(pg4?@|~m|_;QSOP%YlbYP*4+S&`(0k;H&cbu!q|{C}k% zk$#8tz^gA12i36Op|3X(mL4{1_DN2*B6gLnd{)gVj1c@$KrfZ*J=`-2-wAcC9|JtA zEiyJC5pdaq>If+^wE~Vw%OGBtnh!wf#{p8xfS1(rmXcNI5ZP7zL?*p(nd85G)%j*0 z@-0>JSw1M4+$_{LNO(}fwiADi6P`!Bl&DYV4eeldNWH?N9){=WI5*34K!-V!0MpS= z%t6Edk$J6L-T@|_&f9(1ys(;w+AIVBUd3uxGCF@E=v?(DtyZ&o-^<5&xn;j+8M8)YfzKxt z8i8lN^|(+f%&5F1v|yq+kk*JCskGsQYXJ3^;kPLMmRRdNlUxzAK<#~Z&hzMNebz(Rl|AjhQttc}S+_wbhnE>L{8}ja`8a`sK z%XrCVMvs=m$8XUv@t#M0v`bF7)YNNs^J*V$iq!0sdQ-DN?vW3SdxTRZ8K=oe6BR{L z8npqpOT2O`60>{`*T>$9;CLxn1B03=>%~+mYI}drS#WIV$*4<4hm3k~hURHl-R>BsDi6Vvk5_ zwx8#G^@NzrXZO>v=pF{457DgOs&mJWfM0)$)ytw`(xjwGV?-a#i9Ff3bMd&oPBO?! zMMPM!RDri584T}%ja6CJbsqd|QvhKjoUWSSR2Y=|XubQT^W1Cjyc_wl-a`u=N|n?R zp>B5QNm#<-*f^(T&^mG1`>sGll#R^oL8e_O?S;e@is1my8}(woN&O=#ByW?lFLj>F z@wBV+YLmj}YBmgg@J%REuAGvSVLgGx9;4SSTg2lbW|N76Nf0-ZR{f?}v3de&E{pK{ zs9bVIIdrsS+jF$}8}ivMd7d!Ru%~#qREHBcL>A&6({YQOxIa2^&+~ApYa}jl(xANL z`VEs^$DS4Nob}KD%ig=kM^#-7|4C*B0!cXG5)2|TLR2)O(V!*{XeP|S8JGwvDAgjo zFG{VKmck6d3L2b5GdWE4Y1P`hty*nu>!p^P7cv2oa1jEi1W^fI>KR5QVo3rD^M2Pp zGf6<~)93m8{`}?hnVj1``|Q2;+H0@9u5b$br^vop;GpvAvB~X~+s3>H8j*Za%2aP+ zqaK=2g&0k!`+G1`si%>=52=n?-~Cd)34!iARq_9-?yp!rQYGbE-=khqxIrCNWPumh zB*)XtfmHi2a;6uNDE7o(Fhxo$1<5tQc0eMpa?w}uLkJY=WqKp4wP4Qb_fU}{`XlaH z2_@MgQ>%Ey9FbA(+QQR~JcaGEUOJf`&{n6!yg8~DGS&8A;?&nTtVa(*eK$k?j)~XR z>0(Jh1K5ciStDIVTq+{<&fq_-#Spp!@6;XBruUKxCEG()C>5W;IamrpdR5BMu=qy zuQJU22NDSt-ND>P(gfDb*s20+d`{sHoyucTriZRTeIE0QqvShC_O}xZJ}D`G>Ql_Q z(KwO0q9f1`QONO7*QiQFJCG6tnC3_8#ZS^j7*lQKRi4NXGJTQB>2dVKHf<$7p!KpB z9HWPAZsRS;*u5DF4Eu?nxzR8~Z)B8JCB|xAGcx(DXO9K5d8@2W-jWw!q1>H~%*=!p zha@t&WqiNNer4M0O`-ah_~^*w-;E!Zy8csqaAfkjp6g8nNHR7m1Of-s;@42M#JkfW zPFa!iXYo|Ih#sjWlMJ+Ybi*qVprRc!n~O>Y1`5qBbUX=zC$M~p4=bxHRjgsywmO$8 zd0SrO63uEYUK7%^n^xoeL^F-R*iha?Rq0{iQBbp(O9>uePK?} z?%GVO7iJPV3%B-shwTd`u;~q(tXTX}u61GSZDrMoKweo%Ng&ret*6bOf(T_D8#99! z5agUKdDtaxK^~k#pGf-CLilB;E%k)cafhzwi^ehc>j3<|&?o8cbzE0bg*~V-AEt7a z5h!!JIv1CPKF%=z0!*6HWX>XK##!#L`pn6$N7&WK9Ku0L4`&*U@i}f+M`gXLYJ2DV z@hv#roO{X_F^6IMX}w4W=cf4C|4Fe%nVNHD@w?5^qO!AG!W6T-UM;_-Q^+~>c}I%( z8iyi3Oh@`hZU!R_XGKt+v3cAum;Gwa zVt5GhpTDSP^J(VqBvhr*n#k*eIj+%c?#5yS`Lso`lQC@w(T7AxNXCon*i}zVpP)cI zSdelId<<~@&e>^Iz*gd(3(lT|ObjFRfBBJ15e!v2Bg@}(A=>KdSDEcz`wV2ojg9w0 zN9f4;!HbG_#tWApdHikQ>Rf*0Pw(S)I(+$&zsvEX){Gf=C&r;IVWs1Y^v~b4o<>eVdIj|+c~yTu1om}guNo5mCMe57sYSW86<0|~H@}X4sRn&;clyX%nG84O;S`k#rC8rI1AMP<tZU%dvOgC@qxmaSVSVgMpaFujriRs?V zkJQaltJ5&t0vDl`N$m=Z65FpZx(bCf7npbG0;Y%54Ohlx>W*6p3cb0K(~t0H$`KTJYLGSERlE5Um-;~|KL@lRVp264pZ+dxeNLqVlgZ##!oN4z{q)s zQer@<{7m`gCu^Gl8`}+FSBXl=$hk{Ouswuo=F*g*R0Ws$;ZYcawPIH4;0DhI895WJ z#{NsxqsI0)YVqyn7T{0umnn{^imlF#pAh8Hje*?cqR}1F#QcmMM>kyB|6;*q zxOu&*Rl$XA8_r?N;&&N2Ej(AvzmLZ>|F&MuUwyhX|8G)4!BaK=2FlT%0%^WWRCJTn zi_-jRO47kg)rYo7^S7AUR`U-_HX#vRcQe-JBx$CFCn9RH?D`UUiRa{_rBs!I{clDH zI8Fuo!KubKP~;@oe}!#;k@LlKC&2!fl%w(Aqcs-n!|Fw8d=n*U{1WxCBO9}ew_@s>FYb!phKkV*wx?AWg5nYpk>f(8AkQ}JlA z)Q$@{@UD?lF6CA3yt%v|%DI^9)Xp;%-%U3h>tB~%y`z^BzS4?yQ{y-d(u?8GYMCD= zub)odS=ac@cRqwl^3DsFpW>Y&*@&n$w^XKKsLNh?IvRTCnqvtV7e*ib+higO?G4!G zhX(@yv4*k6lPx;(uHH$)XuuWT;?GiX1tnAmgj1{jTu6dM218fzd(J&27X=9gE0ZTa z!c+1?RHjx`v$$3_IisVsVtBo;v(*=>w^bNhrFDpJcAJkYn$V(~`1u%9zh8KQeJjOlq?Ka_RS(pKqC19E*+~i!r z4HYp%CGqqb@BPm@Y3v4DRwBYx-TQ@fFC?RZVgLb(t&9KhzxJL--9k?6*N&i7{li(p zK}1IU*2!TY^FBGvjX?nz@qq1?9^G z({&kW*>tKgdeCt(HDHMGuAr}4oe=`%BLB%m=7V79x_pjh$bd48MzG)6W9Y*YHXUnE`&2n;w2aq^)pCA1|;`+M61OfUY-3i~57Kr$MZ zfR74ACDL*kCUr!F19``AH9ve_Oxy%jq$li0&D?(ot)TPEmt?C*Pos!)D2Bu;*Bvt0 zE#`033fl~lP>bFi2l~&-CxYiI<(IayF9@j?kg^hNp{>1FQF8BPM3vvPwvvEXGYU$~ zcM;YCiffhn(_{ED@lZ{__ac(uEvI4Z|@;jlOx17u8D;By!jw zbz=v4Wf^lWP(n5F5c^Wq2&;nRyY9#}@Ue7HRU*-yo>2|ZYNj&2=Fa!vt2ZU5L2QBy zd3fvySUXE(F}K(D3I2t|X^!K!g!GBIjs*OE4by@w$&(skh zOiZKj>f6oBssTup_g)d25YDe!)}>VG-C?O@zxV5cDjtH1b0sIC)PnM)BT!kZw8fK> zq1dlfZBwdxKu>E~aBjh5*%}}g&oO*brTO^LrE2mF3@saz7F;gip&MAV-=E0)<5Qxj z$5Z!vGA!S0?*j;o&4JQh*_opz{P-QfH%SW1d{XvN$|gX~9K&(-lY-QnFm=&Z{ERo) z->r6X#F~4g57~Ps)Ox3Xbcd zT~(T9Wt|blBDW95=&jf#Xe(;uWWS~aFM1*R-aRL`3%m3F|E6KVIo*xYZrDV-+LP@X zM!a(}u?N!UYrE@ZU8hl41~msiQH{!^Q2}SNL0^hlxP2hnXZp{5r2(brm!d%-i-+Mj z{(FHZfd!)qq+11)9rfvf^LP&t)DF7EA_?*lXT7vPrtO@PR5=5~mf+{HTCPI-N2(E^ zmlA(kI=a_Cy4ANMUg6qRp_RW=ylHC0K8x^vfdNzjGnRb)kgu>s-*MFE+NITasfgYG zbW!0HA_Q$~Bf}W^Xv_RaB}d3eY={Pfy@$fbQ1CGLA(c;$_n+@B?HB0B%?vsl#I$)w zES?&R#uGY4BWa6PEnQ7^D#~f9RiDTHF7NdW-T$^z!2q36eJWhf2-2taWS`=BY6#t0 zuzL(?c&_y3pQ<+lq&Hf%7z3ty^jYjYnG+0()&4-PYWp{!iMkv5X2ttPKXON|FTCgk zrf7jtt+MvO7}eB!YR`wGL!+!4j})}gZx+qfZsQmkpfq0>gwR|`0Ita7EKG+<4_29H z&ToaEi7Xq1sh?{%Gj%I_dY>_1Z33Z?*fm7War$TiY&QfK^C2-1!QWAmqn1IUWO)|N zKTqoAV>s5<-igl};m(wSfr;T5DorRZp$Q6O3%FW)D+Oi!%6punaBMelmxQb>+^_l~ zy?(!=DmuNE^0(Py<9W1tth_)JmP};?LfgnnB!&Hvd(y|Hza}gfzHx2twME>Nv;wO+ z^4ES}^aF?Q6`;(YmKJJ&7&Zq_^VAN;l-)O)a8|AQ@XwZie4Gm67;Inci&UmdAToE| z#`r*4p5VM{yQqmhG?6oFiA#E>_CSOiUTsx_4|%%$X^0>1y^t!=5sILTig%gw-L{7L zp{~-!w)wV(+CGWxNbY?^L7DFk)qj2Ww)xm*Et!1sI|Rj9e2E^pI^n5HN6ftz2R*MAcPIG#Fq}=@b*vZLjD4p4UhvBHr3DXf z$whw6d)!_Bk;7fJVY;{W+=|FF+y(o{z@9CGj54(F4G6>Ch&tcU3!C9pRu|GQ+;OmM z(sZJXPEPmI4CGcoYH5+adVA+}A3pu74bBR&Q|OFg`i(%Rff}#UZ7uGIeUQ60UH^VV z{@2nFREtrf%!iKLvh*T-b=K}D7fk5C`$>7trW|}ueiQqgdi{=uU-x>m|I!Qe)!& z%TY1c>_1MPZ>(L@Nl+{TE5%Jz7gPy|&`^pMf^pOnnVI2BG(=_+^|ZyOl{cWtY&Ng= z3PqCC9AzPrArqP0i^}wE?U874ea&au@9N27uNM-XjjU9f=WUv<+qRpzWoq$tH1a){;t}HV4Lqb!pujZ>#7>Koy==YE4(I+ag}h*+kh z3!c{sW_s%owH&}ALz}ifRNqg3oVB6yLUa6^J&StoE*KdlXzpEqQr11)J%>k+sJ6)N zs>pQznM|jzs@Bt}mlYfX=N0b^T{%{JgpBFCYxdrY*&CKsiTd&?W__?juplxe-8=_N zV~Vjs3-)d7JC^vY=@cGbS8n;XT3lq$G|jB-FNx6vP6Px$ybmDQ@Ur_NUAOJg3)ycG zLH!tHcgRIR{4KKzyAfzmjV$wcCE{Y82tW$Fkf6@vUK?Bku~va+?{6hs6#>`*$kQ;q5M zjA@ye!!J>LaJ`jW@dQjaUw&47VFAgEuC@nG$JET#7#u8-cV#r{Nvkox$&;RdFXToL z8@;izMa2Ax{L%Kb`wG|xSi@vX4bxPxdY8F0m`F6*aFtje?@LN_@^`e7c4P@Y^W=9v z=@nTs-Y}=|h791CUUW9IHp>mn@u9i0vlSuy0s=R<8kc2Y9M*w4GtpEv{vu4F^m!PX zO=eUfU2mZ(K#(}EQLO+{ar)h=iS%S|nIka0--kSc*d$3&51exu(xmk#))uSf700#hcXBrC%LRjmQC=u+LvY5$!48+37xeQkEaO3 z2_NGtiV(1IfGRlC&5sbK#t~H~6ZDYywws7-Pqok@CMimScJd@jvK2v8Z%Sf?ah)z8 zJJr5-ZiTT!1!_fDD`xxH4Q90T?55t{CX^%gD^_;dJ$xwc74Q2EYs!j;)eg>uiiM82 z133}*E2N`Z?C@T)7j^32!LvsSp5-Blx~y11exuK8vWh7mP+?UzV#K1=2#2VzNiF?6 zTq}EfeRMQv$MSHjo?N>#WkY^eLyZyE(I53SO=9ho4h|#0)&c(bMTg-_bJzx)gkRIBc5sJCB>I=9P zijhnfJ%x&vHcLE;PYcCP*QzCCfO@t~p5cT%UIzXJE|`BZtWbk(NmM|jA)K4179pez zxDxkN7@N%w7HyF@q_NyRA+LfM%z^=8RK%{@c#A?(7n&Eb$60ixAibwxhQjmdLZ`uV z0T77pv2CQUf}zvFbutNUF^fx+xNb{}{haE%Tc`?2OC++3v0KoWhg-~1U|)Pecd`Gx zBc&LtN_f}*F$5k)6d^3aTo{C07=(Nn1Sbpvi`vQFJ?CwO`a))r4sF6{;q*7U74`?W zux#N5%s>k!2E~Q~K z(AtNynkG8sir8$V^hC!_!LW@YQVGxG5dYwkdP~S1QWhrI^o&y~E~6X+n|GpSKXK+~ z+L@PS!L2W!H{?F3RcIdL9-5cQKm1mC(~<|D!gl0(-0dEg7De=0{JS23EidjMpF^PF z|7z90RJi4Vy2}=0gV~3HI$h!_A&6b9p)<$@Yr-7<)&e0>{tL`(ho8d0#IKo2D zjxlw8YCSu!C&7HbQCZ%Iv*VKz^;DXEB8J^FM%YjxtKh`9gvl-Lppz_q4C)2y!%?w2 z!uy>C1qs0TCf3t^NTKSHHseU&zskR_q$>6h-)i*iD_L%AV-+201tB<+z6MNB#Ix5N zmV;vr0cCMJTlQ1ngY};nsz5{*V}XDr;T-OYTAY3p%DoxU{669wWCZ)l2g-<~N&2e` z=(GC%(p)^?g6d>ZwEZp<^G?nGcZT3TW5`>Q1w3@N1)QL6=EX*P#mJ9@z zoOcaG9v@>crFbv0*PEux7zDG;55O7o4Ql**x>cltB6Unv%a5~Le~5P|^WbS2t8ABu z|N5Iv)97iaz{NjIqLzP^#=Ka#N1?3Js9+XleOn1`5aMnM3_wEG?Si&&qECCibv0C% z-tC3LiQM_IVuc*AG+WF+>`_uxGD+n$p_4=ItSq(@d1w8Xyiy<7f#~^T=IP0z=Wnd5 zz4I%1B*D_9pI_B0!O~P?#qsv<+xSA>=MT|EVb;WUcBfvv1Edt=Rs0urYt=W=Sk`1w zf;Pk??n#AfgI2wV9vDHe@z)*GsYT>{#G%-yRsV$tu|M#y!g#r(>`^QK(zaCor4T5b zROwAiHu!x7hV!gjckwlzo5v8b0)oNHHk=!Yyke_9 z&}=Uq%%Ov{MCM!*xtUbU;%A~TNnHp4*?XbN{IR@9(V4oHyGg6L5R?KK`+ovmC9%lf zz?4*~rni|3^5!MjvNrH|Z5iFOEMp6I)NLlknldA9nfl-(3Z(I|)bk4p##eLlFegBE zjl86+kClz?(Wwu6h=?psh?7pB!)Wh6Y6B|+{-r7ve`=M zm#w^0Ut->)@=krg3EO2p(Xx?G4B`{!71C68Ilb~u34TlUcOXKts_#+yrfeO0`G?4s z-12uOxI-i-qCOG>viHbYByTB)HACcE+k`_0xYtU$h$py%Gqav#qm8#!<|oAgifbFU zX$H$U`*O}@i^3`7YDGa+^1hShERk0OFyohq65g>y4Q?KTvy^fz`V@{ThWM2h>l z->Nw|B%-FsgrK*|$`Wzx7rIXD4eY<`ID>cZ+!5M83eN%A;bmI3+7_M?{^}ysmpupC4jOQmiYt5$0<=+;Xsdz2!@3M#Wm^Fh{)hhLH1J6KZS z8nOO2Sfbpe&qLbaSjRal4rT|Nf*J7{Dh^H#e2?fNpR}GGF+ZnsVoG6807YJ^OTC0Q zZz9iQNY`_MsnYF8Y$(cxf5+j{qiJ6#*gJEBe`JqgjteG#qE=}(>u@qjYwuvts7(dr1VNAMc z-NgWu){R*9Yx+6Q@dFP2$T-Cnmq=#7YC%Mc&5|CUCe1&qSM&3FH-CU?er5u$2z~S` zx^Y7;VcTh9U)kR{)fABpjV|+ot&QZ?Rge@kmj^|%i-FY2CMq%m$`G;Uj`>@tb^K4p z0P`*Q;oh1!6}G*$m)Ai``xd&@Nlz-;bmf5{F-Vj*f>?%O0i~R3v4*P1SC+wInCAV+ ze3P$KEz34SR8sU>X}328 zNudT^k7cu1nW7nlH##8OdeFE-5l3CNu^o}MRIN3SR{ z1}g*0e)KY#-P~Y7TlAo1pWe+YDnm0dEumX%Pky$KAs#6VMqhIgpGP?m`l@a5So3`K zjco8R1s@tQXTAATtQEn=ebVjUZdYs$D?!eBrRv-Q@hsk%$UFQ1_(G{2@eL_h3XhtX zhjLCFGp+QWo2`&5OOL2p1|}TmP)TBa=&Jz>cd_{r8=wNd&rZwg|2zVvWLH7Gwmm`r zB5XzyXHT{ImxS$zkNyBNBY8%jqe$;OqkCylB4;Cy>FU02s;76?`Qx5C6O?7mvg$0} z3+Re&)kz#WS4~RYS^AyKr39N2;cq66tH{8Lz$FYApioKX9RGwx%72H>qPP7yt~%ek z?lTkB{2Guck?Wx3#xWuwosw(rM-*K{9x&g`N2s& zW&dH7wKmAF!hq@|Wf0b;vvv5+&YhtTvJqZjtMN#E?PO}4mJh4k*LWu;%6rM?Fh86h z|E(M02K^l)rWhQZ#v7P3^fy1IZvQ-7Sc5|oc~v#CV4A;pmFZxA4aConFOxhGe%BX^ zCzi}nZJ(BFo^7=U&GBXC*i$vfr+K!W*dDFsPNtVMMzuqTlF`WaQx;&=j@i_y&uf-# zZ$L_lTfsC4BsL(H#J)^s@pM@jXMr?DmK^U}_M2tJdzDMZDd7J7o!^A}DBwQ7bXai4 z$$%ek6}BW66W{%h0ly;&_*&pDz$Tm>k|n`5(LOQ=;`y*m4TJeAypTT6WB`U?{})mN zkpBt;5aOSaA7e-uL~?bwVvEar#^Coz&;@^BbN;;d6b)lv_r}RXpj^z8L!g?K#DyaA z_AnxHsoL#OtBIIZ#RK2=HjKStcij{&A+Zqd4`7& zbRtq^a;9lFKoYM&UrFLSF?L?2VxEv}X6E$yP2TC}U&Us=tajP8=A0V@81O$>lgeUb zdFV!{BA$(9NE`bgvo9;K_+%qmk_|G6c3$!ux0-%qSzD|NV9JT#*e>_Txb71aS~lHR z*aU&YHPjb9Zu24Zi0I0%v%>YYu1(&qlLAitV6)hD8 z*{nbJB{ohh89xSfL17E$x^3q43g!wka~~_7D1JZ_;NWGouV}%(r*%r$ez6a+C9(^Ec7jIv--AA_L)eK2bfn=2u(#rWHIJYUj;uE zNBS$c2f@Hp=Lz{FraImGLQHm)qx90GqcopsS*6rEDO~8bE9)f(fD?X$rW`5mz#Eh# z%YI`&Vy3c^apwg)l@&axjdj}r+%I&Ox!4&gN04(eXRh3|-Ad_M5m}P%w_zx-J?V?s zDghIQRT$eUjExMh0PWA$SwLg6m{w7Ed`cv{m?wVYjS6Ff8A(2TML~30rYEu_({EH_ z$+AtW`HkExy*yaxHg-pJyZIDBW-T$}DD(m1Q2Gx&Ex18XzPJu})Q})GTQPvIr$X^Ot*wi9|EMk_xjxWBK^;Sjv z62WMN!3_FBeDgxfL(N16sWJGzhfuv$ zT~`Fp)FYE{rfCV}VW6s}rj$I$2V>V$ySvJ~s5n8%v6b0ANi#rYFQhNTbFE1)L^-_d z3F7c_c(wyShGj3PWtfxI6~jN{Q12go02)AEFY`|;1Y{U-xYvoy-&49IJD6Wqg6!=? z?V}g>rz^~d4l2HG_$dk`jctdX;*qeJk(p0O2hKz!&qR9x0@G4cZ&`_e^t$HV4%me$ zYFQ@0Y(;jN2%grv?-EPG=!#8-Kvh68Gb;+m6$nmP7HbQni?HqDYZYEr#jlp%!}RiT zbE9GPaaK?7lsy0{jHFu7>fMW=B$%XncT$1gy*ufV>fHa?#j1Q<<_Be)O zQt?UxJg7>4M5R^BnpG6tiWkh^a$hzA5kXyv&$j+Dz+*B=W{vt)KalY;ADasXNv{Nhem7o}XlOa;Hd+pJX!js__)wgBq?yDF zpc6_+XUQYj@Rxn5#1SG>Ncy;;#>i*ixMZOMWi_AR^Q6)pFCcf$3VV zo~sS?nW1ay?hKZRXYjZYc{s)FHu@b!oNf@pEA( zSEthjbKNX(X3C4*d&rS5$gH9>Y4TZ1)RAhXW0-W>$oUnDTWROb(oX;XH%-H|VP%}a zcgWnOS!1MGf2S?Ut!?e|GS2LQ1!e=;;}QTsA}9xkr|w1^_IqenX}Snx`k8-klox<8 zYftjE`;{OijBdRb=*7KIGt&=A>0a_0wcjf<_J|sU0W@!WfW6(>FQUFo3w?DwIH<|- z2hO>|H}j)Ps83$#t7E|-O%9{`_FLR0vczejuf7frQaIY=xGVY8n3dg)Y*gQqK$N-F zBY!(lM(QM4FIe)$Ycg(7H}uD>Y>DfYcp!3bwjQ2jS5jX+{D9CmZB_mJFP}qp`03ri zrSN#2eWWrh6z`1SAwBXF8O^oQhdO&Hc5K3!k{SMx1qZfKCBn0p$$lG+ur=2ur=!gE zDySlJy$W3wbA2BAdy6HoLM9-av0F}`TJ=@ZSY{9bJzrj|xGJUEmuba}dR;zWn~n)o zBI;^fc(~3}01rQ-;Cg2F0%v>__KxN0sNv!{IBgFgt&}Hwfin?xyP6lHxNOL%lf;Ja z7!&Oxuv!4sC_*H>4MH(SafW)NMock<0TbeO-D!;8Ed^yrrT8{)kHqRNByyksipZ^5^I0*7+Sj zjOTS^5CdJVopmc5Kjd{1P;9DQk)JQ{5<6pH68bzn*c6{wyi|$udN;?6~P<<*S8nSlBb3Sg7x|37QvFSvj~<_`a`gK z=#_{G^Sk{D%F5~p>Z&#;&E~JD7T)t+7IZkAB1!J9+;rV85;jPx@72tSHDlcyhSQ~0LV)uQ<;r)XzBlse)w$7LfU+`dPUs?b61{N6VWhWvfTvnJPWzp zE;Eld8C}9~oo#;SFDc4`29f5N)eRPBAR7l+-`J{1fHsFYajSIHTZHA7G}xj%=|XwX zc6Q%J$n=0r0?gGNW(jp!o(QU=USv9Y*vi4q8y!{RVw({RcQ}3u!AcKSfpuVDCWvw}^$-P2# zqOUO==kcW)mDn8_WoV7?8Hy+Rh4d+Yi&8R(F7-HwIh z68<+j`f^k92O#`Z@=|l+Mrmg=vPaRE%Kg|@VOpSVg6-XV9%WAGi2R5$ve8kt--pZ? zz$bPAM&5+31DE`fu^-S%kMX6?*of^Ph8ERV(|(WbFzY!Pu#YL@X_5rU6 zfds1)dGnHWZD0^(p}IOhxu_qQt|XDpjPSjwdbOHIC?!PqoRaSroD;a9ANUWXJmM1Gte88W8Ie|f&$c1$mPEBG(0!ZHvq;>SJd^fkwMzbZ3Rw{66ZI(XQ) z+P*yY6sR1y5L+zL>%?*bgNU!;5LdrZtO}R1LB?6ja1_W1%dlgxob=@+gOlVc70)o@ z;U8qivKY705!WD?(P|F!B`_}5d2+u7(J!~rSV5p@e`LZ8(7`RKF&T<8%6!oe?G?5y zkSTY`u)viiH>L+lSw65mDo^*g>MIMpSdzP!AC=W}(P{3wz8Gz}Gd-8&du(qd%Peja z%3E@J5O10&BAR3V!o$J80Ye(N{GjUVd7*>$!0^z)oIsB2SdeaxxSHrW(#;VQ5ErZ8KJqrj3FQfRD7naHEOi1kY%Bq)U3=5u)w1ZZ% zz(G8S1aZyi#-zQAV>O^jI|W}NQ+B#A10qMYcz-^j^xrA~bZoIjdziz-AN_%ht>bwE znS0)g*2SN>NKQm0OOGtiM^fQ2c0f?v+GFdB_aX?@LywG`M6mY^ zE-wpyB6>lkejqWkkW&1!UJU9?7E*$&rNX>5gI8+cFp! zs4@KDPKwslGmKqfCS-T~s5pHZZeIDV$NxG2`HH4 zN0olsnbcwN>C@r#706UYe@j*5+Lw$YWhr_rUiQR&8Jn`_K30q0h@aol6XR+yy(PvK z`-A;FO|D%Gqci|KPWkad1M!gf7C+vHm>RsH;x!V73%@g#u9vLC->t*T9Hc&3hn%Tp zh=E}Hfv=P2tUC*qxL2loYKc#eC0gLD&=ETcmyYzo8umzLpgeRWOA;<=fy{_I&V;I5 zM%o>%`gvNVjAYTObAnfvECA%@(W>v46U=4<#R+9GXZ~@W$a72vEtn7CRT2@($ZU7t zti+}_vu=YuIl0epJGvj6_vU!N(ph#fx~XSqqrpQEE#4nw9{WRzw=#GB9xVKuj)2sA zNr&nHD??<$D-WWW8^+0><%FT0@S>db<>X;b^w3iUReV0pOK{yRE5ugzM+}c#qcFYn z%kMKr+f*E~%ZYawXFGQ}z9r;XR%=`h43Z5zb-$Y1kB)woRXKr(HSaFE+-G=UmwF62 zihQA4GbxZ6yv{uLH5kA$iM_XkpVK^z>!z~Y6*NN%ph|X}@ki-W8 zF8~Box1qUW(OI7xkMqV98j2`3-p6W+w7;@xu*@r%!}5_~=I`N!jOn?; zA2(vRb%1&3PPCA7Qf?5faSt~VJEcp_s!I(iyA)s8n<-ViXx=PU`00h78-G&1m>Id+ zW;*$v_2oyyE}d#%8eGIDcY6k zR$D-^;WRSlm!6?7%dM@b_p*yZS{kjL-4O53Nxj$DTss>#B@d<$MV6rg0S>&M@}U-^ zJlk#T1Rch}mYXujPE!M=L~K3E-$M6plqy8l&-}3P?EXBt1$kKPyawe*jVK%ehfj^^6%27ME&~JtR?rc z_EN6MilG#7tdqiw3gu5TR6($lI1dVjTg<;84VDE>D0d>S^ofQS7+7UoT}ZL z!<4nMfr%cv-IMOiMF`j?P+|D(+<@WeM$goB3O`fVsgbg-dt+$&_mUWjX@kO0DS~N@ zpeWPXLeb>CB#vVAt#H)5G_|5C+Mz_N=J!#L8MU&p)+4Kh~v+5N?;GQNlh;F<{N*NmqeDEw6#1c^M?=yn*wg# z7$$k_*z+{SFVn-NQt8Da8lj%J$Q51?(tZ!&ncf5NPu?O^rZuobo`_9myh%9yUSdbZ z11NR4#7npKp^kaHW$i;rO|+9FazCpgu5isJmdlCARUp59<7kEEmFOGp$n8Yb_8#>Z zhq=?P9DF+T(O;nB3})+1^)x4;(jd?GmR{E^xA9^u`5k;|T=rejy`%rd+j;Z<8xqJXfx|#LbxD$7g5{inOTgiubhpgD(dD~kd~>A zW75E2*Np1?g+l~58R4Ow?^F=HMAV>I}))%Z3C1{1X>?100$V@C5nZT zq>L(D1#?Q~gf(}CPxfJ?k@GU-8YxOT(r(?D>g3L!tvd&m(0l3_?mS`LdC$6o+$HBR z>&_PIP6>BbSa;S~cgnbPzjfys>yFNyCDxrstvk1I=KxQKeFyD;m$(q z&Kz~e5GZl;R_o>z>t?NWbCz}UQtPH#{9QRyt(#7{*^3s)|of1je)^VrL2h{zEC( zxx`532vZZwjZPVAxXdhbfz&|eg$NOYtVKfOYbfdK%^qg9B>z;`!zuyLJ}Y~@n#xJvO9kxsN*%ZR~Q?N?ZbB>f*->S zyQRRHMij|JgE^OWSVm}l*~Dz4uxxy7Y`-UgC+%VxJ-Rt?9lrc&@EesE>k+pGw}MT= z>UN;RpC)lFOtc9&@X-?K5=8rlO}4FD5#J0pA6O}nX_fVEKvUX#@5u~bpDR8aQf@Ma zP>9^11-R3PSmZ0IdALT22 z0(*H@so(%#$Z6>!lqVvds&*nO9O!JQ0u1W>gU*ID#7@C1D?*O@rTTa&x6-(k-yEeyJ@!OrEzTf|p8cv)r`Gv2L}!aKD7P(w@48=z%^3S7leZYwcM+lD-B%bNAor zBZ@-pz>2f-#n$P%7rl0SVJ2!rowvtS*6Vt0VDL-mS zA+34VlOdVm#wg33*g|#pz2k07OIvb!mFv=_d4!>8Oe-Q-th+94d}-j&@p^YH#wk}^ z9PHyxxb1P0#VD8liB(H82oZOfT6~df$!@*boQAsPq(xrEX}``AILk7>{8ML!Ajd$J zDCY|=o3QH7U}cOeY7$!Yhn%?+n~98%;JM}lg+~9^Ui_Im^mTgh9OFAm_2ofQYY$(D zaft*hS-Vvz#Nj-uSRZ?u_o*^?S*mFGJTd)|^4&!@Qxr$s_3qAp)$9ykZ!gmx-59Qea>MhOodg8Ye>%Ok-M*|wJ^G1L@BG53mmb)PwD zY>O!7JmCvflaNr`&71j_xJ`u@+ew4qWbLlm6uvrBKADh@9tIX}SA+K80ZzO)cg@>L zY67-t#B9)AyO#Q-=}_?B00~TF-uD-_ii|aq{a;49yVRZ)9O%XpG_hGn_(Az)vG{3j z67Ck(V=dvE7d8A3*xjZ6$Lx!2?nFI7Ahhb`dgY%04~ZEOr249D80`^ki4}`uQ+jAqhP!E! zUEaZX1@4(T)ydx6TK$e2-} z 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 Hzx@0KP2Lo$ literal 0 HcmV?d00001 diff --git a/lib/jacob-1.20/jacob-1.20_src.zip b/lib/jacob-1.20/jacob-1.20_src.zip new file mode 100644 index 0000000000000000000000000000000000000000..51cdfa908f834217fe1bdca2a68190753cd7c4ac GIT binary patch literal 822795 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

-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 z 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 z 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

f-b1`ZFZ$#Ovs8Ri`7C8tR9i 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%0D}BUt`E1 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

`6Jy1} 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≫!Pjk0;lq(Tz~$dELzE^DG2(ckLCH6al85M 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

&Tj2_M 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 G(*FTJUG%*G literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b7f1e90 --- /dev/null +++ b/pom.xml @@ -0,0 +1,251 @@ + + + 4.0.0 + + digital.laboratory.platform + DigitalLaboratoryPlatform + 2022.10.11-snapshots + + + dlp-entrustment + jar + + 送检受理 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + 2021.1 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + 2021.1 + + + + + digital.laboratory.platform + dlp-common-swagger + + + + + digital.laboratory.platform + dlp-common-feign + 2022.10.11-snapshots + + + + + digital.laboratory.platform + dlp-common-security + 2022.10.11-snapshots + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + + + mysql + mysql-connector-java + ${mysql-connector-java.version} + + + + org.springframework.boot + spring-boot-starter-undertow + + + + digital.laboratory.platform + dlp-common-log + 2022.10.11-snapshots + + + + digital.laboratory.platform + dlp-admin-api + 2022.10.11-snapshots + + + + digital.laboratory.platform + dlp-sewage-api + 2022.10.11-snapshots + + + + + digital.laboratory.platform + dlp-othersys-api + 2022.10.11-snapshots + + + + digital.laboratory.platform + dlp-common-oss + 2022.10.11-snapshots + compile + + + + digital.laboratory.platform + dlp-common-remote-word2pdf + 2022.10.11-snapshots + compile + + + + + + cglib + cglib-nodep + 3.3.0 + + + + + com.deepoove + poi-tl + 1.12.0 + + + + + + + + + + commons-io + commons-io + 2.11.0 + + + + fr.opensagres.xdocreport + fr.opensagres.poi.xwpf.converter.pdf-gae + 2.0.3 + + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.12.5 + + + + com.alibaba + fastjson + 1.2.9 + + + + + velocity + org.apache.velocity + ${velocity.version} + + + + + org.springframework + spring-test + + + + + digital.laboratory.platform + dlp-common-seata + 2022.10.11-snapshots + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + -Xlint:unchecked + + 3.8.1 + + + org.springframework.boot + spring-boot-maven-plugin + + + io.fabric8 + docker-maven-plugin + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + timestamp-property + + timestamp-property + + + timestamp + yyyy-MM-dd HH:mm:ss + zh_CN + Asia/Shanghai + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + copy-resource-one + install + + copy-resources + + + ${basedir}/../../out + + + ${basedir}/target + + ${project.artifactId}.jar + + + + + + + + + + + + diff --git a/src/main/java/digital/laboratory/platform/entrustment/EntrustmentApplication.java b/src/main/java/digital/laboratory/platform/entrustment/EntrustmentApplication.java new file mode 100644 index 0000000..7248a08 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/EntrustmentApplication.java @@ -0,0 +1,20 @@ +package digital.laboratory.platform.entrustment; + +import digital.laboratory.platform.common.feign.annotation.EnableDLPFeignClients; +import digital.laboratory.platform.common.security.annotation.EnableDLPResourceServer; +import digital.laboratory.platform.common.swagger.annotation.EnableDLPSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@EnableDLPSwagger2 +@EnableDLPFeignClients +@EnableDiscoveryClient +@EnableDLPResourceServer +@SpringBootApplication(scanBasePackages="digital.laboratory.platform") +public class EntrustmentApplication { + public static void main(String[] args) { + SpringApplication.run(EntrustmentApplication.class, args); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/Interceptor/FeignOauth2RequestInterceptor.java b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/FeignOauth2RequestInterceptor.java new file mode 100644 index 0000000..5e04d87 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/FeignOauth2RequestInterceptor.java @@ -0,0 +1,37 @@ +package digital.laboratory.platform.entrustment.Interceptor; + +import feign.RequestInterceptor; +import feign.RequestTemplate; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails; + +/** + * Feign 请求拦截器 + * Feign Client 向业务系统发出请求的时候, 把 Token 带上, 以用户自己的身份调用业务系统。 + * 目的是在业务系统中识别用户是谁, 允许或禁止用户进行对应的操作。 + */ + + +@Configuration +public class FeignOauth2RequestInterceptor implements RequestInterceptor { + + private final String AUTHORIZATION_HEADER = "Authorization"; + private final String BEARER_TOKEN_TYPE = "Bearer"; + + @Override + public void apply(RequestTemplate requestTemplate) { +System.out.println(String.format("dlp-entrustment, FeignOauth2RequestInterceptor()...")); + SecurityContext securityContext = SecurityContextHolder.getContext(); + Authentication authentication = securityContext.getAuthentication(); + if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails) { + OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails(); +System.out.println(String.format("FeignOauth2RequestInterceptor() Authorization, token=%s", details.getTokenValue())); + requestTemplate.header(AUTHORIZATION_HEADER, String.format("%s %s", BEARER_TOKEN_TYPE, details.getTokenValue())); + } + + } +} + diff --git a/src/main/java/digital/laboratory/platform/entrustment/Interceptor/URLInterceptor.javax b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/URLInterceptor.javax new file mode 100644 index 0000000..2e26dbb --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/URLInterceptor.javax @@ -0,0 +1,44 @@ +package digital.laboratory.platform.entrustment.Interceptor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * URL拦截, 做对应处理 + * + */ +@Component +public class URLInterceptor implements HandlerInterceptor { + + private static final Logger logger = LoggerFactory.getLogger(URLInterceptor.class); + + /** + * 请求前置处理(后置处理同理) + * + * @param request + * @param response + * @param handler + * @return boolean + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String path = request.getServletPath(); +System.out.println(String.format("(entrustment 中的URL拦截) Request ---> Path=%s", path)); +return true; +// logger.info(path); +// if (path.matches("xxxxx")) { +// logger.info("requestUrl: {}", path); +// // 进行前置处理 +// return true; +// // 或者 return false; 禁用某些请求 +// } else { +// return true; +// } + } +} + diff --git a/src/main/java/digital/laboratory/platform/entrustment/Interceptor/WebConfig.javax b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/WebConfig.javax new file mode 100644 index 0000000..2ba09bd --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/Interceptor/WebConfig.javax @@ -0,0 +1,23 @@ +package digital.laboratory.platform.entrustment.Interceptor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 拦截器注入 + * + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Autowired + private URLInterceptor urlInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry){ + registry.addInterceptor(urlInterceptor); + } +} + diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisList2JsonHandler.java b/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisList2JsonHandler.java new file mode 100644 index 0000000..fc12a82 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisList2JsonHandler.java @@ -0,0 +1,57 @@ +package digital.laboratory.platform.entrustment.config; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +public abstract class BaseMybatisList2JsonHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) + throws SQLException { + String data = rs.getString(columnName); + List r = StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class) getRawType()); + return r; + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String data = rs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class) getRawType()); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + String data = cs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class) getRawType()); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + List r = super.getResult(rs, columnName); + return r; + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + return super.getResult(rs, columnIndex); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + return super.getResult(cs, columnIndex); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisMap2JsonHandler.java b/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisMap2JsonHandler.java new file mode 100644 index 0000000..9015838 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/BaseMybatisMap2JsonHandler.java @@ -0,0 +1,60 @@ +package digital.laboratory.platform.entrustment.config; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; + +public abstract class BaseMybatisMap2JsonHandler extends BaseTypeHandler> { + + protected abstract TypeReference getType(); +// typeReference = new InstructionBoHashMap(); + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, HashMap parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public HashMap getNullableResult(ResultSet rs, String columnName) + throws SQLException { + String data = rs.getString(columnName); + + return StringUtils.isBlank(data) ? null : (HashMap)JSON.parseObject(data, getType()); + } + + @Override + public HashMap getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String data = rs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : (HashMap)JSON.parseObject(data, getType()); + } + + @Override + public HashMap getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + String data = cs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : (HashMap)JSON.parseObject(data, getType()); + } + + @Override + public HashMap getResult(ResultSet rs, String columnName) throws SQLException { + return super.getResult(rs, columnName); + } + + @Override + public HashMap getResult(ResultSet rs, int columnIndex) throws SQLException { + return super.getResult(rs, columnIndex); + } + + @Override + public HashMap getResult(CallableStatement cs, int columnIndex) throws SQLException { + return super.getResult(cs, columnIndex); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java b/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java new file mode 100644 index 0000000..2ce64b8 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/ErrorController.java @@ -0,0 +1,72 @@ +package digital.laboratory.platform.entrustment.config; + +import digital.laboratory.platform.common.core.util.R; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.NoHandlerFoundException; + +import java.util.HashMap; +import java.util.Map; + +/** + * Spring Boot 自定义异常处理 + * 所有的异常都派生自 Exception, 如果我们定义了某个异常的处理 Handler, Spring Boot 会调用用对应的异常 Handler, 否则会调用 Exception Handler. + * 有一个前提是在 application.yml 中定义两个属性, 让 springboot 在没有找到 url 的处理器触发异常; 让 springboot 不要自作多情加 /error 这个 map + * mvc: + * throw-exception-if-no-handler-found: true + * web: + * resources: + * add-mappings: false + * 只有如此, springboot 才会触发异常。 + * + */ + + +@ControllerAdvice +public class ErrorController { + + @ExceptionHandler(Exception.class) + @ResponseBody + public ResponseEntity error(Exception ex) { +System.out.println("ErrorController.error Exception"); +ex.printStackTrace(); + Map map = new HashMap<>(); + map.put("Exception", ex.getClass().getName()); + map.put("message", ex.getMessage()); + map.put("localizedMessage", ex.getLocalizedMessage()); + map.put("toString", ex.toString()); + + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(R.failed(map, "发生异常 "+ex.getMessage())); + } + + + @ExceptionHandler(value = {NoHandlerFoundException.class}) + @ResponseBody + public ResponseEntity error(NoHandlerFoundException ex) { +//System.out.println("ErrorController.error NoHandlerFoundException"); +//ex.printStackTrace(); +// //ex.getRawStatusCode() + Map map = new HashMap<>(); + map.put("Exception", ex.getClass().getName()); + map.put("message", ex.getMessage()); + map.put("localizedMessage", ex.getLocalizedMessage()); + map.put("requestURL", ex.getRequestURL()); + map.put("httpMethod", ex.getHttpMethod()); +// map.put("cause", ex.getCause().toString()); + map.put("toString", ex.toString()); +// map.put("comments", "单独的 ExceptionHandler, 系统管理捕获的全局异常 NoHandlerFoundException"); +// //return map; +// //ResponseEntity> r = new ResponseEntity>(map, HttpStatus.INTERNAL_SERVER_ERROR); +// //ResponseEntity> r = new ResponseEntity>(map, HttpStatus.NOT_FOUND); +// //return r; +// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(map); + + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(R.failed(map, "没有找到")); + } + + +} + diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/MyDatasources.java b/src/main/java/digital/laboratory/platform/entrustment/config/MyDatasources.java new file mode 100644 index 0000000..09b6e81 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/MyDatasources.java @@ -0,0 +1,21 @@ +package digital.laboratory.platform.entrustment.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; + +import javax.sql.DataSource; + +@Configuration +public class MyDatasources { + @Bean(name = "businessDataSource") + @Primary + @ConfigurationProperties(prefix = "dlp.datasource") + public DataSource primaryDataSource() { + return DataSourceBuilder.create().build(); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/ProcessInfoListJsonHandler.java b/src/main/java/digital/laboratory/platform/entrustment/config/ProcessInfoListJsonHandler.java new file mode 100644 index 0000000..129ff3a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/ProcessInfoListJsonHandler.java @@ -0,0 +1,68 @@ +package digital.laboratory.platform.entrustment.config; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import digital.laboratory.platform.sewage.entity.UpdateInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +@Slf4j +@MappedTypes({List.class}) // 指定与其关联的 Java 类型列表。 如果在 javaType 属性中也同时指定,则注解上的配置将被忽略。 +@MappedJdbcTypes(JdbcType.JAVA_OBJECT) // 注解指定与其关联的 JDBC 类型列表。 如果在 jdbcType 属性中也同时指定,则注解上的配置将被忽略。 +// public class ProcessInfoListJsonHandler extends BaseMybatisList2JsonHandler { +// } +public class ProcessInfoListJsonHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) + throws SQLException { + String data = rs.getString(columnName); + //List r = StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class) getRawType()); +System.out.println(String.format("ProcessInfoListJsonHandler.getNullableResult, data=%s", data)); + List r = StringUtils.isBlank(data) ? null : JSON.parseArray(data, UpdateInfo.class); + return r; + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String data = rs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, UpdateInfo.class); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + String data = cs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, UpdateInfo.class); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + List r = super.getResult(rs, columnName); + return r; + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + return super.getResult(rs, columnIndex); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + return super.getResult(cs, columnIndex); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/StringListJsonHandler.java b/src/main/java/digital/laboratory/platform/entrustment/config/StringListJsonHandler.java new file mode 100644 index 0000000..900ee8d --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/StringListJsonHandler.java @@ -0,0 +1,70 @@ +package digital.laboratory.platform.entrustment.config; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +@Slf4j +@MappedTypes({List.class}) // 指定与其关联的 Java 类型列表。 如果在 javaType 属性中也同时指定,则注解上的配置将被忽略。 +@MappedJdbcTypes(JdbcType.VARCHAR) +// public class StringListJsonHandler extends BaseMybatisList2JsonHandler { +// } +public class StringListJsonHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) + throws SQLException { + String data = rs.getString(columnName); + //List r = StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class) getRawType()); + List r = StringUtils.isBlank(data) ? null : JSON.parseArray(data, String.class); + System.out.println(String.format("StringListJsonHandler.getNullableResult, columnName=%s data=%s r=%s", columnName, data, r)); + return r; + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String data = rs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, String.class); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + String data = cs.getString(columnIndex); + return StringUtils.isBlank(data) ? null : JSON.parseArray(data, String.class); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + List r = super.getResult(rs, columnName); + System.out.println(String.format("StringListJsonHandler.getResult, columnName=%s r=%s", columnName, r)); + return r; + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + return super.getResult(rs, columnIndex); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + return super.getResult(cs, columnIndex); + } +} + + diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/WebSecurityConfigurer.java b/src/main/java/digital/laboratory/platform/entrustment/config/WebSecurityConfigurer.java new file mode 100644 index 0000000..5056718 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/WebSecurityConfigurer.java @@ -0,0 +1,28 @@ +package digital.laboratory.platform.entrustment.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.context.SecurityContextHolder; + +//@EnableOAuth2Sso +@Configuration + +public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { + + @Override + public void configure(WebSecurity web) { + SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); + web.ignoring().antMatchers("/", "/static/**", "/static/dist/**", "/hello**", "/favicon.ico**", "/login", "/login-callback", "/v2/**", "/papp/v2/**", "/papp/entrustment/common/**"); + } + + @Override + public void configure(HttpSecurity http) throws Exception { + + http.csrf().disable() + .authorizeRequests() + .antMatchers("/", "/static/**", "/static/dist/**", "/hello**", "/favicon.ico**", "/login", "/login-callback", "/v2/**", "/papp/v2/**", "/papp/entrustment/common/**").permitAll() + .anyRequest().permitAll(); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/config/properties/ApiPathProperties.java b/src/main/java/digital/laboratory/platform/entrustment/config/properties/ApiPathProperties.java new file mode 100644 index 0000000..93ca979 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/config/properties/ApiPathProperties.java @@ -0,0 +1,17 @@ +package digital.laboratory.platform.entrustment.config.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "countrydrugsystem.apipath") +@Data +public class ApiPathProperties { + private String tokenPath; + private String taskListPath; + private String receivePath; + private String closePath; + private String rejectPath; + private String returnPath; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java b/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java new file mode 100644 index 0000000..916f158 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/constant/EntrustMarkConstants.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.constant; + +/** + * 统计的各个中文名称常量接口 + */ +public interface EntrustMarkConstants { + + String CASE_ACCEPT = "案件受理"; + + String REVIEW_OR_APPROVAL = "审核/审批"; + + String SEWAGE_JOB_ACCEPT = "污水任务受理"; + + String SUB_CENTERS = "分中心"; + + String PUBLIC_SECURITY_BUREAU = "公安局"; + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/ATestController.javax b/src/main/java/digital/laboratory/platform/entrustment/controller/ATestController.javax new file mode 100644 index 0000000..fc03cdc --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/ATestController.javax @@ -0,0 +1,87 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.util.StrUtil; +import digital.laboratory.platform.common.feign.RemoteWord2PDFService; +import feign.Response; +import lombok.RequiredArgsConstructor; +import org.apache.commons.io.FileUtils; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Enumeration; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/test" ) +public class ATestController { + private final RemoteWord2PDFService remoteWord2PDFService; + + + @GetMapping("/convert") + public String convert() throws IOException { + + File file = new File("E:\\01.鉴定委托书--陕西分中心(1).docx"); + FileInputStream fis = new FileInputStream(file); + MockMultipartFile mockMultipartFile = new MockMultipartFile("file", file.getName(), "image/jpg", fis); + Response r = remoteWord2PDFService.word2pdf(mockMultipartFile); + fis.close(); + File destFile = new File("E:\\", "test.pdf"); + FileUtils.copyInputStreamToFile(r.body().asInputStream(), destFile); + return "OK"; + } + + + @GetMapping("/ip") + public String ip(HttpServletRequest request) throws IOException { + String ret = ""; + + ret += "Request Headers:\n"; + ret += "---------------------------------\n"; + Enumeration headerNames = request.getHeaderNames(); + while(headerNames.hasMoreElements()){ + String paramName = (String)headerNames.nextElement(); + String paramValue = request.getHeader(paramName); + ret += paramName+" = "+paramValue+"\n"; + } + ret += "---------------------------------\n"; + ret += "\nrequest.getRequestedSessionId(): "+request.getRequestedSessionId(); + ret += "\nrequest.getMethod(): "+request.getMethod(); + ret += "\nrequest.getRequestURL(): "+request.getRequestURL(); + ret += "\nrequest.getRequestURI(): "+request.getRequestURI(); + ret += "\nrequest.getPathInfo(): "+request.getPathInfo(); + ret += "\nrequest.getContextPath(): "+request.getContextPath(); + ret += "\nrequest.getPathTranslated(): "+request.getPathTranslated(); + ret += "\nrequest.getQueryString(): "+request.getQueryString(); + ret += "\nrequest.getRemoteUser(): "+request.getRemoteUser(); + ret += "\nrequest.getRemoteAddr(): "+request.getRemoteAddr(); + ret += "\nrequest.getRemoteHost(): "+request.getRemoteHost(); + ret += "\nrequest.getRemotePort(): "+request.getRemotePort(); + ret += "\nrequest.getAuthType(): "+request.getAuthType(); + ret += "\nrequest.getServletPath(): "+request.getServletPath(); + + return "

"+ret+"
"; + } + + String localVar = ""; + + @GetMapping("/var") + public String var(@RequestParam(value = "var", required = false) String var, HttpServletRequest request) throws IOException { + String ret = ""; + if (StrUtil.isNotBlank(var)) { + localVar = var; + ret += "Set localVar to ["+localVar+"]\n"; + } + + ret += "localVar 的值是 ["+localVar+"]\n"; + + return "
"+ret+"
"; + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEventController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEventController.java new file mode 100644 index 0000000..ccca219 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEventController.java @@ -0,0 +1,679 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +//import digital.laboratory.platform.common.security.service.DLPUser; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.othersys.vo.EntrustDataVo; +import digital.laboratory.platform.entrustment.service.CaseEventService; +import digital.laboratory.platform.entrustment.service.CaseEvidenceService; +import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; +import digital.laboratory.platform.entrustment.service.EntrustmentService; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import digital.laboratory.platform.sys.entity.SysOrg; +import digital.laboratory.platform.sys.feign.RemoteOrgService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.security.Principal; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; + + +/** + * 案件事件 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 案件事件 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/case") +@Api(tags = "001-案件管理") +public class CaseEventController { + private final CaseEventService caseEventService; + private final CaseEvidenceService caseEvidenceService; + private final EntrustmentService entrustmentService; + private final EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + private final RemoteOrgService remoteOrgService; + private final OssFile ossFile; + + + /** + * 通过id查询案件事件 + * + * @param id id + * @param forEdit 如果为true, 表示为编辑而取数据, 返回结果中 caseOwnOrgAncestors 属性为案属机构祖先 id 数组 + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasAnyPermission('CaseGet')") + public R getById(@PathVariable("id") String id, Boolean forEdit) { + CaseEventVO cevo = caseEventService.getCaseVOById(id); + if ((forEdit != null) && (forEdit)) { + System.out.println(String.format("getById forEdit=%s", forEdit)); + R> rOrg = remoteOrgService.getAncestorids(cevo.getCaseOwnOrgId()); + cevo.setCaseOwnOrgAncestors(rOrg.getData()); + System.out.println(String.format("getById forEdit=%s getAncestorids=", forEdit, rOrg)); + } + +// cevo.setCaseOwnOrgAncestors(); + return R.ok(cevo); + } + +// /** +// * 分页查询 +// * @param page 分页对象 +// * @param caseEvent 案件事件 +// * @return +// */ +// @ApiOperation(value = "分页查询", notes = "分页查询") +// @GetMapping("/page" ) +// public R getCaseEventPage(Page page, CaseEvent caseEvent) { +// System.out.println(String.format("getCaseEventPage, caseEvent=%s", caseEvent.toString())); +// return R.ok(caseEventService.page(page, Wrappers.query() +// )); +// } + + /** + * 分页查询 + * + * @param page + * @param fromDate + * @param toDate + * @param caseName + * @param caseType + * @return R> + */ + @GetMapping("/page") + @PreAuthorize("@pms.hasAnyPermission('CaseList')") + public R> getCaseEventPage(Page page, String fromDate, String toDate, String caseName, String caseType, String orgId, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + if (!dlpUser.isStaff()) { + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + } + + System.out.println(String.format("getCaseEventPage, fromDate=%s, toDate=%s, caseName=%s, caseType=%s", fromDate, toDate, caseName, caseType)); + IPage thePage = caseEventService.getCaseVoPage(page, Wrappers.query() + .like(StrUtil.isNotBlank(caseName), "cj.case_name", caseName) + .eq(StrUtil.isNotBlank(caseType), "cj.case_type", caseType) + //.eq(StrUtil.isNotBlank(criminalType), "cj.criminal_type", criminalType) + .eq(StrUtil.isNotBlank(orgId), "cj.case_own_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "cj.happen_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "cj.happen_time", toDate) + .orderByDesc("create_time") //按创建时间降序排序 + ); + R> r = R.ok(thePage); + return r; + } + +// @GetMapping("/list" ) +// //@PreAuthorize("@pms.hasPermission('entrustment_caseevent_get')" ) +// public R getCaseEventVOList(String fromDate, String toDate, String caseName, String caseType, String criminalType) { +// System.out.println(String.format("getCaseEventVOList, fromDate=%s, toDate=%s, caseName=%s, caseType=%s, criminalType=%s", fromDate, toDate, caseName, caseType, criminalType)); +// return R.ok(caseEventService.getCaseVoList(fromDate, toDate, caseName, caseType, criminalType)); +// } +// + + /** + * 新增案件事件 + * + * @param caseEvent 案件事件 + * @return R + */ + @ApiOperation(value = "新增案件事件", notes = "新增案件事件。案件名称是必填项; 案件 id 不需要, 由系统自动生成; 案件编号 caseNo 依赖于案件所属单位和案发日期, 如果提供了这两个属性, 系统会自动生成案件编号") + @SysLog("新增案件、事件") + @PostMapping + @PreAuthorize("@pms.hasAnyPermission('CaseCreate')") + public R postAddObject(@RequestBody CaseEvent caseEvent, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + if (StrUtil.isEmpty(caseEvent.getCaseName())) { + return R.failed("案件名称不能为空!"); + } + if (StrUtil.isBlank(caseEvent.getCaseOwnOrgId())) { + caseEvent.setCaseOwnOrgId(dlpUser.getOrgId()); // 设置案件所属机构为用户所属机构, 即使是鉴定中心员工代录, 也先设置为鉴定中心 + } else { + if (!dlpUser.isStaff()) { + if (!StrUtil.equalsIgnoreCase(caseEvent.getCaseOwnOrgId(), dlpUser.getOrgId())) { + return R.failed("案件所属单位必须是你所属单位!"); + } + } + } + if (caseEventService.postAddObject(caseEvent)) { + return R.ok(caseEvent, "新增案件成功"); + } else { + return R.failed(caseEvent, "新增案件失败"); + } + } + + /** + * 修改案件事件 + * + * @param caseEvent 案件事件 + * @return R + */ + @ApiOperation(value = "修改案件事件", notes = "修改案件事件") + @SysLog("修改案件事件") + @PutMapping + @PreAuthorize("@pms.hasAnyPermission('CaseEdit')") + public R putUpdateById(@RequestBody CaseEvent caseEvent, HttpServletRequest theHttpServletRequest) { + if (StrUtil.isBlank(caseEvent.getId())) { + return R.failed(caseEvent, "id 不能为空!"); + } + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + if (!dlpUser.isStaff()) { + // 不是鉴定中心员工, 检查一下案件所属机构与用户是不是同一机构 + CaseEvent oldCase = caseEventService.getById(caseEvent.getId()); + if (oldCase == null || StrUtil.isBlank(oldCase.getCaseOwnOrgId()) || (!StrUtil.equalsIgnoreCase(oldCase.getCaseOwnOrgId(), dlpUser.getOrgId()))) { + return R.failed(caseEvent, "只能修改自己单位的案件!"); + } + } + + if (StrUtil.isEmpty(caseEvent.getCaseName())) { + return R.failed(caseEvent, "案件名称不能为空!"); + } + + if (StrUtil.isBlank(caseEvent.getCaseNo())) { + // 如果没有提供案件编码, 生成一个 + + if ((caseEvent.getHappenTime() != null) && (StrUtil.isNotBlank(caseEvent.getCaseOwnOrgId()))) { + SysOrg caseOwnOrg = null; + R r = remoteOrgService.getById(caseEvent.getCaseOwnOrgId()); + if (r.getCode() == CommonConstants.SUCCESS) { + caseOwnOrg = (SysOrg) r.getData(); + + Date happenTime = Date.from(caseEvent.getHappenTime().atZone(ZoneId.systemDefault()).toInstant()); + ; + caseEvent.setCaseNo(caseEventService.getNewCaseCode(caseOwnOrg.getOrgCode(), happenTime)); + } else { + return R.failed(String.format("没有找到 orgId 为 %s 的机构, 请确认案件所属机构(CaseOwnOrg)的正确性!", caseEvent.getCaseOwnOrgId())); + } + } + } + caseEvent.setCreateBy(null); + caseEvent.setCreateTime(null); + caseEvent.setUpdateBy(dlpUser.getId()); + caseEvent.setUpdateTime(LocalDateTime.now()); + if (caseEventService.updateById(caseEvent)) { + return R.ok(caseEvent, "保存案件信息成功"); + } else { + return R.failed(caseEvent, "保存案件信息失败"); + } + } + + /** + * 通过id删除案件事件 + * 删除案件的前提是这个案件相关的委托从未提交过, 或根本就没有委托 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除案件事件", notes = "通过id删除案件事件") + @SysLog("通过id删除案件事件") + @DeleteMapping("/{id}") + @PreAuthorize("@pms.hasAnyPermission('CaseDelete')") + public R deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) throws Exception { + if (StrUtil.isBlank(id)) { + return R.failed("必须把 caseId 作为路径的一部分提供!"); + } + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + CaseEvent ce = caseEventService.deleteById(id, dlpUser); + + if (ce != null) { + return R.ok(ce, "案件删除成功"); + } else { + return R.failed(ce, "案件删除失败"); + } + } + + /** + * 取指定案件的附件列表 + * + * @param caseId + * @return + */ + @GetMapping("/attachment/{caseId}/list") + @PreAuthorize("@pms.hasAnyPermission('CaseAttachmentList')") + public R getAttachmentList(@PathVariable("caseId") String caseId) { + CaseEvent cj = caseEventService.getById(caseId); + if (cj != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/" + caseId)); + } + return R.failed("不存在这个案件"); + } + + /** + * 取指定案件的指定附件 + * + * @param caseId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @GetMapping("/attachment/{caseId}/{fileName}") + @PreAuthorize("@pms.hasAnyPermission('CaseAttachmentDownload')") + public void getAttachmentObj(@PathVariable("caseId") String caseId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + CaseEvent cj = caseEventService.getById(caseId); + if (cj != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.CASE_DIRECTORY + "/" + caseId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } else { + httpServletResponse.sendError(404, "不存在这个案件"); + } + + } + + @PostMapping(value = "/attachment/{caseId}") + @PreAuthorize("@pms.hasAnyPermission('CaseAttachmentUpload')") + public R uploadAttachmentObj(@PathVariable("caseId") String caseId, @RequestPart("file") MultipartFile file) throws Exception { + System.out.println(String.format("uploadPhotoObj: caseId=%s OriginalFilename=%s", caseId, file.getOriginalFilename())); + CaseEvent cj = caseEventService.getById(caseId); + if (cj != null) { + String path = OSSDirectoryConstants.CASE_DIRECTORY + "/" + caseId; + boolean r = ossFile.fileUpload(file, path); + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed(ResultData, "上传失败"); + } else { + return R.failed("不存在这个案件"); + } + } + + @PostMapping(value = "/attachment_base64/{caseId}") + @PreAuthorize("@pms.hasAnyPermission('CaseAttachmentUpload')") + public R uploadAttachmentObj_Base64(@PathVariable("caseId") String caseId, @RequestBody JSONObject jsonParam) throws Exception { + System.out.println(String.format("uploadPhotoObj: caseId=%s jsonParam.size()=%d", caseId, jsonParam.size())); + CaseEvent cj = caseEventService.getById(caseId); + if (cj != null) { + + String image = jsonParam.getString("image"); + //System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.CASE_DIRECTORY + "/" + caseId; + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + + } + return R.failed("不存在这个案件"); + } + + + @DeleteMapping("/attachment/{caseId}/{fileName}") + @PreAuthorize("@pms.hasAnyPermission('CaseAttachmentDelete')") + public R deleteAttachmentObj(@PathVariable("caseId") String caseId, @PathVariable String fileName) throws Exception { + CaseEvent cj = caseEventService.getById(caseId); + if (cj != null) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/" + caseId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } + return R.failed("不存在这个案件"); + } + + //===================================================================================== + + /** + * 通过id删除案件事件, 仅供测试使用, 允许级联删除: 案件/物证/委托/检材/样本 + * 删除案件的前提是这个案件相关的委托从未提交过, 或根本就没有委托 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除案件事件", notes = "通过id删除案件事件") + @SysLog("通过id删除案件事件") + @DeleteMapping("/admin/{id}") + @PreAuthorize("@pms.hasAnyPermission('CaseAdmin')") + public R test_deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) throws Exception { + if (StrUtil.isBlank(id)) { + return R.failed("必须把 caseId 作为路径的一部分提供!"); + } + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + CaseEvent ce = caseEventService.getById(id); + if (ce == null) { + return R.failed(String.format("不存在 caseId 为 %s 的案件!", id)); + } + + if (!dlpUser.isStaff()) { + // 不是鉴定中心员工, 检查一下案件所属机构与用户是不是同一机构 + if (StrUtil.isBlank(ce.getCaseOwnOrgId()) || (!StrUtil.equalsIgnoreCase(ce.getCaseOwnOrgId(), dlpUser.getOrgId()))) { + return R.failed("只能删除自己单位的案件!"); + } + } + + List entrustmentList = entrustmentService.list(Wrappers.query() + .eq("case_id", id) + ); + // for (Entrustment e : entrustmentList) { + // if (StrUtil.isNotBlank(e.getProcessInstanceId())) { + // return R.failed(String.format("这个案件的委托 %s 已经提交过, 不能删除!", e.getEntrustmentNo())); + // } + // } + + //--- 到这里, 没有委托或者所有委托都没有提交过, 原则上可删除这个案件 --- + // 我们要按顺序删除案件相关的东西 + + for (Entrustment e : entrustmentList) { + // 删除全部检材 + List eimList = entrustmentIdentificationMaterialService.list(Wrappers.query().eq("entrustment_id", e.getId())); + for (EntrustmentIdentificationMaterial eim : eimList) { + // 删除检材的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + eim.getEntrustmentId() + "/" + eim.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + eim.getEntrustmentId() + "/" + eim.getId() + "/" + attName); + } + // 删除检材本身 + entrustmentIdentificationMaterialService.removeById(eim.getId()); + } + + // 删除委托的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + e.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + e.getId() + "/" + attName); + } + + // 删除委托本身 + entrustmentService.removeById(e.getId()); + } + + // 删除全部物证 + List evidenceList = caseEvidenceService.list(Wrappers.query().eq("case_id", id)); + for (CaseEvidence evidence : evidenceList) { + // 删除物证的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/" + evidence.getCaseId() + "/" + evidence.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/" + evidence.getCaseId() + "/" + evidence.getId() + "/" + attName); + } + // 删除物证本身 + caseEvidenceService.removeById(evidence.getId()); + } + // 删除案件的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/" + id); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/" + id + "/" + attName); + } + + if (caseEventService.removeById(id)) { + return R.ok(ce, "案件删除成功"); + } else { + return R.failed(ce, "案件删除失败"); + } + } + + + // 获取公安部禁毒大数据平台的数据同步到系统 + @ApiOperation(value = "获取公安部禁毒大数据平台的数据同步到系统", notes = "接口格式\n" + + "{\n" + + " \"statusCode\": \"SUCCESS\",\n" + + " \"result\": {\n" + + " \"pageCount\": \"1\",\n" + + " \"recordCount\": \"2\",\n" + + " \"list\": [\n" + + " {\n" + + " \"id\": \"cGwrMERuWW50UXhjZEJzaERkaEgzbjNFU09jQi9DWU4=\",\n" + + " \"entrustSerialNumber\": \"WT-2023-0001\",\n" + + " \"status\": \"toAccept\",\n" + + " \"submitTime\": \"2023-05-26 16:02:58\",\n" + + " \"acceptTime\": \"\",\n" + + " \"finishTime\": \"\",\n" + + " \"entrustOrganization\": \"陕西省西安市新城区禁毒大队\",\n" + + " \"scheduledDate\": \"\",\n" + + " \"createUserDeptRegionCode\": \"610102\",\n" + + " \"caseName\": \"张三涉毒案\",\n" + + " \"materialType\": \"inVitro\",\n" + + " \"materialDescribe\": \"粉末2份,塑料袋包装\",\n" + + " \"entrustRequirement\": \"对1号检材中的海洛因进行定性分析,对2号检材中的甲基苯丙胺进行定性分析\",\n" + + " \"reportSendType\": \"takeFromOneself\",\n" + + " \"analysisStartTime\": \"\",\n" + + " \"analysisEndTime\": \"\",\n" + + " \"userList\": [\n" + + " {\n" + + " \"name\": \"赵小辉\",\n" + + " \"position\": \"科员\",\n" + + " \"cardType\": \"policeOfficerCard\",\n" + + " \"certificatesCode\": \"001223\",\n" + + " \"phone\": \"13965368974\"\n" + + " },\n" + + " {\n" + + " \"name\": \"吴晓辉\",\n" + + " \"position\": \"科员\",\n" + + " \"cardType\": \"policeOfficerCard\",\n" + + " \"certificatesCode\": \"001224\",\n" + + " \"phone\": \"13789562314\"\n" + + " }\n" + + " ],\n" + + " \"materialList\": [\n" + + " {\n" + + " \"index\": 1,\n" + + " \"name\": \"白色颗粒可疑物\",\n" + + " \"colorType\": \"白色\",\n" + + " \"shapeType\": \"粉末\",\n" + + " \"packageType\": \"塑料袋\",\n" + + " \"amount\": 1,\n" + + " \"unit\": \"gram\",\n" + + " \"targetObjectTypeList\": [\n" + + " \"海洛因\"\n" + + " ],\n" + + " \"analysisType\": \"qualitative\"\n" + + " },\n" + + " {\n" + + " \"index\": 2,\n" + + " \"name\": \"黄色颗粒可疑物\",\n" + + " \"colorType\": \"黄色\",\n" + + " \"shapeType\": \"粉末\",\n" + + " \"packageType\": \"塑料袋\",\n" + + " \"amount\": 1,\n" + + " \"unit\": \"gram\",\n" + + " \"targetObjectTypeList\": [\n" + + " \"甲基苯丙胺\"\n" + + " ],\n" + + " \"analysisType\": \"qualitative\"\n" + + " }\n" + + " ],\n" + + " \"analyseRecordList\": []\n" + + " },\n" + + " {\n" + + " \"id\": \"bk8wMFYvdmdXWlg4SE84amlFQThJbzhHZWdqeDNKeUQ=\",\n" + + " \"status\": \"created\",\n" + + " \"submitTime\": \"\",\n" + + " \"acceptTime\": \"\",\n" + + " \"finishTime\": \"\",\n" + + " \"entrustOrganization\": \"陕西省西安市新城区禁毒大队\",\n" + + " \"scheduledDate\": \"\",\n" + + " \"createUserDeptRegionCode\": \"610102\",\n" + + " \"caseName\": \"王翔涉毒案\",\n" + + " \"materialDescribe\": \"粉末1份、块状固体1份,塑料袋包装,液体1份,塑料瓶包装\",\n" + + " \"entrustRequirement\": \"对1号检材中的甲基苯丙胺、海洛因进行定性、定量分析,对2号检材中的氯胺酮进行定性分析,对3号检材中的氯胺酮进行定量分析\",\n" + + " \"reportSendType\": \"takeFromOneself\",\n" + + " \"analysisStartTime\": \"\",\n" + + " \"analysisEndTime\": \"\",\n" + + " \"userList\": [\n" + + " {\n" + + " \"name\": \"刘1\",\n" + + " \"position\": \"科员\",\n" + + " \"cardType\": \"policeOfficerCard\",\n" + + " \"certificatesCode\": \"002366\",\n" + + " \"phone\": \"13723569874\"\n" + + " },\n" + + " {\n" + + " \"name\": \"刘2\",\n" + + " \"position\": \"科员\",\n" + + " \"cardType\": \"policeOfficerCard\",\n" + + " \"certificatesCode\": \"002367\",\n" + + " \"phone\": \"13652147896\"\n" + + " }\n" + + " ],\n" + + " \"materialList\": [\n" + + " {\n" + + " \"index\": 1,\n" + + " \"name\": \"白色粉末可疑物\",\n" + + " \"colorType\": \"白色\",\n" + + " \"shapeType\": \"粉末\",\n" + + " \"packageType\": \"塑料袋\",\n" + + " \"amount\": 1,\n" + + " \"unit\": \"gram\",\n" + + " \"targetObjectTypeList\": [\n" + + " \"甲基苯丙胺\",\n" + + " \"海洛因\"\n" + + " ],\n" + + " \"analysisType\": \"qualitativeAndRation\"\n" + + " },\n" + + " {\n" + + " \"index\": 2,\n" + + " \"name\": \"红色块状物\",\n" + + " \"colorType\": \"红色\",\n" + + " \"shapeType\": \"块状固体\",\n" + + " \"packageType\": \"塑料袋\",\n" + + " \"amount\": 10,\n" + + " \"unit\": \"gram\",\n" + + " \"targetObjectTypeList\": [\n" + + " \"氯胺酮\"\n" + + " ],\n" + + " \"analysisType\": \"qualitative\"\n" + + " },\n" + + " {\n" + + " \"index\": 3,\n" + + " \"name\": \"黄色不明物\",\n" + + " \"colorType\": \"黄色\",\n" + + " \"shapeType\": \"液体\",\n" + + " \"packageType\": \"塑料瓶\",\n" + + " \"amount\": 1,\n" + + " \"unit\": \"milliliter\",\n" + + " \"targetObjectTypeList\": [\n" + + " \"氯胺酮\"\n" + + " ],\n" + + " \"analysisType\": \"ration\"\n" + + " }\n" + + " ],\n" + + " \"analyseRecordList\": []\n" + + " }\n" + + " ]\n" + + " }\n" + + "}\n" + + "") + @SysLog("同步案件信息数据到系统") + @PostMapping("/syncInfo") + public R syncCaseEventInfo(@RequestBody EntrustDataVo entrustDataVo) { + + /*JSONObject dataObj = jsonParam.getJSONObject("result"); + JSONArray dataObjDetailList = dataObj.getJSONArray("list");*/ + Map>> caseEvents = caseEventService.syncCaseEventInfo(entrustDataVo, null, true); + return R.ok(caseEvents); + } + + @ApiOperation(value = "检查案件是否能修改", notes = "检查案件是否能修改") + @GetMapping("/checkCaseIsEnableModify") + public R checkCaseIsEnableModify(String caseId) { + return R.ok(caseEventService.checkCaseIsEnableModify(caseId), "获取数据成功"); + } + + + //===================================================================================== + // 测试, 创建 100 个案件 + @GetMapping("/create100") + public R xxx_TestCreate100() { + for (int i = 0; i < 100; i++) { + CaseEvent cj = new CaseEvent(); + cj.setId(IdWorker.get32UUID().toUpperCase()); + String ownOrgId = "520100"; + String ownOrgCode = "520100"; + cj.setHappenTime(LocalDateTime.now()); + cj.setCaseName("第" + i + "个测试案件"); + cj.setCaseType(String.format("%d", RandomUtil.randomInt(1, 6))); + //cj.setCriminalType(String.format("%d",RandomUtil.randomInt(1, 5)*1000)); + cj.setCaseArea(RandomUtil.randomNumbers(6)); + cj.setCaseAddress(RandomUtil.randomString(100)); + cj.setCaseOwnOrgId(ownOrgId); + + // 如果没有提供案件编码, 生成一个 + Date happenTime = Date.from(cj.getHappenTime().atZone(ZoneId.systemDefault()).toInstant()); + ; + cj.setCaseNo(caseEventService.getNewCaseCode(ownOrgCode, happenTime)); + + if (caseEventService.save(cj)) { + System.out.println("新增案件成功"); + } else { + System.out.println("新增案件失败"); + } + + } + return R.ok("100 of case ware Created"); + /*this is new update*/ + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEvidenceController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEvidenceController.java new file mode 100644 index 0000000..1ad19fd --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/CaseEvidenceController.java @@ -0,0 +1,427 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.core.util.TestUtils; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.entrustment.service.CaseEventService; +import digital.laboratory.platform.entrustment.service.CaseEvidenceService; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.math.BigDecimal; +import java.security.Principal; +import java.time.LocalDateTime; +import java.util.*; + + +/** + * 与案件相关的物证信息 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 案件的物证管理 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/case_evidence" ) +@Api( tags = "002-案件的物证管理") +public class CaseEvidenceController { + private final CaseEventService caseEventService; + private final CaseEvidenceService caseEvidenceService; + private final OssFile ossFile; + + /** + * 通过id查询与案件相关的物证信息 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceGet')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(caseEvidenceService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param caseEvidence 与案件相关的物证信息 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceList')" ) + public R getCaseEvidencePage(Page page, CaseEvidence caseEvidence) { + return R.ok(caseEvidenceService.page(page, Wrappers.query(caseEvidence))); + } + + /** + * 查询案件的物证数量 + * @param caseId 案件id + * @return + */ + @ApiOperation(value = "查询案件的物证数量", notes = "查询案件的物证数量") + @GetMapping("/count" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceList')" ) + public R getCaseEvidenceCount(String caseId) { + long count = caseEvidenceService.countByCaseId(caseId); + Map ret = new HashMap(); + ret.put("count", count); + return R.ok(count, "查询案件的物证数量成功"); + } + + @GetMapping("/list" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceList')" ) + public R getCaseEvidenceList(String caseId, String caseNo) { + if (StringUtils.isNotBlank(caseNo)) + { + CaseEvent cj = caseEventService.getByCaseNo(caseNo); + if (cj != null) + { + caseId = cj.getId(); + } + else + { + System.out.println(String.format("提供的 caseNo=%s 没有查找到对应的 caseId", caseNo)); + return R.ok(String.format("提供的 caseNo=%s 没有查找到对应的 caseId", caseNo)); + } + } + System.out.println(String.format("getCaseEvidenceList, caseNo=%s, caseId=%s", caseNo, caseId)); + if (StringUtils.isNotEmpty(caseId)) + { + return R.ok(caseEvidenceService.list(Wrappers.query() + .eq("case_id", caseId) + .orderByDesc("create_time") + )); + } + else { + return R.ok("caseId 为空"); + } + } + + + /** + * 新增与案件相关的物证信息 + * @param caseEvidence 与案件相关的物证信息 + * @return R + */ + @ApiOperation(value = "新增与案件相关的物证信息", notes = "新增与案件相关的物证信息") + @SysLog("新增与案件相关的物证信息" ) + @PostMapping + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceCreate')" ) + public R postAddObject(@RequestBody CaseEvidence caseEvidence) { + if (StrUtil.isBlank(caseEvidence.getCaseId())) { + return R.failed(caseEvidence, "物证必须与某个案件关联, 必须提供 caseId"); + } + + CaseEvent cj = caseEventService.getById(caseEvidence.getCaseId()); + if (cj == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的案件", caseEvidence.getCaseId())); + } + if (StrUtil.isBlank(cj.getCaseNo())) { + throw new RuntimeException(String.format("对应的案件资料不完整, 不存在案件编号。请先完善案件资料")); + } + + caseEvidence.setId(IdWorker.get32UUID().toUpperCase()); + if (StrUtil.isBlank(caseEvidence.getEvidenceNo())) { + caseEvidence.setEvidenceNo(caseEvidenceService.getNewEvidenceCode(cj.getCaseNo())); + } + if (caseEvidenceService.save(caseEvidence)) { + return R.ok(caseEvidence, "新增物证成功"); + } + else { + return R.failed(caseEvidence, "新增物证失败"); + } + } + + /** + * 修改与案件相关的物证信息 + * @param caseEvidence 与案件相关的物证信息 + * @return R + */ + @ApiOperation(value = "修改与案件相关的物证信息", notes = "修改与案件相关的物证信息") + @SysLog("修改与案件相关的物证信息" ) + @PutMapping + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceEdit')" ) + public R putUpdateById(@RequestBody CaseEvidence caseEvidence, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + if (StrUtil.isBlank(caseEvidence.getId())) { + return R.failed(caseEvidence, "物证信息中没有物证标识 id"); + } + + if (StrUtil.isBlank(caseEvidence.getCaseId())) { + return R.failed(caseEvidence, "物证必须与某个案件关联, 必须提供 caseId"); + } + + CaseEvent cj = caseEventService.getById(caseEvidence.getCaseId()); + if (cj == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的案件", caseEvidence.getCaseId())); + } + if (StrUtil.isBlank(cj.getCaseNo())) { + throw new RuntimeException(String.format("对应的案件资料不完整, 不存在案件编号。请先完善案件资料")); + } + if (StrUtil.isBlank(caseEvidence.getEvidenceNo())) { + caseEvidence.setEvidenceNo(caseEvidenceService.getNewEvidenceCode(cj.getCaseNo())); + } + + caseEvidence.setCreateBy(null); + caseEvidence.setCreateTime(null); + caseEvidence.setUpdateBy(dlpUser.getId()); + caseEvidence.setUpdateTime(LocalDateTime.now()); + + if (caseEvidenceService.updateById(caseEvidence)) { + return R.ok(caseEvidence, "保存物证信息成功"); + } + else { + return R.failed(caseEvidence, "保存物证信息失败"); + } + } + + /** + * 通过id删除与案件相关的物证信息 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除与案件相关的物证信息", notes = "通过id删除与案件相关的物证信息") + @SysLog("通过id删除与案件相关的物证信息" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceDelete')" ) + public R deleteById(@PathVariable String id) { + if (StrUtil.isBlank(id)) { + return R.failed("必须把物证 id 作为路径的一部分提供!"); + } + CaseEvidence evidence = caseEvidenceService.getById(id); + if (evidence == null) { + return R.failed(String.format("不存在 id 为 %s 的物证", id)); + } + + List attList = ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/"+ evidence.getCaseId() + "/" + id); + + long attCount = attList.size(); + if (attCount>0) { + return R.failed(String.format("这个物证下有 %d 个附件, 必须先删除全部附件后才能删除物证!", attCount)); + } + + if (caseEvidenceService.removeById(id)) { + return R.ok(evidence, "物证删除成功"); + } + else { + return R.failed(evidence, "物证删除失败"); + } + + } + + + /** + * 取指定物证的附件列表 + * @param evidenceId + * @return + */ + @GetMapping("/attachment/{evidenceId}/list" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceAttachmentList')" ) + public R getAttachmentList(@PathVariable("evidenceId") String evidenceId) { + CaseEvidence ce = caseEvidenceService.getById(evidenceId); + if (ce != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/"+ ce.getCaseId() + "/" + evidenceId)); + } + return R.failed("不存在这个物证"); + } + + /** + * 取指定物证的指定附件 + * @param evidenceId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @GetMapping("/attachment/{evidenceId}/{fileName}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceAttachmentDownload')" ) + public void getAttachmentObj(@PathVariable("evidenceId") String evidenceId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + CaseEvidence ce = caseEvidenceService.getById(evidenceId); + if (ce != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.CASE_DIRECTORY + "/" + ce.getCaseId() + "/" + evidenceId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } + else { + httpServletResponse.sendError(404, "不存在这个物证"); + } + } + + @PostMapping(value = "/attachment/{evidenceId}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceAttachmentUpload')" ) + public R uploadAttachmentObj(@PathVariable("evidenceId") String evidenceId, @RequestPart("file") MultipartFile file) throws Exception { + CaseEvidence ce = caseEvidenceService.getById(evidenceId); + if (ce != null) { + System.out.println(String.format("uploadPhotoObj: caseId=%s evidenceId=%s OriginalFilename=%s", ce.getCaseId(), evidenceId, file.getOriginalFilename())); + String path = OSSDirectoryConstants.CASE_DIRECTORY + "/" + ce.getCaseId() + "/" + evidenceId; + boolean r = ossFile.fileUpload(file, path); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + } + return R.failed("不存在这个物证"); + } + + + @PostMapping(value = "/attachment_base64/{evidenceId}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceAttachmentUpload')" ) + public R uploadAttachmentObj_Base64(@PathVariable("evidenceId") String evidenceId, @RequestBody JSONObject jsonParam) throws Exception { + CaseEvidence ce = caseEvidenceService.getById(evidenceId); + if (ce != null) { + System.out.println(String.format("uploadPhotoObj: caseId=%s evidenceId=%s jsonParam.size()=%d", ce.getCaseId(), evidenceId, jsonParam.size())); + + String image = jsonParam.getString("image"); +// System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.CASE_DIRECTORY + "/" + ce.getCaseId() + "/" + evidenceId ; + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path+ "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } + else { + return R.failed("上传的数据中没有图像"); + } + + } + else { + return R.failed("不存在这个物证"); + } + + } + + @DeleteMapping("/attachment/{evidenceId}/{fileName}" ) + @PreAuthorize("@pms.hasAnyPermission('CaseEvidenceAttachmentDelete')" ) + public R deleteAttachmentObj(@PathVariable("evidenceId") String evidenceId, @PathVariable String fileName) throws Exception { + CaseEvidence ce = caseEvidenceService.getById(evidenceId); + if (ce != null) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/"+ ce.getCaseId() + "/" + evidenceId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } + return R.failed("不存在这个物证"); + } + + + + + //===================================================================================== + // 测试, 为现有的案件创建一些物证 + @GetMapping("/create100" ) + public R xxx_TestCreate100() { + List cjs = caseEventService.getCaseVoList(null, null, null, null); + for (CaseEvent cj : cjs) { + int num = RandomUtil.randomInt(1, 100); + for (int i = 0; i < num; i++) { + List ces = caseEvidenceService.list(Wrappers.query() + .eq("case_id", cj.getId())); + + if (ces.size()>= num) { + break; + } + CaseEvidence ce = new CaseEvidence(); + + ce.setId(IdWorker.get32UUID().toUpperCase()); + ce.setCaseId(cj.getId()); + ce.setEvidenceNo(caseEvidenceService.getNewEvidenceCode(cj.getCaseNo())); + ce.setName(cj.getCaseName()+" 的第 "+i+"个物证"); + + ce.setType(RandomUtil.randomEle(new String[]{"非生物性物证", "生物特性物证"})); + ce.setFieldLabelNo(String.format("现场标牌 %d 号", RandomUtil.randomInt(1, 200))); + ce.setSource(RandomUtil.randomEle(new String[]{"非生物性物证", "生物特性物证"})); + ce.setForm(RandomUtil.randomEle(new String[]{"液体", "粉末", "颗粒物"})); + + ce.setQuantity(BigDecimal.valueOf(Math.round(100*RandomUtil.randomDouble(1, 10))/100.0)); + ce.setColor(RandomUtil.randomEle(new String[]{"红色", "绿色", "蓝色", "紫色", "白色", "黑色", "咖啡色"})); + ce.setUnit(RandomUtil.randomEle(new String[]{"克", "毫克", "升", "毫升", "微升", "块", "颗"})); + ce.setPersonName(TestUtils.genPersonName()); + ce.setPersonCert(RandomUtil.randomEle(new String[]{"身份证", "警官证", "军官证", "士兵证", "护照"})); + ce.setPersonId(RandomUtil.randomNumbers(18)); + //ce.setPersonGender(RandomUtil.randomEle(new String[]{"男", "女", "不明性别"})); + ce.setPersonGender(RandomUtil.randomInt(0, 2)); + ce.setPersonAge(RandomUtil.randomInt(16, 80)); + ce.setPersonAddress(RandomUtil.randomString(12)); + ce.setPersonNationality(RandomUtil.randomEle(new String[]{"中国", "美国", "英国", "法国", "日本"})); + ce.setPersonNation(RandomUtil.randomInt(1, 20)); + ce.setPack(RandomUtil.randomEle(new String[]{"纸袋", "纸盒", "散装", "塑料盒"})); + ce.setDescription( + ce.getName()+", " + +ce.getPack()+"包装," + +"内含 "+ce.getColor()+ce.getForm() + +" "+ce.getQuantity()+" "+ce.getUnit() + ); + + if (caseEvidenceService.save(ce)) { + System.out.println("新增物证成功"); + } + else { + System.out.println("新增物证失败"); + } + + } + } + return R.ok("已经为每个案件创建了 100 个物证"); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/CommonController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/CommonController.java new file mode 100644 index 0000000..4ee3be2 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/CommonController.java @@ -0,0 +1,175 @@ +package digital.laboratory.platform.entrustment.controller; + +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; +import digital.laboratory.platform.entrustment.service.SampleBoxService; +import digital.laboratory.platform.sewage.utils.QRCodeUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.springframework.web.bind.annotation.*; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/common") +@Api(tags = "000-基础功能") +public class CommonController { + private final EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + private final OssFile ossFile; + + private final SampleBoxService sampleBoxService; + + /** + * 根据模板生成检材标签的 html, 供 qz 打印使用 + * + * @return R + */ + @ApiOperation(value = "根据模板生成检材标签的 html, 供 qz 打印使用", notes = "根据模板生成检材标签的 html, 供 qz 打印使用") + @GetMapping("/imlabel/{id}") + public String getIdentificationMaterialLabel(@PathVariable("id") String id, HttpServletResponse httpServletResponse) throws Exception { + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IDENTIFICATION_MATERIAL); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ossFile.fileGet(OSSDirectoryConstants.TEMPLATE_DIRECTORY + "/"+ templateFileName, bos); + String templateString = bos.toString("UTF-8"); + bos.close(); + + try { + // 设置自定义指令使用的类 + Velocity.setProperty("userdirective", + "digital.laboratory.platform.entrustment.misc.VelocityQRCodeImage," + + "digital.laboratory.platform.entrustment.misc.VelocityBarCodeImage"); + //初始化模板 + Velocity.init(); + //获取上下文 + VelocityContext context = new VelocityContext(); + //把数据填入上下文 + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + context.put("im", im); + + StringWriter w = new StringWriter(); + Velocity.evaluate(context, w, "Velocity", templateString); + w.flush(); + return w.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 生成 QRCODE 图像 + * + * @param code QRCODE字符串 + * + * @return R + */ + @ApiOperation(value = "生成 QRCODE 图像", notes = "生成 QRCODE 图像") + @GetMapping("/qrcode/{code}") + public void genQRCode(@PathVariable("code") String code, HttpServletResponse httpServletResponse) throws IOException { + try { + // QR Code + httpServletResponse.setContentType("image/png"); + BufferedImage qrImage = QRCodeUtils.genQRCode(code, 150, 150); + ImageIO.write(qrImage, "png", httpServletResponse.getOutputStream()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } + + /** + * 生成 QRCODE 图像 + * + * @param code QRCODE字符串 + * + * @return R + */ + @ApiOperation(value = "生成 QRCODE 图像 Base64", notes = "生成 QRCODE 图像 Base64") + @GetMapping("/qrcode64/{code}") + public String getQRCodeImageBase64(@PathVariable("code") String code, HttpServletResponse httpServletResponse) throws IOException { + // QR Code + return QRCodeUtils.getQRCodeImageBase64(code, 150, 150); + } + + + /** + * 生成 BARCODE 图像 + * + * @param code QRCODE字符串 + * + * @return R + */ + @ApiOperation(value = "生成 QRCODE 图像", notes = "生成 QRCODE 图像") + @GetMapping("/barcode/{code}") + public void getBarCodeImage(@PathVariable("code") String code, @RequestParam(value = "h", required = false) Integer h, @RequestParam(value = "w", required = false) Integer w, HttpServletResponse httpServletResponse) throws IOException { + int width = 400; + int height = 30; + if ((w != null) && (w > 0)) { + width = w; + } + if ((h != null) && (h > 0)) { + height = h; + } + + try { + // QR Code + httpServletResponse.setContentType("image/png"); + BufferedImage qrImage = QRCodeUtils.getBarCode128Image(code, width, height); + ImageIO.write(qrImage, "png", httpServletResponse.getOutputStream()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } + + /** + * 生成 BARCODE 图像 + * + * @param code QRCODE字符串 + * + * @return R + */ + @ApiOperation(value = "生成 BARCODE 图像 Base64", notes = "生成 BARCODE 图像 Base64") + @GetMapping("/barcode64/{code}") + public String getBarCodeImageBase64(@PathVariable("code") String code, @RequestParam(value = "h", required = false) Integer h, @RequestParam(value = "w", required = false) Integer w, HttpServletResponse httpServletResponse) throws IOException { + int width = 400; + int height = 30; + if ((w != null) && (w > 0)) { + width = w; + } + if ((h != null) && (h > 0)) { + height = h; + } + + return QRCodeUtils.getBarCode128ImageBase64(code, width, height); + } + + + //盒子标签打印 + + /** + * 打印盒子的标签 + * @param sampleBoxID + * @return + * @throws Exception + */ + @ApiOperation(value = "打印盒子标签", notes = "根据盒子ID,打印盒子标签") + @GetMapping("/printBoxLabelBarCode/{sampleBoxID}") + public String getSampleBoxLabel(@PathVariable("sampleBoxID") String sampleBoxID) throws Exception{ + return sampleBoxService.buildSampleBoxLabelContent(sampleBoxID); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/DelivererController.javax b/src/main/java/digital/laboratory/platform/entrustment/controller/DelivererController.javax new file mode 100644 index 0000000..62b8705 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/DelivererController.javax @@ -0,0 +1,196 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.entrustment.entity.Deliverer; +import digital.laboratory.platform.entrustment.service.DelivererService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.security.Principal; +import java.util.List; + + +/** + * 送检员 + * + * @author Zhang Xiaolong created at 2022-08-16 + * @describe 送检员 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/deliverer" ) +@Api(value = "deliverer", tags = "008-送检员管理") +public class DelivererController { + + private final DelivererService delivererService; + + /** + * 通过id查询送检员 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_get')" ) + public R getById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Deliverer deliverer = delivererService.getById(id); + if (deliverer != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), deliverer.getOwnerUserId())) { + return R.ok(deliverer); + } + else { + return R.failed(String.format("你没有权限访问id为 %s 的送检员的数据", id)); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的送检员", id)); + } + } + + /** + * 列表查询 + * @param name 查询条件 + * @return + */ + @ApiOperation(value = "列表查询", notes = "列表查询\n" + + "参数:\n" + + "
\n" +
+			"name 送检员名字, 可以模糊查询, 支持 like %name% " +
+			"
\n" + + "") + @GetMapping("/list" ) +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_get')" ) + public R getDelivererList(@RequestParam(value = "name", required = false)String name, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + //deliverer.setOwnerUserId(dlpUser.getId()); + + List list = delivererService.list(Wrappers.query() + .eq("owner_user_id", dlpUser.getId()) // 只查询当前用户拥有的送检员 + .like(StrUtil.isNotBlank(name), "name", name) + .orderByDesc("name") + ); + return R.ok(list); + } + + + /** + * 分页查询 + * @param page 分页对象 + * @param deliverer 送检员 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_get')" ) + public R getDelivererPage(Page page, Deliverer deliverer, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + deliverer.setOwnerUserId(dlpUser.getId()); + + return R.ok(delivererService.page(page, Wrappers.query() + .eq("owner_user_id", dlpUser.getId()) // 只查询当前用户拥有的送检员 + .like(StrUtil.isNotBlank(deliverer.getName()), "name", deliverer.getName()) + .orderByDesc("name") + )); + } + + + /** + * 新增送检员 + * @param deliverer 送检员 + * @return R + */ + @ApiOperation(value = "新增送检员", notes = "新增送检员") + @SysLog("新增送检员" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_add')" ) + public R postAddObject(@RequestBody Deliverer deliverer, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + deliverer.setOwnerUserId(dlpUser.getId()); + deliverer.setId(IdWorker.get32UUID().toUpperCase()); + + if (delivererService.save(deliverer)) { + return R.ok(deliverer, "新增送检员成功"); + } + else { + return R.failed(deliverer, "新增送检员失败"); + } + + } + + /** + * 修改送检员 + * @param deliverer 送检员 + * @return R + */ + @ApiOperation(value = "修改送检员", notes = "修改送检员") + @SysLog("修改送检员" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_edit')" ) + public R putUpdateById(@RequestBody Deliverer deliverer, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Deliverer oldDeliverer = delivererService.getById(deliverer.getId()); + if (oldDeliverer != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), oldDeliverer.getOwnerUserId())) { + deliverer.setOwnerUserId(dlpUser.getId()); + return R.ok(delivererService.updateById(deliverer)); + } + else { + return R.failed(String.format("你没有权限修改id为 %s 的送检员的数据", deliverer.getId())); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的送检员", deliverer.getId())); + } + } + + /** + * 通过id删除送检员 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除送检员", notes = "通过id删除送检员") + @SysLog("通过id删除送检员" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_del')" ) + public R deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Deliverer oldDeliverer = delivererService.getById(id); + if (oldDeliverer != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), oldDeliverer.getOwnerUserId())) { + if (delivererService.removeById(id)) { + return R.ok(oldDeliverer, "送检员删除成功"); + } + else { + return R.failed(oldDeliverer, "送检员删除失败"); + } + } + else { + return R.failed(String.format("你没有权限删除id为 %s 的送检员", id)); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的送检员", id)); + } + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java new file mode 100644 index 0000000..9414518 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentController.java @@ -0,0 +1,2359 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.lang.Assert; +import com.amazonaws.services.s3.model.AmazonS3Exception; +// import com.jacob.activeX.ActiveXComponent; +// import com.jacob.com.ComThread; +// import com.jacob.com.Dispatch; +// import com.jacob.com.Variant; +import digital.laboratory.platform.common.feign.RemoteGenerateWordService; +import digital.laboratory.platform.common.feign.RemoteWord2PDFService; +import digital.laboratory.platform.sys.dto.entrustment.CommonIdDto; +import digital.laboratory.platform.entrustment.dto.EntrustmentDTO; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.sys.feign.*; +import digital.laboratory.platform.sys.vo.entrustment.MarkersVO; +import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.common.security.util.SecurityUtils; +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import digital.laboratory.platform.entrustment.vo.EntrustmentVO; +import digital.laboratory.platform.sys.entity.SysUser; +// import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter; +// import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +// import org.jodconverter.JodConverter; +// import org.jodconverter.LocalConverter; +// import org.jodconverter.document.DefaultDocumentFormatRegistry; +// import org.jodconverter.office.LocalOfficeManager; +// import org.jodconverter.office.OfficeException; +// import org.jodconverter.office.OfficeUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.security.Principal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.List; + + +/** + * 委托 + * ===================================================================================================================== + * 这个类与 ServiceImpl 类似乎功能差不多。我们原则上规定: + * ServiceImpl 类的功能主要从技术角度考虑, 而 Controller 类主要从业务角度考虑。 + * ServiceImpl 类的功能主要是涉及 对应的类或表的 实体本身, 而 Controller 类则是综合的。 + * 例如, 进入到下一环节这个功能, 在 ServiceImpl 类中只考虑 Entrustment 本身的数据更新, Controller 类应该考虑更多的业务上的综合变化(如其他数据的变化) + *

+ * 流程的管理被看作是 Entrustment 的一部分, 也在 ServiceImpl 处理。Controller 不用关心流程 + * ===================================================================================================================== + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 委托 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/entrustment") +@Api(tags = "003-委托管理") +@SuppressWarnings("all") +public class EntrustmentController { +// @Autowired +// private final HttpServletRequest httpServletRequest; + + private final CaseEventService caseEventService; + private final EntrustmentService entrustmentService; + private final EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + private final OssFile ossFile; + private final IdentificationService identificationService; + private final SampleService sampleService; + private final RemoteDeliverService remoteDeliverService; + private final RemoteUserService remoteUserService; + private final RemoteOrgService remoteOrgService; + private final RemoteWord2PDFService remoteWord2PDFService; + private final RemoteSampleService remoteSampleService;//流转系统的feign 接口 + private final RemoteDictionaryService remoteDictionaryService;//字典接口 + + private final SynchronizeDataService synchronizeDataService;//同步数据服务接口 + + private final RemoteGenerateWordService remoteGenerateWordService; + //private final RestTemplate restTemplate; + +// /** +// * 审核人员由委托创建者选择。如果 true, 前台在委托提交审核前, 弹出界面让委托人选择审核者; 如果 false, 由系统自动选择审核者。 +// * 如果 singleOperateUser 为 true, 表示只能有一个候选; singleOperateUser 为 false 表示可以有多个候选。 +// * singleOperateUser 决定了委托人选择审核者时是单选还是多选, 如果由系统自动选, 有多个待选用户时, 随机选择一个 +// */ + + /** + * 通过id查询委托 + * + * @param id id + * @param forEdit 如果为true, 表示为编辑而取数据, 返回结果中 clientOrgAncestors 属性为机构祖先 id 数组 + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentGet')") + public R bizGetEntrustmentById(@PathVariable("id") String id, Boolean forEdit) { + EntrustmentVO evo = entrustmentService.getEntrustmentVOById(id); + if ((forEdit != null) && (forEdit)) { + R> rOrg = remoteOrgService.getAncestorids(evo.getClientOrgId()); + evo.setClientOrgAncestors(rOrg.getData()); + } + return R.ok(evo); + } + + + /** + * 分页查询 + *

+ * 分页查询按岗位划分为 6 个函数(或更多), 并且额外提供一个汇总入口 + *

+ * 从操作人员的情况来看, 主要有两种: + * - 作为普通用户, 只能看到自己是提交者(submitter)的委托; 还有送检确认, 是委托单位的领导, 应该可以目的地该机构下的所有委托 + * - 作为鉴定中心员工, 可以看到所有委托 + *

+ * 根据用户的岗位, 有多种场景; 对每一个岗位, 主要有两种情况(操作前和操作后) + * - 作为委托创建者(创建、修改、提交), 可以看到提交前: 自己创建(createBy/updateBy)的委托, 提交后: 提交人是自己的委托 + * - 作为审核者, 已提交待审核: 候选人中包含自己的委托; 已审核: 审核人是自己的委托 + * - 作为审批者, 已审核待审批: 候选人中包含自己的委托; 已审批: 审批人是自己的委托 + * - 作为送检确认者, 待确认: 已审批的委托; 已确认: 确认人是自己的委托 + * - 作为送检提交(委托), 待送检: 已确认并且审核提交人是自己; 已送检: 送检提交人是自己 + * - 作为受理人, 待受理: 所有已送检待受理; 已受理: 受理人是自己 + *

+ * 查询条件: + * - 时间, 在某个时间范围内查询 + * - 案件ID/案件名(模糊查) + * - 状态: + * * 待提交, 委托单位工作人员会看 + * * 待审核, 委托单位、审核人员会看 + * * 待审批, 委托单位、审核人员、审批人员会看 + * * 待确认, 委托单位、审核人员、审批人员、确认人员会看 + * * 待送检, 委托单位、审核人员、审批人员、确认人员会看 + * * 待受理, 委托单位、审核人员、审批人员、确认人员、受理人员会看 + * + * @param page 分页对象 + * @param fromDate 开始日期 + * @param toDate 结束日期 + * @param caseId 案件ID + * @param caseName 案件名称(模糊查询) + * @param statuses 状态列表(多个状态) + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> bizGetEntrustmentPage00(Page page, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "fromDate", required = false) String fromDate, + @RequestParam(value = "toDate", required = false) String toDate, + @RequestParam(value = "caseId", required = false) String caseId, + @RequestParam(value = "caseName", required = false) String caseName, + @RequestParam(value = "statuses", required = false) List statuses, + @RequestParam(value = "submitter", required = false) String submitter, + @RequestParam(value = "checkCandidateUser", required = false) String checkCandidateUser, + @RequestParam(value = "checkUser", required = false) String checkUser, + @RequestParam(value = "dataSources", required = false) Integer dataSources) { + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("getEntrustmentPage 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + if (StrUtil.isNotBlank(keyword)) { + keyword = keyword.trim(); + } + final String theKeyword = keyword; + + IPage thePage = null; + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + Boolean test1 = (statuses != null) && (statuses.size() > 0); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .and(StrUtil.isNotBlank(theKeyword), wrapper -> wrapper + .like("e.entrustment_no", theKeyword) + .or() + .like("e.client_org_name", theKeyword) + .or() + .like("e.accept_no", theKeyword) + .or() + .like("c.case_name", theKeyword)) + .eq(StrUtil.isNotBlank(checkCandidateUser), "e.checkCandidateUser", checkCandidateUser) + .ge(StrUtil.isNotBlank(fromDate), "e.submit_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.submit_time", toDate) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .in((statuses != null) && (statuses.size() > 0), "e.status", statuses) + .eq(dataSources != null, "e.data_sources", dataSources) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .orderByDesc(statuses != null && statuses.size() > 0 && statuses.get(0) == 9, "e.accept_no") + .orderByDesc(statuses != null && statuses.size() > 0 && statuses.get(0) == 7, "e.entrustment_no") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq(!dlpUser.isStaff(), "e.submitter", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.submit_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.submit_time", toDate) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + //.in((statuses != null) && (statuses.size() > 0), "e.status", new HashSet(statuses)) + .in((statuses != null) && (statuses.size() > 0), "e.status", statuses) + ); + + } + + return R.ok(thePage); + +// return R.ok(entrustmentService.page(page, Wrappers.query(entrustment))); + } + + /** + * 00 + * 分页查询 - 委托提交者 - 委托提交前 + *

+ * 以委托提交者身份查看委托提交前 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托提交者身份查看委托提交前", notes = "分页查询, 以委托提交者身份查看委托提交前") + @GetMapping("/page_submitter_before") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> bizGetEntrustmentPage01_Submitter_Before(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage_Submitter_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.create_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.create_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 统计 - 委托提交者 - 委托提交前的委托数量 + *

+ * 以委托提交者身份查看委托提交前的委托数量 + * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "统计, 以委托提交者身份查看委托提交前的委托数量", notes = "统计, 以委托提交者身份查看委托提交前的委托数量") + @GetMapping("/count_submitter_before") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public long bizGetEntrustmentCount_Submitter(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentCount_Submitter 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + return entrustmentService.count(Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + return entrustmentService.count(Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + ); + } + + } + + /** + * 分页查询 - 委托提交者 - 委托提交后 + *

+ * 以委托提交者身份查看委托提交后 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托提交者身份查看委托提交后", notes = "分页查询, 以委托提交者身份查看委托提交后") + @GetMapping("/page_submitter_after") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> bizGetEntrustmentPage02_Submitter_After(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage02_Submitter_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + //.ne("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.submit_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .ne("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.submit_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 分页查询 - 审核者 - 委托审核前 + *

+ * 以委托审核者身份查看委托审核前 + *

+ * checker: BC1A096180973C5EA652C9787F5A155A,C27B8F582693B93596C21C1586A0845A + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "分页查询, 以委托审核者身份查看委托审核前", notes = "分页查询, 以委托审核者身份查看委托审核前") + @GetMapping("/page_checker_before") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public R> bizGetEntrustmentPage03_Checker_Before(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne, Integer dataSources) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("审核员必须是鉴定中心员工, 普通用户不能对委托进行审核。"); + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentPage03_Checker_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(caseName), "e.entrustment_no", caseName)//因为未提供扫码查询,所有只能这样改 + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq(dataSources != null, "e.data_sources", dataSources) + .and((wrapper) -> wrapper + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus()) + .or() + .like((includeOtherOne == null || !includeOtherOne), "e.check_candidate_user", dlpUser.getId()) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) + ) + // .like((includeOtherOne == null || !includeOtherOne), "e.check_candidate_user", dlpUser.getId()) + // .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus(), EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) + .orderByDesc("e.submit_time") + ); + + return R.ok(thePage); + } + + + /** + * 统计 - 审核者 - 委托审核前的委托数量 + *

+ * 以委托审核者身份查看委托审核前的委托数量 + *

+ * checker: BC1A096180973C5EA652C9787F5A155A,C27B8F582693B93596C21C1586A0845A + * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "统计, 以委托审核者身份查看委托审核前的委托数量", notes = "统计, 以委托审核者身份查看委托审核前的委托数量") + @GetMapping("/count_checker_before") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public long bizGetEntrustmentCount_Checker(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + return 0; + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentCount_Checker 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + return entrustmentService.count(Wrappers.query() + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .and((wrapper) -> wrapper + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus()) + .or() + .like((includeOtherOne == null || !includeOtherOne), "e.check_candidate_user", dlpUser.getId()) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) + + ) + ); + + } + + /** + * 分页查询 - 审核者 - 委托审核后 + *

+ * 以委托审核者身份查看委托审核后 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托审核者身份查看委托审核后", notes = "分页查询, 以委托审核者身份查看委托审核后") + @GetMapping("/page_checker_after") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public R> bizGetEntrustmentPage04_Checker_After(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("审核员必须是鉴定中心员工, 普通用户不能对委托进行审核。"); + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentPage04_Checker_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.check_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) // 状态为审核之后 + .orderByDesc("e.check_time") + ); + + return R.ok(thePage); + } + + + /** + * 分页查询 - 审批者 - 委托审批前 + *

+ * 以委托审批者身份查看委托审批前 + *

+ * approver: 104C88AFF30A71DE230A82C8C34F8F57,009D54E9C222702659733CBE9C381108 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "分页查询, 以委托审批者身份查看委托审批前", notes = "分页查询, 以委托审批者身份查看委托审批前") + @GetMapping("/page_approver_before") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public R> bizGetEntrustmentPage05_Approver_Before(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne, Integer dataSources) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("审核员必须是鉴定中心员工, 普通用户不能对委托进行审核。"); + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentPage05_Approver_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + //.like((includeOtherOne == null || !includeOtherOne), "e.approve_candidate_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq(dataSources != null, "e.data_sources", dataSources) + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus(), EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) + .orderByDesc("e.check_time") + ); + + return R.ok(thePage); + } + + + /** + * 统计 - 审批者 - 委托审批前的委托数量 + *

+ * 以委托审批者身份查看委托审批前的委托数量 + *

+ * approver: 104C88AFF30A71DE230A82C8C34F8F57,009D54E9C222702659733CBE9C381108 + * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "统计, 以委托审批者身份查看委托审批前的委托数量", notes = "统计, 以委托审批者身份查看委托审批前的委托数量") + @GetMapping("/count_approver_before") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public long bizGetEntrustmentCount_Approver(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + return 0; + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentPage05_Approver_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + return entrustmentService.count(Wrappers.query() + .like((includeOtherOne == null || !includeOtherOne), "e.approve_candidate_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus(), EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) + ); + + } + + /** + * 分页查询 - 审批者 - 委托审批后 + *

+ * 以委托审批者身份查看委托审批后 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托审批者身份查看委托审批后", notes = "分页查询, 以委托审批者身份查看委托审批后") + @GetMapping("/page_approver_after") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public R> bizGetEntrustmentPage06_Approver_After(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("审核员必须是鉴定中心员工, 普通用户不能对委托进行审核。"); + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentPage06_Approver_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.approve_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) // 状态为审核之后 + .orderByDesc("e.approve_time") + ); + + return R.ok(thePage); + } + + + /** + * 分页查询 - 送检确认者 - 委托送检确认前 + *

+ * 以委托送检确认者身份查看委托送检确认前 + *

+ * approver: 104C88AFF30A71DE230A82C8C34F8F57,009D54E9C222702659733CBE9C381108 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "分页查询, 以委托送检确认者身份查看委托送检确认前", notes = "分页查询, 以委托送检确认者身份查看委托送检确认前") + @GetMapping("/page_confirmer_before") +// @PreAuthorize("@pms.hasPermission('EntrustmentConfirm') || @pms.hasPermission('EntrustmentAidInput')") + @PreAuthorize("@pms.hasPermission('EntrustmentConfirm')") + public R> bizGetEntrustmentPage07_Confirmer_Before(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage07_Confirmer_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + .orderByDesc("e.approve_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + .orderByDesc("e.approve_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 统计 - 送检确认者 - 委托送检确认前的委托数量 + *

+ * 以委托送检确认者身份查看委托送检确认前的委托数量 + *

+ * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "统计, 以委托送检确认者身份查看委托送检确认前的委托数量", notes = "统计, 以委托送检确认者身份查看委托送检确认前的委托数量") + @GetMapping("/count_confirmer_before") +// @PreAuthorize("@pms.hasPermission('EntrustmentConfirm') || @pms.hasPermission('EntrustmentAidInput')") + @PreAuthorize("@pms.hasPermission('EntrustmentConfirm')") + public long bizGetEntrustmentCount_Confirmer(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentCount_Confirmer 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + return entrustmentService.count(Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + return entrustmentService.count(Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + ); + } + + } + + /** + * 分页查询 - 送检确认者 - 委托送检确认后 + *

+ * 以委托送检确认者身份查看委托送检确认后 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托送检确认者身份查看委托送检确认后", notes = "分页查询, 以委托送检确认者身份查看委托送检确认后") + @GetMapping("/page_confirmer_after") + //@PreAuthorize("@pms.hasPermission('EntrustmentConfirm') || @pms.hasPermission('EntrustmentAidInput')") + @PreAuthorize("@pms.hasPermission('EntrustmentConfirm')") + public R> bizGetEntrustmentPage08_Confirmer_After(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage08_Confirmer_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.submitter", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + .orderByDesc("e.deliver_confirm_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.submitter", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) + .orderByDesc("e.deliver_confirm_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 分页查询 - 委托送检提交者 - 委托送检提交前 + *

+ * 以委托送检提交者身份查看委托送检提交前 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托送检提交者身份查看委托送检提交前", notes = "分页查询, 以委托送检提交者身份查看委托送检提交前") + @GetMapping("/page_deliver_before") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> bizGetEntrustmentPage09_Deliver_Before(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage09_Deliver_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + .orderByDesc("e.deliver_confirm_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + .orderByDesc("e.deliver_confirm_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 统计 - 委托送检提交者 - 委托送检提交前的委托数量 + *

+ * 以委托送检提交者身份查看委托送检提交前的委托数量 + * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托送检提交者身份查看委托送检提交前", notes = "分页查询, 以委托送检提交者身份查看委托送检提交前") + @GetMapping("/count_deliver_before") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public long bizGetEntrustmentCount_Deliver(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentCount_Deliver 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + return entrustmentService.count(Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + return entrustmentService.count(Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .eq("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + ); + } + } + + /** + * 分页查询 - 委托送检提交者 - 委托送检提交后 + *

+ * 以委托送检提交者身份查看委托送检提交后 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托送检提交者身份查看委托送检提交后", notes = "分页查询, 以委托送检提交者身份查看委托送检提交后") + @GetMapping("/page_deliver_after") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> bizGetEntrustmentPage10_Deliver_After(Page page, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("bizGetEntrustmentPage10_Deliver_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + IPage thePage = null; + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + .orderByDesc("e.deliver_time") + ); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq((includeOtherOne == null || !includeOtherOne), "e.submitter", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) + .orderByDesc("e.deliver_time") + ); + } + + return R.ok(thePage); + } + + + /** + * 分页查询 - 受理员 - 委托受理前 + *

+ * 以委托受理员身份查看委托受理前 + *

+ * approver: 104C88AFF30A71DE230A82C8C34F8F57,009D54E9C222702659733CBE9C381108 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "分页查询, 以委托受理员身份查看委托受理前", notes = "分页查询, 以委托受理员身份查看委托受理前") + @GetMapping("/page_accepter_before") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R> bizGetEntrustmentPage11_Accepter_Before(Page page, String keyword, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne, Integer dataSources) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("受理员必须是鉴定中心员工, 普通用户不能对委托进行受理。"); + } + if (StrUtil.isNotBlank(keyword)) { + keyword = keyword.trim(); + } + final String theKeyword = keyword; + + System.out.println(String.format("bizGetEntrustmentPage11_Accepter_Before 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + if (StrUtil.isNotBlank(theKeyword)) { + // 有提供 keyword, 模糊查询 + + // 先查是不是委托编号 + IPage thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq("e.entrustment_no", theKeyword) + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus() /*, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus()*/) + ); + if (thePage.getRecords().size() > 0) { + // 查到数据了, 直接返回 + return R.ok(thePage); + } + } + + IPage thePage = null; + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus() /*, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus()*/) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .eq(dataSources != null, "e.data_sources", dataSources) + .and(StrUtil.isNotBlank(theKeyword), (wrapper) -> wrapper // 如果 keyword 非空 + .like("e.entrustment_no", theKeyword) + .or() + .like("e.case_id", theKeyword) + .or() + .like("c.case_no", theKeyword) + .or() + .like("c.case_name", theKeyword) + ) + //.orderByDesc("e.deliver_time") + .orderByDesc("e.entrustment_no") + ); + + return R.ok(thePage); + } + + /** + * 统计 - 受理员 - 委托受理前待受理数 + *

+ * 以委托受理员身份查看委托受理前待受理数 + *

+ * + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 0/1, false/true 是否看其他候选人的 + * @return + */ + @ApiOperation(value = "统计, 以委托受理员身份查看委托受理前待受理数", notes = "统计, 以委托受理员身份查看委托受理前待受理数") + @GetMapping("/count_accepter_before") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public long bizGetEntrustmentCount_with_Accepter(String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + return 0; + } + + String orgId = null; + System.out.println(String.format("bizGetEntrustmentCount_with_Accepter 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + long count = entrustmentService.count(Wrappers.query() +// .like((includeOtherOne==null || ! includeOtherOne ), "e.approve_candidate_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus() /*, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus()*/) + ); + + return count; + } + + + /** + * 分页查询 - 受理员 - 委托受理后 + *

+ * 以委托受理员身份查看委托受理前 + * + * @param page + * @param fromDate + * @param toDate + * @param caseId + * @param caseName + * @param includeOtherOne 是否代录 + * @return + */ + @ApiOperation(value = "分页查询, 以委托受理员身份查看委托受理前", notes = "分页查询, 以委托受理员身份查看委托受理前") + @GetMapping("/page_accepter_after") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R> bizGetEntrustmentPage12_Accepter_After(Page page, String keyword, String fromDate, String toDate, String entrustmentNo, String caseId, String caseNo, String caseName, Boolean includeOtherOne, Integer dataSources) { + //-- 当前用户一定是鉴定中心员工, 普通用户没有审核权限 + DLPUser dlpUser = SecurityUtils.getUser(); + if (!dlpUser.isStaff()) { + throw new RuntimeException("受理员必须是鉴定中心员工, 普通用户不能对委托进行受理。"); + } + if (StrUtil.isNotBlank(keyword)) { + keyword = keyword.trim(); + } + + System.out.println(String.format("bizGetEntrustmentPage12_Accepter_After 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + + final String theKeyword = keyword; + if (StrUtil.isNotBlank(theKeyword)) { + // 有提供 keyword, 模糊查询 + + // 先查是不是委托编号 + IPage thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .eq("e.entrustment_no", theKeyword) + .in("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus() /*, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus()*/) + .orderByDesc("e.accept_time") + ); + if (thePage.getRecords().size() > 0) { + // 查到数据了, 直接返回 + return R.ok(thePage); + } + } + + IPage thePage = null; + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) // 状态为审核之后 + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .eq(dataSources != null, "e.data_sources", dataSources) + .and(StrUtil.isNotBlank(theKeyword), (wrapper) -> wrapper // 如果 keyword 非空 + .like("e.entrustment_no", theKeyword) + .or() + .like("e.case_id", theKeyword) + .or() + .like("c.case_no", theKeyword) + .or() + .like("c.case_name", theKeyword) + ) + .orderByDesc("e.accept_time") + ); +/* + IPage thePage = null; + + thePage = entrustmentService.getEntrustmentVOPage(page, Wrappers.query() +// .eq((includeOtherOne==null || ! includeOtherOne ), "e.approve_user", dlpUser.getId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .like(StrUtil.isNotBlank(caseName), "c.case_name", caseName) + .gt("e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) // 状态为审核之后 + .orderByDesc("e.accept_time") + ); +*/ + return R.ok(thePage); + } + + /** + * 查询案件的委托数量 + * + * @param caseId 案件id + * @return + */ + @ApiOperation(value = "查询案件的委托数量", notes = "查询案件的委托数量") + @GetMapping("/count") + @PreAuthorize("@pms.hasAnyPermission('EntrustmentList')") + public R getCaseEntrustmentCount(String caseId) { + long count = entrustmentService.countByCaseId(caseId); + Map ret = new HashMap(); + ret.put("count", count); + return R.ok(count, "查询案件的委托数量成功"); + } + + /** + * 委托创建者保存委托信息 + * 保存委托的以下属性: + * client_org_name + * client_address + * client_postcode + * client_tel + * client_fax + * identification_domain + * identification_org_name + * qualitative_analysis + * quantitative_analysis + * other_identification_requests + * candidate_drugs + * is_client_specified_method + * client_specified_method + * destructive_analysis + * other_identification_notes + * reidentification + * old_identification_org_name + * old_identification_document + * old_identification_result + * reidentification_reason + * avoid_identifier + * specified_identifier + * other_agreement + * report_receive_mode + * sample_receive_mode + * comments + * + * @param entrust + * @return + */ + @ApiOperation(value = "委托创建者保存委托信息", + notes = "委托创建者保存委托信息\n" + + "保存委托的以下属性:\n" + + "client_org_id(仅代录权限可以指定,其他用户系统指定为用户所属机构id)\n" + + "client_org_name\n" + + "client_address\n" + + "client_postcode\n" + + "client_tel\n" + + "client_fax\n" + + "identification_domain\n" + + "identification_org_name\n" + + "qualitative_analysis\n" + + "quantitative_analysis\n" + + "other_identification_requests\n" + + "candidate_drugs\n" + + "is_client_specified_method\n" + + "client_specified_method\n" + + "destructive_analysis\n" + + "other_identification_notes\n" + + "reidentification\n" + + "old_identification_org_name\n" + + "old_identification_document\n" + + "old_identification_result\n" + + "reidentification_reason\n" + + "avoid_identifier\n" + + "specified_identifier\n" + + "other_agreement\n" + + "identification_id\n" + + "report_receive_mode\n" + + "sample_receive_mode\n" + + "comments\n" + + "deliverer1_user_id\n" + + "deliverer1_name\n" + + "deliverer1_position\n" + + "deliverer1_cert\n" + + "deliverer1_id\n" + + "deliverer1_phone\n" + + "deliverer2_user_id\n" + + "deliverer2_name\n" + + "deliverer2_position\n" + + "deliverer2_cert\n" + + "deliverer2_id\n" + + "deliverer2_phone\n" + ) + @SysLog("修改委托") + @PutMapping("/submitter_save") + @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public R bizSubmitter_Save(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizSubmitter_Save(entrust, dlpUser), "保存委托信息成功"); + } + + /** + * 更新送检员 + */ + + + /** + * 委托创建者 提交委托供审核 + * + * @param entrust + * @return + */ + @ApiOperation(value = "提交委托供审核", notes = "提交委托供审核") + @SysLog("提交委托供审核") + @PutMapping("/submitter_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public R bizSubmitter_Apply(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + +// System.out.println(String.format("theHttpServletRequest.toString()=%s", theHttpServletRequest.toString())); + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizSubmitter_Apply(entrust, dlpUser), "委托提交成功"); + } + + + /** + * 审核者认领审核任务 + * + * @param entrust + * @return + */ + @ApiOperation(value = "审核者认领审核任务", notes = "审核者认领审核任务") + @SysLog("审核者认领审核任务") + @PutMapping("/checker_claim") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public R bizChecker_Claim(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizChecker_Claim(entrust, dlpUser), "委托审核任务认领成功"); + } + + /** + * 审核者对委托进行审核 + *

+ * 审核者还修改以下属性: + * destructiveAnalysis 鉴定事项确认书, 检验: 有损/无损 + * otherIdentificationNotes 鉴定事项确认书, 检验: 其他 + * otherAgreement 鉴定事项确认书, 其他约定事项: 其他 + * checkComments 审核意见: (审批通过 审批不通过及原因) + * + * @param entrust + * @return + */ + @ApiOperation(value = "审核者对委托进行审核", notes = "审核者对委托进行审核" + + "destructiveAnalysis 鉴定事项确认书, 检验: 有损/无损\n" + + "otherIdentificationNotes 鉴定事项确认书, 检验: 其他\n" + + "otherAgreement 鉴定事项确认书, 其他约定事项: 其他\n" + + "avoidIdentifier 回避人及回避原因\n" + + "comments 备注\n" + + + "checkComments 审核意见: (审核通过/审核不通过及原因)" + ) + @SysLog("审核者对委托进行审核") + @PutMapping("/checker_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public R bizChecker_Apply(@RequestBody Entrustment entrust, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + //让第三方系统完成审核-----------------------------------------------------------------------------结束 + return R.ok(entrustmentService.bizChecker_Apply(entrust, opCode, dlpUser), "委托审核完成"); + } + + + /** + * 审批者认领审批任务 + * + * @param entrust + * @return + */ + @ApiOperation(value = "审批者认领审批任务", notes = "审批者认领审批任务") + @SysLog("审批者认领审批任务") + @PutMapping("/approver_claim") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public R bizApprover_Claim(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + return R.ok(entrustmentService.bizApprover_Claim(entrust, dlpUser), "委托审批任务认领成功"); + } + + /** + * 审批者对委托进行审批 + * + * @param entrust + * @return + */ + @ApiOperation(value = "审批者对委托进行审批", notes = "审批者对委托进行审批" + + "destructiveAnalysis 鉴定事项确认书, 检验: 有损/无损\n" + + "otherIdentificationNotes 鉴定事项确认书, 检验: 其他\n" + + "otherAgreement 鉴定事项确认书, 其他约定事项: 其他\n" + + "avoidIdentifier 回避人及回避原因\n" + + "comments 备注\n" + + + "approveComments 审批意见: (审批通过/审批不通过及原因)" + ) + @SysLog("审批者对委托进行审批") + @PutMapping("/approver_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public R bizApprover_Apply(@RequestBody Entrustment entrust, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizApprover_Apply(entrust, opCode, dlpUser), "委托审批完成"); + } + + /** + * 委托方领导确认送检 + * + * @param entrust + * @return + */ + @ApiOperation(value = "委托方领导确认送检", notes = "委托方领导确认送检") + @SysLog("委托方领导确认送检") + @PutMapping("/confirmer_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentConfirm')") + public R bizConfirm_Apply(@RequestBody Entrustment entrust, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizConfirm_Apply(entrust, opCode, dlpUser), "委托送检确认完成"); + } + + + /** + * 委托创建人送检保存 + * + * @param entrust + * @return + */ + @ApiOperation(value = "委托创建人送检保存", notes = "委托创建人送检保存") + @SysLog("委托创建人送检保存") + @PutMapping("/deliver_save") + @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public R bizDeliver_Save(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizDeliver_Save(entrust, dlpUser), "委托送检信息保存完成"); + } + + /** + * 委托创建人送检提交 + * + * @param entrust + * @return + */ + @ApiOperation(value = "委托创建人送检提交", notes = "委托创建人送检提交") + @SysLog("委托创建人送检提交") + @PutMapping("/deliver_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public R bizDeliver_Apply(@RequestBody Entrustment entrust, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizDeliver_Apply(entrust, opCode, dlpUser), "委托送检提交完成"); + } + + + /** + * 下载鉴定委托书 + * + * @param id + * @return + */ + @ApiOperation(value = "下载鉴定委托书", notes = "下载鉴定委托书。如果还没有创建, 立即创建: 根据鉴定委托书模板和委托的内容创建PDF格式的鉴定委托书, 并保存到 MinIO 存储中") + @SysLog("创建鉴定委托书") + @GetMapping("/el") +// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public void bizGetPDFEntrustmentLetter(String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { + entrustmentService.bizGetPDFEntrustmentLetter(id, theHttpServletRequest, httpServletResponse); + } + + /** + * 受理完成 + * + * @param entrust + * @return + */ + @ApiOperation(value = "受理保存", notes = "在受理时保存受理员录入的数据" + + "destructiveAnalysis 鉴定事项确认书, 检验: 有损/无损\n" + + "otherIdentificationNotes 鉴定事项确认书, 检验: 其他\n" + + "otherAgreement 鉴定事项确认书, 其他约定事项: 其他\n" + + "avoidIdentifier 回避人及回避原因\n" + + "comments 备注\n" + + + "acceptComments 受理意见: (受理通过/受理不通过及原因)" + ) + @SysLog("受理保存") + @PutMapping("/accept_save") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R bizAccept_Save(@RequestBody Entrustment entrust, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizAccept_Save(entrust, dlpUser), "受理员录入的数据已保存"); + } + + /** + * 受理完成 + * 这个是所有检材都受理完成后,才可对委托书点受理完成 --------------- + * + * @param entrust + * @return + */ + @ApiOperation(value = "受理完成", notes = "受理完成" + + "destructiveAnalysis 鉴定事项确认书, 检验: 有损/无损\n" + + "otherIdentificationNotes 鉴定事项确认书, 检验: 其他\n" + + "otherAgreement 鉴定事项确认书, 其他约定事项: 其他\n" + + "avoidIdentifier 回避人及回避原因\n" + + "comments 备注\n" + + + "acceptComments 受理意见: (受理通过/受理不通过及原因)" + ) + @SysLog("受理完成") + @PutMapping("/accept_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R bizAccept_Apply(@RequestBody Entrustment entrust, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + //同步第三方禁毒系统的受理功能 结束-------------------------------------------------------------- + return R.ok(entrustmentService.bizAccept_Apply(entrust, opCode, dlpUser), "委托受理结束"); + } + + + /** + * 下载鉴定事项确认书 + * + * @param id + * @return + */ + @ApiOperation(value = "下载鉴定事项确认书", notes = "下载鉴定事项确认书。如果还没有创建, 立即创建: 根据鉴定事项确认书模板和委托的内容创建PDF格式的鉴定事项确认书, 并保存到 MinIO 存储中") + @SysLog("创建鉴定事项确认书") + @GetMapping("/iicl") +// @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public void bizGetPDFIdentifyItemsConfirmLetter(String id, String pdfOrWord, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { + entrustmentService.bizGetPDFIdentifyItemsConfirmLetter(id, pdfOrWord, theHttpServletRequest, httpServletResponse); + } + + /* + * 生成鉴定事项确认书 + * + * @return + */ + private void GenerateIdentifyItemsConfirmLetterPDF(EntrustmentVO ev /*, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse*/) { + entrustmentService.GenerateIdentifyItemsConfirmLetterPDF(ev); + } + + + /** + * 委托列表 + * + * @param entrustment 委托 查询条件 + * @return + */ + @ApiOperation(value = "委托列表", notes = "委托列表") + @GetMapping("/list") + @PreAuthorize("@pms.hasPermission('EntrustmentList')") + public R> getEntrustmentList(Entrustment entrustment, + @RequestParam(value = "fromDate", required = false) String fromDate, + @RequestParam(value = "toDate", required = false) String toDate, + @RequestParam(value = "entrustmentNo", required = false) String entrustmentNo, + @RequestParam(value = "caseId", required = false) String caseId, + @RequestParam(value = "caseNo", required = false) String caseNo, + @RequestParam(value = "keywords", required = false) String keywords, + @RequestParam(value = "includeOtherOne", required = false) Boolean includeOtherOne, + @RequestParam(value = "hasIdentificationId", required = false) Boolean hasIdentificationId, + @RequestParam(value = "entrustmentIds", required = false) List entrustmentIds, + @RequestParam(value = "statuses", required = false) List statuses + ) { + String orgId = null; + DLPUser dlpUser = SecurityUtils.getUser(); + System.out.println(String.format("getEntrustmentList 用户 %s 的 id=%s [%s]", dlpUser.getUsername(), dlpUser.getId(), (dlpUser.isStaff()) ? "鉴定机构员工" : "普通用户")); + + if (dlpUser.isStaff()) { + //-- 当前用户是鉴定中心员工, 代录数据 && dlpUser.HasPermission("EntrustmentAidInput") + System.out.println(String.format("用户 %s 的 id=%s, 是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + List r = entrustmentService.getEntrustmentVOList(Wrappers.query() + .and(StrUtil.isNotBlank(keywords), wrapper -> wrapper + .like("e.entrustment_no", keywords) + .or() + .like("e.client_org_name", keywords) + .or() + .like("e.accept_no", keywords) + .or() + .like("c.case_name", keywords)) +// .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", dlpUser.getOrgId()) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .isNotNull(hasIdentificationId != null && hasIdentificationId, "e.identification_id") + .in(entrustmentIds != null && entrustmentIds.size() > 0, "e.id", entrustmentIds) + .eq(StrUtil.isNotBlank(entrustment.getIdentificationId()), "e.identification_id", entrustment.getIdentificationId()) + .eq(entrustment.getStatus() != null, "e.status", entrustment.getStatus()) + .eq(entrustment.getReturnOrNot() != null, "e.return_or_not", entrustment.getReturnOrNot()) + .in(statuses != null && statuses.size() > 0, "e.status", statuses) + + //.ne(((isSubmitted != null) && isSubmitted), "e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.create_time") + ); + return R.ok(r); + } else { + //-- 当前用户是普通用户, 不是鉴定中心员工 + System.out.println(String.format("用户 %s 的 id=%s, 不是鉴定机构员工", dlpUser.getUsername(), dlpUser.getId())); + orgId = dlpUser.getOrgId(); // 如果不是鉴定中心员工, 则只能看员工所属机构的案件 + + List r = entrustmentService.getEntrustmentVOList(Wrappers.query() + .and(StrUtil.isNotBlank(keywords), wrapper -> wrapper + .like("e.entrustment_no", keywords) + .or() + .like("e.client_org_name", keywords) + .or() + .like("e.accept_no", keywords) + .or() + .like("c.case_name", keywords)) +// .eq((includeOtherOne == null || !includeOtherOne), "e.create_by", dlpUser.getId()) + .eq("e.client_org_id", orgId) + .ge(StrUtil.isNotBlank(fromDate), "e.create_time", fromDate) + .le(StrUtil.isNotBlank(toDate), "e.create_time", toDate) + .like(StrUtil.isNotBlank(entrustmentNo), "e.entrustment_no", entrustmentNo) + .eq(StrUtil.isNotBlank(caseId), "e.case_id", caseId) + .like(StrUtil.isNotBlank(caseNo), "c.case_no", caseNo) + .isNotNull(hasIdentificationId != null && hasIdentificationId, "e.identification_id") + .eq(entrustment.getStatus() != null, "e.status", entrustment.getStatus()) + .eq(entrustment.getReturnOrNot() != null, "e.return_or_not", entrustment.getReturnOrNot()) + .in(statuses != null && statuses.size() > 0, "e.status", statuses) + //.ne(((isSubmitted != null) && isSubmitted), "e.status", EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) + .orderByDesc("e.create_time") + ); + return R.ok(r); + } + } + + /** + * 新增委托 + * + * @param entrustment 委托 + * @return R + */ + @ApiOperation(value = "新增委托", notes = "新增委托") + @SysLog("新增委托") + @PostMapping + @PreAuthorize("@pms.hasPermission('EntrustmentCreate')") + public R bizSubmitter_AddEntrustment(@RequestBody Entrustment entrustment, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.bizSubmitter_AddEntrustment(entrustment, dlpUser)); + } + + /** + * 新增委托(11-13修改版) + * + * @param entrustmentDTO 委托接受参数 + * @return R + */ + @ApiOperation(value = "新增委托(11-13新修改)", notes = "新增委托(11-13新修改)") + @SysLog("新增委托") + @PostMapping("/add/new") + @PreAuthorize("@pms.hasPermission('EntrustmentCreate')") + public R addOne(@RequestBody EntrustmentDTO entrustmentDTO, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.addNewEmt(entrustmentDTO, dlpUser)); + } + + @GetMapping("/initSendAcceptData") + public R initSendAcceptData() { + entrustmentService.initCaseSendAccept(); + return R.ok(true, "初始化完成"); + } + + /** + * 修改委托 <--- 这个接口会被禁止, 因为委托不允许直接修改, 应该按不同的用户和委托的状态, 对不同的字段有适当的修改权。应该使用下面的与业务相关的接口修改委托信息 + * + * @param entrustment 委托 + * @return R + */ + @ApiOperation(value = "修改委托 <--- 这个接口会被禁止, 因为委托不允许直接修改, 应该按不同的用户和委托的状态, 对不同的字段有适当的修改权。应该使用下面的与业务相关的接口修改委托信息", + notes = "修改委托 <--- 这个接口会被禁止, 因为委托不允许直接修改, 应该按不同的用户和委托的状态, 对不同的字段有适当的修改权。应该使用下面的与业务相关的接口修改委托信息") + @SysLog("修改委托") + @PutMapping + @PreAuthorize("@pms.hasPermission('EntrustmentEdit')") + public R xxxx_putUpdateById(@RequestBody Entrustment entrustment, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + entrustment.setCreateBy(null); + entrustment.setCreateTime(null); + entrustment.setUpdateBy(dlpUser.getId()); + entrustment.setUpdateTime(LocalDateTime.now()); + + if (entrustmentService.updateById(entrustment)) { + return R.ok(entrustment, "保存委托信息成功"); + } else { + return R.failed(entrustment, "保存委托信息失败"); + } + } + + /** + * 通过id删除委托 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除委托", notes = "通过id删除委托") + @SysLog("通过id删除委托") + @DeleteMapping("/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentDelete')") + public R deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return entrustmentService.deleteById(id, dlpUser); + } + + + /** + * 取指定委托的附件列表 + * + * @param entrustmentId + * @return + */ + @GetMapping("/attachment/{entrustmentId}/list") + @PreAuthorize("@pms.hasPermission('EntrustmentAttachmentList')") + public R getAttachmentList(@PathVariable("entrustmentId") String entrustmentId) { + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentId)); + } + return R.failed("不存在这个委托"); + } + + /** + * 取指定委托的指定附件 + * + * @param entrustmentId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @GetMapping("/attachment/{entrustmentId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentAttachmentDownload')") + public void getAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } else { + httpServletResponse.sendError(404, "不存在这个委托"); + } + } + + @PostMapping(value = "/attachment/{entrustmentId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAttachmentUpload')") + public R uploadAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @RequestPart("file") MultipartFile file) throws Exception { + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s OriginalFilename=%s", entrustmentId, file.getOriginalFilename())); + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + String path = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentId; + boolean r = ossFile.fileUpload(file, path); + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + } + return R.failed("不存在这个委托"); + } + + @PostMapping(value = "/attachment_base64/{entrustmentId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAttachmentUpload')") + public R uploadAttachmentObj_Base64(@PathVariable("entrustmentId") String entrustmentId, @RequestBody JSONObject jsonParam) throws Exception { + return entrustmentService.uploadAttachmentObj_Base64(entrustmentId, jsonParam); + } + + + @DeleteMapping("/attachment/{entrustmentId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentAttachmentDelete')") + public R deleteAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @PathVariable String fileName) throws Exception { + Entrustment cj = entrustmentService.getById(entrustmentId); + if (cj != null) { + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } + return R.failed("不存在这个委托"); + } + + + ///// 受理时的 + + + /** + * 取指定委托的受理时的列表 + * + * @param entrustmentId + * @return + */ + @GetMapping("/accept_attachment/{entrustmentId}/list") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R getAcceptAttachmentList(@PathVariable("entrustmentId") String entrustmentId) { + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId)); + } + return R.failed("不存在这个委托"); + } + + /** + * 取指定委托的受理时的指定附件 + * + * @param entrustmentId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @GetMapping("/accept_attachment/{entrustmentId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public void getAcceptAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } else { + httpServletResponse.sendError(404, "不存在这个委托"); + } + } + + //保存送检人的证件照片信息 + @ApiOperation(value = "上传送检人的证件照片", notes = "上传送检人的证件照片") + @PostMapping("/delivePhotoUpload/{entrustmentId}") + public R uploadDeliverPhoto(@PathVariable("entrustmentId") String entrustmentId, @RequestPart("file") MultipartFile file) { + Assert.notBlank(entrustmentId, "委托ID不能为空"); + //证件照片特殊文件标识 + String deliverPhoto = "deliverPhoto"; + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId + "/" + deliverPhoto; + boolean r = ossFile.fileUpload(file, path); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + if (r) { + return R.ok(ResultData, "上传成功"); + } else { + return R.failed("上传失败"); + } + } + + @ApiOperation(value = "上传送检人的证件照片——base64方式", notes = "上传送检人的证件照片——base64方式") + @PostMapping("/delivePhotoUpload_base64/{entrustmentId}") + public R uploadDeliverPhoto_Base64(@PathVariable("entrustmentId") String entrustmentId, @RequestBody JSONObject jsonParam) { + return entrustmentService.uploadDeliverPhoto_Base64(entrustmentId, jsonParam); + } + + //获取送检人合并后的照片 +// @ApiOperation(value = "获取送检人合并后的照片", notes = "获取送检人合并后的照片") +// @GetMapping("/getDeliverMergePhoto") +// public R getDeliverMergePhoto(String entrustId, HttpServletRequest request, HttpServletResponse response) { +// //复杂一点的业务我们放到service中去处理 +// String fileFullPath = OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY + "/" + entrustId + "/" + OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY_DELIVER + "/alldeliverpic.docx"; +// try { +// if (ossFile.objectExist(fileFullPath)) { +// ossFile.fileGet(fileFullPath, response.getOutputStream()); +// } else { +// boolean ret = entrustmentService.getDeliverMergePhoto(entrustId); +// if (ret) { +// ossFile.fileGet(fileFullPath, response.getOutputStream()); +// } +// } +// } catch (Exception err) { +// return R.failed(""); +// } +// return R.ok(true, "获取文件成功"); +// } + + @ApiOperation(value = "获取送检人合并后的照片URL", notes = "获取送检人合并后的照片URL") + @GetMapping("/getDeliverMergePhotoUrl") + public R getDeliverMergePhotoUrl(String entrustId, HttpServletRequest request, HttpServletResponse response) { + Entrustment entrustment = entrustmentService.getById(entrustId); + String acceptNo = entrustment.getAcceptNo(); + CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId()); + String caseName = caseEvent.getCaseName(); + String deliverer1Name = entrustment.getDeliverer1Name(); + String deliverer2Name = entrustment.getDeliverer2Name(); + //复杂一点的业务我们放到service中去处理 + String fileFullPath = OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY + "/" + entrustId + "/" + OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY_DELIVER + "/alldeliverpic.docx"; + try { + if (ossFile.objectExist(fileFullPath)) { + //ossFile.fileGet(fileFullPath,response.getOutputStream()); + } else { + boolean ret = entrustmentService.getDeliverMergePhoto(entrustId, acceptNo, caseName, deliverer1Name, deliverer2Name); + if (ret) { + //ossFile.fileGet(fileFullPath,response.getOutputStream()); + } + } + } catch (Exception err) { + return R.failed("获取文件失败"); + } + String uuid = IdWorker.get32UUID(); + return R.ok(uuid + "#" + fileFullPath, "获取文件成功"); + } + //由于远程调用feign接口效率的原因,现在获取检材照片已经不需要通过受理系统处理,直接调用word2pdf服务接口即可 +// @ApiOperation(value = "获取检材合并照片", notes = "获取检材合并照片") +// @GetMapping("/getMaterialPhoto") +// public R getMaterialPhoto(String entrustId, HttpServletRequest request, HttpServletResponse response, Integer groupCount) { +// //复杂一点的业务我们放到service中去处理 +// String fileFullPath = OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY + "/" + entrustId + "/materialPhoto/materialallpic.docx"; +// try { +//// if (ossFile.objectExist(fileFullPath)) { +//// ossFile.fileGet(fileFullPath, response.getOutputStream()); +//// } else { +//// boolean ret = entrustmentService.getMaterialMergePhoto(entrustId, groupCount); +//// if (ret) { +//// ossFile.fileGet(fileFullPath, response.getOutputStream()); +//// } +//// } +// } catch (Exception err) { +// return R.failed("获取文件失败"); +// } +// return R.ok(true, "获取文件成功"); +// } +// +// @ApiOperation(value = "获取检材合并照片url", notes = "获取检材合并照片url") +// @GetMapping("/getMaterialPhotoUrl") +// public R getMaterialPhotoUrl(String entrustId, HttpServletRequest request, HttpServletResponse response, Integer groupCount) { +// //复杂一点的业务我们放到service中去处理 +// String fileFullPath = OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY + "/" + entrustId + "/materialPhoto/materialallpic.docx"; +// String keyID = IdWorker.get32UUID(); +// try { +//// if (ossFile.objectExist(fileFullPath)) { +//// //ossFile.fileGet(fileFullPath,response.getOutputStream()); +//// } else { +//// boolean ret = entrustmentService.getMaterialMergePhoto(entrustId,groupCount); +//// if (ret) { +//// //ossFile.fileGet(fileFullPath,response.getOutputStream()); +//// } +////// } +// } catch (Exception err) { +// err.printStackTrace(); +// return R.failed("获取文件失败"); +// } +// String uuid = IdWorker.get32UUID(); +// return R.ok(uuid + "#" + fileFullPath, "获取文件成功"); +// } + + + @PostMapping(value = "/accept_attachment/{entrustmentId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R uploadAcceptAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @RequestPart("file") MultipartFile file) throws Exception { + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s OriginalFilename=%s", entrustmentId, file.getOriginalFilename())); + Entrustment entrustment = entrustmentService.getById(entrustmentId); + if (entrustment != null) { + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId; + boolean r = ossFile.fileUpload(file, path); + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + } + return R.failed("不存在这个委托"); + } + + /** + * 上传委托的受理照片 + * + * @param entrustmentId 委托Id + * @param jsonParam 照片的 json 格式的数据。json 对象, 属性 Image 的值是 base64 格式的图像数据;属性 FileName 是文件名, 如果为空则系统自动按当前时间生成文件名 + * @return + * @throws Exception + */ + @ApiOperation(value = "上传委托的受理照片", notes = "上传委托的受理照片\n" + + "本接口需要 2 个参数。entrustmentId 是委托标识,在请求的 url 中提供; jsonParam 是 json 格式的照片数据, 在请求 body 中提供。\n" + + "jsonParam 是一个 json 对象,有 2 个字符串类型的属性: fileName 和 image。\n" + + "fileName 属性可以为 null,或不提供。如果 fileName 为 null 或不存在, 则系统自动生成 yyyyMMddHHmmss 格式的文件名,后缀自动根据图像格式识别。\n" + + "image 属性是 base64 格式的图像数据, 大致是以 \"data:image/jpeg;base64,...\" 这样的字符串开始" + ) + @ApiImplicitParams({ + @ApiImplicitParam(name = "entrustmentId", value = "委托Id", required = true, paramType = "path"), + @ApiImplicitParam(name = "jsonParam", value = "照片的 json 格式的数据", required = true, paramType = "body"), + }) + @PostMapping(value = "/accept_attachment_base64/{entrustmentId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R uploadAcceptAttachmentObj_Base64(@PathVariable("entrustmentId") String entrustmentId, @RequestBody JSONObject jsonParam) throws Exception { + return entrustmentService.uploadAcceptAttachmentObj_Base64(entrustmentId, jsonParam); + } + + + @DeleteMapping("/accept_attachment/{entrustmentId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R deleteAcceptAttachmentObj(@PathVariable("entrustmentId") String entrustmentId, @PathVariable String fileName) throws Exception { + Entrustment cj = entrustmentService.getById(entrustmentId); + if (cj != null) { + ossFile.fileDelete(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } + return R.failed("不存在这个委托"); + } + + + //===================================================================================== + // 涉及流程的操作 + //===================================================================================== + + + /** + * 取指定环节可用的用户列表 + * 当流程进行到某个环节的时候, 需要某个用户对这个环节进行处理(通过或不通过)。 + * 这里取可用的用户列表 + *

+ * 涉及到的环境有以下几个: + * 1、创建委托及提交 + * 委托的提交者就是委托的创建者。不存在不通过的可能。 + * 2、审核 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审核权限 + * 3、审批 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审批权限 + * 4、送检确认 + * 送检确认者有几个条件: (1)必须与委托的创建者是同一个机构, 或上级机构的人 (2)必须拥有委托送检确认权限 + * 5、受理 + * 受理者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托受理权限 + * + * @return + */ + @ApiOperation(value = "取下一环节可用的用户列表", notes = "取下一环节可用的用户列表") + @GetMapping("/available_user_list/{entrustmentId}") + //@PreAuthorize("@pms.hasPermission('entrustment_entrustment_get')" ) + public R> bizGetAvailableUserList(@PathVariable("entrustmentId") String entrustmentId) { + return entrustmentService.bizGetAvailableUserList(entrustmentId); + } + + + //同步第三方系统而调用的方法 + //审核委托 + + /** + * 审核审批第三方委托 + * + * @param userFlag 用户标识 + * @param entrustId 我方委托ID,通过这个ID 查出对方的委托ID + * @param dataPath + * @param result + * @param reMark + */ + + /** + * 根据委托书ID获取相应的文书 + * + * @param entrustId + * @param whatBook + * @return + */ + @GetMapping("/getBookNameByEntrustId") + public R getBookNameByEntrustId(String entrustId, String whatBook) { + String fileOssPath = entrustmentService.getBookNameByEntrustId(entrustId, whatBook); + Assert.notBlank(fileOssPath, "获取文书失败,请检查参数"); + String docId = IdWorker.get32UUID(); + String dataInfo = docId + "#" + fileOssPath; + return R.ok(dataInfo, "获取数据成功"); + } + + /** + * 检验完成 + * + * @param entrustID + * @return + */ + @PostMapping("/testsFinish") + @ApiOperation(value = "检验完成,检验结束时调用此接口", notes = "检验完成,检验结束时调用此接口") + public R testsFinish(@RequestParam("entrustmentId") String entrustID) { + Assert.notBlank(entrustID, "参数错误,参数entrustID不能为空"); + return R.ok(entrustmentService.testsFinish(entrustID)); + } + + @GetMapping("/getEntrustStatusCount") + @ApiOperation(value = "查询委托各个状态的数量", notes = "查询委托各个状态的数量") + public R getEntrustStatusCount(@RequestParam(value = "entrustStatus") List entrustStatus) { + DLPUser dlpUser = SecurityUtils.getUser(); + Assert.notEmpty(entrustStatus, "参数错误,参数entrustStatus不能为空"); + return R.ok(entrustmentService.getEntrustStatusCount(entrustStatus, dlpUser)); + } + + //查询是否提供了证件照 + //查询是否提供了证件照 + @GetMapping("/checkDeliverPhoto") + @ApiOperation(value = "检查是否已经上传了送检人证件照片", notes = "检查是否已经上传了送检人证件照片") + public R checkDeliverPhoto(String entrustId) { + Assert.notBlank(entrustId, "参数委托ID不能为空"); + return R.ok(entrustmentService.checkDeliverPhoto(entrustId)); + } + + //将历史数据流入到流转系统 + @PostMapping("/historyDataToTransSys") + public R historyDataToTransSys(CommonIdDto commonIdDto) { + System.out.println("参数entrustIds:" + commonIdDto.getIdList()); + return R.ok(entrustmentService.historyDataToTransSys("9", commonIdDto.getIdList())); + } + + //获取待流转的数据 + @GetMapping("/needTransEntrustList") + public R needTransEntrustList(String searchType, String searchKey) { + List transEntrustList = new ArrayList<>(); + if (StringUtils.isNotBlank(searchType) && StringUtils.isNotBlank(searchKey)) { + if (searchType.equals("1")) { + transEntrustList = entrustmentService.getEntrustmentVOList(Wrappers.query() + .eq("e.status", 9) + .eq("e.is_trans", 0) + .like("e.accept_no", searchKey) + .orderByDesc("e.accept_no")); + } + if (searchType.equals("2")) { + transEntrustList = entrustmentService.getEntrustmentVOList(Wrappers.query() + .eq("e.status", 9) + .eq("e.is_trans", 0) + .like("c.case_name", searchKey) + .orderByDesc("e.accept_no")); + } + } else { + transEntrustList = entrustmentService.getEntrustmentVOList(Wrappers.query() + .eq("e.status", 9) + .eq("e.is_trans", 0) + .orderByDesc("e.accept_no")); + } + return R.ok(transEntrustList, "获取数据成功"); + } + + //由于之前导入的数据存在缺失,所以添加一个接口,用于将之前缺失的字段补充进去 + @GetMapping("/updateImportDataInfo") + public R updateImportData(String excuteType) { + Assert.notBlank(excuteType, "参数excuteType不能为空"); + return R.ok(entrustmentService.updateImportData(excuteType)); + } + + //===================================================================================== + // 测试, 为现有的案件创建一些委托 + @GetMapping("/create100") + public R xxx_TestCreate100() { + List cjs = caseEventService.getCaseVoList(null, null, null, null); + for (CaseEvent cj : cjs) { + int num = RandomUtil.randomInt(1, 4); + for (int i = 0; i < num; i++) { + List ces = entrustmentService.list(Wrappers.query() + .eq("case_id", cj.getId())); + + if (ces.size() >= num) { + break; + } + Entrustment entrustment = new Entrustment(); + + entrustment.setCaseId(cj.getId()); + //entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo(cj.getCaseNo())); + entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo()); + //entrustment.setEntrustmentTime(LocalDateTime.now()); + entrustment.setClientOrgId(""); + //entrustment.setClientOrgName(""); + entrustment.setDeliverer1Name("李宏亮"); + entrustment.setDeliverer1Phone("13985001001"); + entrustment.setDeliverer1Id("522122199504042035"); + entrustment.setDeliverer2Name("西门吹雪"); + entrustment.setDeliverer2Phone("13985001002"); + entrustment.setDeliverer2Id("522122190504042031"); + + //entrustment.setIdentificationOrgName("国家毒品实验室陕西分中心"); // 鉴定机构名称 + entrustment.setIdentificationDomain("毒品检验"); // 鉴定专业 + entrustment.setQualitativeAnalysis(true); // 定性分析 + entrustment.setQuantitativeAnalysis(true); // 定量分析 + entrustment.setOtherIdentificationRequests("无"); // 鉴定要求 + entrustment.setId(IdWorker.get32UUID().toUpperCase()); + + if (entrustmentService.save(entrustment)) { + System.out.println("新增委托成功"); + } else { + System.out.println("新增委托失败"); + } + + } + } + return R.ok("已经为每个案件创建了 一些 委托"); + } + + @GetMapping("/get/quantity/for/Inspection") + @ApiOperation(value = "送检系统统计当前用户(机构)送检且已受理的所有检材数量", notes = "送检系统统计当前用户(机构)送检且已受理的所有检材数量") + public R> getQuantityForInspection(HttpServletRequest httpServletRequest) { + Principal principal = httpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.getImQuantityForInspection(dlpUser)); + } + + @GetMapping("/get/inspect/makers") + @ApiOperation(value = "送检系统统计各模块委托/任务不同状态的数量", notes = "送检系统统计各模块委托/任务不同状态的数量") + public R> getInspectMarkers(HttpServletRequest httpServletRequest) { + Principal principal = httpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.getInspectMarkers(dlpUser)); + } + + @GetMapping("/get/quantity/accept") +// @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + @ApiOperation(value = "受理系统统计已受理检材数量", notes = "受理系统统计已受理检材数量") + public R> getImQuantityForAccept() { + return R.ok(entrustmentService.getImQuantityForAccept()); + } + + @GetMapping("/accept/ent/makers") +// @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + @ApiOperation(value = "受理系统有关委托小红点标记", notes = "受理系统有关委托小红点标记") + public R> getAcceptMarkers(HttpServletRequest httpServletRequest) { + return R.ok(entrustmentService.getMarkersForEntrustment()); + } + + @GetMapping("/accept/oth/makers") +// @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + @ApiOperation(value = "受理系统其他小红点标记", notes = "受理系统其他小红点标记") + public R> getMarkersForOther(HttpServletRequest httpServletRequest) { + Principal principal = httpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentService.getMarkersForOther(dlpUser)); + } + + @GetMapping("/delivePhotoName_base64") + @ApiOperation(value = "获取受理时打印的送检人图片文件名列表", notes = "获取受理时打印的送检人图片文件名列表") + public List getDeliverPhotoName(String id) { + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + id + "/" + "deliverPhoto"; + return ossFile.fileList(path); + } + + @GetMapping("/delivePhotoDownload_base64/{id}/{fileName}") + @ApiOperation(value = "获取受理时打印的单个送检人图片", notes = "获取受理时打印的单个送检人图片") + public R getDeliverPhoto(@PathVariable(value = "id") String id, @PathVariable(value = "fileName") String fileName, HttpServletResponse httpServletResponse) throws Exception { + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + id + "/" + "deliverPhoto/" + fileName; + Entrustment entrustment = entrustmentService.getById(id); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到ID为%s的委托", id)); + } + ossFile.fileGet(path, httpServletResponse.getOutputStream()); + return R.ok("预览成功"); + } + + @DeleteMapping("del_delivePhoto_base64") + @ApiOperation(value = "删除送检人照片", notes = "删除送检人照片") + public R delDeliverPhoto( String id,String fileName) throws Exception { + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + id + "/" + "deliverPhoto/" + fileName; + ossFile.fileDelete(path); + return R.ok("删除成功!"); + } + + @DeleteMapping("/delivePhotoDel_base64/{id}/{fileName}") + @ApiOperation(value = "删除受理时打印的单个送检人图片", notes = "删除受理时打印的单个送检人图片") + public R delDeliverPhoto(@PathVariable(value = "id") String id, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + Entrustment entrustment = entrustmentService.getById(id); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到ID为%s的委托", id)); + } + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + id + "/" + "deliverPhoto/" + fileName; + ossFile.fileDelete(path); + + return R.ok("删除成功"); + } + + @PostMapping("/printSampleFile") + @ApiOperation(value = "打印检材档案", notes = "打印检材档案") + public void printSampleFile(String entrustmentId, HttpServletResponse httpServletResponse) throws Exception { + String applyFileName = "检材样本档案"; + String path = "document" + "/" + "entrustmentIdentificationMaterial" + "/" + applyFileName + ".docx"; + entrustmentService.printSampleFile(entrustmentId); + ossFile.fileGet(path, httpServletResponse.getOutputStream()); + } + + @PutMapping("/synchronization/materialType") + @ApiOperation(value = "同步大数据平台的检材类别", notes = "同步大数据平台的检材类别") + public R synchronizationByMaterialType() { + return entrustmentService.synchronizationByMaterialType() ? R.ok("同步成功!") : R.failed("同步失败!"); + } + + @GetMapping("/entrustmentAndMaterial") + @ApiOperation(value = "分页查询委托列表以及委托下的检材", notes = "分页查询委托列表以及委托下的检材") + public R getEntrustmentAndMaterial(Page page, Integer status, String keywords) { + return R.ok(entrustmentService.getEntrustmentAndMaterial(page, status, keywords), "数据获取成功!"); + } + + @GetMapping("/isMaterialPhoto") + @ApiOperation(value = "查看是否已经生成好了检材照片,如果已经生成好了,则返回检材照片的路径,反之返回一个null,然后再调用生成照片的接口即可") + public R isMaterialPhoto(String entrustmentId) { + String path = "document/accept" + "/" + entrustmentId + "/materialPhoto/materialallpic.docx"; + return entrustmentService.isMaterialPhoto(entrustmentId) ? R.ok(path) : R.ok(null); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentIdentificationMaterialController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentIdentificationMaterialController.java new file mode 100644 index 0000000..84017cf --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustmentIdentificationMaterialController.java @@ -0,0 +1,1156 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.core.util.TestUtils; +import digital.laboratory.platform.common.feign.RemoteTemplate2htmlService; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.entrustment.dto.PrintDTO; +import digital.laboratory.platform.entrustment.dto.SampleBoxDTO; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.sys.feign.RemoteEquipmentService; +import io.seata.spring.annotation.GlobalTransactional; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.security.Principal; +import java.time.LocalDateTime; +import java.util.*; + + +/** + * 检材信息 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 检材信息 前端控制器 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/entrustment_identification_material") +@Api(tags = "004-检材管理") +public class EntrustmentIdentificationMaterialController { + + private final CaseEventService caseEventService; + private final EntrustmentService entrustmentService; + private final EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + private final SampleService sampleService; + private final CaseEvidenceService caseEvidenceService; + private final OssFile ossFile; + private final SampleBoxService sampleBoxService; + private final TakerService takerService; + + private final RemoteTemplate2htmlService remoteTemplate2htmlService; + private final RemoteEquipmentService remoteEquipmentService; + + /** + * 通过id查询检材信息 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "检材标识", required = true, paramType = "path"), + }) + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialGet')") + public R getById(@PathVariable("id") String id) { + return R.ok(entrustmentIdentificationMaterialService.getById(id)); + } + + + /** + * 分页查询 + * + * @param page 分页对象 + * @param entrustmentIdentificationMaterial 检材信息 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "页信息", required = true, paramType = "query"), + @ApiImplicitParam(name = "entrustmentIdentificationMaterial", value = "查询条件", required = true, paramType = "query"), + }) + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialList')") + public R getEntrustmentIdentificationMaterialPage( + Page page, + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial) { + return R.ok(entrustmentIdentificationMaterialService.page(page, new LambdaQueryWrapper() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustmentIdentificationMaterial.getEntrustmentId()) + .eq(StrUtil.isNotBlank(entrustmentIdentificationMaterial.getImNo()), EntrustmentIdentificationMaterial::getImNo, entrustmentIdentificationMaterial.getImNo()) + .eq(StrUtil.isNotBlank(entrustmentIdentificationMaterial.getColor()), EntrustmentIdentificationMaterial::getColor, entrustmentIdentificationMaterial.getColor()) + .eq(StrUtil.isNotBlank(entrustmentIdentificationMaterial.getName()), EntrustmentIdentificationMaterial::getName, entrustmentIdentificationMaterial.getName()) + .orderByAsc(EntrustmentIdentificationMaterial::getOrderNo))); + } + + /** + * 列表查询 + * + * @param entrustmentIdentificationMaterial 检材信息 + * @return + */ + @ApiOperation(value = "列表查询", notes = "列表查询") + @ApiImplicitParams({ + @ApiImplicitParam(name = "entrustmentIdentificationMaterial", value = "查询条件", required = true, paramType = "query"), + }) + @GetMapping("/list") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialList')") + public R> getEntrustmentIdentificationMaterialList(EntrustmentIdentificationMaterial entrustmentIdentificationMaterial) { + List list = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq(StrUtil.isNotBlank(entrustmentIdentificationMaterial.getImNo()), "im_no", entrustmentIdentificationMaterial.getImNo()) + .eq(StrUtil.isNotBlank(entrustmentIdentificationMaterial.getAcceptNo()), "accept_no", entrustmentIdentificationMaterial.getAcceptNo()) + ); + return R.ok(list); + } + + /** + * 根据委托查询检材列表 + * + * @param entrustmentId 委托id + * @return + */ + @ApiOperation(value = "根据委托查询检材列表", notes = "根据委托查询检材列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "entrustmentId", value = "委托id", required = true, paramType = "query"), + @ApiImplicitParam(name = "entrustmentIds", value = "委托id列表", required = true, paramType = "query"), + }) + @GetMapping("/list_by_entrust") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialList')") + public R> getEntrustmentIdentificationMaterialListByEntrust( + @RequestParam(value = "entrustmentId", required = false) String entrustmentId, + @RequestParam(value = "entrustmentIds", required = false) List entrustmentIds) { + List list = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq(StrUtil.isNotBlank(entrustmentId), "entrustment_id", entrustmentId) + .in(entrustmentIds != null && entrustmentIds.size() > 0, "entrustment_id", entrustmentIds) + .orderByAsc("order_no") + ); + return R.ok(list); + } + + /** + * 审核者对检材进行审核 + * + * @param identificationMaterial + * @return + */ + @ApiOperation(value = "审核者对检材进行审核", notes = "审核者对检材进行审核, opCode: 1=通过, -1=不通过, 0=未审核") + @SysLog("审核者对检材进行审核") + @PutMapping("/check_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentCheck')") + public R bizCheck_Apply(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentIdentificationMaterialService.bizCheck_Apply(identificationMaterial, opCode, dlpUser), "检材审核完成"); + } + + + /** + * 审批者对检材进行审批 + * + * @param identificationMaterial + * @return + */ + @ApiOperation(value = "审批者对检材进行审批", notes = "审批者对检材进行审批, opCode: 1=通过, -1=不通过, 0=未审核") + @SysLog("审批者对检材进行审批") + @PutMapping("/approve_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentApprove')") + public R bizApprove_Apply(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentIdentificationMaterialService.bizApprove_Apply(identificationMaterial, opCode, dlpUser)); + } + + + /** + * 受理人保存检材信息 + *

+ * 受理人仅可以保存检材的以下属性: + * fundName + * fundQuantity + * quantity + * sample1No + * sample1FundQuantity + * sample1Quantity + * sample1BoxId + * sample2No + * sample2Fund_quantity + * sample2Quantity + * sample2BoxId + * + * @param identificationMaterial + * @return + */ + + @ApiOperation(value = "受理人保存检材信息", notes = "受理人保存检材信息\n" + + "如果委托方在送检前未分样, 需要在受理现场分样, 受理只能保存与分样相关的检材属性。\n" + + "受理人仅可以保存检材的以下属性:\n" + +// "fundName\n"+ + "fundQuantity\n" + + "quantity\n" + + + "providedSample1No\n" + + "providedSample1FundQuantity\n" + + "providedSample1Quantity\n" + + "providedSample2Present\n" + + "providedSample2No\n" + + "providedSample2Fund_quantity\n" + + "providedSample2Quantity\n" + + + "sample1No\n" + + "sample1FundQuantity\n" + + "sample1Quantity\n" + + "sample1BoxId\n" + + "sample2Present\n" + + "sample2No\n" + + "sample2Fund_quantity\n" + + "sample2Quantity\n" + + "sample2BoxId\n" + + "当 providedSample2Present 和 sample2Present 为true时, 自动生成 [提供样本2] 和 [样本2] 的编号\n" + ) + @SysLog("受理人保存检材信息") + @PutMapping("/accept_save") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R bizAccept_Save(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentIdentificationMaterialService.bizAccept_Save(identificationMaterial, dlpUser), "保存检材信息成功"); + } + + + /** + * 受理人对检材进行受理 + * + * @param identificationMaterial + * @return + */ + @ApiOperation(value = "受理人对检材进行受理提交", notes = "受理人对检材进行受理提交, opCode: 1=通过, -1=不通过, 0=未审核\n" + + "本操作改变检材的受理状态。同时也保存检材的部分属性。\n" + + "如果委托方在送检前未分样, 需要在受理现场分样, 受理只能保存与分样相关的检材属性。\n" + + "受理人仅可以保存检材的以下属性:\n" + +// "fundName\n"+ + "fundQuantity\n" + + "quantity\n" + + "sample1Present\n" + + "sample1No\n" + + "sample1FundQuantity\n" + + "sample1Quantity\n" + + "sample1BoxId\n" + + "sample2Present\n" + + "sample2No\n" + + "sample2Fund_quantity\n" + + "sample2Quantity\n" + + "sample2BoxId\n" + ) + @SysLog("受理人对检材进行受理") + @PutMapping("/accept_apply") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R bizAccept_Apply(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + return R.ok(entrustmentIdentificationMaterialService.bizAccept_Apply(identificationMaterial, opCode, dlpUser), "检材受理完成"); + } + + + /** + * 根据提供的 evidenceId 创建新的检材 + *

+ * 复制物证信息, 以及附件 + *

+ * // * param entrustmentId 委托的 id + * // * param evidenceId 参考物证 evidenceId + * // * param copyAttachemnts 是否复制附件 + * + * @return R + */ + @ApiOperation(value = "新增检材信息", notes = "新增检材信息") + @ApiImplicitParams({ + @ApiImplicitParam(name = "entrustmentId", value = "委托的 id", required = true, dataType = "String", paramType = "body"), + @ApiImplicitParam(name = "evidenceId", value = "参考物证 evidenceId", required = true, dataType = "String", paramType = "body"), + //@ApiImplicitParam(name = "isASample", value = "是否A样", required = true, dataType = "Boolean", paramType = "body"), + @ApiImplicitParam(name = "copyAttachemnts", value = "是否复制附件", required = true, dataType = "Boolean", paramType = "body"), + }) + @SysLog("新增检材信息") + @PostMapping(value = "/createIdentificationMaterialByEvidenceId") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialCreate')") + public R createIdentificationMaterialByEvidenceId(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, HttpServletRequest httpServletRequest) { + Principal principal = httpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.createIdentificationMaterialByEvidenceId(identificationMaterial, dlpUser); + if (im != null) { + return R.ok(im, "新增检材成功"); + } else { + return R.failed(im, "新增检材失败"); + } + } + + @SysLog("新增检材信息11-20修改版") + @ApiOperation(value = "新增检材信息11-20修改版", notes = "新增检材信息11-20修改版") + @PostMapping(value = "/create/entrustmentIdent/im") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialCreate')") + public R> createNewIm(@RequestBody List identificationMaterialList, HttpServletRequest httpServletRequest) { + Principal principal = httpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + List newIm = entrustmentIdentificationMaterialService.createNewIm(identificationMaterialList, dlpUser); + if (newIm != null) { + return R.ok(newIm, "新增检材成功"); + } else { + return R.failed(newIm, "新增检材失败"); + } + } + + /** + * 修改检材信息 + * + * @param identificationMaterial 检材信息 + * @return R + */ + @ApiOperation(value = "修改检材信息", notes = "修改检材信息") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterial", value = "要修改的检材", required = true, paramType = "body"), + }) + @SysLog("修改检材信息") + @PutMapping + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialEdit') || @pms.hasPermission('EntrustmentAccept')") + public R putUpdateById(@RequestBody EntrustmentIdentificationMaterial identificationMaterial, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = entrustmentIdentificationMaterialService.putUpdateById(identificationMaterial, dlpUser); + if (entrustmentIdentificationMaterial != null) { + return R.ok(entrustmentIdentificationMaterial, "保存检材信息成功"); + } else { + return R.failed(entrustmentIdentificationMaterial, "保存检材信息失败"); + } + + } + + //生成委托时候的检材序号 + + + /** + * 通过id删除检材信息 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除检材信息", notes = "通过id删除检材信息") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "要删除的检材的标识", required = true, paramType = "path"), + }) + @SysLog("通过id删除检材信息") + @DeleteMapping("/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialDelete')") + public R deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + Entrustment entrustment = entrustmentService.getById(entrustmentIdentificationMaterialService.getById(id).getEntrustmentId()); + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus() && !dlpUser.isStaff()) { + throw new RuntimeException(String.format("当前委托状态不允许删除检材!")); + } + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = entrustmentIdentificationMaterialService.deleteById(id); + if (entrustmentIdentificationMaterial != null) { + return R.ok(entrustmentIdentificationMaterial, "检材删除成功"); + } else { + return R.failed(entrustmentIdentificationMaterial, "检材删除失败"); + } + } + + + /** + * 取附件列表 + * + * @param identificationMaterialId + * @return + */ + @ApiOperation(value = "取附件列表", notes = "取附件列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + }) + @GetMapping("/attachment/{identificationMaterialId}/list") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentList')") + public R getAttachmentList(@PathVariable("identificationMaterialId") String identificationMaterialId) { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId)); + } + return R.failed("不存在这个检材"); + } + + /** + * 取指定检材的指定附件 + * + * @param identificationMaterialId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @ApiOperation(value = "取指定检材的指定附件", notes = "取指定检材的指定附件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "fileName", value = "要取的文件名", required = true, paramType = "path"), + }) + @GetMapping("/attachment/{identificationMaterialId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentDownload')") + public void getAttachmentObj(@PathVariable("identificationMaterialId") String identificationMaterialId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } else { + httpServletResponse.sendError(404, "不存在这个检材"); + } + } + + @PostMapping(value = "/attachment/{identificationMaterialId}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentUpload')") + public R uploadAttachmentObj(HttpServletRequest theHttpServletRequest, @PathVariable("identificationMaterialId") String identificationMaterialId, @RequestPart("file") MultipartFile file) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + if (im == null) { + return R.failed(String.format("不存在 id 为 %s 的检材", identificationMaterialId)); + } + + if ((im.getCheckPassed() != null && im.getCheckPassed() == 1) && !dlpUser.isStaff()) { + return R.failed(String.format("已审核的检材不能修改")); + } + if ((im.getApprovePassed() != null && im.getApprovePassed() == 1) && !dlpUser.isStaff()) { + return R.failed(String.format("已审批的检材不能修改")); + } + + if ((im.getAcceptPassed() != null && im.getAcceptPassed() == 1) && !dlpUser.isStaff()) { + return R.failed(String.format("已受理的检材不能修改")); + } + + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s identificationMaterialId=%s OriginalFilename=%s", im.getEntrustmentId(), identificationMaterialId, file.getOriginalFilename())); + String path = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId; + boolean r = ossFile.fileUpload(file, path); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + } + + + @PostMapping(value = "/attachment_base64/{identificationMaterialId}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentUpload')") + public R uploadAttachmentObj_Base64(HttpServletRequest theHttpServletRequest, @PathVariable("identificationMaterialId") String identificationMaterialId, @RequestBody JSONObject jsonParam) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im == null) { + return R.failed(String.format("不存在 id 为 %s 的检材", identificationMaterialId)); + } + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + if (im.getCheckPassed() != null && im.getCheckPassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已审核的检材不能修改")); + } + if (im.getApprovePassed() != null && im.getApprovePassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已审批的检材不能修改")); + } + + if (im.getAcceptPassed() != null && im.getAcceptPassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已受理的检材不能修改")); + } + + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s identificationMaterialId=%s jsonParam.size()=%d", im.getEntrustmentId(), identificationMaterialId, jsonParam.size())); + + String image = jsonParam.getString("image"); +// System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId; + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + + } + + + // 从物证复制附件 + @ApiOperation(value = "从物证复制附件", notes = "从物证复制附件到检材") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "fileList", value = "要复制的文件名列表", required = true, paramType = "body"), + }) + @PostMapping(value = "/attachment/copy/{identificationMaterialId}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentUpload')") + public R copyAttachmentsFromEvidence(@PathVariable("identificationMaterialId") String identificationMaterialId, @RequestBody List fileList) throws Exception { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (entrustmentIdentificationMaterial != null) { + for (String fileName : fileList) { + String srcFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentIdentificationMaterial.getCaseId() + "/" + entrustmentIdentificationMaterial.getEvidenceId() + "/" + fileName; + String destFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentIdentificationMaterial.getEntrustmentId() + "/" + entrustmentIdentificationMaterial.getId() + "/" + fileName; + ossFile.fileCopy(srcFileName, destFileName); + } + return R.ok("复制成功"); + } + return R.failed("不存在这个检材"); + } + + @ApiOperation(value = "删除附件", notes = "删除检材的附件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "fileName", value = "要删除的文件名", required = true, paramType = "path"), + }) + @DeleteMapping("/attachment/{identificationMaterialId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialAttachmentDelete')") + public R deleteAttachmentObj(HttpServletRequest theHttpServletRequest, @PathVariable("identificationMaterialId") String identificationMaterialId, @PathVariable String fileName) throws Exception { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im == null) { + return R.failed(String.format("不存在 id 为 %s 的检材", identificationMaterialId)); + } + + if (im.getCheckPassed() != null && im.getCheckPassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已审核的检材不能修改")); + } + if (im.getApprovePassed() != null && im.getApprovePassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已审批的检材不能修改")); + } + + if (im.getAcceptPassed() != null && im.getAcceptPassed() == 1 && !dlpUser.isStaff()) { + return R.failed(String.format("已受理的检材不能修改")); + } + + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } + + //----------------------------- + // 受理的附件 + //----------------------------- + + + /** + * 取受理附件列表 + * + * @param identificationMaterialId + * @return + */ + @ApiOperation(value = "取受理附件列表", notes = "取受理附件列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + }) + @GetMapping("/accept_attachment/{identificationMaterialId}/list") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R getAcceptAttachmentList(@PathVariable("identificationMaterialId") String identificationMaterialId) { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + return R.ok(ossFile.fileList(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId)); + } + return R.failed("不存在这个检材"); + } + + /** + * 取指定检材的指定受理附件 + * + * @param identificationMaterialId + * @param fileName + * @param httpServletResponse + * @throws Exception + */ + @ApiOperation(value = "取指定检材的指定受理附件", notes = "取指定检材的指定受理附件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "fileName", value = "要取的文件名", required = true, paramType = "path"), + }) + @GetMapping("/accept_attachment/{identificationMaterialId}/{fileName}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public void getAcceptAttachmentObj(@PathVariable("identificationMaterialId") String identificationMaterialId, @PathVariable String fileName, HttpServletResponse httpServletResponse) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + try { + ossFile.fileGet(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId + "/" + fileName, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(fileName)); + } catch (AmazonS3Exception s3e) { + httpServletResponse.sendError(s3e.getStatusCode(), s3e.toString()); + } catch (Exception e) { + httpServletResponse.sendError(501, e.toString()); + } + } else { + httpServletResponse.sendError(404, "不存在这个检材"); + } + } + + /** + * 上传受理附件 + * + * @param identificationMaterialId + * @param file + * @return + * @throws Exception + */ + @PostMapping(value = "/accept_attachment/{identificationMaterialId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R uploadAcceptAttachmentObj(@PathVariable("identificationMaterialId") String identificationMaterialId, @RequestPart("file") MultipartFile file) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + if (im.getAcceptPassed() == null || im.getAcceptPassed() != 1) { + System.out.println(String.format("uploadAcceptAttachmentObj: entrustmentId=%s identificationMaterialId=%s OriginalFilename=%s", im.getEntrustmentId(), identificationMaterialId, file.getOriginalFilename())); + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId; + boolean r = ossFile.fileUpload(file, path); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", FileNameUtil.getName(file.getOriginalFilename())); + ResultData.put("path", path); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + } else { + return R.failed("已受理的检材不能再添加附件"); + } + } + return R.failed(im, "不存在这个检材"); + } + + /** + * 上传受理附件 + * + * @param identificationMaterialId + * @param jsonParam + * @return + * @throws Exception + */ + @PostMapping(value = "/accept_attachment_base64/{identificationMaterialId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R uploadAcceptAttachmentObj_Base64(@PathVariable("identificationMaterialId") String identificationMaterialId, + @RequestBody JSONObject jsonParam) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + System.out.println(String.format("uploadAcceptAttachmentObj_Base64: entrustmentId=%s identificationMaterialId=%s jsonParam.size()=%d", im.getEntrustmentId(), identificationMaterialId, jsonParam.size())); + String entrustId = jsonParam.getString("entrustId"); + Assert.notBlank(entrustId, "委托ID参数不能为空"); + Entrustment entrustObj = entrustmentService.getById(entrustId); + Thread.sleep(10); + //if (im.getAcceptPassed() == null || im.getAcceptPassed() != 1) { + //只要委托没有受理就可以上传检材的照片 + if (entrustObj.getStatus() >= (EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus())) { + String image = jsonParam.getString("image"); +// System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + if (suffix.equals("jpeg")) { + suffix = "jpg"; + } + //String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; +// int randomNumber = (int) (Math.random() * 90) + 10; // [10, 99] + System.currentTimeMillis(); + String fileName = IdWorker.get32UUID().toUpperCase() + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId; + + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + } else { + return R.failed(",检材不能再添加照片"); + } + } + return R.failed("不存在这个检材"); + } + + + @ApiOperation(value = "删除附件", notes = "删除检材的附件") + @ApiImplicitParams({ + @ApiImplicitParam(name = "identificationMaterialId", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "fileName", value = "要删除的文件名", required = true, paramType = "path"), + }) + @DeleteMapping("/accept_attachment/{identificationMaterialId}/{fileName}/{entrustId}") + @PreAuthorize("@pms.hasPermission('EntrustmentAccept')") + public R deleteAcceptAttachmentObj(@PathVariable("identificationMaterialId") String identificationMaterialId, @PathVariable String fileName, @PathVariable String entrustId) throws Exception { + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(identificationMaterialId); + if (im != null) { + Assert.notBlank(entrustId, "委托ID参数不能为空"); + Entrustment entrustObj = entrustmentService.getById(entrustId); + //if (im.getAcceptPassed() == null || im.getAcceptPassed() != 1) { + //只要委托没有受理就可以删除检材的照片 + if (entrustObj.getStatus() >= (EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus())) { + ossFile.fileDelete(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + im.getEntrustmentId() + "/" + identificationMaterialId + "/" + fileName); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + return R.ok(ResultData, "删除文件成功"); + } else { + return R.failed("委托受理后,检材不能再删除检材照片"); + } + } + return R.failed("不存在这个检材"); + } + + /** + * 根据模板生成检材标签的 html, 供 qz 打印使用 + * + * @param id id + * @return String + */ + @ApiOperation(value = "根据模板生成检材标签的 html, 供 qz 打印使用", notes = "根据模板生成检材标签的 html, 供 qz 打印使用") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "检材标识", required = true, paramType = "path"), + }) + @GetMapping("/imlabel/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialGet')") + public String getIdentificationMaterialLabelHtml(@PathVariable("id") String id) throws Exception { + //把数据填入上下文 + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + CaseEvent ce = caseEventService.getById(im.getCaseId()); + if (ce == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的案件", im.getCaseId())); + } + + CaseEvidence evidence = caseEvidenceService.getById(im.getEvidenceId()); + if (evidence == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的物证", im.getEvidenceId())); + } + + Map data = new HashMap<>(); + data.put("identificationMaterial", im); + data.put("caseEvent", ce); + data.put("entrustment", entrustment); + data.put("evidence", evidence); + + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IDENTIFICATION_MATERIAL); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } + + + /** + * 根据模板生成提供的样本标签的 html, 供 qz 打印使用 + * + * @param id id + * @return String + */ + @ApiOperation(value = "根据模板生成提供的样本标签的 html, 供 qz 打印使用", notes = "根据模板生成提供的样本标签的 html, 供 qz 打印使用") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "sample", value = "样本1或样本2, (整数, 1 或 2 )", required = true, paramType = "path"), + }) + @GetMapping("/provided_sample_label/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialGet')") + public String getProvidedSampleLabelHtml(@PathVariable("id") String id, @RequestParam(value = "sample", required = true) Integer sample) throws Exception { + if ((sample != 1) && (sample != 2)) { + throw new RuntimeException(String.format("sample 参数必须是 1 或 2")); + } + //把数据填入上下文 + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + CaseEvent ce = caseEventService.getById(im.getCaseId()); + if (ce == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的案件", im.getCaseId())); + } +// 打印条码现在已经不需要物证信息了 +// CaseEvidence evidence = caseEvidenceService.getById(im.getEvidenceId()); +// if (evidence == null) { +// throw new RuntimeException(String.format("没有找到 id 为 %s 的物证", im.getEvidenceId())); +// } + + Map data = new HashMap<>(); + data.put("identificationMaterial", im); + data.put("caseEvent", ce); + data.put("entrustment", entrustment); +// data.put("evidence", evidence); + if (sample == 1) { + //String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_SAMPLE1); + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_PROVIDED_SAMPLE1); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } else { + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_PROVIDED_SAMPLE2); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } + } + + + /** + * 根据模板生成样本标签的 html, 供 qz 打印使用 + * + * @param id id + * @return String + */ + @ApiOperation(value = "根据模板生成样本标签的 html, 供 qz 打印使用", notes = "根据模板生成样本标签的 html, 供 qz 打印使用") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "检材标识", required = true, paramType = "path"), + @ApiImplicitParam(name = "sample", value = "样本1或样本2, (整数, 1 或 2 )", required = true, paramType = "path"), + @ApiImplicitParam(name = "type", value = "打印大标签或者小标签。(整数,如果打印小标签传入1即可)", required = true, paramType = "path"), + }) + @GetMapping("/sample_label/{id}") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialGet')") + public String getSampleLabelHtml(@PathVariable(value = "id") String id, @RequestParam(value = "sample", required = true) Integer sample) throws Exception { + if ((sample != 1) && (sample != 2)) { + throw new RuntimeException(String.format("sample 参数必须是 1 或 2")); + } + //把数据填入上下文 + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + CaseEvent ce = caseEventService.getById(im.getCaseId()); + if (ce == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的案件", im.getCaseId())); + } + + CaseEvidence evidence = caseEvidenceService.getById(im.getEvidenceId()); + if (evidence == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的物证", im.getEvidenceId())); + } + + Map data = new HashMap<>(); + data.put("identificationMaterial", im); + data.put("caseEvent", ce); + data.put("entrustment", entrustment); + data.put("evidence", evidence); + + if (sample == 1) { + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_SAMPLE1); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } else { + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_SAMPLE2); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } + } + + + /** + * 添加复秤信息的保存接口 还没增加权限控制 + * + * @param id + * @param sample1RepeatWeigh + * @param sample2RepeatWeigh + * @return + */ + @PostMapping("/saveRepWeigh") + @ApiOperation(value = "保存复秤信息", notes = "保存复秤信息") + @GlobalTransactional + public R saveRepWeigh(String id, double sample1RepeatWeigh, double sample2RepeatWeigh, boolean isUseBalance, String sampleFlag) { + return R.ok(entrustmentIdentificationMaterialService.saveRepWeigh(id, sample1RepeatWeigh, sample2RepeatWeigh, isUseBalance, sampleFlag), "保存成功"); + } + + //增加留存样 + @PostMapping("/settingRetained") + @ApiOperation(value = "添加留存样", notes = "添加留存样的接口,1= true -1=false") + public R settingRetained(String id, int flag) { + return R.ok(entrustmentIdentificationMaterialService.settingRetained(id, flag), "操作成功"); + } + + // + @ApiOperation(value = "根据盒子ID 查询该盒子下的检材", notes = "根据盒子ID 查询该盒子下的检材") + @GetMapping("/getQueryListByBoxID") + public R getQueryListByBoxID(String boxId, String boxType) { + return R.ok(entrustmentIdentificationMaterialService.getQueryListByBoxID(boxId, boxType)); + } + + @ApiOperation(value = "根据盒子ID,分样类型,检材ID 删除分样信息", notes = "根据盒子ID,分样类型,检材ID 删除分样信息") + @DeleteMapping("/delSampleBoxInfo") + public R delSampleBoxInfo(String boxId, String sampleNo, String boxType) { + System.out.println("boxId=" + boxId + " sampleNo=" + sampleNo + " boxType" + boxType); + Boolean aBoolean = entrustmentIdentificationMaterialService.delSampleBoxInfo(boxId, sampleNo, boxType); + return aBoolean ? R.ok("删除成功") : R.failed("删除失败"); + } + + @ApiOperation(value = "统计盒子中装了多少样本", notes = "统计盒子中装了多少样本") + @GetMapping("/getBoxCountInfo") + public R getBoxCountInfo(String boxId) { + return R.ok(entrustmentIdentificationMaterialService.getBoxCountInfo(boxId)); + } + + @ApiOperation(value = "将样本放进盒子", notes = "将样本放进盒子") + @PostMapping("/putSampleToBox") + public R> putSampleToBox(@RequestBody SampleBoxDTO sampleBoxDTO) { + Assert.notBlank("boxId", "盒子ID不能为空"); + Assert.notBlank("sampleNo", "样品编号不能为空"); + Assert.notBlank("boxType", "盒子类型不能为空"); + List materialList = entrustmentIdentificationMaterialService.putSampleToBox(sampleBoxDTO.getBoxId(), sampleBoxDTO.getSampleNoList(), sampleBoxDTO.getBoxType()); + + return materialList != null ? R.ok(materialList, "添加成功") : R.failed("添加失败"); + } + + //===================================================================================== + // 测试, 为现有的委托创建一些检材 + @ApiOperation(value = "测试用: 为所有委托创建1~100个不等的检材,检材来源于对应的案件的物证", notes = "为所有委托创建1~100个不等的检材,检材来源于对应的案件的物证") + @GetMapping("/create100") + public R xxx_TestCreate100() { + List es = entrustmentService.list(); + System.out.println(String.format("委托总数: =%d", es.size())); + for (Entrustment e : es) { + String caseId = e.getCaseId(); + List ces = caseEvidenceService.list(Wrappers.query() + .eq("case_id", e.getCaseId())); + System.out.println(String.format("EntrustmentNo:%s caseId:%s 物证数: %d", e.getEntrustmentNo(), e.getCaseId(), ces.size())); + if (ces.size() > 0) { + + int num = TestUtils.genWeightInteger(100) % 10; + System.out.println(String.format("正在生成委托%s的检材, 将生成%d个检材", e.getId(), num)); + for (int i = 0; i < num; i++) { + CaseEvidence ce = ces.get(RandomUtil.randomInt(0, ces.size())); // 随机取一个物证 + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.createNewIdentificationMaterial(ce); // 测试用 + im.setEntrustmentId(e.getId()); + im.setDrawWay("随机抽取"); + + im.setPersonName(TestUtils.genPersonName()); + im.setPersonGender(RandomUtil.randomInt(0, 2)); + im.setPersonNation(RandomUtil.randomInt(1, 20)); + + if (StringUtils.isEmpty(im.getTake1Name())) { + im.setTake1Name(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getTake1Position())) { + im.setTake1Position(TestUtils.genPosition()); + } + if (StringUtils.isEmpty(im.getTake1Cert())) { + im.setTake1Cert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getTake1Id())) { + im.setTake1Id(RandomUtil.randomNumbers(6)); + } + if (StringUtils.isEmpty(im.getTake1Phone())) { + im.setTake1Phone(TestUtils.genMobile()); + } + if (StringUtils.isEmpty(im.getTake2Name())) { + im.setTake2Name(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getTake2Position())) { + im.setTake2Position(TestUtils.genPosition()); + } + if (StringUtils.isEmpty(im.getTake2Cert())) { + im.setTake2Cert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getTake2Id())) { + im.setTake2Id(RandomUtil.randomNumbers(6)); + } + if (StringUtils.isEmpty(im.getTake2Phone())) { + im.setTake2Phone(TestUtils.genMobile()); + } + + if (im.getTakeTime() == null) { + LocalDateTime t = LocalDateTime.now(); + t = t.minusDays(RandomUtil.randomInt(100)); + im.setTakeTime(t); + } + + if (StringUtils.isEmpty(im.getWitnessName())) { + im.setWitnessName(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getWitnessCert())) { + im.setWitnessCert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getWitnessId())) { + im.setWitnessId(RandomUtil.randomNumbers(6)); + } + im.setId(IdWorker.get32UUID().toUpperCase()); + + if (entrustmentIdentificationMaterialService.save(im)) { + System.out.println("新增检材成功"); + } else { + System.out.println("新增检材失败"); + } + + } + } + } + return R.ok("已经为每个委托创建了 一些检材"); + } + + + //===================================================================================== + // 测试, 为现有的检材补齐资料 + @ApiOperation(value = "测试用: 为现有的检材补齐资料", notes = "为现有的检材补齐资料") + @GetMapping("/testpatch") + public R testPatch() { + List ims = entrustmentIdentificationMaterialService.list(); + System.out.println(String.format("检材总数: =%d", ims.size())); + int i = 0; + for (EntrustmentIdentificationMaterial im : ims) { + i++; + System.out.println(String.format("正在更新检材 %d / %d ...", i, ims.size())); + + + im.setPersonName(TestUtils.genPersonName()); + im.setPersonGender(RandomUtil.randomInt(0, 2)); + im.setPersonNation(RandomUtil.randomInt(1, 20)); + + if (StringUtils.isEmpty(im.getTake1Name())) { + im.setTake1Name(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getTake1Position())) { + im.setTake1Position(TestUtils.genPosition()); + } + if (StringUtils.isEmpty(im.getTake1Cert())) { + im.setTake1Cert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getTake1Id())) { + im.setTake1Id(RandomUtil.randomNumbers(6)); + } + if (StringUtils.isEmpty(im.getTake1Phone())) { + im.setTake1Phone(TestUtils.genMobile()); + } + if (StringUtils.isEmpty(im.getTake2Name())) { + im.setTake2Name(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getTake2Position())) { + im.setTake2Position(TestUtils.genPosition()); + } + if (StringUtils.isEmpty(im.getTake2Cert())) { + im.setTake2Cert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getTake2Id())) { + im.setTake2Id(RandomUtil.randomNumbers(6)); + } + if (StringUtils.isEmpty(im.getTake2Phone())) { + im.setTake2Phone(TestUtils.genMobile()); + } + + if (im.getTakeTime() == null) { + LocalDateTime t = LocalDateTime.now(); + t = t.minusDays(RandomUtil.randomInt(100)); + im.setTakeTime(t); + } + + if (StringUtils.isEmpty(im.getWitnessName())) { + im.setWitnessName(TestUtils.genPersonName()); + } + if (StringUtils.isEmpty(im.getWitnessCert())) { + im.setWitnessCert(TestUtils.genCertificateType()); + } + if (StringUtils.isEmpty(im.getWitnessId())) { + im.setWitnessId(RandomUtil.randomNumbers(6)); + } + entrustmentIdentificationMaterialService.updateById(im); + } + return R.ok("已经为每个检材补齐了一些字段"); + } + +// @GetMapping("/print/label") +// @ApiOperation(value = "打印检材条码,传入检材ID即可", notes = "打印检材条码,传入检材ID即可") +// public String printLabel(@RequestParam(value = "id") String id) { +// return entrustmentIdentificationMaterialService.printLabel(id); +// } + + /** + * 根据模板生成样本标签的 html, 供 qz 打印使用 + * + * @param printDTOList printDTOList + * @return String + */ + @ApiOperation(value = "批量:根据模板生成样本标签的 html, 供 qz 打印使用//type:区分是打印大标签还是小标签,1:大标签 0:小标签", notes = "批量:根据模板生成样本标签的 html, 供 qz 打印使用//type:区分是打印大标签还是小标签,1:大标签 0:小标签") + @PostMapping("/sample_many_label") + @PreAuthorize("@pms.hasPermission('EntrustmentIdentificationMaterialGet')") + public List getManySampleLabelHtml(@RequestBody List printDTOList) throws Exception { + return entrustmentIdentificationMaterialService.printManyLabel(printDTOList); + } + + @GetMapping("/print/archives") + @ApiOperation(value = "生成委托的检材档案信息") + public R printMaterialArchives(String entrustmentId) throws Exception { + String path = entrustmentIdentificationMaterialService.printMaterialArchives(entrustmentId); + return StringUtils.isNotBlank(path) ? R.ok(path, "生成成功!") : R.failed("生成失败!"); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/IdentificationController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/IdentificationController.java new file mode 100644 index 0000000..b7d0f1d --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/IdentificationController.java @@ -0,0 +1,167 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.Identification; +import digital.laboratory.platform.entrustment.service.CaseEventService; +import digital.laboratory.platform.entrustment.service.EntrustmentService; +import digital.laboratory.platform.entrustment.service.IdentificationService; +import digital.laboratory.platform.entrustment.vo.IdentificationVO; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + + +/** + * 鉴定表,一个鉴定可能会有多个委托 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 鉴定表,一个鉴定可能会有多个委托 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/identification" ) +@Api(value = "identification", tags = "006-鉴定表,一个鉴定可能会有多个委托管理") +public class IdentificationController { + + private final IdentificationService identificationService; + @Resource + private CaseEventService caseEventService; + @Resource + private EntrustmentService entrustmentService; + + /** + * 通过id查询鉴定表,一个鉴定可能会有多个委托 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_identification_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(identificationService.getById(id)); + } + + + /** + * 废弃了xxxx + * 根据 caseId 取 IdentificationVO 列表, 每个 Entrustment 一行 + * @param caseId + * @return R + */ + @ApiOperation(value = "根据 caseId 取 IdentificationVO 列表, 每个 Entrustment 一行", notes = "根据 caseId 取 IdentificationVO 列表, 每个 Entrustment 一行") + @GetMapping("/vo_list_by_case_id" ) +// @PreAuthorize("@pms.hasPermission('entrustment_identification_get')" ) + public R> getIdentificationVOList(String caseId) { + return R.ok(identificationService.getIdentificationVOList(caseId)); + } + + /** + * 根据 caseId 取 Identification 列表, 供新建的补充委托选择老的 Identification(鉴定), 以使新建的委托作为老的鉴定的一部分 + * @param caseId + * @return + */ + @ApiOperation(value = "根据 caseId 取 Identification 列表, 供新建的补充委托选择老的 Identification(鉴定), 以使新建的委托作为老的鉴定的一部分", + notes = "根据 caseId 取 Identification 列表, 供新建的补充委托选择老的 Identification(鉴定), 以使新建的委托作为老的鉴定的一部分") + @GetMapping("/list_by_case" ) +// @PreAuthorize("@pms.hasPermission('entrustment_identification_get')" ) + public R> getIdentificationListByCaseId(String caseId) { + //return R.ok(identificationService.getIdentificationListByCaseId(caseId)); + //求出case 下的委托,并且这些委托是受理后的 + List entrustmentList=entrustmentService.list(Wrappers.query() + .eq("case_id",caseId) + .ge("status",8) + .le("status",90)); + return R.ok(entrustmentList,"获取数据成功"); + + } + + + /** + * 分页查询 + * @param page 分页对象 + * @param identification 鉴定表,一个鉴定可能会有多个委托 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_identification_get')" ) + public R getIdentificationPage(Page page, Identification identification) { + return R.ok(identificationService.page(page, Wrappers.query(identification))); + } + + /** + * 新增鉴定表,一个鉴定可能会有多个委托 + * @param identification 鉴定表,一个鉴定可能会有多个委托 + * @return R + */ + @ApiOperation(value = "新增鉴定表,一个鉴定可能会有多个委托", notes = "新增鉴定表,一个鉴定可能会有多个委托") + @SysLog("新增鉴定表,一个鉴定可能会有多个委托" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_identification_add')" ) + public R postAddObject(@RequestBody Identification identification) { + identification.setId(IdWorker.get32UUID().toUpperCase()); + + if (identificationService.save(identification)) { + return R.ok(identification, "新增鉴定成功"); + } + else { + return R.failed(identification, "新增鉴定失败"); + } + + } + + /** + * 修改鉴定表,一个鉴定可能会有多个委托 + * @param identification 鉴定表,一个鉴定可能会有多个委托 + * @return R + */ + @ApiOperation(value = "修改鉴定表,一个鉴定可能会有多个委托", notes = "修改鉴定表,一个鉴定可能会有多个委托") + @SysLog("修改鉴定表,一个鉴定可能会有多个委托" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_identification_edit')" ) + public R putUpdateById(@RequestBody Identification identification) { + return R.ok(identificationService.updateById(identification)); + } + + + + /** + * 通过id删除鉴定表,一个鉴定可能会有多个委托 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除鉴定表,一个鉴定可能会有多个委托", notes = "通过id删除鉴定表,一个鉴定可能会有多个委托") + @SysLog("通过id删除鉴定表,一个鉴定可能会有多个委托" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_identification_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(identificationService.removeById(id)); + } + + @GetMapping("/create10") + public R create10() { + int foo = 10; + for (int i = 0; i < foo; i++) { + Identification identification = new Identification(); + identification.setId(IdWorker.get32UUID().toUpperCase()); + String idNo = identificationService.getNewIdentificationNo(); + System.out.printf("新的 id=%s identificationNo = %s\n", identification.getId(), idNo); + identification.setIdentificationNo(idNo); + identification.setStatus(0); + identificationService.save(identification); + } + return R.ok("Create 10 Identification samples OK"); + } + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxController.java new file mode 100644 index 0000000..228c8e8 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxController.java @@ -0,0 +1,315 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.mapper.EntrustmentMapper; +import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; +import digital.laboratory.platform.entrustment.service.SampleBoxService; +import digital.laboratory.platform.entrustment.service.SampleService; +import digital.laboratory.platform.entrustment.vo.SampleBoxLiteVO; +import digital.laboratory.platform.entrustment.vo.SampleBoxVO; +import digital.laboratory.platform.sewage.entity.SewageJob; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import digital.laboratory.platform.sewage.feign.RemoteSewageJobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 受理时样品重新包装的容器 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 受理时检材重新包装的容器 前端控制器 + */ +@RestController +@RequestMapping("/papp/entrustment/sample_box") +@Api(value = "sample_box", tags = "005-受理时样品重新包装的容器管理") +public class SampleBoxController { + + @Resource + private SampleBoxService sampleBoxService; + + @Resource + private SampleService sampleService; + + @Resource + private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + + @Resource + private EntrustmentMapper entrustmentMapper; + + @Resource + private RemoteSewageJobService remoteSewageJobService; + + /** + * 通过id查询受理时样品重新包装的容器 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_get')" ) + public R getSampleBoxById(@PathVariable("id") String id) { + return R.ok(sampleBoxService.getById(id)); + } + + /** + * 分页查询 + * + * @param page 分页对象 + * @param sampleBox 受理时样品重新包装的容器 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_get')" ) + public R getSampleBoxPage(Page page, SampleBox sampleBox) { + return R.ok(sampleBoxService.page(page, Wrappers.query(sampleBox))); + } + + /** + * 列表查询 + * + * @param sampleBox 受理时样品重新包装的容器 + * @return + */ + @ApiOperation(value = "列表查询", notes = "列表查询") + @GetMapping("/list") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_get')" ) + public R> getSampleBoxList(SampleBox sampleBox) { +// List boxIds=new ArrayList<>(); +// List list = sampleBoxService.list(Wrappers.query(sampleBox)); +// list.forEach(item->{ +// //查询盒子中的样本数量 +// boxIds.add(item.getId()); +// }); + + return R.ok(sampleBoxService.getSampleBoxList(sampleBox)); + } + + + /** + * 新增受理时样品重新包装的容器 + * + * @param sampleBox 受理时样品重新包装的容器 + * @return R + */ + @ApiOperation(value = "新增受理时样品重新包装的容器", notes = "新增受理时样品重新包装的容器") + @SysLog("新增受理时样品重新包装的容器") + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_add')" ) + public R post_CreateNewSampleBox(@RequestBody SampleBox sampleBox) { + if (StrUtil.equalsIgnoreCase(sampleBox.getSource(), "entrustment")) { + if (sampleBox.getEntrustmentId() == null) { + throw new RuntimeException("样本盒必须与某个委托关联, 缺少 entrustmentId"); + } + Entrustment entrustment = entrustmentMapper.selectById(sampleBox.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的委托", sampleBox.getEntrustmentId())); + } + + if (StrUtil.isBlank(sampleBox.getBoxNo())) { + sampleBox.setBoxNo(sampleBoxService.getNewBoxNoForEntrustment(entrustment.getEntrustmentNo())); + } + } else if (StrUtil.equalsIgnoreCase(sampleBox.getSource(), "sewageJob")) { + if (sampleBox.getJobId() == null) { + throw new RuntimeException("样本盒必须与某个污水任务关联, 缺少 jobId"); + } + SewageJob sewageJob = remoteSewageJobService.getSewageJobById(sampleBox.getJobId()).getData(); + if (sewageJob == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的污水任务", sampleBox.getJobId())); + } + + if (StrUtil.isBlank(sampleBox.getBoxNo())) { + sampleBox.setBoxNo(sampleBoxService.getNewBoxNoForSewageJob(sewageJob.getJobNo())); + } + } + + sampleBox.setId(sampleBoxService.getOrderIdBy16UUId()); + + if (sampleBoxService.save(sampleBox)) { + return R.ok(sampleBox, "新增样本盒成功"); + } else { + return R.failed(sampleBox, "新增样本盒失败"); + } + + } + + /** + * 修改受理时样品重新包装的容器 + * + * @param sampleBox 受理时样品重新包装的容器 + * @return R + */ + @ApiOperation(value = "修改受理时样品重新包装的容器", notes = "修改受理时样品重新包装的容器") + @SysLog("修改受理时样品重新包装的容器") + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_edit')" ) + public R put_UpdateById(@RequestBody SampleBox sampleBox) { + return R.ok(sampleBoxService.updateById(sampleBox)); + } + + /** + * 通过id删除受理时样品重新包装的容器 + * + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除受理时样品重新包装的容器", notes = "通过id删除受理时样品重新包装的容器") + @SysLog("通过id删除受理时样品重新包装的容器") + @DeleteMapping("/{id}") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_del')" ) + public R deleteById(@PathVariable String id) { + + // 受理期间的样本, 还未受理完成 + SampleBoxLiteVO sblv = sampleBoxService.getSampleBoxLiteVOById(id); + if (sblv == null) { + throw new RuntimeException(String.format("没有这个样本盒, id=%s", id)); + } + if (sblv.getSampleNoList().size() > 0) { + throw new RuntimeException(String.format("这个样本盒中还有样品, 你必须清除其中的样品后才能删除它")); + } + + // 受理结束后的样本 + SampleBoxVO sbv = sampleBoxService.getSampleBoxVOById(id); + if (sbv == null) { + throw new RuntimeException(String.format("没有这个样本盒, id=%s", id)); + } + if (sbv.getSampleList().size() > 0) { + throw new RuntimeException(String.format("这个样本盒中还有样品, 你必须清除其中的样品后才能删除它")); + } + + // 盒子中没有东西了,可以删除之 + if (sampleBoxService.removeById(id)) { + return R.ok(sbv, "案件删除成功"); + } else { + return R.failed(sbv, "案件删除失败"); + } + } + + /** + * 添加样本到盒子中 + * + * @param boxId 盒子的 Id + * @param sampleId 样本的 Id + * @return R + */ + @ApiOperation(value = "添加样本到盒子中", notes = "添加样本到盒子中") + @SysLog("添加样本到盒子中") + @PutMapping(value = "/{boxId}/add_sample") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_edit')" ) + public R put_AddSampleToBox(@PathVariable String boxId, String sampleId) { + SampleBox box = sampleBoxService.getById(boxId); + if (box == null) { + throw new RuntimeException(String.format("不存在这个样本盒, Id=%s", boxId)); + } + Sample sample = sampleService.getById(sampleId); + if (sample == null) { + throw new RuntimeException(String.format("不存在这个样本, Id=%s", sampleId)); + } + + sample.setBoxId(boxId); + + if (sampleService.updateById(sample)) { + return R.ok(sample, "添加检材中的样本到盒子中成功"); + } else { + return R.failed(sample, "添加检材中的样本到盒子失败"); + } + + } + + /** + * 添加检材中的样本到盒子中 + * + * @param boxId 盒子的 Id + * @param IdentificationMaterialId 检材的 Id + * @param IdentificationMaterialSampleSerial 检材中的样本序号 + * @return R + */ + @ApiOperation(value = "添加检材中的样本到盒子中", notes = "添加检材中的样本到盒子中") + @SysLog("添加检材中的样本到盒子中") + @PutMapping(value = "/{boxId}/add_im_sample") +// @PreAuthorize("@pms.hasPermission('entrustment_sample_box_edit')" ) + public R put_AddIMSampleToBox(@PathVariable String boxId, String IdentificationMaterialId, int IdentificationMaterialSampleSerial) { + SampleBox box = sampleBoxService.getById(boxId); + if (box == null) { + throw new RuntimeException(String.format("不存在这个样本盒, Id=%s", boxId)); + } + + EntrustmentIdentificationMaterial im = entrustmentIdentificationMaterialService.getById(IdentificationMaterialId); + if (im == null) { + throw new RuntimeException(String.format("不存在这个检材, Id=%s", IdentificationMaterialId)); + } + if (IdentificationMaterialSampleSerial == 1) { + im.setSample1BoxId(boxId); + } else if (IdentificationMaterialSampleSerial == 2) { + im.setSample2BoxId(boxId); + } else { + throw new RuntimeException(String.format("一个检材只能分为2个样, 不会有样本序号不会大于2")); + } + + + if (entrustmentIdentificationMaterialService.updateById(im)) { + return R.ok(im, "添加检材中的样本到盒子中成功"); + } else { + return R.failed(im, "添加检材中的样本到盒子失败"); + } + + + } + + + //===================================================================================== + // 测试, 创建 100 个案件 + @ApiOperation(value = "测试用: 创建 10 个样本盒子", notes = "创建 10 个样本盒子") + @GetMapping("/create100") + public R xxx_TestCreate100() { + for (int i = 0; i < 10; i++) { + SampleBox box = new SampleBox(); + box.setBoxType(RandomUtil.randomEle(new String[]{"小盒", "中盒", "大盒", "小箱", "中箱", "大箱", "文件盒", "特殊"})); + box.setId(IdWorker.get32UUID().toUpperCase()); + sampleBoxService.save(box); + } + return R.ok("100 of SampleBox ware Created"); + } + + @ApiOperation(value = "打印包装袋条码,参数:id:包装袋ID\n" + + "type:( 0:小标签条码,1:大标签条码)") + @GetMapping("/print") + public String printBoxSmallLabel(@RequestParam(value = "id", required = false) String id, @RequestParam(value = "type", required = false) Integer type) { + return sampleBoxService.printBoxLabel(id, type); + } + + @PostMapping("/add/box/{opCode}") + public R controlsSampleBox(@PathVariable(value = "opCode") Integer opCode, @RequestBody SampleBox sampleBox) { + SampleBox box = sampleBoxService.controlsSampleBox(sampleBox, opCode); + return R.ok(box); + } + + @ApiOperation(value = "打印包装袋条码,参数:boxId:包装袋ID\n" + + "type:( 0:小标签条码,1:大标签条码)") + @GetMapping("/print/other/{boxId}/{type}") + public String printLabelForOther(@PathVariable(value = "boxId") String boxId, @PathVariable(value = "type") Integer type) { + return sampleBoxService.printLabelForOther(boxId, type); + + } + + @GetMapping("/get/for/job_id/{jobId}") + @ApiOperation(value = "通过任务ID,查询该任务下的所有包装袋",notes = "通过任务ID,查询该任务下的所有包装袋") + public R> getSampleBoxForOther(@PathVariable(value = "jobId") String jobId) { + return R.ok(sampleBoxService.list(new LambdaQueryWrapper().eq(SampleBox::getJobId, jobId))); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxInLogController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxInLogController.java new file mode 100644 index 0000000..24a6c0a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleBoxInLogController.java @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.SampleBoxInLog; +import digital.laboratory.platform.entrustment.service.SampleBoxInLogService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 样品包入库出库日志 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品包入库出库日志 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/sample_box_in_log" ) +@Api(value = "sample_box_in_log", tags = "样品包入库出库日志管理") +public class SampleBoxInLogController { + + private final SampleBoxInLogService sampleBoxInLogService; + + /** + * 通过id查询样品包入库出库日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_box_in_log_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(sampleBoxInLogService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param sampleBoxInLog 样品包入库出库日志 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_box_in_log_get')" ) + public R getSampleBoxInLogPage(Page page, SampleBoxInLog sampleBoxInLog) { + return R.ok(sampleBoxInLogService.page(page, Wrappers.query(sampleBoxInLog))); + } + + + /** + * 新增样品包入库出库日志 + * @param sampleBoxInLog 样品包入库出库日志 + * @return R + */ + @ApiOperation(value = "新增样品包入库出库日志", notes = "新增样品包入库出库日志") + @SysLog("新增样品包入库出库日志" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_box_in_log_add')" ) + public R postAddObject(@RequestBody SampleBoxInLog sampleBoxInLog) { + sampleBoxInLog.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(sampleBoxInLogService.save(sampleBoxInLog)); + } + + /** + * 修改样品包入库出库日志 + * @param sampleBoxInLog 样品包入库出库日志 + * @return R + */ + @ApiOperation(value = "修改样品包入库出库日志", notes = "修改样品包入库出库日志") + @SysLog("修改样品包入库出库日志" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_box_in_log_edit')" ) + public R putUpdateById(@RequestBody SampleBoxInLog sampleBoxInLog) { + return R.ok(sampleBoxInLogService.updateById(sampleBoxInLog)); + } + + /** + * 通过id删除样品包入库出库日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除样品包入库出库日志", notes = "通过id删除样品包入库出库日志") + @SysLog("通过id删除样品包入库出库日志" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_box_in_log_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(sampleBoxInLogService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleController.java new file mode 100644 index 0000000..402265b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleController.java @@ -0,0 +1,104 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import digital.laboratory.platform.entrustment.service.SampleService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 检验用的样本 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 检验用的样本 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/sample" ) +@Api(value = "sample", tags = "200-检验用的样本管理") +public class SampleController { + + private final SampleService sampleService; + + /** + * 通过id查询检验用的样本 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(sampleService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param sample 检验用的样本 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_get')" ) + public R getSamplePage(Page page, Sample sample) { + return R.ok(sampleService.page(page, Wrappers.query(sample))); + } + + + /** + * 新增检验用的样本 + * @param sample 检验用的样本 + * @return R + */ + @ApiOperation(value = "新增检验用的样本", notes = "新增检验用的样本") + @SysLog("新增检验用的样本" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_add')" ) + public R postAddObject(@RequestBody Sample sample) { + sample.setId(IdWorker.get32UUID().toUpperCase()); + + if (sampleService.save(sample)) { + return R.ok(sample, "新增样本成功"); + } + else { + return R.failed(sample, "新增样本失败"); + } + + } + + /** + * 修改检验用的样本 + * @param sample 检验用的样本 + * @return R + */ + @ApiOperation(value = "修改检验用的样本", notes = "修改检验用的样本") + @SysLog("修改检验用的样本" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_edit')" ) + public R putUpdateById(@RequestBody Sample sample) { + return R.ok(sampleService.updateById(sample)); + } + + /** + * 通过id删除检验用的样本 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除检验用的样本", notes = "通过id删除检验用的样本") + @SysLog("通过id删除检验用的样本" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(sampleService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreChangeDutyLogController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreChangeDutyLogController.java new file mode 100644 index 0000000..2feb528 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreChangeDutyLogController.java @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.SampleStoreChangeDutyLog; +import digital.laboratory.platform.entrustment.service.SampleStoreChangeDutyLogService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 样品库管理员换班日志 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库管理员换班日志 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/sample_store_change_duty_log" ) +@Api(value = "sample_store_change_duty_log", tags = "样品库管理员换班日志管理") +public class SampleStoreChangeDutyLogController { + + private final SampleStoreChangeDutyLogService sampleStoreChangeDutyLogService; + + /** + * 通过id查询样品库管理员换班日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_change_duty_log_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(sampleStoreChangeDutyLogService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param sampleStoreChangeDutyLog 样品库管理员换班日志 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_change_duty_log_get')" ) + public R getSampleStoreChangeDutyLogPage(Page page, SampleStoreChangeDutyLog sampleStoreChangeDutyLog) { + return R.ok(sampleStoreChangeDutyLogService.page(page, Wrappers.query(sampleStoreChangeDutyLog))); + } + + + /** + * 新增样品库管理员换班日志 + * @param sampleStoreChangeDutyLog 样品库管理员换班日志 + * @return R + */ + @ApiOperation(value = "新增样品库管理员换班日志", notes = "新增样品库管理员换班日志") + @SysLog("新增样品库管理员换班日志" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_change_duty_log_add')" ) + public R postAddObject(@RequestBody SampleStoreChangeDutyLog sampleStoreChangeDutyLog) { + sampleStoreChangeDutyLog.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(sampleStoreChangeDutyLogService.save(sampleStoreChangeDutyLog)); + } + + /** + * 修改样品库管理员换班日志 + * @param sampleStoreChangeDutyLog 样品库管理员换班日志 + * @return R + */ + @ApiOperation(value = "修改样品库管理员换班日志", notes = "修改样品库管理员换班日志") + @SysLog("修改样品库管理员换班日志" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_change_duty_log_edit')" ) + public R putUpdateById(@RequestBody SampleStoreChangeDutyLog sampleStoreChangeDutyLog) { + return R.ok(sampleStoreChangeDutyLogService.updateById(sampleStoreChangeDutyLog)); + } + + /** + * 通过id删除样品库管理员换班日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除样品库管理员换班日志", notes = "通过id删除样品库管理员换班日志") + @SysLog("通过id删除样品库管理员换班日志" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_change_duty_log_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(sampleStoreChangeDutyLogService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreController.java new file mode 100644 index 0000000..691ca6c --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreController.java @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.SampleStore; +import digital.laboratory.platform.entrustment.service.SampleStoreService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 样品库 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/sample_store" ) +@Api(value = "sample_store", tags = "样品库管理") +public class SampleStoreController { + + private final SampleStoreService sampleStoreService; + + /** + * 通过id查询样品库 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(sampleStoreService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param sampleStore 样品库 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_get')" ) + public R getSampleStorePage(Page page, SampleStore sampleStore) { + return R.ok(sampleStoreService.page(page, Wrappers.query(sampleStore))); + } + + + /** + * 新增样品库 + * @param sampleStore 样品库 + * @return R + */ + @ApiOperation(value = "新增样品库", notes = "新增样品库") + @SysLog("新增样品库" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_add')" ) + public R postAddObject(@RequestBody SampleStore sampleStore) { + sampleStore.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(sampleStoreService.save(sampleStore)); + } + + /** + * 修改样品库 + * @param sampleStore 样品库 + * @return R + */ + @ApiOperation(value = "修改样品库", notes = "修改样品库") + @SysLog("修改样品库" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_edit')" ) + public R putUpdateById(@RequestBody SampleStore sampleStore) { + return R.ok(sampleStoreService.updateById(sampleStore)); + } + + /** + * 通过id删除样品库 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除样品库", notes = "通过id删除样品库") + @SysLog("通过id删除样品库" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(sampleStoreService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreLogController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreLogController.java new file mode 100644 index 0000000..0a1d8f5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SampleStoreLogController.java @@ -0,0 +1,99 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.SampleStoreLog; +import digital.laboratory.platform.entrustment.service.SampleStoreLogService; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 样品库入库出库日志 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库入库出库日志 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/sample_store_log" ) +@Api(value = "sample_store_log", tags = "样品库入库出库日志管理") +public class SampleStoreLogController { + + private final SampleStoreLogService sampleStoreLogService; + + /** + * 通过id查询样品库入库出库日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_log_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(sampleStoreLogService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param sampleStoreLog 样品库入库出库日志 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_log_get')" ) + public R> getSampleStoreLogPage(Page page, SampleStoreLog sampleStoreLog) { + return R.ok(sampleStoreLogService.page(page, Wrappers.query(sampleStoreLog))); + } + + + /** + * 新增样品库入库出库日志 + * @param sampleStoreLog 样品库入库出库日志 + * @return R + */ + @ApiOperation(value = "新增样品库入库出库日志", notes = "新增样品库入库出库日志") + @SysLog("新增样品库入库出库日志" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_log_add')" ) + public R postAddObject(@RequestBody SampleStoreLog sampleStoreLog) { + sampleStoreLog.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(sampleStoreLogService.save(sampleStoreLog)); + } + + /** + * 修改样品库入库出库日志 + * @param sampleStoreLog 样品库入库出库日志 + * @return R + */ + @ApiOperation(value = "修改样品库入库出库日志", notes = "修改样品库入库出库日志") + @SysLog("修改样品库入库出库日志" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_log_edit')" ) + public R putUpdateById(@RequestBody SampleStoreLog sampleStoreLog) { + return R.ok(sampleStoreLogService.updateById(sampleStoreLog)); + } + + /** + * 通过id删除样品库入库出库日志 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除样品库入库出库日志", notes = "通过id删除样品库入库出库日志") + @SysLog("通过id删除样品库入库出库日志" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_sample_store_log_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(sampleStoreLogService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCabinetController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCabinetController.java new file mode 100644 index 0000000..1471c49 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCabinetController.java @@ -0,0 +1,100 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.StorageCabinet; +import digital.laboratory.platform.entrustment.service.StorageCabinetService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 暂存柜 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/storage_cabinet" ) +@Api( tags = "306-暂存柜管理") +public class StorageCabinetController { + + private final StorageCabinetService storageCabinetService; + + /** + * 通过id查询暂存柜 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cabinet_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(storageCabinetService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param storageCabinet 暂存柜 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cabinet_get')" ) + public R> getStorageCabinetPage(Page page, StorageCabinet storageCabinet) { + return R.ok(storageCabinetService.page(page, Wrappers.query(storageCabinet))); + } + + + + /** + * 新增暂存柜 + * @param storageCabinet 暂存柜 + * @return R + */ + @ApiOperation(value = "新增暂存柜", notes = "新增暂存柜") + @SysLog("新增暂存柜" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cabinet_add')" ) + public R postAddObject(@RequestBody StorageCabinet storageCabinet) { + storageCabinet.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(storageCabinetService.save(storageCabinet)); + } + + /** + * 修改暂存柜 + * @param storageCabinet 暂存柜 + * @return R + */ + @ApiOperation(value = "修改暂存柜", notes = "修改暂存柜") + @SysLog("修改暂存柜" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cabinet_edit')" ) + public R putUpdateById(@RequestBody StorageCabinet storageCabinet) { + return R.ok(storageCabinetService.updateById(storageCabinet)); + } + + /** + * 通过id删除暂存柜 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除暂存柜", notes = "通过id删除暂存柜") + @SysLog("通过id删除暂存柜" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cabinet_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(storageCabinetService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellController.java new file mode 100644 index 0000000..8e66a72 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellController.java @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.StorageCell; +import digital.laboratory.platform.entrustment.service.StorageCellService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 暂存柜,每行一个单元格 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜,每行一个单元格 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/storage_cell" ) +@Api( tags = "307-暂存柜,每行一个单元格管理") +public class StorageCellController { + + private final StorageCellService storageCellService; + + /** + * 通过id查询暂存柜,每行一个单元格 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(storageCellService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param storageCell 暂存柜,每行一个单元格 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_get')" ) + public R getStorageCellPage(Page page, StorageCell storageCell) { + return R.ok(storageCellService.page(page, Wrappers.query(storageCell))); + } + + + /** + * 新增暂存柜,每行一个单元格 + * @param storageCell 暂存柜,每行一个单元格 + * @return R + */ + @ApiOperation(value = "新增暂存柜,每行一个单元格", notes = "新增暂存柜,每行一个单元格") + @SysLog("新增暂存柜,每行一个单元格" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_add')" ) + public R postAddObject(@RequestBody StorageCell storageCell) { + storageCell.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(storageCellService.save(storageCell)); + } + + /** + * 修改暂存柜,每行一个单元格 + * @param storageCell 暂存柜,每行一个单元格 + * @return R + */ + @ApiOperation(value = "修改暂存柜,每行一个单元格", notes = "修改暂存柜,每行一个单元格") + @SysLog("修改暂存柜,每行一个单元格" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_edit')" ) + public R putUpdateById(@RequestBody StorageCell storageCell) { + return R.ok(storageCellService.updateById(storageCell)); + } + + /** + * 通过id删除暂存柜,每行一个单元格 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除暂存柜,每行一个单元格", notes = "通过id删除暂存柜,每行一个单元格") + @SysLog("通过id删除暂存柜,每行一个单元格" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(storageCellService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellLogController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellLogController.java new file mode 100644 index 0000000..c03212f --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/StorageCellLogController.java @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.StorageCellLog; +import digital.laboratory.platform.entrustment.service.StorageCellLogService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 暂存柜记录 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜记录 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/storage_cell_log" ) +@Api( tags = "308-暂存柜记录管理") +public class StorageCellLogController { + + private final StorageCellLogService storageCellLogService; + + /** + * 通过id查询暂存柜记录 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_log_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(storageCellLogService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param storageCellLog 暂存柜记录 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_log_get')" ) + public R getStorageCellLogPage(Page page, StorageCellLog storageCellLog) { + return R.ok(storageCellLogService.page(page, Wrappers.query(storageCellLog))); + } + + + /** + * 新增暂存柜记录 + * @param storageCellLog 暂存柜记录 + * @return R + */ + @ApiOperation(value = "新增暂存柜记录", notes = "新增暂存柜记录") + @SysLog("新增暂存柜记录" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_log_add')" ) + public R postAddObject(@RequestBody StorageCellLog storageCellLog) { + storageCellLog.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(storageCellLogService.save(storageCellLog)); + } + + /** + * 修改暂存柜记录 + * @param storageCellLog 暂存柜记录 + * @return R + */ + @ApiOperation(value = "修改暂存柜记录", notes = "修改暂存柜记录") + @SysLog("修改暂存柜记录" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_log_edit')" ) + public R putUpdateById(@RequestBody StorageCellLog storageCellLog) { + return R.ok(storageCellLogService.updateById(storageCellLog)); + } + + /** + * 通过id删除暂存柜记录 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除暂存柜记录", notes = "通过id删除暂存柜记录") + @SysLog("通过id删除暂存柜记录" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_storage_cell_log_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(storageCellLogService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/SynchronizeDataController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/SynchronizeDataController.java new file mode 100644 index 0000000..ad877f0 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/SynchronizeDataController.java @@ -0,0 +1,82 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.othersys.dto.EntrustQueryParams; +import digital.laboratory.platform.entrustment.entity.EntrustOfThirdSys; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.sys.feign.RemoteDictionaryService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName SynchronizeDataController + * @Description 用于将第三方禁毒数据进行同步和回写的操作 + * @Author xy + * @Date 2023/6/05 9:07 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/papp/entrustment/synchronizeData") +@RequiredArgsConstructor +@Api(value = "数据同步处理接口", tags = "数据同步处理接口") +public class SynchronizeDataController { + private final RemoteDictionaryService remoteDictionaryService;//字典接口 + private final SynchronizeDataService synchronizeDataService; + //获取数据接口全部写到这里 + /** + * 获取远程系统中的委托数据接口 + * @return + */ + @GetMapping("/getRemoteEntrustData") + public R handleRemoteData(String entrustStatus) { + String requestEntrustStatus=StringUtils.isNotBlank(entrustStatus)?entrustStatus:"provinceAuditing"; + return R.ok(synchronizeDataService.synEntrustDataToMyServer(requestEntrustStatus,"SubCenter"),"数据同步完成"); + } + //省级审核接口 //分中心审核 + @GetMapping("/provinceAudit") + public R provinceAudit(String userFlag,String entrustID){ + //String entrustID="WEFHTXRoQXdVRmM5K1U0N1U0NGI2NUFoMzZOQUhzaTE="; + //String userFlag="Province";//Province或者SubCenter + String dataPath="/api/identify/entrust/{entrustId}/acceptAudit"; + //String auditOrAccept="Audit"; + try { + return R.ok(synchronizeDataService.auditEntrustByProvinceOrCenter(userFlag,dataPath,entrustID,"success", + "",""),"操作成功"); + }catch (Exception e) + { + e.printStackTrace(); + return R.ok("","处理失败"); + } + + } + //新增加一个接口用于同步已受理的数据 + @GetMapping("/getRemoteAcceptedEntrustData") + public R getRemoteAcceptedEntrustData(EntrustQueryParams entrustQueryParams) { + //String requestEntrustStatus=StringUtils.isNotBlank(entrustStatus)?entrustStatus:"provinceAuditing"; + //return R.ok(synchronizeDataService.synEntrustDataToMyServer(requestEntrustStatus,"SubCenter"),"数据同步完成"); + return R.ok(synchronizeDataService.synAcceptedEntrustDataToMyServer(entrustQueryParams),"数据同步完成"); + //return R.ok(entrustQueryParams); + } + //分中心受理接口 + @GetMapping("/subCenterAccept") + public R subCenterAccept() throws JsonProcessingException { + String entrustID="WEFHTXRoQXdVRmM5K1U0N1U0NGI2NUFoMzZOQUhzaTE="; + String dataPath="/api/identify/entrust/{entrustId}/accept"; + Entrustment selfEntrust=new Entrustment(); + EntrustOfThirdSys thirdSysEntrust=new EntrustOfThirdSys(); + return R.ok(synchronizeDataService.subCenterAccept(dataPath,selfEntrust,thirdSysEntrust),"操作成功"); + } + //分中心上传鉴定数据接口 + @GetMapping("/subCenterUploadData") + public R subCenterUploadData(){ + String dataPath="/api/identify/entrust/{entrustId}/analysis"; + String entrustId=""; + return R.ok(synchronizeDataService.submitIdentifyResult(dataPath,entrustId),"操作成功"); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/TakerController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/TakerController.java new file mode 100644 index 0000000..ebe4de6 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/TakerController.java @@ -0,0 +1,190 @@ +package digital.laboratory.platform.entrustment.controller; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.entrustment.entity.Taker; +import digital.laboratory.platform.entrustment.service.TakerService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.security.Principal; +import java.util.List; + + +/** + * 采集员 + * + * @author Zhang Xiaolong created at 2022-08-25 + * @describe 采集员 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/taker" ) +@Api(value = "taker", tags = "007-采集员管理") +public class TakerController { + + private final TakerService takerService; + + /** + * 通过id查询采集员 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_taker_get')" ) + public R getById(@PathVariable("id" ) String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Taker taker = takerService.getById(id); + if (taker != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), taker.getOwnerUserId())) { + return R.ok(taker); + } + else { + return R.failed(String.format("你没有权限访问id为 %s 的采集员的数据", id)); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的采集员", id)); + } + + + } + + + /** + * 列表查询 + * @param taker – 采集员 + * @return + */ + @ApiOperation(value = "列表查询", notes = "列表查询") + @GetMapping("/list" ) +// @PreAuthorize("@pms.hasPermission('entrustment_deliverer_get')" ) + public R getDelivererList(Taker taker, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + taker.setOwnerUserId(dlpUser.getId()); + + List list = takerService.list(Wrappers.query() + .eq("owner_user_id", dlpUser.getId()) // 只查询当前用户拥有的采集员 + .like(StrUtil.isNotBlank(taker.getName()), "name", taker.getName()) + .orderByDesc("name") + ); + return R.ok(list); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param taker 采集员 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) +// @PreAuthorize("@pms.hasPermission('entrustment_taker_get')" ) + public R getTakerPage(Page page, Taker taker, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + taker.setOwnerUserId(dlpUser.getId()); + + return R.ok(takerService.page(page, Wrappers.query() + .eq("owner_user_id", dlpUser.getId()) // 只查询当前用户拥有的采集员 + .like(StrUtil.isNotBlank(taker.getName()), "name", taker.getName()) + .orderByDesc("name") + )); + } + + + /** + * 新增采集员 + * @param taker 采集员 + * @return R + */ + @ApiOperation(value = "新增采集员", notes = "新增采集员") + @SysLog("新增采集员" ) + @PostMapping +// @PreAuthorize("@pms.hasPermission('entrustment_taker_add')" ) + public R postAddObject(@RequestBody Taker taker, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + taker.setOwnerUserId(dlpUser.getId()); + + taker.setId(IdWorker.get32UUID().toUpperCase()); + return R.ok(takerService.save(taker)); + } + + /** + * 修改采集员 + * @param taker 采集员 + * @return R + */ + @ApiOperation(value = "修改采集员", notes = "修改采集员") + @SysLog("修改采集员" ) + @PutMapping +// @PreAuthorize("@pms.hasPermission('entrustment_taker_edit')" ) + public R putUpdateById(@RequestBody Taker taker, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Taker oldTaker = takerService.getById(taker.getId()); + if (oldTaker != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), oldTaker.getOwnerUserId())) { + taker.setOwnerUserId(dlpUser.getId()); + return R.ok(takerService.updateById(taker)); + } + else { + return R.failed(String.format("你没有权限修改id为 %s 的采集员的数据", taker.getId())); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的采集员", taker.getId())); + } + } + + /** + * 通过id删除采集员 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除采集员", notes = "通过id删除采集员") + @SysLog("通过id删除采集员" ) + @DeleteMapping("/{id}" ) +// @PreAuthorize("@pms.hasPermission('entrustment_taker_del')" ) + public R deleteById(@PathVariable String id, HttpServletRequest theHttpServletRequest) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + Taker oldTaker = takerService.getById(id); + if (oldTaker != null) { + if (StrUtil.equalsIgnoreCase(dlpUser.getId(), oldTaker.getOwnerUserId())) { + if (takerService.removeById(id)) { + return R.ok(oldTaker, "采集员删除成功"); + } + else { + return R.failed(oldTaker, "采集员删除失败"); + } + } + else { + return R.failed(String.format("你没有权限删除id为 %s 的采集员", id)); + } + } + else { + return R.failed(String.format("没有找到id为 %s 的采集员", id)); + } + + + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobController.javax b/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobController.javax new file mode 100644 index 0000000..3614fae --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobController.javax @@ -0,0 +1,97 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.HairJob; +import digital.laboratory.platform.entrustment.entity.SampleStoreLog; +import digital.laboratory.platform.entrustment.service.HairJobService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 毛发检测任务 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发检测任务 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/hair_job" ) +@Api(value = "hair_job", tags = "毛发检测任务管理") +public class HairJobController { + + private final HairJobService hairJobService; + + /** + * 通过id查询毛发检测任务 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(hairJobService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param hairJob 毛发检测任务 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_get')" ) + public R> getHairJobPage(Page page, HairJob hairJob) { + return R.ok(hairJobService.page(page, Wrappers.query(hairJob))); + } + + + /** + * 新增毛发检测任务 + * @param hairJob 毛发检测任务 + * @return R + */ + @ApiOperation(value = "新增毛发检测任务", notes = "新增毛发检测任务") + @SysLog("新增毛发检测任务" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_add')" ) + public R postAddObject(@RequestBody HairJob hairJob) { + return R.ok(hairJobService.save(hairJob)); + } + + /** + * 修改毛发检测任务 + * @param hairJob 毛发检测任务 + * @return R + */ + @ApiOperation(value = "修改毛发检测任务", notes = "修改毛发检测任务") + @SysLog("修改毛发检测任务" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_edit')" ) + public R putUpdateById(@RequestBody HairJob hairJob) { + return R.ok(hairJobService.updateById(hairJob)); + } + + /** + * 通过id删除毛发检测任务 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除毛发检测任务", notes = "通过id删除毛发检测任务") + @SysLog("通过id删除毛发检测任务" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(hairJobService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobIdentificationMaterialControllerx.javax b/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobIdentificationMaterialControllerx.javax new file mode 100644 index 0000000..61411f7 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/controller/xHairJobIdentificationMaterialControllerx.javax @@ -0,0 +1,96 @@ +package digital.laboratory.platform.entrustment.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.log.annotation.SysLog; +import digital.laboratory.platform.entrustment.entity.HairJobIdentificationMaterial; +import digital.laboratory.platform.entrustment.service.HairJobIdentificationMaterialService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 毛发任务的检材信息 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发任务的检材信息 前端控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/papp/entrustment/hair_job_identification_material" ) +@Api(value = "hair_job_identification_material", tags = "毛发任务的检材信息管理") +public class HairJobIdentificationMaterialControllerx { + + private final HairJobIdentificationMaterialService hairJobIdentificationMaterialService; + + /** + * 通过id查询毛发任务的检材信息 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id查询", notes = "通过id查询") + @GetMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_identification_material_get')" ) + public R getById(@PathVariable("id" ) String id) { + return R.ok(hairJobIdentificationMaterialService.getById(id)); + } + + /** + * 分页查询 + * @param page 分页对象 + * @param hairJobIdentificationMaterial 毛发任务的检材信息 + * @return + */ + @ApiOperation(value = "分页查询", notes = "分页查询") + @GetMapping("/page" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_identification_material_get')" ) + public R> getHairJobIdentificationMaterialPage(Page page, HairJobIdentificationMaterial hairJobIdentificationMaterial) { + return R.ok(hairJobIdentificationMaterialService.page(page, Wrappers.query(hairJobIdentificationMaterial))); + } + + + /** + * 新增毛发任务的检材信息 + * @param hairJobIdentificationMaterial 毛发任务的检材信息 + * @return R + */ + @ApiOperation(value = "新增毛发任务的检材信息", notes = "新增毛发任务的检材信息") + @SysLog("新增毛发任务的检材信息" ) + @PostMapping + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_identification_material_add')" ) + public R postAddObject(@RequestBody HairJobIdentificationMaterial hairJobIdentificationMaterial) { + return R.ok(hairJobIdentificationMaterialService.save(hairJobIdentificationMaterial)); + } + + /** + * 修改毛发任务的检材信息 + * @param hairJobIdentificationMaterial 毛发任务的检材信息 + * @return R + */ + @ApiOperation(value = "修改毛发任务的检材信息", notes = "修改毛发任务的检材信息") + @SysLog("修改毛发任务的检材信息" ) + @PutMapping + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_identification_material_edit')" ) + public R putUpdateById(@RequestBody HairJobIdentificationMaterial hairJobIdentificationMaterial) { + return R.ok(hairJobIdentificationMaterialService.updateById(hairJobIdentificationMaterial)); + } + + /** + * 通过id删除毛发任务的检材信息 + * @param id id + * @return R + */ + @ApiOperation(value = "通过id删除毛发任务的检材信息", notes = "通过id删除毛发任务的检材信息") + @SysLog("通过id删除毛发任务的检材信息" ) + @DeleteMapping("/{id}" ) + @PreAuthorize("@pms.hasPermission('entrustment_hair_job_identification_material_del')" ) + public R deleteById(@PathVariable String id) { + return R.ok(hairJobIdentificationMaterialService.removeById(id)); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustmentDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustmentDTO.java new file mode 100644 index 0000000..9e36f66 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustmentDTO.java @@ -0,0 +1,12 @@ +package digital.laboratory.platform.entrustment.dto; + +import digital.laboratory.platform.entrustment.entity.Entrustment; +import lombok.Data; + +@Data +public class EntrustmentDTO extends Entrustment { + + private String caseBrief; + private String caseName; + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/PrintDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/PrintDTO.java new file mode 100644 index 0000000..5a1cb3b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/PrintDTO.java @@ -0,0 +1,13 @@ +package digital.laboratory.platform.entrustment.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class PrintDTO { + + private String id; + private String sample; + private Integer type; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/SampleBoxDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/SampleBoxDTO.java new file mode 100644 index 0000000..a6b040a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/dto/SampleBoxDTO.java @@ -0,0 +1,12 @@ +package digital.laboratory.platform.entrustment.dto; + +import lombok.Data; + +import java.util.List; +@Data +public class SampleBoxDTO { + + private String boxId; + private String boxType; + private List sampleNoList; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/AvoidIdentifier.java b/src/main/java/digital/laboratory/platform/entrustment/entity/AvoidIdentifier.java new file mode 100644 index 0000000..3440b35 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/AvoidIdentifier.java @@ -0,0 +1,15 @@ +package digital.laboratory.platform.entrustment.entity; + +import lombok.Data; + +/** + * 回避的鉴定人 + * 作为委托的一个属性, 由委托方指定某些鉴定人需要回避 + */ + +@Data +public class AvoidIdentifier { + String userId; // 用户 Id + String name; // 这是鉴定人的姓名 + String reason; // 回避的原因(事由) +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvent.java b/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvent.java new file mode 100644 index 0000000..e323c3b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvent.java @@ -0,0 +1,107 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 案件、事件 + * + * @author Zhang Xiaolong created at 2022-12-08 09:20:12 + * @describe 案件、事件 实体类 + */ +@Data +@TableName(value = "b_case_event", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "案件、事件") +public class CaseEvent extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 案件编号 + */ + @ApiModelProperty(value="案件编号") + private String caseNo; + + /** + * 第三方系统(如现勘系统、案事件系统)编号 + */ + @ApiModelProperty(value="第三方系统(如现勘系统、案事件系统)编号") + private String thirdPartySysNo; + + /** + * 案件名称任务名称 + */ + @ApiModelProperty(value="案件名称任务名称") + private String caseName; + + /** + * 案件类型 + */ + @ApiModelProperty(value="案件类型") + private String caseType; + + /** + * 案发时间 + */ + @ApiModelProperty(value="案发时间") + private LocalDateTime happenTime; + + /** + * 案发地详细地点 + */ + @ApiModelProperty(value="案发地详细地点") + private String caseAddress; + + /** + * 案发地行政区划编码(到县一级) + */ + @ApiModelProperty(value="案发地行政区划编码(到县一级)") + private String caseArea; + + /** + * 案件所属机构 + */ + @ApiModelProperty(value="案件所属机构") + private String caseOwnOrgId; + + /** + * 案件级别: 0=普通案件, 1=紧急案件, 2=加急案件 + */ + @ApiModelProperty(value="案件级别: 0=普通案件, 1=紧急案件, 2=加急案件") + private Integer caseRank; + + /** + * 案情简要 + */ + @ApiModelProperty(value="案情简要") + private String caseBrief; + + /** + * 案件备注 + */ + @ApiModelProperty(value="案件备注") + private String comments; + + /** + * 数据来源,用于区别数据来自自身系统还是外部系统 + */ + @ApiModelProperty(value="数据来源") + private Integer dataSources; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvidence.java b/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvidence.java new file mode 100644 index 0000000..e272693 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/CaseEvidence.java @@ -0,0 +1,211 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import digital.laboratory.platform.sys.entity.entrustment.IMAdditionalProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; +import java.util.List; + +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 与案件相关的物证信息 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 与案件相关的物证信息 实体类 + */ +@Data +@TableName(value = "b_case_evidence", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "与案件相关的物证信息") +public class CaseEvidence extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 本系统物证编号 + */ + @ApiModelProperty(value="本系统物证编号") + private String evidenceNo; + + /** + * 案件Id + */ + @ApiModelProperty(value="案件Id") + private String caseId; + + /** + * 第三方系统(如现勘系统、案事件系统)物证编号 + */ + @ApiModelProperty(value="第三方系统(如现勘系统、案事件系统)物证编号") + private String thirdPartySysEvidenceNo; + + /** + * 物证名称 + */ + @ApiModelProperty(value="物证名称") + private String name; + + /** + * 物证类别:1. 非生物性物证;2. 生物特性物证 + */ + @ApiModelProperty(value="物证类别:1. 非生物性物证;2. 生物特性物证") + private String type; + + /** + * 现场标牌号 + */ + @ApiModelProperty(value="现场标牌号") + private String fieldLabelNo; + + /** + * 物证来源 + */ + @ApiModelProperty(value="物证来源") + private String source; + + /** + * 物证颜色 + */ + @ApiModelProperty(value="物证颜色") + private String color; + + /** + * 物证性状 + */ + @ApiModelProperty(value="物证性状") + private String form; + + /** + * 物证情况之承载物名称, 例如 棉签 2 棵, 粉末 少许 + */ + @ApiModelProperty(value="物证情况之承载物名称, 例如 棉签 2 棵, 粉末 少许") + private String fundName; + + /** + * 物证情况之承载物数量, 例如 5 颗, 3包, + */ + @ApiModelProperty(value="物证情况之承载物数量, 例如 5 颗, 3包, ") + private Integer fundQuantity; + + /** + * 物证情况之承载物单位, 例如 5 颗, 3包 + */ + @ApiModelProperty(value="物证情况之承载物单位, 例如 5 颗, 3包") + private String fundUnit; + + /** + * 物证数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value="物证数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal quantity; + + /** + * 物证单位, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value="物证单位, 例如 3.8 克 或 4.5毫升") + private String unit; + + /** + * 附加属性, 如:体积3毫升,密码123,型号abc + */ + @ApiModelProperty(value="附加属性, 如:体积3毫升,密码123,型号abc") + @TableField(typeHandler = FastjsonTypeHandler.class) + private List additionalProperties; + + /** + * 所有者姓名 + */ + @ApiModelProperty(value="所有者姓名") + private String personName; + + /** + * 所有者证件类型 + */ + @ApiModelProperty(value="所有者证件类型") + private String personCert; + + /** + * 所有者证件号 + */ + @ApiModelProperty(value="所有者证件号") + private String personId; + + /** + * 所有者性别,公安系统编码 1:男 2:女 0:未知 + */ + @ApiModelProperty(value="所有者性别,公安系统编码 1:男 2:女 0:未知") + private Integer personGender; + + /** + * 所有者国籍 + */ + @ApiModelProperty(value="所有者国籍") + private String personNationality; + + /** + * 所有者民族编码,公安系统编码 + */ + @ApiModelProperty(value="所有者民族编码,公安系统编码") + private Integer personNation; + + /** + * 所有者地址 + */ + @ApiModelProperty(value="所有者地址") + private String personAddress; + + /** + * 所有者年龄 + */ + @ApiModelProperty(value="所有者年龄") + private Integer personAge; + + /** + * 包装情况:纸袋,纸盒,纸箱,自定义 + */ + @ApiModelProperty(value="包装情况:纸袋,纸盒,纸箱,自定义") + private String pack; + + /** + * 存储方法:常规,冷藏,特殊 + */ + @ApiModelProperty(value="存储方法:常规,冷藏,特殊") + private String storageMethod; + + /** + * 描述 + */ + @ApiModelProperty(value="描述") + private String description; + + /** + * 备注 + */ + @ApiModelProperty(value="备注") + private String comments; + + /** + * 数据来源,用于区别数据来自自身系统还是外部系统 + */ + @ApiModelProperty(value="数据来源") + private Integer dataSources; + + + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/Deliverer.javax b/src/main/java/digital/laboratory/platform/entrustment/entity/Deliverer.javax new file mode 100644 index 0000000..33d1a7c --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/Deliverer.javax @@ -0,0 +1,70 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 送检员 + * + * @author Zhang Xiaolong created at 2022-08-16 + * @describe 送检员 实体类 + */ +@Data +@TableName(value = "b_deliverer", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "送检员") +public class Deliverer extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "id") + private String id; + + /** + * 送检员拥有者userId + */ + @ApiModelProperty(value="送检员拥有者userId") + private String ownerUserId; + + /** + * 送检员姓名 + */ + @ApiModelProperty(value="送检员姓名") + private String name; + + /** + * 送检员职务 + */ + @ApiModelProperty(value="送检员职务") + private String position; + + /** + * 送检员证件名称 + */ + @ApiModelProperty(value="送检员证件名称") + private String cert; + + /** + * 送检员证件编号 + */ + @ApiModelProperty(value="送检员证件编号") + private String idnum; + + /** + * 送检员电话 + */ + @ApiModelProperty(value="送检员电话") + private String phone; + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialOfThirdSys.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialOfThirdSys.java new file mode 100644 index 0000000..6b1d127 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialOfThirdSys.java @@ -0,0 +1,35 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @ClassName EntrustMaterialOfThirdSys + * @Description 检材 + * @Author xy + * @Date 2023/6/14 14:12 + * @Version 1.0 + **/ +@Data +@TableName(value = "b_entrust_thirdsys_material", autoResultMap = true) +public class EntrustMaterialOfThirdSys { + private String id; + private String entrustId; + private String order_index;//检材序号 + private String name;//检材名称 + private String colorType;//颜色 + private String shapeType;//形状 + private String packageType;//包装 + private BigDecimal amount;//数量 + private String unit;//单位 + private String targetObjectTypeList;//筛查毒品 + private String analysisType;//分析类型 + //下面的属性要在受理之后才会有值,受理之前都是空的 + private BigDecimal analysisSampleAmount;//分析样计数 + private BigDecimal retainedSampleAmount;//留存样计数 + private BigDecimal totalSampleAmount;//总量 + private String sampleUnit;//计量单位 +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustOfThirdSys.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustOfThirdSys.java new file mode 100644 index 0000000..520e5f8 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustOfThirdSys.java @@ -0,0 +1,64 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @ClassName EntrustOfThirdSys + * @Description TODO + * @Author xy + * @Date 2023/6/13 11:58 + * @Version 1.0 + **/ +@Data +@TableName(value = "b_entrust_thirdsys", autoResultMap = true) +public class EntrustOfThirdSys { + + private String id; + private String entrustMainId;//主系统委托书ID + private String entrustSerialNumber;//委托编号 + private String acceptSerialNumber;//受理编号 -完整编号 + private String serialNumber;//受理编号,短编号 + private Integer serialYear;//年序号 + private Integer serialIndex;//索引序号 + //provinceAuditing:省级审核中, provinceAuditRollback:省级审核退回, acceptAuditing:受理审核中, + // acceptAuditRollback:受理审核退回,toAccept:待受理, accepted:已受理, toAnalyse:待鉴定, analysed:鉴定完成 + private String status; + private String provinceName; + private String provinceCode; + private String provinceDeptName; + private LocalDateTime submitTime; + private LocalDateTime acceptTime; + private LocalDateTime finishTime; + private String entrustOrganization;//委托鉴定单位 + private LocalDateTime scheduledDate;//预约送检日期 + private String createUserDeptRegionCode;//提交人单位所在地区编码 + private String caseName; + private String caseCode; + private String caseRemark; + private String materialType;//检材类型 inVitro:缴获物, inVivo:生物样本, other:其他 + private String materialDescribe; //检材描述 + private String entrustRequirement;//鉴定要求 + private String entrustMethod;//鉴定方法 + private String originalIdentification;//原鉴定情况 + private String reportSendType;//报告发放方式 + private String reportSendAddress;//报告发送地址 + private LocalDateTime analysisStartTime;//鉴定开始时间 + private LocalDateTime analysisEndTime;//鉴定结束时间 + private String samplingMethod;//这个属性要在受理之后才会有,表示的意思是:样本的描述,比如 检材全部为分析样 检材全部为留存样,检材分装为分析样和留存样 + + //送检人信息 + private String deliverer1Name; + private String deliverer1Position; + private String deliverer1CardType; + private String deliverer1CertificatesCode; + private String deliverer1Phone; + + private String deliverer2Name; + private String deliverer2Position; + private String deliverer2CardType; + private String deliverer2CertificatesCode; + private String deliverer2Phone; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java b/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java new file mode 100644 index 0000000..3ca544a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/Entrustment.java @@ -0,0 +1,749 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +//import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import digital.laboratory.platform.sewage.entity.UpdateInfo; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.time.LocalDateTime; +import java.util.List; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + + +/** + * 委托 + * + * @author Zhang Xiaolong created at 2022-04-20 + * @describe 委托 Mapper 类 + */ +@Data +@Accessors(chain = true) +@TableName(value = "b_entrustment", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "委托") +public class Entrustment extends BaseEntity { + + /** + * 编号 + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="编号") + private String id; + + /** + * 案件Id + */ + @ApiModelProperty(value="案件Id") + private String caseId; + + /** + * 委托编号 + */ + @ApiModelProperty(value="委托编号") + private String entrustmentNo; + + /** + * 委托类型: 0=正常司法鉴定委托, 1=案前委托 + */ + @ApiModelProperty(value="委托类型: 0=正常司法鉴定委托, 1=案前委托") + private Integer entrustmentType; + + /** + * 业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组 + */ + @ApiModelProperty(value="业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组") + private Integer businessType; + + /** + * 对应的流程实例Id + */ + @ApiModelProperty(value="对应的流程实例Id") + private String processInstanceId; + + /** + * 受理Id, 通过这个可以得到鉴定号 + */ + @ApiModelProperty(value="受理Id, 通过这个可以得到鉴定号") + private String identificationId; + + /** + * 委托日期, 鉴定委托书打印日期 + */ + @ApiModelProperty(value="委托日期, 鉴定委托书打印日期") + private LocalDateTime entrustmentTime; + + /** + * 委托提交者, 后期可能会转给其他人user_id + */ + @ApiModelProperty(value="委托提交者, 后期可能会转给其他人user_id") + private String submitter; + + /** + * 提交日期, 提交审核的日期 + */ + @ApiModelProperty(value="提交日期, 提交审核的日期") + private LocalDateTime submitTime; + + /** + * 鉴定委托单位编码 + */ + @ApiModelProperty(value="鉴定委托单位编码") + private String clientOrgId; + + /** + * 鉴定委托单位名称 + */ + @ApiModelProperty(value="鉴定委托单位名称") + private String clientOrgName; + + /** + * 通讯地址 + */ + @ApiModelProperty(value="通讯地址") + private String clientAddress; + + /** + * 邮政编码 + */ + @ApiModelProperty(value="邮政编码") + private String clientPostcode; + + /** + * 电话号码 + */ + @ApiModelProperty(value="电话号码") + private String clientTel; + + /** + * 传真号码 + */ + @ApiModelProperty(value="传真号码") + private String clientFax; + + /** + * 委托鉴定专业 + */ + @ApiModelProperty(value="委托鉴定专业") + private String identificationDomain; + + /** + * 鉴定机构名称 + */ + @ApiModelProperty(value="鉴定机构名称") + private String identificationOrgName; + + /** + * 定性分析 + */ + @ApiModelProperty(value="定性分析") + private Boolean qualitativeAnalysis; + + /** + * 定量分析 + */ + @ApiModelProperty(value="定量分析") + private Boolean quantitativeAnalysis; + + /** + * 其他鉴定要求 + */ + @ApiModelProperty(value="其他鉴定要求") + private String otherIdentificationRequests; + + /** + * 候选毒品列表(drug 对象的 json array) + */ + @ApiModelProperty(value="候选毒品列表(drug 对象的 json array)") + //@TableField(typeHandler = JacksonTypeHandler.class) + @TableField(typeHandler = FastjsonTypeHandler.class) + private List candidateDrugs; + + /** + * 是否由委托方指定鉴定方法 + */ + @ApiModelProperty(value="是否由委托方指定鉴定方法") + private Boolean isClientSpecifiedMethod; + + /** + * 委托方指定的鉴定方法 + */ + @ApiModelProperty(value="委托方指定的鉴定方法") + private String clientSpecifiedMethod; + + /** + * 是否有损检验:0=无损,1=有损 + */ + @ApiModelProperty(value="是否有损检验:0=无损,1=有损") + private Boolean destructiveAnalysis; + + /** + * 检验的其他说明(鉴定事项确认书中要求, 审核人填写) + */ + @ApiModelProperty(value="检验的其他说明(鉴定事项确认书中要求, 审核人填写)") + private String otherIdentificationNotes; + + /** + * 是否重新鉴定:0=否,1=重新鉴定 + */ + @ApiModelProperty(value="是否重新鉴定:0=否,1=重新鉴定") + private Boolean reidentification; + + /** + * 原鉴定机构 + */ + @ApiModelProperty(value="原鉴定机构") + private String oldIdentificationOrgName; + + /** + * 原鉴定文书 + */ + @ApiModelProperty(value="原鉴定文书") + private String oldIdentificationDocument; + + /** + * 原鉴定结果 + */ + @ApiModelProperty(value="原鉴定结果") + private String oldIdentificationResult; + + /** + * 重新鉴定理由 + */ + @ApiModelProperty(value="重新鉴定理由") + private String reidentificationReason; + + /** + * 回避的鉴定人及回避事由, json 格式 + */ + @ApiModelProperty(value="回避的鉴定人及回避事由, json 格式") + @TableField(typeHandler = FastjsonTypeHandler.class) + private List avoidIdentifier; + + /** + * 指定鉴定人, 委托中指定鉴定人 + */ + @ApiModelProperty(value="指定鉴定人, 委托中指定鉴定人") + private String specifiedIdentifier; + + /** + * 其它约定事项,打印在鉴定事项确认书中的"约定->其他" + */ + @ApiModelProperty(value="其它约定事项,打印在鉴定事项确认书中的\"约定->其他\"") + private String otherAgreement; + + /** + * 备注 + */ + @ApiModelProperty(value="备注") + private String comments; + + /** + * 候选审核人, user_id列表, 逗号分隔 + */ + @ApiModelProperty(value="候选审核人, user_id列表, 逗号分隔") + private String checkCandidateUser; + + /** + * 审核任务认领人 + */ + @ApiModelProperty(value="审核任务认领人") + private String checkClaimUser; + + /** + * 审核任务认领时间 + */ + @ApiModelProperty(value="审核任务认领时间") + private LocalDateTime checkClaimTime; + + /** + * 实际审核人, user_id + */ + @ApiModelProperty(value="实际审核人, user_id") + private String checkUser; + + /** + * 审核时间 + */ + @ApiModelProperty(value="审核时间") + private LocalDateTime checkTime; + + /** + * 审核意见: (审批通过 审批不通过及原因) + */ + @ApiModelProperty(value="审核意见: (审批通过 审批不通过及原因)") + private String checkComments; + + /** + * 审核次数记录 + */ + @ApiModelProperty(value="审核次数记录") + private Integer checkTimes; + + /** + * 专业全部物证检验状态: 0=未全部审核 1=已全部审核 + */ + @ApiModelProperty(value="专业全部物证检验状态: 0=未全部审核 1=已全部审核") + private Boolean checkAllIdentificationMaterialConfirmed; + + /** + * 候选审批人, user_id列表, 逗号分隔 + */ + @ApiModelProperty(value="候选审批人, user_id列表, 逗号分隔") + private String approveCandidateUser; + + /** + * 审批任务认领人 + */ + @ApiModelProperty(value="审批任务认领人") + private String approveClaimUser; + + /** + * 审批任务认领时间 + */ + @ApiModelProperty(value="审批任务认领时间") + private LocalDateTime approveClaimTime; + + /** + * 实际审批人, user_id + */ + @ApiModelProperty(value="实际审批人, user_id") + private String approveUser; + + /** + * 审批时间 + */ + @ApiModelProperty(value="审批时间") + private LocalDateTime approveTime; + + /** + * 审批意见: (审批通过 审批不通过及原因) + */ + @ApiModelProperty(value="审批意见: (审批通过 审批不通过及原因)") + private String approveComments; + + /** + * 审批次数:该字段在审核通过时初始化, 值为0或1时代表初审, 2代表复审 + */ + @ApiModelProperty(value="审批次数:该字段在审核通过时初始化, 值为0或1时代表初审, 2代表复审") + private Integer approveTimes; + + /** + * 送检确认人user_id + */ + @ApiModelProperty(value="送检确认人user_id") + private String deliverConfirmUser; + + /** + * 送检确认时间 + */ + @ApiModelProperty(value="送检确认时间") + private LocalDateTime deliverConfirmTime; + + /** + * 送检确认意见 + */ + @ApiModelProperty(value="送检确认意见") + private String deliverConfirmComments; + + /** + * 送检日期 + */ + @ApiModelProperty(value="送检日期") + private LocalDateTime deliverTime; + + /** + * 送检操作提交用户user_id + */ + @ApiModelProperty(value="送检操作提交用户user_id") + private String deliverSubmitter; + + // /** + // * 如果送检人1是系统用户, 记录用户id + // */ + // @ApiModelProperty(value="如果送检人1是系统用户, 记录用户id") + // private String deliverer1UserId; + + /** + * 送检人1姓名 + */ + @ApiModelProperty(value="送检人1姓名") + private String deliverer1Name; + + /** + * 送检人1职务 + */ + @ApiModelProperty(value="送检人1职务") + private String deliverer1Position; + + /** + * 送检人1证件名称 + */ + @ApiModelProperty(value="送检人1证件名称") + private String deliverer1Cert; + + /** + * 送检人1证件编号 + */ + @ApiModelProperty(value="送检人1证件编号") + private String deliverer1Id; + + /** + * 送检人1电话 + */ + @ApiModelProperty(value="送检人1电话") + private String deliverer1Phone; + + // /** + // * 如果送检人2是系统用户, 记录用户id + // */ + // @ApiModelProperty(value="如果送检人2是系统用户, 记录用户id") + // private String deliverer2UserId; + + /** + * 送检人2姓名 + */ + @ApiModelProperty(value="送检人2姓名") + private String deliverer2Name; + + /** + * 送检人2职务 + */ + @ApiModelProperty(value="送检人2职务") + private String deliverer2Position; + + /** + * 送检人2证件名称 + */ + @ApiModelProperty(value="送检人2证件名称") + private String deliverer2Cert; + + /** + * 送检人2证件编号 + */ + @ApiModelProperty(value="送检人2证件编号") + private String deliverer2Id; + + /** + * 送检人2电话 + */ + @ApiModelProperty(value="送检人2电话") + private String deliverer2Phone; + + // /** + // * 受理任务认领人 + // */ + // @ApiModelProperty(value="受理任务认领人") + // private String acceptClaimUser; + // + // /** + // * 受理任务认领时间 + // */ + // @ApiModelProperty(value="受理任务认领时间") + // private LocalDateTime acceptClaimTime; + + /** + * 受理编号 + */ + @ApiModelProperty(value="受理编号") + private String acceptNo; + + /** + * 受理人user_id + */ + @ApiModelProperty(value="受理人user_id") + private String acceptUser; + + /** + * 受理时间 + */ + @ApiModelProperty(value="受理时间") + private LocalDateTime acceptTime; + + /** + * 受理意见 + */ + @ApiModelProperty(value="受理意见") + private String acceptComments; + + /** + * 鉴定事项确认书是否已经打印 + */ + @ApiModelProperty(value="鉴定事项确认书是否已经打印") + private Boolean identificationItemsConfirmPrinted; + + + /** + * 送检受理信息, 以 json 格式记录送检受理各环节的文字意见 + */ + @ApiModelProperty(value="送检受理信息, 以 json 格式记录送检受理各环节的文字意见") +// @TableField(typeHandler = JacksonTypeHandler.class) + @TableField(typeHandler = FastjsonTypeHandler.class) + private List processInfo; + + /** + * 报告领取方式: 0=自取, 1=代领, 2=邮寄 + */ + @ApiModelProperty(value="报告领取方式: 0=自取, 1=代领, 2=邮寄") + private String reportReceiveMode; + + /** + * 报告领取人1的 user id + */ + @ApiModelProperty(value="报告领取人1的 user id") + private String reportReceiver1UserId; + + /** + * 报告领取人1的姓名 + */ + @ApiModelProperty(value="报告领取人1的姓名") + private String reportReceiver1Name; + + /** + * 报告领取人1的职务 + */ + @ApiModelProperty(value="报告领取人1的职务") + private String reportReceiver1Position; + + /** + * 报告领取人1的证件类型 + */ + @ApiModelProperty(value="报告领取人1的证件类型") + private String reportReceiver1Cert; + + /** + * 报告领取人1的证件号 + */ + @ApiModelProperty(value="报告领取人1的证件号") + private String reportReceiver1Id; + + /** + * 报告领取人1的电话 + */ + @ApiModelProperty(value="报告领取人1的电话") + private String reportReceiver1Phone; + + /** + * 报告领取人2的 user id + */ + @ApiModelProperty(value="报告领取人2的 user id") + private String reportReceiver2UserId; + + /** + * 报告领取人2的姓名 + */ + @ApiModelProperty(value="报告领取人2的姓名") + private String reportReceiver2Name; + + /** + * 报告领取人2的职务 + */ + @ApiModelProperty(value="报告领取人2的职务") + private String reportReceiver2Position; + + /** + * 报告领取人2的证件类型 + */ + @ApiModelProperty(value="报告领取人2的证件类型") + private String reportReceiver2Cert; + + /** + * 报告领取人2的证件号 + */ + @ApiModelProperty(value="报告领取人2的证件号") + private String reportReceiver2Id; + + /** + * 报告领取人2的电话 + */ + @ApiModelProperty(value="报告领取人2的电话") + private String reportReceiver2Phone; + + /** + * 报告发放人user_id(通常是受理员) + */ + @ApiModelProperty(value="报告发放人user_id(通常是受理员)") + private String reportSenderUserId; + + /** + * 报告发放时间 + */ + @ApiModelProperty(value="报告发放时间") + private LocalDateTime reportSentTime; + + /** + * 报告领取人1领取报告时的签名 + */ + @ApiModelProperty(value="报告领取人1领取报告时的签名") + private String reportReceiver1Signature; + + /** + * 报告领取人2领取报告时的签名 + */ + @ApiModelProperty(value="报告领取人2领取报告时的签名") + private String reportReceiver2Signature; + + /** + * 检材领取方式: 0=自取, 1=实验室自行处理 + */ + @ApiModelProperty(value="检材领取方式: 0=自取, 1=实验室自行处理") + private Integer sampleReceiveMode; + + /** + * 如果检材领取人1是系统用户, 记录userId + */ + @ApiModelProperty(value="如果检材领取人1是系统用户, 记录userId") + private String sampleReceiver1UserId; + + /** + * 检材领取人1姓名 + */ + @ApiModelProperty(value="检材领取人1姓名") + private String sampleReceiver1Name; + + /** + * 检材领取人1职位 + */ + @ApiModelProperty(value="检材领取人1职位") + private String sampleReceiver1Position; + + /** + * 检材领取人1证件类型 + */ + @ApiModelProperty(value="检材领取人1证件类型") + private String sampleReceiver1Cret; + + /** + * 检材领取人1证件号 + */ + @ApiModelProperty(value="检材领取人1证件号") + private String sampleReceiver1Id; + + /** + * 检材领取人1电话 + */ + @ApiModelProperty(value="检材领取人1电话") + private String sampleReceiver1Phone; + + /** + * 如果检材领取人2是系统用户, 记录userId + */ + @ApiModelProperty(value="如果检材领取人2是系统用户, 记录userId") + private String sampleReceiver2UserId; + + /** + * 检材领取人2姓名 + */ + @ApiModelProperty(value="检材领取人2姓名") + private String sampleReceiver2Name; + + /** + * 检材领取人2职位 + */ + @ApiModelProperty(value="检材领取人2职位") + private String sampleReceiver2Position; + + /** + * 检材领取人2证件类型 + */ + @ApiModelProperty(value="检材领取人2证件类型") + private String sampleReceiver2Cret; + + /** + * 检材领取人2证件号 + */ + @ApiModelProperty(value="检材领取人2证件号") + private String sampleReceiver2Id; + + /** + * 检材领取人2电话 + */ + @ApiModelProperty(value="检材领取人2电话") + private String sampleReceiver2Phone; + + /** + * 检材发放人, 鉴定机构工作人员user_id + */ + @ApiModelProperty(value="检材发放人, 鉴定机构工作人员user_id") + private String sampleSenderUserId; + + /** + * 检材发放时间 + */ + @ApiModelProperty(value="检材发放时间") + private String sampleSentTime; + + /** + * 检材领取人1签名 + */ + @ApiModelProperty(value="检材领取人1签名") + private String sampleReceiver1PersonSignature; + + /** + * 检材领取人2签名 + */ + @ApiModelProperty(value="检材领取人2签名") + private String sampleReceiver2PersonSignnature; + + /** + * 状态 + */ + @ApiModelProperty(value="状态") + private Integer status; + + /** + * 上一个状态 + */ + @ApiModelProperty(value="上一个状态") + private Integer previousStatus; + + /** + * 数据来源,用于区别数据来自自身系统还是外部系统 + */ + @ApiModelProperty(value="数据来源") + private Integer dataSources; + + /** + * 第三方数据系统中的委托编号, + */ + @ApiModelProperty(value="禁毒数据平台的委托编号") + private String thirdSysEntrustNo; + + /** + * 第三方系统受理编号, + */ + @ApiModelProperty(value="第三方系统受理编号") + private String acceptNoThirdSys; + /** + * 鉴定要求, + */ + @ApiModelProperty(value="鉴定要求") + private String entrustRequirement; + /** + * 邮寄地址, + */ + @ApiModelProperty(value="邮寄地址") + private String postAddress; + /** + * 是否流转 + */ + @ApiModelProperty(value="是否流转,0,未流转,1是已经流转") + private Integer isTrans; + + /** + * 是否退回, + */ + @ApiModelProperty(value="是否退回(0:未退回,-1:已退回)") + private Integer returnOrNot; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java new file mode 100644 index 0000000..34d5a24 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustmentIdentificationMaterial.java @@ -0,0 +1,543 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +//import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import digital.laboratory.platform.sys.entity.entrustment.IMAdditionalProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang.StringUtils; + + +/** + * 检材信息 + * + * @author Zhang Xiaolong created at 2022-04-20 + * @describe 检材信息 实体类 + */ +@Data +@TableName(value = "b_entrustment_identification_material", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "检材信息") +public class EntrustmentIdentificationMaterial extends BaseEntity { + + /** + * 检材id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "检材id") + private String id; + + /** + * 检材编号 + */ + @ApiModelProperty(value = "检材编号") + private String imNo; + + /** + * 物证id + */ + @ApiModelProperty(value = "物证id") + private String evidenceId; + + /** + * 案件id + */ + @ApiModelProperty(value = "案件id") + private String caseId; + + /** + * 委托id + */ + @ApiModelProperty(value = "委托id") + private String entrustmentId; + + /** + * 检材名称 + */ + @ApiModelProperty(value = "检材名称") + private String name; + + /** + * 检材类别:继承所取物证的类别或从物证类别选择 + */ + @ApiModelProperty(value = "检材类别:继承所取物证的类别或从物证类别选择") + private String type; + + /** + * 检材类别名称:继承所取物证的类别或从物证类别选择 + * 2023/5/31 在咸阳分中心添加 + */ + @ApiModelProperty(value = "检材类别名称:继承所取物证的类别或从物证类别选择") + private String typeName; + + /** + * 检材颜色:继承所取物证颜色或手动填入 + */ + @ApiModelProperty(value = "检材颜色:继承所取物证颜色或手动填入") + private String color; + + /** + * 检材性状:继承所取物证性状或从物证性状类别选择 + */ + @ApiModelProperty(value = "检材性状:继承所取物证性状或从物证性状类别选择") + private String form; + + /** + * 检材性状:继承所取物证性状或从物证性状类别选择 + * * 2023/5/31 在咸阳分中心添加 + */ + @ApiModelProperty(value = "检材性状名称:继承所取物证性状或从物证性状类别选择") + private String formName; + + /** + * 检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许 + */ + @ApiModelProperty(value = "检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许") + private String fundName; + + /** + * 检材情况之承载物数量, 例如 5 颗, 3包 + */ + @ApiModelProperty(value = "检材情况之承载物数量, 例如 5 颗, 3包") + private Integer fundQuantity; + + /** + * 检材情况之承载物单位, 例如 5 颗, 3包 + */ + @ApiModelProperty(value = "检材情况之承载物单位, 例如 5 颗, 3包") + private String fundUnit; + + /** + * 检材数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "检材数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal quantity; + + /** + * 计量单位, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "计量单位, 例如 3.8 克 或 4.5毫升") + private String unit; + + /** + * 附加属性, 如:体积3毫升,密码123,型号abc + */ + @ApiModelProperty(value = "附加属性, 如:体积3毫升,密码123,型号abc") + @TableField(typeHandler = FastjsonTypeHandler.class) + private List additionalProperties; + + /** + * 提取方法 + */ + @ApiModelProperty(value = "提取方法") + private String drawWay; + + /** + * 所有者姓名 + */ + @ApiModelProperty(value = "所有者姓名") + private String personName; + + /** + * 所有者证件类型 + */ + @ApiModelProperty(value = "所有者证件类型") + private String personCert; + + /** + * 所有者证件号 + */ + @ApiModelProperty(value = "所有者证件号") + private String personId; + + /** + * 所有者性别,公安系统编码: 1=男 2=女 0=未知 + */ + @ApiModelProperty(value = "所有者性别,公安系统编码: 1=男 2=女 0=未知") + private Integer personGender; + + /** + * 所有者国籍 + */ + @ApiModelProperty(value = "所有者国籍") + private String personNationality; + + /** + * 所有者民族编码,公安系统编码 + */ + @ApiModelProperty(value = "所有者民族编码,公安系统编码") + private Integer personNation; + + /** + * 所有者地址 + */ + @ApiModelProperty(value = "所有者地址") + private String personAddress; + + /** + * 所有者年龄 + */ + @ApiModelProperty(value = "所有者年龄") + private Integer personAge; + + /** + * 采集人1姓名 + */ + @ApiModelProperty(value = "采集人1姓名") + private String take1Name; + + /** + * 采集人1职务 + */ + @ApiModelProperty(value = "采集人1职务") + private String take1Position; + + /** + * 采集人1证件名称 + */ + @ApiModelProperty(value = "采集人1证件名称") + private String take1Cert; + + /** + * 采集人1证件号 + */ + @ApiModelProperty(value = "采集人1证件号") + private String take1Id; + + /** + * 采集人1联系电话 + */ + @ApiModelProperty(value = "采集人1联系电话") + private String take1Phone; + + /** + * 采集人2姓名 + */ + @ApiModelProperty(value = "采集人2姓名") + private String take2Name; + + /** + * 采集人2职务 + */ + @ApiModelProperty(value = "采集人2职务") + private String take2Position; + + /** + * 采集人2证件名称 + */ + @ApiModelProperty(value = "采集人2证件名称") + private String take2Cert; + + /** + * 采集人2证件号 + */ + @ApiModelProperty(value = "采集人2证件号") + private String take2Id; + + /** + * 采集人2联系电话 + */ + @ApiModelProperty(value = "采集人2联系电话") + private String take2Phone; + + /** + * 采集日期 + */ + @ApiModelProperty(value = "采集日期") + private LocalDateTime takeTime; + + /** + * 见证人姓名 + */ + @ApiModelProperty(value = "见证人姓名") + private String witnessName; + + /** + * 见证人证件名称 + */ + @ApiModelProperty(value = "见证人证件名称") + private String witnessCert; + + /** + * 见证人证件号 + */ + @ApiModelProperty(value = "见证人证件号") + private String witnessId; + + /** + * 包装情况:纸袋,纸盒,纸箱,自定义 + */ + @ApiModelProperty(value = "包装情况:纸袋,纸盒,纸箱,自定义") + private String pack; + + /** + * 包装情况名称:纸袋,纸盒,纸箱,自定义 + * 2023/5/31 在咸阳分中心添加 + */ + @ApiModelProperty(value = "包装情况名称:纸袋,纸盒,纸箱,自定义") + private String packName; + + /** + * 存储方法:常规,冷藏,特殊 + */ + @ApiModelProperty(value = "存储方法:常规,冷藏,特殊") + private String storageMethod; + + /** + * 候选毒品列表(drug 对象的 json array) + */ + @ApiModelProperty(value = "候选毒品列表(drug 对象的 json array)") + @TableField(typeHandler = FastjsonTypeHandler.class) + private List candidateDrugs; + + /** + * 检材概要 + */ + @ApiModelProperty(value = "检材概要") + private String description; + + /** + * 审核时间 + */ + @ApiModelProperty(value = "审核时间") + private LocalDateTime checkTime; + + /** + * 审核是否通过: 1=审核通过 + */ + @ApiModelProperty(value = "审核是否通过: 1=审核通过") + private Integer checkPassed; + + /** + * 审批时间 + */ + @ApiModelProperty(value = "审批时间") + private LocalDateTime approveTime; + + /** + * 审批是否通过: 1=审批通过 + */ + @ApiModelProperty(value = "审批是否通过: 1=审批通过") + private Integer approvePassed; + + /** + * 受理时间 + */ + @ApiModelProperty(value = "受理时间") + private LocalDateTime acceptTime; + + /** + * 打印出的受理时间,因为要将date类型转为String类型 + */ + @ApiModelProperty(value = "打印出的受理时间") + @TableField(exist = false) + private String printAcceptTime; + + /** + * 是否受理: 0=未受理, 1=已受理, -1=不予受理 + */ + @ApiModelProperty(value = "是否受理: 0=未受理, 1=已受理, -1=不予受理") + private Integer acceptPassed; + + /** + * 提供的样本1是否存在, 应该总是存在 + */ + // @ApiModelProperty(value="提供的样本1是否存在, 应该总是存在") + // private Boolean providedSample1Present; + + /** + * 提供的样本1编号 + */ + @ApiModelProperty(value = "提供的样本1编号") + private String providedSample1No; + + /** + * 提供的样本1承载物数量(重量), 例如 5颗, 3包 + */ + @ApiModelProperty(value = "提供的样本1承载物数量(重量), 例如 5颗, 3包") + private Integer providedSample1FundQuantity; + + /** + * 提供的样本1数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "提供的样本1数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal providedSample1Quantity; + + /** + * 提供的样本2是否存在 + */ + @ApiModelProperty(value = "提供的样本2是否存在") + private Boolean providedSample2Present; + + /** + * 提供的样本2编号 + */ + @ApiModelProperty(value = "提供的样本2编号") + private String providedSample2No; + + /** + * 提供的样本2承载物数量(重量), 例如 5颗, 3包 + */ + @ApiModelProperty(value = "提供的样本2承载物数量(重量), 例如 5颗, 3包") + private Integer providedSample2FundQuantity; + + /** + * 提供的样本2数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "提供的样本2数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal providedSample2Quantity; + + /** + * 是否已分样: 0=未分样, 1=已分样 + */ + @ApiModelProperty(value = "是否已分样: 0=未分样, 1=已分样") + private Boolean splitedSample; + + /** + * 样本1是否存在, 应该总是存在 + */ + // @ApiModelProperty(value="样本1是否存在, 应该总是存在") + // private Boolean sample1Present; + + /** + * 样本1编号 + */ + @ApiModelProperty(value = "样本1编号") + private String sample1No; + + /** + * 样本1承载物数量(重量), 例如 5颗, 3包 + */ + @ApiModelProperty(value = "样本1承载物数量(重量), 例如 5颗, 3包") + private Integer sample1FundQuantity; + + /** + * 样本1数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "样本1数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal sample1Quantity; + + /** + * 样本1盒子 id + */ + @ApiModelProperty(value = "样本1盒子 id") + private String sample1BoxId; + + /** + * 样本2是否存在 + */ + @ApiModelProperty(value = "样本2是否存在") + private Boolean sample2Present; + + /** + * 样本2编号 + */ + @ApiModelProperty(value = "样本2编号") + private String sample2No; + + /** + * 样本2承载物数量(重量), 例如 5颗, 3包 + */ + @ApiModelProperty(value = "样本2承载物数量(重量), 例如 5颗, 3包") + private Integer sample2FundQuantity; + + /** + * 样本2数量, 例如 3.8 克 或 4.5毫升 + */ + @ApiModelProperty(value = "样本2数量, 例如 3.8 克 或 4.5毫升") + private BigDecimal sample2Quantity; + + /** + * 样本2盒子 id + */ + @ApiModelProperty(value = "样本2盒子 id") + private String sample2BoxId; + //add by xy 2023-04-15,记录复秤的结果而增加的字段信息 + /** + * 样本1复秤后的重量 + */ + @ApiModelProperty(value = "样本1的复秤重量") + private BigDecimal sample1RepeatWeigh; + /** + * 样本2复秤后的重量 + */ + @ApiModelProperty(value = "样本2的复秤重量") + private BigDecimal sample2RepeatWeigh; + + /** + * 分析项目 定性分析,定量分析,定性定量分析,关联性判断 其他 + * 1.定性分析 2.定量分析 3.定性定量分析 4.关联性判断 5。其他 + */ + private Integer analysisOption; + + /** + * 数据来源,用于区别数据来自自身系统还是外部系统 + */ + @ApiModelProperty(value = "数据来源") + private Integer dataSources; + /** + * 检材受理编号,一般是绑定检材所属的委托的受理编号 + */ + @ApiModelProperty(value = "检材受理编号") + @TableField(updateStrategy = FieldStrategy.IGNORED) + private String acceptNo; + + /** + * 打印委托书的时候需要对检材的序号,但是这个时候检材又没有受理,所以添加一个顺序号 + */ + @ApiModelProperty(value = "委托检材顺序号,由系统根据录入顺序生成") + private Integer orderNo; + + public String getOrderNo1() { + return this.orderNo + "号检材"; + } + + public String getSampleCondition() { + if (this.getSample2FundQuantity() != null && this.getSample2FundQuantity() > 0) { + return this.getSample2FundQuantity() + this.getFundUnit(); + } else { + return ""; + } + } + + /** + * 获取检材的描述性编号(简短称呼),如果还没有受理之前,是没有受理编号的,所以未受理之前,使用不了这个函数 + * + * @return + */ + public String getShortNameDes() { + String acceptNo = this.getAcceptNo(); + if (StringUtils.isNotBlank(acceptNo)) { + int seqNo = Integer.parseInt(acceptNo.substring(acceptNo.lastIndexOf("-") + 1)); + return seqNo + "号"; + } else { + return "0号"; + } + } + + /** + * 取检材的序号 + * + * @return + */ + public int getIndex() { + String acceptNo = this.getAcceptNo(); + if (StringUtils.isNotBlank(acceptNo)) { + int seqNo = Integer.parseInt(acceptNo.substring(acceptNo.lastIndexOf("-") + 1)); + return seqNo; + } else { + return 0; + } + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/HairJob.javax b/src/main/java/digital/laboratory/platform/entrustment/entity/HairJob.javax new file mode 100644 index 0000000..5967c40 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/HairJob.javax @@ -0,0 +1,107 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 毛发检测任务 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发检测任务 实体类 + */ +@Data +@TableName(value = "b_hair_job", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "毛发检测任务") +public class HairJob extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 根任务id + */ + @ApiModelProperty(value="根任务id") + private String rootId; + + /** + * 任务名称 + */ + @ApiModelProperty(value="任务名称") + private String name; + + /** + * 任务内容描述说明 + */ + @ApiModelProperty(value="任务内容描述说明") + private String description; + + /** + * 任务编号 + */ + @ApiModelProperty(value="任务编号") + private String jobNo; + + /** + * 任务发布单位 + */ + @ApiModelProperty(value="任务发布单位") + private String jobIssueOrg; + + /** + * 任务执行单位 + */ + @ApiModelProperty(value="任务执行单位") + private String jobExecOrg; + + /** + * 任务来源 + */ + @ApiModelProperty(value="任务来源") + private String jobFrom; + + /** + * 任务截止日期 + */ + @ApiModelProperty(value="任务截止日期") + private LocalDateTime expirationDate; + + /** + * 任务开始日期 + */ + @ApiModelProperty(value="任务开始日期") + private LocalDateTime startDate; + + /** + * 任务备注 + */ + @ApiModelProperty(value="任务备注") + private String comments; + + /** + * 任务类型: 毛发检测/污水检测... + */ + @ApiModelProperty(value="任务类型: 毛发检测/污水检测...") + private String jobType; + + /** + * xxx任务检测类型: 毛发检测:社区戒毒人员检测、公职人员、招考人员。/污水检测:污水处理厂、自然水体、其它水体。... + */ + @ApiModelProperty(value="xxx任务检测类型: 毛发检测:社区戒毒人员检测、公职人员、招考人员。/污水检测:污水处理厂、自然水体、其它水体。...") + private String xxxjobIdentifyType; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/HairJobIdentificationMaterial.javax b/src/main/java/digital/laboratory/platform/entrustment/entity/HairJobIdentificationMaterial.javax new file mode 100644 index 0000000..de82564 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/HairJobIdentificationMaterial.javax @@ -0,0 +1,194 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 毛发任务的检材信息 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发任务的检材信息 实体类 + */ +@Data +@TableName(value = "b_hair_job_identification_material", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "毛发任务的检材信息") +public class HairJobIdentificationMaterial extends BaseEntity { + + /** + * 检材id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "检材id") + private String id; + + /** + * 任务id + */ + @ApiModelProperty(value = "任务id") + private String jobId; + + /** + * 任务清单项id + */ + @ApiModelProperty(value = "任务清单项id") + private String jobItemId; + + /** + * 检材编号 + */ + @ApiModelProperty(value = "检材编号") + private String imNo; + + /** + * A样编号 + */ + @ApiModelProperty(value = "A样编号") + private String sample1No; + + /** + * B样编号 + */ + @ApiModelProperty(value = "B样编号") + private String sample2No; + + /** + * A样盒子 + */ + @ApiModelProperty(value = "A样盒子") + private String sample1BoxId; + + /** + * B样盒子 + */ + @ApiModelProperty(value = "B样盒子") + private String sample2BoxId; + + /** + * 所有者姓名 + */ + @ApiModelProperty(value = "所有者姓名") + private String personName; + + /** + * 所有者身份证号 + */ + @ApiModelProperty(value = "所有者身份证号") + private String personCard; + + /** + * 人员类别 + */ + @ApiModelProperty(value = "人员类别") + private String personType; + + /** + * 项目名称 + */ + @ApiModelProperty(value = "项目名称") + private String projectName; + +// /** +// * 社区戒毒人员在社区执行时间是否超过 6 个月 +// */ +// @ApiModelProperty(value = "社区戒毒人员在社区执行时间是否超过 6 个月") +// private String executionTime; + + /** + * 曾经吸毒种类 + */ + @ApiModelProperty(value = "曾经吸毒种类") + private String drugType; + + /** + * 采样人 + */ + @ApiModelProperty(value = "采样人") + private String collector; + + /** + * 采样单位 + */ + @ApiModelProperty(value = "采样单位") + private String collectorGroup; + + /** + * 采样时间 + */ + @ApiModelProperty(value = "采样时间") + private LocalDateTime collectTime; + + /** + * 采样地点 + */ + @ApiModelProperty(value = "采样地点") + private String collectPlace; + + /** + * 监督人员 + */ + @ApiModelProperty(value = "监督人员") + private String supervisor; + + /** + * 受理时间 + */ + @ApiModelProperty(value = "受理时间") + private LocalDateTime acceptTime; + + /** + * 受理是否通过: 0=未受理, 1=受理通过, -1=受理被拒绝 + */ + @ApiModelProperty(value = "受理是否通过: 0=未受理, 1=受理通过, -1=受理被拒绝") + private Integer acceptPassed; + + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String comments; + + /** + * 检材名称 + */ + @ApiModelProperty(value = "检材名称") + private String name; + + /** + * 检材数量 + */ + @ApiModelProperty(value = "检材数量") + private BigDecimal quantity; + + /** + * A样数量 + */ + @ApiModelProperty(value = "A样数量") + private BigDecimal sample1Quantity; + + /** + * B样数量 + */ + @ApiModelProperty(value = "B样数量") + private BigDecimal sample2Quantity; + + /** + * 计量单位 + */ + @ApiModelProperty(value = "计量单位") + private String unit; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/Identification.java b/src/main/java/digital/laboratory/platform/entrustment/entity/Identification.java new file mode 100644 index 0000000..65cf227 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/Identification.java @@ -0,0 +1,46 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 鉴定表,一个鉴定可能会有多个委托 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 鉴定表,一个鉴定可能会有多个委托 实体类 + */ +@Data +@TableName(value = "b_identification", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "鉴定表,一个鉴定可能会有多个委托") +public class Identification extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "id") + private String id; + + /** + * 鉴定号,受理号 + */ + @ApiModelProperty(value = "鉴定号,受理号") + private String identificationNo; + + /** + * 状态: 0=鉴定中,-1=已终止, 1=已结束 + */ + @ApiModelProperty(value = "状态: 0=鉴定中,-1=已终止, 1=已结束") + private Integer status; + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/SampleBoxInLog.java b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleBoxInLog.java new file mode 100644 index 0000000..913af07 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleBoxInLog.java @@ -0,0 +1,77 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 样品包入库出库日志 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 样品包入库出库日志 实体类 + */ +@Data +@TableName("b_sample_box_in_log") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "样品包入库出库日志") +public class SampleBoxInLog extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 样品id + */ + @ApiModelProperty(value="样品id") + private String boxId; + + /** + * 是否入库 + */ + @ApiModelProperty(value="是否入库") + private Boolean isIn; + + /** + * 入库出库原因编码 + */ + @ApiModelProperty(value="入库出库原因编码") + private Integer reason; + + /** + * 出入库当事人 + */ + @ApiModelProperty(value="出入库当事人") + private String personId; + + /** + * 分包的来源盒子id + */ + @ApiModelProperty(value="分包的来源盒子id") + private String fromBox; + + /** + * 合包的去向盒子id + */ + @ApiModelProperty(value="合包的去向盒子id") + private String toBox; + + /** + * 检材仓库管理员 + */ + @ApiModelProperty(value="检材仓库管理员") + private String storeKeeper; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStore.java b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStore.java new file mode 100644 index 0000000..24e1091 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStore.java @@ -0,0 +1,59 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 样品库 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 样品库 实体类 + */ +@Data +@TableName(value = "b_sample_store", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "样品库") +public class SampleStore extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 样品库类型: 0=样品库 1=暂存库 + */ + @ApiModelProperty(value="样品库类型: 0=样品库 1=暂存库") + private String type; + + /** + * 样品库管理员1 + */ + @ApiModelProperty(value="样品库管理员1") + private String keeper1; + + /** + * 样品库管理员2 + */ + @ApiModelProperty(value="样品库管理员2") + private String keeper2; + + /** + * comments + */ + @ApiModelProperty(value="comments") + private String comments; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreChangeDutyLog.java b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreChangeDutyLog.java new file mode 100644 index 0000000..245b374 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreChangeDutyLog.java @@ -0,0 +1,65 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 样品库管理员换班日志 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 样品库管理员换班日志 实体类 + */ +@Data +@TableName(value = "b_sample_store_change_duty_log", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "样品库管理员换班日志") +public class SampleStoreChangeDutyLog extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 老的样品库管理员1 + */ + @ApiModelProperty(value="老的样品库管理员1") + private String oldKeeper1; + + /** + * 老的样品库管理员2 + */ + @ApiModelProperty(value="老的样品库管理员2") + private String oldKeeper2; + + /** + * 新的样品库管理员1 + */ + @ApiModelProperty(value="新的样品库管理员1") + private String newKeeper1; + + /** + * 新的样品库管理员2 + */ + @ApiModelProperty(value="新的样品库管理员2") + private String newKeeper2; + + /** + * comments + */ + @ApiModelProperty(value="comments") + private String comments; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreLog.java b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreLog.java new file mode 100644 index 0000000..95b6f03 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/SampleStoreLog.java @@ -0,0 +1,83 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 样品库入库出库日志 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 样品库入库出库日志 实体类 + */ +@Data +@TableName(value = "b_sample_store_log", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "样品库入库出库日志") +public class SampleStoreLog extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 样品id + */ + @ApiModelProperty(value="样品id") + private String boxId; + + /** + * 是否入库 + */ + @ApiModelProperty(value="是否入库") + private Boolean isIn; + + /** + * 入库出库原因编码 + */ + @ApiModelProperty(value="入库出库原因编码") + private Integer reason; + + /** + * 出入库当事人 + */ + @ApiModelProperty(value="出入库当事人") + private String personId; + + /** + * 分包的来源盒子id + */ + @ApiModelProperty(value="分包的来源盒子id") + private String fromBox; + + /** + * 合包的去向盒子id + */ + @ApiModelProperty(value="合包的去向盒子id") + private String toBox; + + /** + * 检材仓库管理员1 + */ + @ApiModelProperty(value="检材仓库管理员1") + private String storeKeeper1; + + /** + * 检材仓库管理员2 + */ + @ApiModelProperty(value="检材仓库管理员2") + private String storeKeeper2; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCabinet.java b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCabinet.java new file mode 100644 index 0000000..e10e5b5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCabinet.java @@ -0,0 +1,53 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 暂存柜 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 检材柜 实体类 + */ +@Data +@TableName(value = "b_storage_cabinet", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "检材柜") +public class StorageCabinet extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 柜子编号,用于柜子控制API + */ + @ApiModelProperty(value="柜子编号,用于柜子控制API") + private String cabinetNo; + + /** + * 暂存柜类型:待检, 已检待返, 已检待销毁, 长期存放待 + */ + @ApiModelProperty(value="暂存柜类型:待检, 已检待返, 已检待销毁, 长期存放待") + private String type; + + /** + * comments + */ + @ApiModelProperty(value="comments") + private String comments; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCell.java b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCell.java new file mode 100644 index 0000000..ad574a3 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCell.java @@ -0,0 +1,77 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 暂存柜,每行一个单元格 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 暂存柜,每行一个单元格 实体类 + */ +@Data +@TableName(value = "b_storage_cell", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "暂存柜,每行一个单元格") +public class StorageCell extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 柜号,大柜子的编号 + */ + @ApiModelProperty(value="柜号,大柜子的编号") + private String cabinetNo; + + /** + * 单元格号 + */ + @ApiModelProperty(value="单元格号") + private Integer cellNo; + + /** + * 取件码 + */ + @ApiModelProperty(value="取件码") + private Integer openCode; + + /** + * 取件码过期时间 + */ + @ApiModelProperty(value="取件码过期时间") + private LocalDateTime openCodeExpiration; + + /** + * 单元格可能性: 0=不可用(保留), 1=可用 + */ + @ApiModelProperty(value="单元格可能性: 0=不可用(保留), 1=可用") + private Boolean available; + + /** + * 单元格状态: 0=空, 1=已有物品 + */ + @ApiModelProperty(value="单元格状态: 0=空, 1=已有物品") + private Boolean status; + + /** + * boxId + */ + @ApiModelProperty(value="boxId") + private String boxId; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCellLog.java b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCellLog.java new file mode 100644 index 0000000..fe27b81 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/StorageCellLog.java @@ -0,0 +1,53 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 暂存柜记录 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 暂存柜记录 实体类 + */ +@Data +@TableName(value = "b_storage_cell_log", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "暂存柜记录") +public class StorageCellLog extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 单元格标识 + */ + @ApiModelProperty(value="单元格标识") + private String cellId; + + /** + * 操作: 存放/取出 + */ + @ApiModelProperty(value="操作: 存放/取出") + private Boolean operate; + + /** + * 存放或取出的盒子 + */ + @ApiModelProperty(value="存放或取出的盒子") + private String boxId; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/Taker.java b/src/main/java/digital/laboratory/platform/entrustment/entity/Taker.java new file mode 100644 index 0000000..3409831 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/entity/Taker.java @@ -0,0 +1,71 @@ +package digital.laboratory.platform.entrustment.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import digital.laboratory.platform.common.mybatis.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 采集员 + * + * @author Zhang Xiaolong created at 2022-08-25 + * @describe 采集员 实体类 + */ +@Data +@TableName(value = "b_taker", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "采集员") +public class Taker extends BaseEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @ApiModelProperty(value="id") + private String id; + + /** + * 采集员拥有者userId + */ + @ApiModelProperty(value="采集员拥有者userId") + private String ownerUserId; + + /** + * 采集员姓名 + */ + @ApiModelProperty(value="采集员姓名") + private String name; + + /** + * 采集员职务 + */ + @ApiModelProperty(value="采集员职务") + private String position; + + /** + * 采集员证件名称 + */ + @ApiModelProperty(value="采集员证件名称") + private String cert; + + /** + * 采集员证件编号 + */ + @ApiModelProperty(value="采集员证件编号") + private String idnum; + + /** + * 采集员电话 + */ + @ApiModelProperty(value="采集员电话") + private String phone; + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustmentStatusConstants.java b/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustmentStatusConstants.java new file mode 100644 index 0000000..d8edd2f --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/enums/EntrustmentStatusConstants.java @@ -0,0 +1,105 @@ +package digital.laboratory.platform.entrustment.enums; + +import cn.hutool.core.util.StrUtil; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 委托状态类 + *

+ * 在委托中除了保存委托的当前状态之外,还保存委托进行当前状态之前的状态。 + * 如果两个状态都是待提交, 则说明委托真的是刚创建待提交,而不是从其他的审核、审批节点转过来的。 + * + * 状态分为两个部分: 流程中的位置, 原因 + * 例如委托在处于"等待提交"时, 这是流程中的位置, 此时创建者可以对委托进行修改、取消、提交等操作。 + * 达到这个位置的原因可能是: 已创建等提交、审核被驳回、审批被驳回、送检确认被驳回、受理被拒等 + * 业务本身并不关心达到这个位置的原因, 但是用户关心。所以, 我们分成2个部分, 以避免程序的复杂性。 + */ + +@Getter +@RequiredArgsConstructor +public enum EntrustmentStatusConstants { + + ENTRUSTMENT_STATUS_CREATED(0, "待提交"), // 已创建待提交 + +// ENTRUSTMENT_STATUS_CHECK_REJECTED(-1, "审核被驳回"), // 审核被驳回 +// ENTRUSTMENT_STATUS_APPROVE_REJECTED(-2, "审批被驳回"), // 审批被驳回 + ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM(1, "待审核"), // 已提交, 待审核人员认领审核任务 + ENTRUSTMENT_STATUS_WAITING_CHECK(2, "审核中"), // 审核任务已认领, 审核中 + ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM(3, "待审批"), // 审核通过, 待审批人员认领审批任务 + ENTRUSTMENT_STATUS_WAITING_APPROVE(4, "审批中"), // 审批任务已认领, 待审批 + ENTRUSTMENT_STATUS_WAITING_CONFIRM(5, "待送检确认"), // 审批通过, 待送检确认 + ENTRUSTMENT_STATUS_WAITING_DELIVER(6, "送检确认通过, 待送检"), + ENTRUSTMENT_STATUS_WAITING_ACCEPT(7, "已送检待受理"), + //ENTRUSTMENT_STATUS_ACCEPTING(8, "正在受理中"), // 受理过程比较花时间 + ENTRUSTMENT_STATUS_ACCEPTED(9, "已受理, 进入检验环节"), + + ENTRUSTMENT_STATUS_TEST_FINISH(10, "检验完毕"), + + ENTRUSTMENT_STATUS_COMPLETED(99, "委托已完成"), // 已受理, 已完成鉴定, 结束 + ENTRUSTMENT_STATUS_TERMINATED(98, "委托已终止"), // 已受理, 无法完成鉴定, 结束 + ENTRUSTMENT_STATUS_ABORTED(97, "已中止"); // 在受理之前被中止 + + // 以下状态信息需要确认 +// String ENTRUSTMENT_STATUS_IDENTIFYING = "检验中"; +// String ENTRUSTMENT_STATUS_IDENTIFIED = "已检验"; +// String ENTRUSTMENT_STATUS_ANALYSED = "已分析"; +// String ENTRUSTMENT_STATUS_WAITING_MARK_REPORT = "等制作文书"; +// String ENTRUSTMENT_STATUS_COMPLETED = "已完成"; +// String ENTRUSTMENT_STATUS_WAITING_REPLENISH_SAMPLES = "待补充样本"; + + /** + * 流程中的位置 + */ + private final int status; + + /** + * 描述 + */ + private final String description; + + public static String getStatusDescription(Integer theStatus) { + if (theStatus == null) { + theStatus = 0; + } + for (EntrustmentStatusConstants st : EntrustmentStatusConstants.values()) { + if (st.getStatus() == theStatus) { + return st.description; + } + } + return ""; + } + + public static int taskDefinitionKeyToStatus(String taskDefinitionKey) { + if (StrUtil.isBlank(taskDefinitionKey)) { + return -1; // 空的 key + } + + if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "entrustmentCreate")) { + return ENTRUSTMENT_STATUS_CREATED.getStatus(); + } + else if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "entrustmentCheck")) { + return ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus(); + } + else if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "entrustmentApprove")) { + return ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus(); + } + else if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "deliverConfirm")) { + return ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus(); + } + else if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "entrustmentWaitforDeliver")) { + return ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus(); + } + else if (StrUtil.equalsIgnoreCase(taskDefinitionKey, "entrustmentAccept")) { + return ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus(); + } + else { + return -1; + } + + } + + public int getStatus() { + return status; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMQListener.javax b/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMQListener.javax new file mode 100644 index 0000000..b42d134 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMQListener.javax @@ -0,0 +1,58 @@ +package digital.laboratory.platform.entrustment.handler; + +import digital.laboratory.platform.common.core.entity.PersonFaceIdentifyInfo; +import digital.laboratory.platform.common.core.util.Msg; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.sewage.entity.PersonalIdentityVerifier; +import digital.laboratory.platform.sewage.feign.RemotePersonalIdentityVerifierService; +import digital.laboratory.platform.sewage.feign.RemoteWebSocketService; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jms.annotation.JmsListener; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Slf4j +@Component +public class ActiveMQListener { + private static final Logger logger = LoggerFactory.getLogger(ActiveMQListener.class); + @Resource + private RemoteWebSocketService webSocketService; + @Resource + private RemotePersonalIdentityVerifierService personalIdentityVerifierService; + + /** + *@Description: three MQ 接收方法 + *@Param: + *@return: + *@Author: gyDeBug + *@date: 2021/9/30 + **/ + @JmsListener(destination = "${config.msgListener.hardwareTopicName}" ,containerFactory = "activeMQJmsListenerContainerFactory") + public void receiveActiveMQ(Msg msg)throws Exception { + Object obj =msg.getData(); + if (obj!=null) { + if (obj instanceof PersonFaceIdentifyInfo) { + //== 收到人脸识别消息 + PersonFaceIdentifyInfo info = (PersonFaceIdentifyInfo)obj; + //查询该智能设备绑定的客户端电脑IP + try{ + R data = personalIdentityVerifierService.getById(info.getDeviceId()); + if(data.getCode() == 200){ + String deviceIp = data.getData().getBindIp(); + //推送消息到人脸智能设备绑定的电脑 + R result = webSocketService.sendFaceRecognitionData(deviceIp,info); + logger.info("推送消息结果:"+result.getMsg()); + }else{ + logger.info("==============服务调用异常!"); + } + }catch (Exception e){ + logger.info("==============服务调用异常!"); + } + } + } + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMqConfigs.javax b/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMqConfigs.javax new file mode 100644 index 0000000..b741ad8 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/handler/ActiveMqConfigs.javax @@ -0,0 +1,84 @@ +package digital.laboratory.platform.entrustment.handler; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jms.config.DefaultJmsListenerContainerFactory; +import org.springframework.jms.config.JmsListenerContainerFactory; +import org.springframework.jms.core.JmsTemplate; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author gyDeBug + * @version 1.0 + * @date 2021/3/30 15:41 + * @description:ActiveMq多实例配置。 + */ +@Configuration +public class ActiveMqConfigs { + + /** + * activqmq 地址 账号密码注入 + * @param brokerUrl + * @param username + * @param password + * @return + */ + @Bean(name = "activeMQConnectionFactory") + public ActiveMQConnectionFactory activeMQConnectionFactory( + @Value("${config.activemq.brokerUrl}") String brokerUrl, + @Value("${config.activemq.user}") String username, + @Value("${config.activemq.password}") String password) { + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(); + factory.setBrokerURL( brokerUrl ); + factory.setUserName( username ); + factory.setPassword( password ); + factory.setTrustedPackages(new ArrayList(Arrays.asList( + ("digital.laboratory.platform.common.core.util," + + "digital.laboratory.platform.common.core.entity," + + "java.time," + + "java.time.chrono," + + "java.io," + + "java.lang" + ).split(",")))); + return factory; + } + + /** + * JmsTemplate生成 + * + * @param connectionFactory + * @param pubSubDmain + * @return + */ + @Bean(name = "activeMQJmsTemplate") + public JmsTemplate activeMQJmsTemplate( + @Qualifier("activeMQConnectionFactory") ActiveMQConnectionFactory connectionFactory, + @Value("${config.activemq.pub-sub-domain}") boolean pubSubDmain) { + JmsTemplate jmsTemplate = new JmsTemplate( connectionFactory ); + jmsTemplate.setPubSubDomain( pubSubDmain ); + return jmsTemplate; + } + + /** + * JmsListener工厂生成 + * + * @param connectionFactory + * @param pubSubDmain + * @return + */ + @Bean(name = "activeMQJmsListenerContainerFactory") + public JmsListenerContainerFactory activeMQJmsListenerContainerFactory( + @Qualifier("activeMQConnectionFactory") ActiveMQConnectionFactory connectionFactory, + @Value("${config.activemq.pub-sub-domain}") boolean pubSubDmain) { + DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); + factory.setConnectionFactory( connectionFactory ); + factory.setPubSubDomain( pubSubDmain ); + return factory; + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/handler/AppStartupRunner.java b/src/main/java/digital/laboratory/platform/entrustment/handler/AppStartupRunner.java new file mode 100644 index 0000000..eed2aa3 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/handler/AppStartupRunner.java @@ -0,0 +1,87 @@ +package digital.laboratory.platform.entrustment.handler; + +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.sys.entity.Dictionary; +import digital.laboratory.platform.sys.feign.RemoteDictionaryService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * App 启动类 + * 当 Spring Application 启动完成后, 会调用这个类的 run() 方法进行一些最后的初始化。 + * 我们在这个方法中从数据库加载一些全局的配置 + * + * @author Zhang Xiaolong + */ + +@Component +@RequiredArgsConstructor +public class AppStartupRunner implements ApplicationRunner { + @Value("${dlp.entrustment.entrustmentLetterTemplate}") + public static String entrustmentLetterTemplate; + + private final RemoteDictionaryService remoteDictionaryService; + + public static Map entrustmentConfig = new HashMap<>(); + public static Map thirdSysConfig = new HashMap<>(); + + public static String getCfg(String code) { + return entrustmentConfig.get(code); + } + public static Dictionary getThirdSysCfg(String key) { + return thirdSysConfig.get(key); + } + + /** + * + * @param args 参数 + * @throws Exception 异常 + * + * // @SysLog("委托受理模块初始化") 这里不能使用 @SysLog(), 因为 SysLog 还没有初始化 + */ + @Override + public void run(ApplicationArguments args) throws Exception { +// BusinessCodeUtils.removeSymbols("x-*/)——0*&……%¥#@xasdf!*&^&%^ 中文、/+)(()\n\\xx\rx"); + + { + // 加载 entrustment 在字典中的配置 + loadDictData(CommonConstants.DLP_TYPE_ENTRUSTMENT,1); + //加载第三方系统的对接信息 + loadDictData("920f9dd9cd14281e8b488a34c649ff70",2); + + for (String key : entrustmentConfig.keySet()) { + System.out.println(String.format("entrustmentConfig[%s]=%s", key, entrustmentConfig.get(key))); + } + } + } + //读取的数据添加到配置中 + public void loadDictData(String type,int loadWhere) + { + R> r = remoteDictionaryService.getDictionaryByType(type); + if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) { + List itemList = r.getData(); + if(loadWhere==1) + { + for (Dictionary item : itemList) { + entrustmentConfig.put(item.getCode(), item.getLabel()); + } + } + if(loadWhere==2) + { + for (Dictionary item : itemList) { + thirdSysConfig.put(item.getLabel(),item); + } + } + + } + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEventMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEventMapper.java new file mode 100644 index 0000000..274cf9d --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEventMapper.java @@ -0,0 +1,39 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 案件事件 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 案件事件 Mapper 类 + */ +@Mapper +public interface CaseEventMapper extends BaseMapper { + /** + * 按查询条件查询案件VO + * @param fromDate + * @param toDate + * @param caseName + * @param caseType + * @return + */ + List getCaseVoList(@Param("fromDate")String fromDate, @Param("toDate")String toDate, + @Param("caseName")String caseName, + @Param("caseType")String caseType); + + IPage getCaseVoPage(@Param("page") IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + CaseEventVO getCaseVOById(@Param("id") String id); + + String getMaxCaseNo(String prefix); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEvidenceMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEvidenceMapper.java new file mode 100644 index 0000000..9eaffe5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/CaseEvidenceMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import org.apache.ibatis.annotations.Mapper; + +/** + * 与案件相关的物证信息 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 与案件相关的物证信息 Mapper 类 + */ +@Mapper +public interface CaseEvidenceMapper extends BaseMapper { + String getMaxEvidenceNo(String prefix); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/DelivererMapper.javax b/src/main/java/digital/laboratory/platform/entrustment/mapper/DelivererMapper.javax new file mode 100644 index 0000000..d5c48ee --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/DelivererMapper.javax @@ -0,0 +1,17 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.Deliverer; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 送检员 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-08-16 + * @describe 送检员 Mapper 类 + */ +@Mapper +public interface DelivererMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataMaterialVoMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataMaterialVoMapper.java new file mode 100644 index 0000000..8abb2e2 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataMaterialVoMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.EntrustMaterialOfThirdSys; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName EntrustDataMaterialVoMapper + * @Description TODO + * @Author xy + * @Date 2023/6/13 16:27 + * @Version 1.0 + **/ +@Mapper +public interface EntrustDataMaterialVoMapper extends BaseMapper { +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataVoMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataVoMapper.java new file mode 100644 index 0000000..c326d89 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustDataVoMapper.java @@ -0,0 +1,10 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.EntrustOfThirdSys; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EntrustDataVoMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentIdentificationMaterialMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentIdentificationMaterialMapper.java new file mode 100644 index 0000000..a2fea99 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentIdentificationMaterialMapper.java @@ -0,0 +1,26 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 检材信息 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 检材信息 Mapper 类 + */ +@Mapper +public interface EntrustmentIdentificationMaterialMapper extends BaseMapper { + String getMaxIdentificationMaterialNo(String prefix); + + List getEntrustmentIdentificationMaterialVOList(@Param(Constants.WRAPPER) QueryWrapper qw); + String getMaxMaterialAcceptNo(String prefix); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentMapper.java new file mode 100644 index 0000000..95158e2 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustmentMapper.java @@ -0,0 +1,36 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import digital.laboratory.platform.entrustment.vo.EntrustmentVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 委托 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 委托 Mapper 类 + */ +@Mapper +public interface EntrustmentMapper extends BaseMapper { + IPage getEntrustmentVOPage(@Param("page") IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + List getEntrustmentVOList(@Param(Constants.WRAPPER) QueryWrapper qw); + + EntrustmentVO getEntrustmentVOById(@Param("id") String id); + + String getMaxEntrustmentNo(@Param("prefix") String prefix); + + String getMaxEntrustmentNoNew(String prefix); + + String getMaxEntrustAcceptNo(String prefix); + + String getTypeForDictionary(String id); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/IdentificationMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/IdentificationMapper.java new file mode 100644 index 0000000..2bcf404 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/IdentificationMapper.java @@ -0,0 +1,23 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.Identification; +import digital.laboratory.platform.entrustment.vo.IdentificationVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 鉴定表,一个鉴定可能会有多个委托 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 鉴定表,一个鉴定可能会有多个委托 Mapper 类 + */ +@Mapper +public interface IdentificationMapper extends BaseMapper { + + List getIdentificationVOList(String caseId); + List getIdentificationListByCaseId(String caseId); + + String getMaxIdentificationNo(String prefix); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxInLogMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxInLogMapper.java new file mode 100644 index 0000000..ba627ae --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxInLogMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.SampleBoxInLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 样品包入库出库日志 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品包入库出库日志 Mapper 类 + */ +@Mapper +public interface SampleBoxInLogMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxMapper.java new file mode 100644 index 0000000..43f7804 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleBoxMapper.java @@ -0,0 +1,19 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 受理时检材重新包装的容器 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 受理时检材重新包装的容器 Mapper 类 + */ +@Mapper +public interface SampleBoxMapper extends BaseMapper { + + String getMaxBoxNo(@Param("prefix") String prefix); + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleMapper.java new file mode 100644 index 0000000..0c96d89 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import org.apache.ibatis.annotations.Mapper; + +/** + * 检验用的样本 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 检验用的样本 Mapper 类 + */ +@Mapper +public interface SampleMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreChangeDutyLogMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreChangeDutyLogMapper.java new file mode 100644 index 0000000..1f780df --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreChangeDutyLogMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.SampleStoreChangeDutyLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 样品库管理员换班日志 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库管理员换班日志 Mapper 类 + */ +@Mapper +public interface SampleStoreChangeDutyLogMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreLogMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreLogMapper.java new file mode 100644 index 0000000..66f4907 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreLogMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.SampleStoreLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 样品库入库出库日志 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库入库出库日志 Mapper 类 + */ +@Mapper +public interface SampleStoreLogMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreMapper.java new file mode 100644 index 0000000..cdc381a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/SampleStoreMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.SampleStore; +import org.apache.ibatis.annotations.Mapper; + +/** + * 样品库 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库 Mapper 类 + */ +@Mapper +public interface SampleStoreMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCabinetMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCabinetMapper.java new file mode 100644 index 0000000..58e0131 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCabinetMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.StorageCabinet; +import org.apache.ibatis.annotations.Mapper; + +/** + * 暂存柜 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜 Mapper 类 + */ +@Mapper +public interface StorageCabinetMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellLogMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellLogMapper.java new file mode 100644 index 0000000..8fcf879 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellLogMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.StorageCellLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 暂存柜记录 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜记录 Mapper 类 + */ +@Mapper +public interface StorageCellLogMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellMapper.java new file mode 100644 index 0000000..9b6df94 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/StorageCellMapper.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.StorageCell; +import org.apache.ibatis.annotations.Mapper; + +/** + * 暂存柜,每行一个单元格 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜,每行一个单元格 Mapper 类 + */ +@Mapper +public interface StorageCellMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/TakerMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/TakerMapper.java new file mode 100644 index 0000000..7f085b8 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/TakerMapper.java @@ -0,0 +1,17 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.Taker; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 采集员 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-08-25 + * @describe 采集员 Mapper 类 + */ +@Mapper +public interface TakerMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobIdentificationMaterialMapper.javax b/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobIdentificationMaterialMapper.javax new file mode 100644 index 0000000..70e5ef5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobIdentificationMaterialMapper.javax @@ -0,0 +1,17 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.HairJobIdentificationMaterial; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 毛发任务的检材信息 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发任务的检材信息 Mapper 类 + */ +@Mapper +public interface HairJobIdentificationMaterialMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobMapper.javax b/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobMapper.javax new file mode 100644 index 0000000..9505c9a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/xHairJobMapper.javax @@ -0,0 +1,17 @@ +package digital.laboratory.platform.entrustment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import digital.laboratory.platform.entrustment.entity.HairJob; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 毛发检测任务 Mapper 接口 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发检测任务 Mapper 类 + */ +@Mapper +public interface HairJobMapper extends BaseMapper { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/misc/ProcessFlowMapper.java b/src/main/java/digital/laboratory/platform/entrustment/misc/ProcessFlowMapper.java new file mode 100644 index 0000000..6b8fcad --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/misc/ProcessFlowMapper.java @@ -0,0 +1,50 @@ +package digital.laboratory.platform.entrustment.misc; + +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; + + +/** + * 流程映射定义 + */ +public class ProcessFlowMapper { + public static int getNextStatus(int currentStatus, int opCode) { + int processFlowMapper[][] = { + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus(), -2, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ABORTED.getStatus()}, + + // {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus()}, + // {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()}, + // {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTING.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()}, + + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus(), 1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()}, + {EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus(), -1, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()}, + + }; + for (int i = 0; i < processFlowMapper.length; i++) { + if (processFlowMapper[i][0] == currentStatus) { + // 当前状态就是它 + if (processFlowMapper[i][1] == opCode) { + // 操作码找到了 + return processFlowMapper[i][2]; + } + } + } + + throw new RuntimeException("流程没有找到对应的下一状态"); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/misc/Template2html.javax b/src/main/java/digital/laboratory/platform/entrustment/misc/Template2html.javax new file mode 100644 index 0000000..e6eda3e --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/misc/Template2html.javax @@ -0,0 +1,58 @@ +package digital.laboratory.platform.entrustment.misc; + +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import lombok.RequiredArgsConstructor; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.io.StringWriter; +import java.util.Map; + +@Service +@RequiredArgsConstructor +public class Template2html { + private final OssFile ossFile; + + /** + * 根据模板生成检材标签的 html, 供 qz 打印使用 + * + * @return html 字符串 + */ + public String gethtml(String templateName, Map data) throws Exception { + String templateFileName = AppStartupRunner.getCfg(templateName); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ossFile.fileGet(OSSDirectoryConstants.TEMPLATE_DIRECTORY + "/"+ templateFileName, bos); + String templateString = bos.toString("UTF-8"); + bos.close(); + + try { + // 设置自定义指令使用的类 + Velocity.setProperty("userdirective", + "digital.laboratory.platform.entrustment.misc.VelocityQRCodeImage," + + "digital.laboratory.platform.entrustment.misc.VelocityBarCodeImage"); + //初始化模板 + Velocity.init(); + + //获取上下文 + VelocityContext context = new VelocityContext(); + //把数据填入上下文 + for (String key : data.keySet()) { + context.put(key, data.get(key)); + } + + StringWriter w = new StringWriter(); + Velocity.evaluate(context, w, "Velocity", templateString); + w.flush(); + return w.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityBarCodeImage.javax b/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityBarCodeImage.javax new file mode 100644 index 0000000..c91e08b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityBarCodeImage.javax @@ -0,0 +1,102 @@ +package digital.laboratory.platform.entrustment.misc; + +import digital.laboratory.platform.entrustment.QRCodeUtils; +import org.apache.velocity.context.InternalContextAdapter; +import org.apache.velocity.exception.MethodInvocationException; +import org.apache.velocity.exception.ParseErrorException; +import org.apache.velocity.exception.ResourceNotFoundException; +import org.apache.velocity.runtime.directive.Directive; +import org.apache.velocity.runtime.parser.node.ASTIntegerLiteral; +import org.apache.velocity.runtime.parser.node.ASTReference; +import org.apache.velocity.runtime.parser.node.ASTStringLiteral; +import org.apache.velocity.runtime.parser.node.Node; + +import java.io.IOException; +import java.io.Writer; + +public class VelocityBarCodeImage extends Directive { + @Override + public String getName() { + return "barcodeUrlData"; + } + + @Override + public int getType() { + return LINE; + } + + /** + * 渲染指令 + * + * 模板中调用时, 格式化为: #qrcode(code [, width, height]) + * 参数 code 是必须的, 是字符串, 或字符串变量 + * 参数 width 和 height 是可选的, 是整数, 应该大于 0 + * + * @param context + * @param writer + * @param node + * @return + * @throws IOException + * @throws ResourceNotFoundException + * @throws ParseErrorException + * @throws MethodInvocationException + */ + @Override + public boolean render(InternalContextAdapter context, Writer writer, + Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException { +// System.out.println(String.format("node.jjtGetNumChildren()=%d", node.jjtGetNumChildren())); +// for (int i=0; i0) { + Node sn = node.jjtGetChild(0); + if ((sn instanceof ASTStringLiteral) || (sn instanceof ASTReference)) { + code = (String)sn.value(context); + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + if (node.jjtGetNumChildren()>1) { + Node sn = node.jjtGetChild(1); + if ((sn instanceof ASTIntegerLiteral) /*|| (sn instanceof ASTReference)*/) { + Integer w =(Integer)sn.value(context); + if ((w != null) && (w > 0)) { + width = w; + } + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + if (node.jjtGetNumChildren()>2) { + Node sn = node.jjtGetChild(2); + if ((sn instanceof ASTIntegerLiteral) /*|| (sn instanceof ASTReference)*/) { + Integer h =(Integer)sn.value(context); + if ((h != null) && (h > 0)) { + height = h; + } + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + String r = QRCodeUtils.getBarCode128ImageBase64(code, width, height); + + writer.write(r); + return true; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityQRCodeImage.javax b/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityQRCodeImage.javax new file mode 100644 index 0000000..87d4a14 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/misc/VelocityQRCodeImage.javax @@ -0,0 +1,107 @@ +package digital.laboratory.platform.entrustment.misc; + +import digital.laboratory.platform.entrustment.QRCodeUtils; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.InternalContextAdapter; +import org.apache.velocity.exception.MethodInvocationException; +import org.apache.velocity.exception.ParseErrorException; +import org.apache.velocity.exception.ResourceNotFoundException; +import org.apache.velocity.runtime.directive.Directive; +import org.apache.velocity.runtime.parser.node.*; + +import java.io.IOException; +import java.io.Serializable; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class VelocityQRCodeImage extends Directive { + @Override + public String getName() { + return "qrcodeUrlData"; + } + + @Override + public int getType() { + return LINE; + } + + /** + * 渲染指令 + * + * 模板中调用时, 格式化为: #qrcode(code [, width, height]) + * 参数 code 是必须的, 是字符串, 或字符串变量 + * 参数 width 和 height 是可选的, 是整数, 应该大于 0 + * + * @param context + * @param writer + * @param node + * @return + * @throws IOException + * @throws ResourceNotFoundException + * @throws ParseErrorException + * @throws MethodInvocationException + */ + @Override + public boolean render(InternalContextAdapter context, Writer writer, + Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException { +// System.out.println(String.format("node.jjtGetNumChildren()=%d", node.jjtGetNumChildren())); +// for (int i=0; i0) { + Node sn = node.jjtGetChild(0); + if ((sn instanceof ASTStringLiteral) || (sn instanceof ASTReference)) { + code = (String)sn.value(context); + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + if (node.jjtGetNumChildren()>1) { + Node sn = node.jjtGetChild(1); + if ((sn instanceof ASTIntegerLiteral) /*|| (sn instanceof ASTReference)*/) { + Integer w =(Integer)sn.value(context); + if ((w != null) && (w > 0)) { + width = w; + } + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + if (node.jjtGetNumChildren()>2) { + Node sn = node.jjtGetChild(2); + if ((sn instanceof ASTIntegerLiteral) /*|| (sn instanceof ASTReference)*/) { + Integer h =(Integer)sn.value(context); + if ((h != null) && (h > 0)) { + height = h; + } + } + else { + throw new IllegalArgumentException("未知的参数类型: " + sn.getClass().getName()); + } + } + + String r = QRCodeUtils.getQRCodeImageBase64(code, width, height); + + writer.write(r); + return true; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/CaseEventService.java b/src/main/java/digital/laboratory/platform/entrustment/service/CaseEventService.java new file mode 100644 index 0000000..ebcad94 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/CaseEventService.java @@ -0,0 +1,78 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.othersys.vo.EntrustDataVo; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 案件事件服务类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 案件事件服务类 + */ +public interface CaseEventService extends IService { + /** + * 按查询条件查询案件VO + * @param fromDate + * @param toDate + * @param caseName + * @param caseType + * @return + */ + List getCaseVoList(String fromDate, String toDate, String caseName, String caseType); + IPage getCaseVoPage(IPage page, QueryWrapper qw); + + CaseEventVO getCaseVOById(String id); + + /** + * 根据案件编号查 Id + * @param caseNo + * @return + */ + CaseEvent getByCaseNo(String caseNo); + + + /** + * 生成新的案件编码, 本函数仅用于没有现勘系统、没有案事件系统的情况下 + * 如果有现勘系统, 则使用现勘系统的案件编号。 + * 如果有案事件系统, 则使用案事件系统的案件编号。 + * + * 格式: + *

+	 * A <办案机构 12位> <年月6位> <顺序号4位>
+	 * 例如:
+	 * A 520101 040000 202203 0002
+	 * 合计23位
+	 * 以为贵州省为例, 组织机构编码为 12 位长度, 除使用数字(0~9)之外, 还使用了英文字母(A~Z)
+	 *
+ * 作为兼容性考虑, 如果机构编码不足 12 位, 以实际位数为准 + * + * @param caseOwnOrgCode + * @param date + * @return + */ + String getNewCaseCode(String caseOwnOrgCode, Date date); + /** + * 检查案件是否有提交审核以后的委托存在 + */ + Boolean checkCaseIsEnableModify(String caseId); + /** + * 同步禁毒大数据平台上的案件信息 + * @param isUpdate true 是更新 false 是插入 + * @param caseId 更新则需要传案件的id, 如果不是更新则传null + * @return + */ + Map>> syncCaseEventInfo(EntrustDataVo entrustDataVo, String caseId, Boolean isUpdate); + + boolean postAddObject(CaseEvent caseEvent); + + CaseEvent deleteById(String id, DLPUser dlpUser) throws Exception; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/CaseEvidenceService.java b/src/main/java/digital/laboratory/platform/entrustment/service/CaseEvidenceService.java new file mode 100644 index 0000000..6656817 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/CaseEvidenceService.java @@ -0,0 +1,47 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.othersys.vo.EntrustDataVo; + +import java.util.List; +import java.util.Map; + +/** + * 与案件相关的物证信息服务类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 与案件相关的物证信息服务类 + */ +public interface CaseEvidenceService extends IService { + /** + * 用于标识某个案件的物证。 + * 顺序号使用 6 位的原因, 是现勘系统的物证编码结构就是这样。有可能这 6 位编码中有不同的用途, 并不完全是顺序号。 + * 但是我们不得而知。 + * 如果该编码由我们系统自己生成, 则使用 6 位顺序号。 + * ``` + * W <案件编号后 22 位> <顺序号 6 位> + * 例如: + * W 5201010400002020030002 000001 + * 合计 29 位 + * ``` + * 如果有现勘系统, 则使用现勘系统的物证编号。 + * 如果有案事件系统, 则使用案事件系统的物证编号。 + * + * 作为兼容性考虑, 如果案件编码不足 23 位, 取 除掉第 1 个字符之后的, 即去掉 "A" 字符剩下的 + * + * @param caseNo + * @return + */ + String getNewEvidenceCode(String caseNo); + + long countByCaseId(String caseId); + + /** + * 同步禁毒数据平台上的分物证 + * + * @return + */ + List> syncCaseEvidenceInfo(EntrustDataVo caseEventObj, CaseEvent caseId, Boolean isUpdate); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/DelivererService.javax b/src/main/java/digital/laboratory/platform/entrustment/service/DelivererService.javax new file mode 100644 index 0000000..b0699d0 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/DelivererService.javax @@ -0,0 +1,25 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.entrustment.entity.Deliverer; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.entity.Taker; + +/** + * 送检员服务类 + * + * @author Zhang Xiaolong created at 2022-08-16 + * @describe 送检员 服务类 + */ +public interface DelivererService extends IService { + + /** + * 更新送检员 + * 以送检员的名字为关键字, 如果同名送检员存在, 更新其他属性; 如果同名送检员不存在, 则新增数据库记录 + * @param deliverer + */ + boolean renew(Deliverer deliverer); + + Deliverer getByName(String name, String ownerUserId); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentIdentificationMaterialService.java b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentIdentificationMaterialService.java new file mode 100644 index 0000000..9e6d9da --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentIdentificationMaterialService.java @@ -0,0 +1,115 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.entrustment.dto.PrintDTO; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; +import digital.laboratory.platform.entrustment.vo.SampleBoxVO; + +import java.util.List; + +/** + * 检材信息服务类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 检材信息服务类 + */ +public interface EntrustmentIdentificationMaterialService extends IService { + + /** + * ## 检材编码 + * ``` + * JC <物证编号后 28 位> <顺序号4位> + * 例如: + * JC 5201010400002020030002 0000001 0001 + * 合计 34 位 + * ``` + * 一份物证, 有可能会多次送检。每次送检的时候, 在原来的顺序号上递增。 + * 定义这个编号的时候有点纠结, 有两个方向的关联: 在案件号上扩充、在物证号上扩充。我们选择在物证号上扩充。 + * 检材编码的长度不一定刚好是 34 位!我们取“物证编号后 28 位”时, 其实是去掉物证编码前第1个字符后剩下的部分。 + * 如果物证编码不是 29 位, 那么取到的就不是 28 位, 而是物证编码长度减1位。 + * + * @param evidenceNo + * @return + */ + String getNewIdentificationMaterialNo(String evidenceNo); + + /** + * 创建新的检材 + * 根据参数中的物证生成新的检材, 新创建的检材将继承该物证的部分属性 + * + * @param ce + * @return + */ + EntrustmentIdentificationMaterial createNewIdentificationMaterial(CaseEvidence ce); + + long countByEntrustmentId(String entrustmentId); + + List getEntrustmentIdentificationMaterialVOList(QueryWrapper qw); + + int setEntrustmentIdentificationMaterialStatusByEntrustment(EntrustmentIdentificationMaterial im, String EntrustmentId); + + //生成受理编号 + String getNewMaterialAcceptNo(String entrustAcceptNo); + + //同步已受理数据的时候,生成受理编号 + public String getThirdSysMaterialAcceptNo(String entrustAcceptNo); + + //生成案前委托的受理编号 + String getNewMaterialAcceptNoForBeforeCase(String entrustBeforeAcceptNo); + + //根据盒子ID 查询该盒子下的检材 + public List getQueryListByBoxID(String boxId, String boxType); + + //根据盒子ID,分样类型,检材ID 删除分样信息 + Boolean delSampleBoxInfo(String boxId, String sampleNo, String boxType); + + //统计盒子中装了多少样本 + SampleBoxVO getBoxCountInfo(String boxId); + + //将样本装进盒子 + List putSampleToBox(String boxId, List sampleNoList, String boxType); + + //根据用户ID 获取用户 + String getUserNameByEntrustUserID(String userId); + + EntrustmentIdentificationMaterial bizCheck_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser); + + EntrustmentIdentificationMaterial bizApprove_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser); + + EntrustmentIdentificationMaterial bizAccept_Save(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser); + + EntrustmentIdentificationMaterial bizAccept_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser); + + EntrustmentIdentificationMaterial createIdentificationMaterialByEvidenceId(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser); + + EntrustmentIdentificationMaterial putUpdateById(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser); + + void saveCollectors(EntrustmentIdentificationMaterial material, DLPUser dlpUser); + + EntrustmentIdentificationMaterial settingAcceptSampleInfoDivide(EntrustmentIdentificationMaterial material); + + //设置送检单位初始分样信息 + + EntrustmentIdentificationMaterial settingProviderSampleInfo(EntrustmentIdentificationMaterial material); + + EntrustmentIdentificationMaterial settingAcceptSampleInfoNoDivide(EntrustmentIdentificationMaterial material); + + EntrustmentIdentificationMaterial deleteById(String id); + + boolean saveRepWeigh(String id, double sample1RepeatWeigh, double sample2RepeatWeigh, boolean isUseBalance, String sampleFlag); + + EntrustmentIdentificationMaterial settingRetained(String id, int flag); + + List createNewIm(List identificationMaterial, DLPUser dlpUser); + + public List printLabel(List printDTOList); + + List printManyLabel(List printDTOList); + + String printMaterialArchives(String entrustmentId) throws Exception; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentService.java b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentService.java new file mode 100644 index 0000000..92b38bc --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustmentService.java @@ -0,0 +1,244 @@ +package digital.laboratory.platform.entrustment.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.entrustment.dto.EntrustmentDTO; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.vo.EntrustmentVO; +import digital.laboratory.platform.sys.entity.SysUser; +import digital.laboratory.platform.sys.vo.entrustment.MarkersVO; +import digital.laboratory.platform.sys.entity.entrustment.Sample; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * 委托服务类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 委托服务类 + */ +public interface EntrustmentService extends IService { + + /** + * ## 委托编码 + * 用于标识每一次委托。 + * 有可能一个案件会有多次委托鉴定, 所以在案件编码后加4位作为顺序号。 + * + * ``` + * WT <案件编码后 22 位> <顺序号4位> + * 例如: + * WT 5201010400002020030002 0002 + * 合计 28 位 + * ``` + //* @param caseNo + * @return + */ +// String getNewEntrustmentNo(String caseNo); + public String getNewEntrustmentNo(); + //生成受理编号 + public String getNewAcceptNo(); + List getEntrustmentVOList(QueryWrapper qw); + IPage getEntrustmentVOPage(IPage page, QueryWrapper qw); + EntrustmentVO getEntrustmentVOById(String id); + + /** + * 查询任务 + * @param userId + * @param group + * @param processInstanceId + * @param businessKey + * @return + */ + //List taskQuery(String userId, String group, String processInstanceId, String businessKey); + + /** + * 获取任务列表 + * 查询条件可以是 userId, groupId, processInstanceId, busincessKey + */ + //List taskList(String entrustmentId, String userId); + + /** + * 认领任务 + * 只有 Assignee 为空才能认领, unclaim 反认领可以置 Assignee 为空 + * @param entrustmentId + * @return + */ + //HashMap taskClaim(String entrustmentId); + + /** + * 反认领任务 + * @param entrustmentId + * @return + */ + //HashMap taskUnclaim(String entrustmentId); + + /** + * 委派任务 + * 把任务指定给某个用户, 与 claim 不同之处于无论之前 assignee 是否为空都可以委派。 + * 可以在某个用户长期不作为的情况下重新委派给其他人 + * @param entrustmentId + * @param userId + * @return + */ + //HashMap taskAssigneeSet(String entrustmentId, String userId); + + /** + * 提交任务 + * @param entrustmentId 委托ID + * @param opCode 操作码: 1=通过, -1=拒绝(驳回), 2...=其他路径 + */ + //HashMap taskApply(String entrustmentId, Integer opCode); + + + /** + * 取指定环节可用的用户列表 + * 当流程进行到某个环节的时候, 需要某个用户对这个环节进行处理(通过或不通过)。 + * 这里取可用的用户列表 + *

+ * 涉及到的环境有以下几个: + * 1、创建委托及提交 + * 委托的提交者就是委托的创建者。不存在不通过的可能。 + * 2、审核 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审核权限 + * 3、审批 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审批权限 + * 4、送检确认 + * 送检确认者有几个条件: (1)必须与委托的创建者是同一个机构, 或上级机构的人 (2)必须拥有委托送检确认权限 + * 5、受理 + * 受理者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托受理权限 + * + * + * @return + */ + List taskAvailableUserList_Check(); + List taskAvailableUserList_Approve(); + List taskAvailableUserList_Confirm(String clientOrgId); + List taskAvailableUserList_Accept(); +// List taskAvailableUserList(String entrustmentId); + public long countByCaseId(String caseId); + void Entrustment2Word(EntrustmentVO ev) throws IOException; +// void Entrustment2Word(EntrustmentVO ev, InputStream tempStream, OutputStream) throws IOException; + + //初始化送检受理系统数据 + void initCaseSendAccept(); + //生成鉴定事项确认书 + Boolean generateIdentifyItemsBook(String entrustId); + /** + *获取文书名称 + * @param entrustId + * @param whatBook entrust-委托书 identItemBook-鉴定事项确认书 identfyBook-鉴定书 + * @return + */ + String getBookNameByEntrustId(String entrustId,String whatBook); + + /** + * 构建鉴定要求 + * @param materialList + * @return + */ + public String buildIdentfyReq(List materialList); + /** + * 构造委托书中的鉴定要求 + * + * @param materialList + * @return + */ + public String buildEntrustReq(List materialList); + /** + * 构建检材描述 + * @param materialList + * @return + */ + public String buildMaterialDes(List materialList); + //检验完成 + public boolean testsFinish(String entrustId); + //查询委托各个状态的数量 + public Integer getEntrustStatusCount(List statues, DLPUser dlpUser); + //获取案前委托的委托编号 + String getNewEntrustAcceptNoForBeforeCase(); + //根据年份获取当年的最大号 + String getNewEntrustNoByYear(String year); + //合并送检人员的证件照 + Boolean getDeliverMergePhoto(String entrustId,String acceptNo,String caseName,String deliverer1Name,String deliverer2Name); + //检查送检人的证件照片是否上传 + Boolean checkDeliverPhoto(String entrustId); + //获取委托下的 +// String getMaterialMergePhoto(String entrustId, Integer groupCount); + //处理历史数据到流转系统中 + Boolean historyDataToTransSys(String status,List entrustIds); + //检查检材是否已经复秤 + boolean checkRepeatWeigh(Entrustment entrustment); + //同步的历史数据补充缺失的字段 + Boolean updateImportData(String flag); + + Entrustment bizSubmitter_Save(Entrustment entrust, DLPUser dlpUser); + + Entrustment bizSubmitter_Apply(Entrustment entrust, DLPUser dlpUser); + + Entrustment bizChecker_Claim( Entrustment entrust,DLPUser dlpUser); + + Entrustment bizChecker_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser); + + Entrustment bizApprover_Claim(Entrustment entrust, DLPUser dlpUser); + + Entrustment bizApprover_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser); + + Entrustment bizConfirm_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser); + + Entrustment bizDeliver_Save(Entrustment entrust, DLPUser dlpUser); + + Entrustment bizDeliver_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser); + + void bizGetPDFEntrustmentLetter(String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse); + + Entrustment bizAccept_Save(Entrustment entrust, DLPUser dlpUser); + + Entrustment bizAccept_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser); + + List getTransferMaterialList(DLPUser dlpUser, Entrustment entrustment); + + void bizGetPDFIdentifyItemsConfirmLetter(String id, String pdfOrWord, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse); + + void GenerateIdentifyItemsConfirmLetterPDF(EntrustmentVO ev); + + Entrustment bizSubmitter_AddEntrustment(Entrustment entrustment, DLPUser dlpUser); + + R deleteById(String id, DLPUser dlpUser); + + R uploadAttachmentObj_Base64(String entrustmentId, JSONObject jsonParam) throws Exception; + + R uploadDeliverPhoto_Base64(String entrustmentId, JSONObject jsonParam); + + R uploadAcceptAttachmentObj_Base64(String entrustmentId, JSONObject jsonParam) throws Exception; + + R> bizGetAvailableUserList(String entrustmentId); + + List getImQuantityForInspection(DLPUser dlpUser); + + Entrustment addNewEmt(EntrustmentDTO entrustmentDTO, DLPUser dlpUser); + + List getInspectMarkers(DLPUser dlpUser); + + List getImQuantityForAccept(); + + List getMarkersForOther(DLPUser dlpUser); + + List getMarkersForEntrustment(); + + void printSampleFile(String entrustmentId) throws Exception; + + boolean synchronizationByMaterialType(); + + IPage getEntrustmentAndMaterial(Page page, Integer status,String keywords); + + boolean isMaterialPhoto(String entrustmentId); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/IdentificationService.java b/src/main/java/digital/laboratory/platform/entrustment/service/IdentificationService.java new file mode 100644 index 0000000..c705973 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/IdentificationService.java @@ -0,0 +1,51 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.Identification; +import digital.laboratory.platform.entrustment.vo.EntrustmentVO; +import digital.laboratory.platform.entrustment.vo.IdentificationVO; + +import java.util.List; + +/** + * 鉴定表,一个鉴定可能会有多个委托服务类 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 鉴定表,一个鉴定可能会有多个委托 服务类 + */ +public interface IdentificationService extends IService { + + /** + * ## 鉴定编码 + * 用于标识每一个鉴定。 + * 有可能一个案件会有多次委托鉴定, 所以在案件编码后加4位作为顺序号。 + * + * ``` + * WT <案件编码后 22 位> <顺序号4位> + * 例如: + * WT 5201010400002020030002 0002 + * 合计 28 位 + * ``` + * @param caseNo + * @return + */ + String getNewIdentificationNo(); + + /** + * 根据 caseId 取 IdentificationVO 列表, 每个 Entrustment 一行 + * @param caseId + * @return + */ + List getIdentificationVOList(String caseId); + + /** + * 根据 caseId 取 Identification 列表, 供新建的补充委托选择老的 Identification(鉴定), 以使新建的委托作为老的鉴定的一部分 + * @param caseId + * @return + */ + List getIdentificationListByCaseId(String caseId); + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxInLogService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxInLogService.java new file mode 100644 index 0000000..cde49f1 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxInLogService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.SampleBoxInLog; + +/** + * 样品包入库出库日志服务类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品包入库出库日志服务类 + */ +public interface SampleBoxInLogService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxService.java new file mode 100644 index 0000000..7f903ce --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleBoxService.java @@ -0,0 +1,85 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import digital.laboratory.platform.entrustment.vo.SampleBoxLiteVO; +import digital.laboratory.platform.entrustment.vo.SampleBoxVO; + +import java.util.List; + +/** + * 受理时检材重新包装的容器服务类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 受理时检材重新包装的容器服务类 + */ +public interface SampleBoxService extends IService { + + /** + * ## 根据委托编码生成样本盒编码 + * 用于标识每一个样本盒。一个委托最多可以有99个样本盒子 + * + * ``` + * BZ <委托编码去掉前缀2个字符后剩下22位> <顺序号2位> + * 例如: + * BZ 6101022022100002000001 02 + * 合计 26 位 + * ``` + * @param entrustmentNo + * @return + */ + String getNewBoxNoForEntrustment(String entrustmentNo); + + /** + * ## 根据污水任务编码生成样本盒编码 + * 用于标识每一个样本盒。一个委托最多可以有9999个样本盒子 + * + * ``` + * BZ <污水任务编码去掉前缀2个字符后剩下7位> <顺序号4位> + * 例如: + * BZ 2022201 0002 + * 合计 13 位 + * ``` + * @param sewageJobNo + * @return + */ + String getNewBoxNoForSewageJob(String sewageJobNo); + + String getNewBoxNoForOther(String newBoxNumber); + + /** + * 取指定的样本命盒子的信息, 包含其中的样本编号列表 + * 样本编号来自检材清单 + * @param id + * @return + */ + SampleBoxLiteVO getSampleBoxLiteVOById(String id); + + /** + * 取指定的样本命盒子的信息, 包含其中的样本列表 + * 样本列表来自样本表, 必须在相关的委托【受理完成】后才能取到。因为只有受理完成后才会生成样本清单 + * 在受理未完成前, 取到的样本列表为空 + * @param id + * @return + */ + SampleBoxVO getSampleBoxVOById(String id); + + /** + * 构建盒子打印内容 + * @param id + * @return + */ + String buildSampleBoxLabelContent(String id) throws Exception; + + + //获取盒子列表,并附带样本数量的统计属性 + List getSampleBoxList(SampleBox sampleBox); + + String printBoxLabel(String id,Integer type); + + SampleBox controlsSampleBox(SampleBox sampleBox,Integer opCode); + + String printLabelForOther(String boxId, Integer type); + + String getOrderIdBy16UUId(); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleService.java new file mode 100644 index 0000000..4b82bb5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleService.java @@ -0,0 +1,22 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.sys.entity.entrustment.Sample; + +import java.util.List; + +/** + * 检验用的样本服务类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 检验用的样本 服务类 + */ +public interface SampleService extends IService { + String getNewProvidedSampleNo(String IdentificationMaterialNo, int sampleSerialNumber); + + String getNewSampleNo(String IdentificationMaterialNo, int sampleSerialNumber); + + List createSample(EntrustmentIdentificationMaterial entrustmentIdentificationMaterial,String orgId,String dlpUserId); +// List createSample(SewageJobIdentificationMaterial sewageJobIdentificationMaterial,String dlpUserId); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreChangeDutyLogService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreChangeDutyLogService.java new file mode 100644 index 0000000..c45321b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreChangeDutyLogService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.SampleStoreChangeDutyLog; + +/** + * 样品库管理员换班日志服务类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库管理员换班日志服务类 + */ +public interface SampleStoreChangeDutyLogService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreLogService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreLogService.java new file mode 100644 index 0000000..687cdf6 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreLogService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.SampleStoreLog; + +/** + * 样品库入库出库日志服务类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库入库出库日志服务类 + */ +public interface SampleStoreLogService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreService.java new file mode 100644 index 0000000..e125230 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SampleStoreService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.SampleStore; + +/** + * 样品库服务类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库服务类 + */ +public interface SampleStoreService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/StorageCabinetService.java b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCabinetService.java new file mode 100644 index 0000000..349e6ba --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCabinetService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.StorageCabinet; + +/** + * 暂存柜服务类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜服务类 + */ +public interface StorageCabinetService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellLogService.java b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellLogService.java new file mode 100644 index 0000000..4774a93 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellLogService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.StorageCellLog; + +/** + * 暂存柜记录服务类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜记录服务类 + */ +public interface StorageCellLogService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellService.java b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellService.java new file mode 100644 index 0000000..b200786 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/StorageCellService.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.StorageCell; + +/** + * 暂存柜,每行一个单元格服务类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜,每行一个单元格服务类 + */ +public interface StorageCellService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeDataService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeDataService.java new file mode 100644 index 0000000..b3fdd96 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeDataService.java @@ -0,0 +1,43 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.fasterxml.jackson.core.JsonProcessingException; +import digital.laboratory.platform.othersys.dto.EntrustQueryParams; +import digital.laboratory.platform.entrustment.entity.EntrustOfThirdSys; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.othersys.vo.SynConnInfoVo; + +/** + * @ClassName SynchronizeDataService + * @Description 第三方数据同步服务 + * @Author xy + * @Date 2023/6/13 11:00 + * @Version 1.0 + **/ +public interface SynchronizeDataService extends IService{ + //从大数据平台同步已经受理的数据 + Boolean synAcceptedEntrustDataToMyServer(EntrustQueryParams queryParams); + + void addEntrustThirdSys(EntrustOfThirdSys entrustOfThirdSys); + void updateEntrustThirdSys(EntrustOfThirdSys entrustOfThirdSys); + + // 获取系统配置 + SynConnInfoVo getSysSynConnInfo(); + + // 获取token 信息 + String getTokenInfo(String whoUse, SynConnInfoVo synConnInfoVo); + + //获取禁毒系统的委托数据通过主系统的委托ID + EntrustOfThirdSys getThirdSysEntrustByMainId(String entrustMainId); + //审核 + public Boolean auditEntrustByProvinceOrCenter(String userFlag,String dataPath,String thirdSysEntrustID ,String result, + String reMark,String auditOrAccept); + //受理委托 + Boolean subCenterAccept(String dataPath, Entrustment selfEntrust, EntrustOfThirdSys thirdSysEntrust) throws JsonProcessingException; + //同步委托数据 + Boolean synEntrustDataToMyServer(String entrustStatus,String userFlag); + //提交鉴定结果 + Boolean submitIdentifyResult(String dataPath,String entrustId); + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeMaterialVoService.java b/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeMaterialVoService.java new file mode 100644 index 0000000..a0e1c7e --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/SynchronizeMaterialVoService.java @@ -0,0 +1,16 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.EntrustMaterialOfThirdSys; + +/** + * @ClassName SynchronizeDataService + * @Description 第三方数据同步服务 + * @Author xy + * @Date 2023/6/13 11:00 + * @Version 1.0 + **/ +public interface SynchronizeMaterialVoService extends IService{ + void addMaterialVoThirdSys(EntrustMaterialOfThirdSys entrustMaterialOfThirdSys); + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/TakerService.java b/src/main/java/digital/laboratory/platform/entrustment/service/TakerService.java new file mode 100644 index 0000000..551fcd1 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/TakerService.java @@ -0,0 +1,22 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.Taker; + +/** + * 采集员服务类 + * + * @author Zhang Xiaolong created at 2022-08-25 + * @describe 采集员 服务类 + */ +public interface TakerService extends IService { + + /** + * 更新采集员 + * 以采集员的名字为关键字, 如果同名采集员存在, 更新其他属性; 如果同名采集员不存在, 则新增数据库记录 + * @param taker + */ + boolean renew(Taker taker); + + Taker getByName(String name, String ownerUserId); +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEventServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEventServiceImpl.java new file mode 100644 index 0000000..80836a1 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEventServiceImpl.java @@ -0,0 +1,363 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import digital.laboratory.platform.entrustment.mapper.CaseEventMapper; +import digital.laboratory.platform.othersys.vo.EntrustDataVo; +import digital.laboratory.platform.entrustment.service.CaseEventService; +import digital.laboratory.platform.entrustment.service.CaseEvidenceService; +import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; +import digital.laboratory.platform.entrustment.service.EntrustmentService; +import digital.laboratory.platform.entrustment.vo.CaseEventVO; +import digital.laboratory.platform.sys.entity.SysOrg; +import digital.laboratory.platform.sys.feign.RemoteOrgService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; + + +/** + * 案件事件服务实现类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 案件事件服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CaseEventServiceImpl extends ServiceImpl implements CaseEventService { + private final CaseEventMapper caseEventMapper; + private final RemoteOrgService remoteOrgService; + private final CaseEvidenceService caseEvidenceService; + @Resource + private EntrustmentService entrustmentService; + + private final OssFile ossFile; + @Resource + + private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + + /** + * 按查询条件查询案件VO + * + * @param fromDate + * @param toDate + * @param caseName + * @param caseType + * @return + */ + @Override + public List getCaseVoList(String fromDate, String toDate, String caseName, String caseType) { + return caseEventMapper.getCaseVoList(fromDate, toDate, caseName, caseType); + } + + @Override + public IPage getCaseVoPage(IPage page, QueryWrapper qw) { + IPage r = caseEventMapper.getCaseVoPage(page, qw); + return r; + } + + /** + * 根据案件编号查 Id + * + * @param caseNo + * @return + */ + @Override + public CaseEvent getByCaseNo(String caseNo) { + return caseEventMapper.selectOne(Wrappers.query().eq("case_no", caseNo)); + } + + /** + * 根据 Id 查询 + * + * @param id + * @return + */ + @Override + public CaseEventVO getCaseVOById(String id) { + return caseEventMapper.getCaseVOById(id); + } + + + /** + * 生成新的案件编码, 本函数仅用于没有现勘系统、没有案事件系统的情况下 + * 如果有现勘系统, 则使用现勘系统的案件编号。 + * 如果有案事件系统, 则使用案事件系统的案件编号。 + *

+ * 格式: + * A <办案机构 12位> <年月6位> <顺序号4位> + * 例如: + * A 520101 040000 202203 0002 + * 合计23位 + * 以为贵州省为例, 组织机构编码为 12 位长度, 除使用数字(0~9)之外, 还使用了英文字母(A~Z) + *

+ * 作为兼容性考虑, 如果机构编码不足 12 位, 以实际位数为准 + * + * @param caseOwnOrgCode + * @param date + * @return + */ + @Override + public String getNewCaseCode(String caseOwnOrgCode, Date date) { + String prefix = CommonConstants.CODE_PREFIX_CASE + caseOwnOrgCode + DateUtil.format(date, "yyyyMM"); + + int newCount = 1; + + // 根据前缀查询最大案件编码 + String maxno = caseEventMapper.getMaxCaseNo(prefix); + if (maxno != null) { + String strCount = StrUtil.removePrefix(maxno, prefix); + try { + int maxcount = Integer.parseUnsignedInt(strCount); + newCount = maxcount + 1; + } catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newCount = 1; + } + } + + String newCode = prefix + String.format("%04d", newCount); + + return newCode; + } + + /** + * 同步禁毒大数据平台上的案件信息 + * + * @return + */ + @Override + public Map>> syncCaseEventInfo(EntrustDataVo entrustDataVo, String caseId, Boolean isUpdate) { + +// List>>> caseEventList = null; +// List entrustDataVoList = dataModeChildVo.getList(); + +// for (int i = 0; i < entrustDataVoList.size(); i++) { + +// EntrustDataVo entrustDataVo = entrustDataVoList.get(i); + CaseEvent caseEvent = new CaseEvent(); + if (isUpdate) { + // 更新数据 + if (StrUtil.isBlank(caseId)) { + throw new RuntimeException("案件id不能为空"); + } + CaseEvent event = this.getById(caseId); + if (event == null) { + throw new RuntimeException(String.format("id为 %s 的案件找不到", caseId)); + } + caseEvent = dealDataToCaseEvent(entrustDataVo); + caseEvent.setId(caseId); + } else { + // 新插入数据 + caseEvent = dealDataToCaseEvent(entrustDataVo); + caseEvent.setId(IdWorker.get32UUID().toUpperCase()); + } + + Map>> entrustDataVoMap = new HashMap<>(); + if (this.saveOrUpdate(caseEvent)) { + List> caseEvidences = caseEvidenceService.syncCaseEvidenceInfo(entrustDataVo, caseEvent, isUpdate); + entrustDataVoMap.put(caseEvent.getId(), caseEvidences); + } else { + throw new RuntimeException("数据异常"); + } + + return entrustDataVoMap; + } + //检查案件是否能修改 + + @Override + public Boolean checkCaseIsEnableModify(String caseId) { + List entrustmentList = entrustmentService.list(Wrappers.query() + .eq("case_id", caseId)); + boolean ret = true; + for (Entrustment entrustment : entrustmentList) { + if (entrustment.getStatus() > 1) { + ret = false; + break; + } + } + return ret; + } + + public CaseEvent dealDataToCaseEvent(EntrustDataVo entrustDataVo) { + CaseEvent caseEvent = new CaseEvent(); + + LocalDateTime happenTime = null; + if (StrUtil.isNotBlank(entrustDataVo.getSubmitTime())) { + happenTime = LocalDateTime.parse(entrustDataVo.getSubmitTime(), + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } else { + throw new RuntimeException("案发时间未填"); + } + + caseEvent.setDataSources(1);//设置数据是来自何处 + caseEvent.setCaseName(entrustDataVo.getCaseName()); // 案件名称 +// caseEvent.setId(IdWorker.get32UUID().toUpperCase()); + caseEvent.setCaseOwnOrgId(entrustDataVo.getCreateUserDeptRegionCode()); // 案件所属机构 + + caseEvent.setHappenTime(happenTime); // 案件发生时间 + caseEvent.setCaseType("AJLB.100.06070000.06070100.06070102"); // 默认为贩卖毒品案 + caseEvent.setCaseBrief(entrustDataVo.getCaseRemark()); + caseEvent.setThirdPartySysNo(entrustDataVo.getCaseCode());//设置案件编号 + caseEvent.setComments("接口录入"); + + if (StrUtil.isBlank(caseEvent.getCaseNo())) { + // 如果没有提供案件编码, 生成一个 + Date happenTime1 = Date.from(caseEvent.getHappenTime().atZone(ZoneId.systemDefault()).toInstant()); + if (StrUtil.isNotBlank(caseEvent.getCaseOwnOrgId())) { + caseEvent.setCaseNo(this.getNewCaseCode(caseEvent.getCaseOwnOrgId(), happenTime1)); + } else if (StrUtil.isNotBlank(entrustDataVo.getEntrustOrganization())) { + SysOrg sysOrg = new SysOrg(); + System.out.println("---------------------------------------" + entrustDataVo.getEntrustOrganization()); + sysOrg.setName(entrustDataVo.getEntrustOrganization()); + R> listR = remoteOrgService.innerGetOrgList(sysOrg); + if (listR.getCode() == CommonConstants.SUCCESS) { + if (listR.getData().size() > 0) { + caseEvent.setCaseNo(this.getNewCaseCode(listR.getData().get(0).getOrgCode(), happenTime1)); + } else { + caseEvent.setCaseNo(this.getNewCaseCode(entrustDataVo.getCityCode(), happenTime1)); + } + + } + } + + // 如果还是案件编号还是空,则使用市的编码生成编号 + if (StrUtil.isBlank(caseEvent.getCaseNo())) { + caseEvent.setCaseNo(this.getNewCaseCode(entrustDataVo.getCityCode(), happenTime1)); + } + + +// if ( (caseEvent.getHappenTime() != null) && (StrUtil.isNotBlank(caseEvent.getCaseOwnOrgId()))) { +// SysOrg caseOwnOrg = null; +// R r = remoteOrgService.getById(caseEvent.getCaseOwnOrgId()); +// if (r.getCode() == CommonConstants.SUCCESS) { +// caseOwnOrg = (SysOrg) r.getData(); +// +// Date happenTime1 =Date.from(caseEvent.getHappenTime().atZone( ZoneId.systemDefault()).toInstant());; +// caseEvent.setCaseNo(this.getNewCaseCode(caseOwnOrg.getOrgCode(), happenTime1)); +// } +// else { +// throw new RuntimeException(String.format("没有找到 orgId 为 %s 的机构, 请确认案件所属机构(CaseOwnOrg)的正确性!", caseEvent.getCaseOwnOrgId())); +// } +// } + } + + return caseEvent; + } + + @Override + public boolean postAddObject(CaseEvent caseEvent) { + + if (StrUtil.isBlank(caseEvent.getCaseNo())) { + // 如果没有提供案件编码, 生成一个 + + if ((caseEvent.getHappenTime() != null) && (StrUtil.isNotBlank(caseEvent.getCaseOwnOrgId()))) { + SysOrg caseOwnOrg = null; + R r = remoteOrgService.getById(caseEvent.getCaseOwnOrgId()); + if (r.getCode() == CommonConstants.SUCCESS) { + caseOwnOrg = (SysOrg) r.getData(); + Date happenTime = Date.from(caseEvent.getHappenTime().atZone(ZoneId.systemDefault()).toInstant()); + ; + caseEvent.setCaseNo(this.getNewCaseCode(caseOwnOrg.getOrgCode(), happenTime)); + } else { + throw new RuntimeException(String.format("没有找到 orgId 为 %s 的机构, 请确认案件所属机构(CaseOwnOrg)的正确性!", caseEvent.getCaseOwnOrgId())); + } + } + } + caseEvent.setId(IdWorker.get32UUID().toUpperCase()); + return this.save(caseEvent); + } + + @Override + public CaseEvent deleteById(String id, DLPUser dlpUser) throws Exception { + + CaseEvent ce = this.getById(id); + if (ce == null) { + throw new RuntimeException(String.format("不存在 caseId 为 %s 的案件!", id)); + } + if (!dlpUser.isStaff()) { + // 不是鉴定中心员工, 检查一下案件所属机构与用户是不是同一机构 + if (StrUtil.isBlank(ce.getCaseOwnOrgId()) || (!StrUtil.equalsIgnoreCase(ce.getCaseOwnOrgId(), dlpUser.getOrgId()))) { + throw new RuntimeException(String.format("只能删除自己单位的案件!")); + } + } + List entrustmentList = entrustmentService.list(Wrappers.query() + .eq("case_id", id) + ); + for (Entrustment e : entrustmentList) { + //if (StrUtil.isNotBlank(e.getProcessInstanceId())) { + if (e.getStatus() > 1) { + throw new RuntimeException(String.format("这个案件的委托 %s 已经提交过, 不能删除!", e.getEntrustmentNo())); + } + } + //--- 到这里, 没有委托或者所有委托都没有提交过, 原则上可删除这个案件 --- + // 我们要按顺序删除案件相关的东西 + + for (Entrustment e : entrustmentList) { + // 删除全部检材 + List eimList = entrustmentIdentificationMaterialService.list(Wrappers.query().eq("entrustment_id", e.getId())); + for (EntrustmentIdentificationMaterial eim : eimList) { + // 删除检材的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + eim.getEntrustmentId() + "/" + eim.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + eim.getEntrustmentId() + "/" + eim.getId() + "/" + attName); + } + // 删除检材本身 + entrustmentIdentificationMaterialService.removeById(eim.getId()); + } + + // 删除委托的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + e.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + e.getId() + "/" + attName); + } + + // 删除委托本身 + entrustmentService.removeById(e.getId()); + } + + // 删除全部物证 + List evidenceList = caseEvidenceService.list(Wrappers.query().eq("case_id", id)); + for (CaseEvidence evidence : evidenceList) { + // 删除物证的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/" + evidence.getCaseId() + "/" + evidence.getId()); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/" + evidence.getCaseId() + "/" + evidence.getId() + "/" + attName); + } + // 删除物证本身 + caseEvidenceService.removeById(evidence.getId()); + } + // 删除案件的全部附件 + List attList = ossFile.fileList(OSSDirectoryConstants.CASE_DIRECTORY + "/" + id); + for (String attName : attList) { + ossFile.fileDelete(OSSDirectoryConstants.CASE_DIRECTORY + "/" + id + "/" + attName); + } + if (this.removeById(id)) { + return ce; + } else { + return null; + } + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEvidenceServiceImpl.java new file mode 100644 index 0000000..d644b05 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CaseEvidenceServiceImpl.java @@ -0,0 +1,176 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import digital.laboratory.platform.entrustment.mapper.CaseEvidenceMapper; +import digital.laboratory.platform.othersys.utils.ConvertUtils; +import digital.laboratory.platform.othersys.vo.EntrustDataVo; +import digital.laboratory.platform.othersys.vo.MaterialVo; +import digital.laboratory.platform.entrustment.service.CaseEvidenceService; +import digital.laboratory.platform.sys.feign.RemoteDictionaryService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 与案件相关的物证信息服务实现类 + * + * @author Zhang Xiaolong created at 2022-04-20 + * @describe 与案件相关的物证信息服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CaseEvidenceServiceImpl extends ServiceImpl implements CaseEvidenceService { + private final CaseEvidenceMapper caseEvidenceMapper; + + private final RemoteDictionaryService remoteDictionaryService; + /** + * 用于标识某个案件的物证。 + * 顺序号使用 6 位的原因, 是现勘系统的物证编码结构就是这样。有可能这 6 位编码中有不同的用途, 并不完全是顺序号。 + * 但是我们不得而知。 + * 如果该编码由我们系统自己生成, 则使用 6 位顺序号。 + * ``` + * W <案件编号后 22 位> <顺序号 6 位> + * 例如: + * W 5201010400002020030002 000001 + * 合计 29 位 + * ``` + * 如果有现勘系统, 则使用现勘系统的物证编号。 + * 如果有案事件系统, 则使用案事件系统的物证编号。 + * + * 作为兼容性考虑, 如果案件编码不足 23 位, 取 除掉第 1 个字符之后的, 即去掉 "A" 字符剩下的 + * + * @param caseNo + * @return + */ + @Override + public String getNewEvidenceCode(String caseNo) { + String prefix = CommonConstants.CODE_PREFIX_EVIDENCE + StrUtil.removePrefixIgnoreCase(caseNo, CommonConstants.CODE_PREFIX_CASE); + + int newCount = 1; + + // 根据前缀查询最大物证编码 + String maxno = caseEvidenceMapper.getMaxEvidenceNo(prefix); + if (maxno != null) { + String strCount = StrUtil.removePrefix(maxno, prefix); + try + { + int maxcount = Integer.parseUnsignedInt(strCount); + newCount = maxcount + 1; + } + catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newCount = 1; + } + } + + String newCode = prefix+ String.format("%06d", newCount); + + return newCode; + } + + @Override + public long countByCaseId(String caseId) { + return baseMapper.selectCount(Wrappers.query() + .eq(StrUtil.isNotBlank(caseId), "case_id", caseId) + ); + + } + + /** + * 同步禁毒数据平台上的物证 + * + * @param + * @param isUpdate 案件更新删除对应的物质,重新插入 + * @return + */ + @Override + public List> syncCaseEvidenceInfo(EntrustDataVo entrustDataVo, CaseEvent caseEvent, Boolean isUpdate) { + // 判断当前的操作是更新还是插入 + if (isUpdate) { + if (StrUtil.isBlank(caseEvent.getId())) { + throw new RuntimeException("案件id 不能为空"); + } + this.remove(Wrappers.query().eq("case_id", caseEvent.getId())); + } + + List> caseEvidenceList = new ArrayList<>(); + + // 获取物证列表 + List materialList = entrustDataVo.getMaterialList(); + for (int j = 0; j < materialList.size(); j++) { + MaterialVo materialVo = materialList.get(j); + + CaseEvidence caseEvidence = new CaseEvidence(); + caseEvidence.setDataSources(1);//设置数据是来自何处 + caseEvidence.setId(IdWorker.get32UUID().toUpperCase()); + caseEvidence.setCaseId(caseEvent.getId()); + caseEvidence.setName(materialVo.getName()); + caseEvidence.setEvidenceNo(this.getNewEvidenceCode(caseEvent.getCaseNo())); + // 物证分类 + //caseEvidence.setType(getDictionaryInfo(materialVo.getShapeType(), "WZFL.1.6")); + caseEvidence.setType(getDictionaryInfo(materialVo.getShapeType(), "6f4b55454a3ccde502493e04f63eed32"));//对应常用分类 + // 颜色 + caseEvidence.setColor(materialVo.getColorType()); + // 承载物 + caseEvidence.setFundName(materialVo.getPackageType()); // 名称 + caseEvidence.setFundQuantity(1); // 数量 + caseEvidence.setFundUnit(materialVo.getPackageType().substring(materialVo.getPackageType().length()-1)); // 承载物单位 + // 物证的重量和单位 + caseEvidence.setQuantity(materialVo.getAmount()); + + caseEvidence.setUnit(ConvertUtils.getCaseEvidenceUnit(StringUtils.isBlank(materialVo.getUnit()) ? "9999-" + materialVo.getEntrustId() : materialVo.getUnit())); + + // 存储方法 + caseEvidence.setStorageMethod("常规"); + // 物证性状 + //caseEvidence.setForm(getDictionaryInfo(materialVo.getShapeType(), "wzxz.11")); + caseEvidence.setForm(getDictionaryInfo(materialVo.getShapeType(), "cdb0ca92f0d9c8f6af12457f8f924f21")); + // 包装情况 + //caseEvidence.setPack(getDictionaryInfo(materialVo.getPackageType(), "BZFL.08")); + caseEvidence.setPack(getDictionaryInfo(materialVo.getPackageType(), "56e4dda4300f99ae147c0c72d03f9488")); + // 来源 +// caseEvidence.setSource(getDictionaryInfo( +// ConvertUtils.getCaseEvidenceSource(entrustDataVo.getMaterialType()), +// "WZLY.7")); + caseEvidence.setSource(getDictionaryInfo( + ConvertUtils.getCaseEvidenceSource(entrustDataVo.getMaterialType()), + "d01ea65959ad16b32dc7e857cd1f6026")); + + Map res = new HashMap<>(); + if (this.save(caseEvidence)) { + res.put(materialVo.getIndex(), caseEvidence.getId()); + caseEvidenceList.add(res); + } else { + throw new RuntimeException("物证同步出差"); + } + } + return caseEvidenceList; + } + + // 远程调用查询字典中的id值,比如说获取包装类中的某一个包装的id + public String getDictionaryInfo(String label, String id) { + String result = new String(); + R r = remoteDictionaryService.queryDictionaryVO(label, id); + if (r.getCode() == CommonConstants.SUCCESS) { + result = (String) r.getData(); + return result; + } else { + return null; + } + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/DelivererServiceImpl.javax b/src/main/java/digital/laboratory/platform/entrustment/service/impl/DelivererServiceImpl.javax new file mode 100644 index 0000000..2c3d1b5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/DelivererServiceImpl.javax @@ -0,0 +1,60 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.Deliverer; +import digital.laboratory.platform.entrustment.mapper.DelivererMapper; +import digital.laboratory.platform.entrustment.service.DelivererService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 送检员服务实现类 + * + * @author Zhang Xiaolong created at 2022-08-16 + * @describe 送检员 服务实现类 + */ +@Service +public class DelivererServiceImpl extends ServiceImpl implements DelivererService { + /** + * 更新送检员 + * 以送检员的名字为关键字, 如果同名送检员存在, 更新其他属性; 如果同名送检员不存在, 则新增数据库记录 + * @param deliverer + */ + @Override + public boolean renew(Deliverer deliverer) { + if (StrUtil.isBlank(deliverer.getName())) { + return false; + } + List list = baseMapper.selectList(Wrappers.query() + .eq("owner_user_id", deliverer.getOwnerUserId()) + .eq("name", deliverer.getName()) + ); + + if (list.size() > 0) { + //== 存在同名送检员, 更新之 + deliverer.setId(list.get(0).getId()); + baseMapper.update(deliverer, Wrappers.query() + .eq("owner_user_id", deliverer.getOwnerUserId()) + .eq("name", deliverer.getName()) + ); + } + else { + deliverer.setId(IdWorker.get32UUID().toUpperCase()); + baseMapper.insert(deliverer); + } + return true; + } + + @Override + public Deliverer getByName(String name, String ownerUserId) { + Deliverer deliverer = baseMapper.selectOne(Wrappers.query() + .eq("owner_user_id", ownerUserId) + .eq("name", name) + ); + return deliverer; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java new file mode 100644 index 0000000..adb106f --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentIdentificationMaterialServiceImpl.java @@ -0,0 +1,1603 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.BusinessCodeUtils; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.feign.RemoteTemplate2htmlService; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.common.security.util.SecurityUtils; +import digital.laboratory.platform.entrustment.dto.PrintDTO; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.mapper.EntrustmentIdentificationMaterialMapper; +import digital.laboratory.platform.entrustment.mapper.EntrustmentMapper; +import digital.laboratory.platform.othersys.utils.ConvertUtils; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; +import digital.laboratory.platform.entrustment.vo.SampleBoxVO; +import digital.laboratory.platform.sys.entity.BalanceUseRecord; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.sys.entity.SysUser; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import digital.laboratory.platform.sys.feign.RemoteEquipmentService; +import digital.laboratory.platform.sys.feign.RemoteSampleService; +import digital.laboratory.platform.sys.feign.RemoteUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static java.util.Comparator.comparing; + +/** + * 检材信息服务实现类 + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 检材信息服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class EntrustmentIdentificationMaterialServiceImpl extends ServiceImpl implements EntrustmentIdentificationMaterialService { + private final EntrustmentIdentificationMaterialMapper entrustmentIdentificationMaterialMapper; + @Resource + private EntrustmentService entrustmentService; + @Resource + private SampleBoxService sampleBoxService; + @Resource + private RemoteUserService remoteUserService; + + @Resource + private SampleService sampleService; + + @Resource + private CaseEvidenceService caseEvidenceService; + + @Resource + private OssFile ossFile; + + @Resource + private TakerService takerService; + + @Resource + private RemoteEquipmentService remoteEquipmentService; + + @Resource + private CaseEventService caseEventService; + + @Resource + private RemoteTemplate2htmlService remoteTemplate2htmlService; + + @Resource + private RemoteSampleService remoteSampleService; + + @Resource + private EntrustmentMapper entrustmentMapper; + + @Resource + private SynchronizeDataService synchronizeDataService; + + @Resource + private SynchronizeMaterialVoService synchronizeMaterialVoService; + + /** + * ## 检材编码 + * ``` + * JC <物证编号后 28 位> <顺序号4位> + * 例如: + * JC 5201010400002020030002 0000001 0001 + * 合计 34 位 + * ``` + * 一份物证, 有可能会多次送检。每次送检的时候, 在原来的顺序号上递增。 + * 定义这个编号的时候有点纠结, 有两个方向的关联: 在案件号上扩充、在物证号上扩充。我们选择在物证号上扩充。 + * 检材编码的长度不一定刚好是 34 位!我们取“物证编号后 28 位”时, 其实是去掉物证编码前第1个字符后剩下的部分。 + * 如果物证编码不是 29 位, 那么取到的就不是 28 位, 而是物证编码长度减1位。 + * + * @param evidenceNo + * @return + */ + @Override + public String getNewIdentificationMaterialNo(String evidenceNo) { + String prefix = CommonConstants.CODE_PREFIX_IDENTIFICATION_MATERIAL + StrUtil.removePrefixIgnoreCase(evidenceNo, CommonConstants.CODE_PREFIX_EVIDENCE); + + int newCount = 1; + String maxIdentificationMaterialNo = prefix + "0000"; // 前缀 + 4个零 + List imList = entrustmentIdentificationMaterialMapper.selectList(Wrappers.query() + .likeRight("im_no", prefix) + ); + for (EntrustmentIdentificationMaterial eim : imList) { + String pureIdentificationMaterialNo = eim.getImNo(); + if (StrUtil.isNotBlank(pureIdentificationMaterialNo)) { + pureIdentificationMaterialNo = StrUtil.removeSuffixIgnoreCase(pureIdentificationMaterialNo, "A"); + pureIdentificationMaterialNo = StrUtil.removeSuffixIgnoreCase(pureIdentificationMaterialNo, "B"); + if (StrUtil.compareIgnoreCase(maxIdentificationMaterialNo, pureIdentificationMaterialNo, true) < 0) { + maxIdentificationMaterialNo = pureIdentificationMaterialNo; // 找最大的检材号 + } + } + } + + String newIdentificationMaterialNo = BusinessCodeUtils.StringCodeInc(maxIdentificationMaterialNo); + return newIdentificationMaterialNo; + + // // 根据前缀查询最大物证编码 + // String maxno = entrustmentIdentificationMaterialMapper.getMaxIdentificationMaterialNo(prefix); + // if (maxno != null) { + // String strCount = StrUtil.removePrefix(maxno, prefix); + // try + // { + // int maxcount = Integer.parseUnsignedInt(strCount); + // newCount = maxcount + 1; + // } + // catch (NumberFormatException e) { + // // 如果后缀有非数字, 则无视之, 重头编码 + // newCount = 1; + // } + // } + // + // String newCode = prefix+ String.format("%04d", newCount); + // + // return newCode; + } + + /** + * 创建新的检材 + * 根据参数中的物证生成新的检材, 新创建的检材将继承该物证的部分属性 + * + * @param ce + * @return + */ + @Override + public EntrustmentIdentificationMaterial createNewIdentificationMaterial(CaseEvidence ce) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setImNo(this.getNewIdentificationMaterialNo(ce.getEvidenceNo())); + im.setEvidenceId(ce.getId()); + im.setCaseId(ce.getCaseId()); + //im.setEntrustmentId(); // 现在还不知道委托的情况 + im.setName(ce.getName() + "的检材"); + im.setType(ce.getType()); + im.setColor(ce.getColor()); + im.setForm(ce.getForm()); + im.setQuantity(ce.getQuantity()); // ?? + im.setUnit(ce.getUnit()); + im.setAdditionalProperties(ce.getAdditionalProperties()); + + im.setPersonName(ce.getPersonName()); + im.setPersonCert(ce.getPersonCert()); + im.setPersonId(ce.getPersonId()); + im.setPersonGender(ce.getPersonGender()); + im.setPersonNationality(ce.getPersonNationality()); + im.setPersonNation(ce.getPersonNation()); + im.setPersonAddress(ce.getPersonAddress()); + im.setPersonAge(ce.getPersonAge()); + + return im; + } + + @Override + public long countByEntrustmentId(String entrustmentId) { + return baseMapper.selectCount(Wrappers.query() + .eq(StrUtil.isNotBlank(entrustmentId), "entrustment_id", entrustmentId) + ); + + } + + @Override + public List getEntrustmentIdentificationMaterialVOList(QueryWrapper qw) { + return baseMapper.getEntrustmentIdentificationMaterialVOList(qw); + } + + @Override + public int setEntrustmentIdentificationMaterialStatusByEntrustment(EntrustmentIdentificationMaterial im, String EntrustmentId) { + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("entrustment_id", EntrustmentId); + //updateWrapper.set("status", status); + + return baseMapper.update(im, updateWrapper); + } + + //修改受理模块,调整盒子的功能,增加以下3个接口 08-03 + @Override + public List getQueryListByBoxID(String boxId, String boxType) { + List retList = new ArrayList<>(); + if (boxType.equals("A")) { + retList = this.list(Wrappers.query() + .eq("sample1_box_id", boxId)); + } else { + retList = this.list(Wrappers.query() + .eq("sample2_box_id", boxId)); + } + return retList; + } + + @Override + public Boolean delSampleBoxInfo(String boxId, String sampleNo, String boxType) { + EntrustmentIdentificationMaterial sourceMaterial = null; + + if (boxType.equals("A")) { + sourceMaterial = this.getBaseMapper().selectOne(Wrappers.query() + .eq("sample1_box_id", boxId) + .eq("sample1_no", sampleNo)); + if (sourceMaterial != null) { + Entrustment entrustment = entrustmentService.getById(sourceMaterial.getEntrustmentId()); + if (entrustment.getStatus() >= EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()) { + Sample sample = new Sample(); + sample.setIdentificationMaterialId(sourceMaterial.getId()); + sample.setBoxId(boxId); + sample.setSampleType(boxType); + remoteSampleService.updateBoxId(sample, -1); + } + sourceMaterial.setSample1BoxId(""); + return this.updateById(sourceMaterial); + } + } else { + sourceMaterial = this.getBaseMapper().selectOne(Wrappers.query() + .eq("sample2_box_id", boxId) + .eq("sample2_no", sampleNo)); + if (sourceMaterial != null) { + Entrustment entrustment = entrustmentService.getById(sourceMaterial.getEntrustmentId()); + if (entrustment.getStatus() >= EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()) { + Sample sample = new Sample(); + sample.setIdentificationMaterialId(sourceMaterial.getId()); + sample.setBoxId(boxId); + sample.setSampleType(boxType); + remoteSampleService.updateBoxId(sample, -1); + } + sourceMaterial.setSample2BoxId(""); + return this.updateById(sourceMaterial); + } + } + + + if (sourceMaterial == null) { + System.out.println("没有找到ID为:" + sampleNo + "的样本"); + return false; + } else return false; + } + + @Override + public SampleBoxVO getBoxCountInfo(String boxId) { + List retList = + this.list(Wrappers.query() + .eq("sample1_box_id", boxId) + .or() + .eq("sample2_box_id", boxId)); + SampleBox sampleBox = sampleBoxService.getById(boxId); + List sampleList = new ArrayList<>(); + SampleBoxVO retData = new SampleBoxVO(sampleBox, sampleList); + retData.setBoxSampleCount(retList.size()); + return retData; + } + + @Override + @Transactional + public List putSampleToBox(String boxId, List sampleNoList, String boxType) { + + if (!boxType.equals("A") && !boxType.equals("B")) { + throw new RuntimeException(String.format("传入的包装类型只能是A或者B")); + } + List materials = new ArrayList<>(); + //现在支持批量加入包装 + for (String sampleNo : sampleNoList) { + Sample sample = new Sample(); + if (boxType.equals("A")) { + EntrustmentIdentificationMaterial material = this.getBaseMapper().selectOne(Wrappers.query() + .eq("sample1_no", sampleNo)); + if (material != null) { + if (!StrUtil.isNotBlank(material.getAcceptNo())) { + throw new RuntimeException(String.format("该检材还未受理,请先受理检材后再进行添加!")); + } + material.setSample1BoxId(boxId); + materials.add(material); + } + } else { + EntrustmentIdentificationMaterial material = this.getBaseMapper().selectOne(Wrappers.query() + .eq("sample2_no", sampleNo)); + if (material != null) { + if (!StrUtil.isNotBlank(material.getAcceptNo())) { + throw new RuntimeException(String.format("该检材还未受理,请先受理检材后再进行添加!")); + } + material.setSample2BoxId(boxId); + materials.add(material); + } + } + } + + Entrustment entrustment = entrustmentService.getById(materials.get(0).getEntrustmentId()); + //判断是否受理了,如果受理完成之后再加入包装袋,则需在操作检材流转系统,更新boxID + if (materials != null && materials.size() > 0) { + + if (entrustment.getStatus() >= EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()) { + for (EntrustmentIdentificationMaterial material : materials) { + Sample sample = new Sample(); + sample.setIdentificationMaterialId(material.getId()); + sample.setBoxId(boxId); + sample.setSampleType(boxType); + remoteSampleService.updateBoxId(sample, 1); + } + } + } + + List list = this.list(new LambdaQueryWrapper() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId()) + .eq(boxType.equals("A"), EntrustmentIdentificationMaterial::getSample1BoxId, boxId) + .eq(boxType.equals("B"), EntrustmentIdentificationMaterial::getSample2BoxId, boxId)); + + if (list != null && list.size() > 0) { + materials.addAll(list); + } + return this.updateBatchById(materials) ? materials : null; + } + + @Override + public String getUserNameByEntrustUserID(String userId) { + R retData = remoteUserService.innerGetById(userId); + if (retData.getData() != null) { + return retData.getData().getName(); + } else { + return "用户不存在"; + } + } + + //获取案前检验的受理编号 + @Override + public String getNewMaterialAcceptNoForBeforeCase(String entrustBeforeAcceptNo) { + String maxMaterialAcceptNo = "";//案前检验最大的检材受理编号 + String first_part = entrustBeforeAcceptNo;//将案前委托的委托受理编号作为检材的第一部分 + if (!StringUtils.isNotBlank(entrustBeforeAcceptNo)) { + //委托没受理号,可能是新的 + String newEntrustAcceptNo = entrustmentService.getNewEntrustAcceptNoForBeforeCase(); + first_part = newEntrustAcceptNo; + //maxMaterialAcceptNo=baseMapper.getMaxMaterialAcceptNo(newEntrustAcceptNo);//根据委托的受理编号查出最大的检材编号 + } + List mList = this.list(Wrappers.query() + .like("accept_no", first_part)); + //有受理编号的情况下,看看是否用这个受理编号受理过,如果没有就是1号 + if (mList.size() > 0) { + List maxList = mList.stream().sorted(comparing(EntrustmentIdentificationMaterial::getAcceptNo, (x, y) -> { + int x1 = Integer.parseInt(x.substring(x.lastIndexOf("-") + 1)); + int y1 = Integer.parseInt(y.substring(y.lastIndexOf("-") + 1)); + return x1 < y1 ? 1 : -1; + })).collect(Collectors.toList()); + maxMaterialAcceptNo = maxList.get(0).getAcceptNo(); + } + int materialSeqNo = 1; + if (StringUtils.isNotBlank(maxMaterialAcceptNo)) { + //2023-0026-1 + String materialSeqNoStr = maxMaterialAcceptNo.substring(maxMaterialAcceptNo.lastIndexOf("-") + 1); + materialSeqNo = Integer.parseInt(materialSeqNoStr) + 1; + return first_part + "-" + materialSeqNo; + } else { + + return first_part + "-" + materialSeqNo; + } + } + + /** + * 用0填充编号 + * + * @param sourceNumber + * @return + */ + private String fillByZero(int sourceNumber) { + if (sourceNumber < 10) { + return "000" + sourceNumber; + } else if (sourceNumber < 100) { + return "00" + sourceNumber; + } else if (sourceNumber < 1000) { + return "0" + sourceNumber; + } else { + return sourceNumber + ""; + } + } + + /** + * 检查编号是否被检材占用,如果被占用,返回可用的新编号,如果没被占用,返回传入编号 + * + * @param _acceptNo + * @return + */ + public String checkAcceptNoIsUse(String _acceptNo) { + List materialList = this.list(Wrappers.lambdaQuery() + .like(EntrustmentIdentificationMaterial::getAcceptNo, _acceptNo)); + if (materialList.size() > 0) { + //如果被占用,则编号自动+1 + String[] acceptArr = _acceptNo.split("-"); + int acceptSeq = Integer.parseInt(acceptArr[1]) + 1; + String acceptSeqStr = fillByZero(acceptSeq); + String newAcceptNo = acceptArr[0] + "-" + acceptSeqStr; + return checkAcceptNoIsUse(newAcceptNo); + } + return _acceptNo; + } + + //同步大数据平台已受理编号的时候,需要设置检材的受理编号,因此这里专门写一个方法来处理大数据平台的检材受理编号 + @Override + public String getThirdSysMaterialAcceptNo(String entrustAcceptNo) { + //查看这个受理编号是否被使用 + List entrustmentList = entrustmentService.list(Wrappers.lambdaQuery().eq(Entrustment::getAcceptNo, entrustAcceptNo)); + if (entrustmentList.size() > 0) { + log.info("受理编号:{} 已经被使用,程序终止", entrustAcceptNo); + throw new RuntimeException("受理编号:" + entrustAcceptNo + "已经被使用,程序终止"); + } + List mList = this.list(Wrappers.query() + .like("accept_no", entrustAcceptNo)); + int maxMaterialAcceptNoSeq = 1; + if (mList.size() > 0) { + //取出最大编号 + List maxList = mList.stream().sorted(comparing(EntrustmentIdentificationMaterial::getAcceptNo, (x, y) -> { + int x1 = Integer.parseInt(x.substring(x.lastIndexOf("-") + 1)); + int y1 = Integer.parseInt(y.substring(y.lastIndexOf("-") + 1)); + return x1 < y1 ? 1 : -1; + })).collect(Collectors.toList()); + String maxMaterialAcceptNo = maxList.get(0).getAcceptNo(); + String materialSeqNoStr = maxMaterialAcceptNo.substring(maxMaterialAcceptNo.lastIndexOf("-") + 1); + maxMaterialAcceptNoSeq = Integer.parseInt(materialSeqNoStr) + 1; + } + String newMaterialAcceptNo = entrustAcceptNo + "-" + maxMaterialAcceptNoSeq; + log.info("同步数据时,受理编号{}新生成的检材编号{}", entrustAcceptNo, newMaterialAcceptNo); + return newMaterialAcceptNo; + } + + //获取正常委托的受理编号 + @Override + public String getNewMaterialAcceptNo(String entrustAcceptNo) { + String maxMaterialAcceptNo = ""; + String first_part = entrustAcceptNo; + //如果传入受理编号为空,只有同步数据使用这个方法时传入的受理编号才可能不为空 + if (!StringUtils.isNotBlank(entrustAcceptNo)) { + //委托没受理号,可能是新的 + String newEntrustAcceptNo = entrustmentService.getNewAcceptNo(); + //检查这个编号是不是有 只受理了部分检材,而占据着这个编号,如果我们就需要往上加,直到没有使用的情况????? + String enableUseAcceptNo = checkAcceptNoIsUse(newEntrustAcceptNo); + first_part = enableUseAcceptNo; + //maxMaterialAcceptNo=baseMapper.getMaxMaterialAcceptNo(newEntrustAcceptNo);//根据委托的受理编号查出最大的检材编号 + } + + //这里需要判断委托下是否有检材已经被受理,如果有则 + List mList = this.list(Wrappers.query() + .like("accept_no", first_part)); + //有受理编号的情况下,看看是否用这个受理编号受理过,如果没有就是1号 + if (mList.size() > 0) { + List maxList = mList.stream().sorted(comparing(EntrustmentIdentificationMaterial::getAcceptNo, (x, y) -> { + int x1 = Integer.parseInt(x.substring(x.lastIndexOf("-") + 1)); + int y1 = Integer.parseInt(y.substring(y.lastIndexOf("-") + 1)); + return x1 < y1 ? 1 : -1; + })).collect(Collectors.toList()); + maxMaterialAcceptNo = maxList.get(0).getAcceptNo(); + } + int materialSeqNo = 1; + if (StringUtils.isNotBlank(maxMaterialAcceptNo)) { + //2023-0026-1 + String materialSeqNoStr = maxMaterialAcceptNo.substring(maxMaterialAcceptNo.lastIndexOf("-") + 1); + materialSeqNo = Integer.parseInt(materialSeqNoStr) + 1; + return first_part + "-" + materialSeqNo; + } else { + + return first_part + "-" + materialSeqNo; + } + // + } + + @Override + public EntrustmentIdentificationMaterial bizCheck_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser) { + if (opCode == null) { + throw new RuntimeException(String.format("审核结果必须提供 opCode")); + } + + // 检查委托原来的状态 + EntrustmentIdentificationMaterial im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) { + throw new RuntimeException("委托不在待审核状态"); + } + + if (!dlpUser.getId().equals(entrustment.getCheckClaimUser())) { + String uName = this.getUserNameByEntrustUserID(entrustment.getCheckClaimUser()); + throw new RuntimeException(String.format("委托的审核任务是由其他人认领的。认领用户是: %s", uName)); + } + + //------------------- + // 更新数据库表数据 + //------------------- + im.setCheckPassed(opCode); + im.setCheckTime(LocalDateTime.now()); + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", im.getId()); // 查询条件是 id 相等 + + updateWrapper.set("check_passed", im.getCheckPassed()); + updateWrapper.set("check_time", im.getCheckTime()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存检材信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + return im; + + } + + @Override + public EntrustmentIdentificationMaterial bizApprove_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser) { + + if (opCode == null) { + throw new RuntimeException(String.format("审批结果必须提供 opCode")); + } + + // 检查委托原来的状态 + EntrustmentIdentificationMaterial im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) { + throw new RuntimeException("委托不在待审批状态"); + } + + if (!dlpUser.getId().equals(entrustment.getApproveClaimUser())) { + throw new RuntimeException(String.format("委托的审批任务是由其他人认领的。认领用户是: %s", entrustment.getApproveClaimUser())); + } + + + //------------------- + // 更新数据库表数据 + //------------------- + im.setApprovePassed(opCode); + im.setApproveTime(LocalDateTime.now()); + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", im.getId()); // 查询条件是 id 相等 + + updateWrapper.set("approve_passed", im.getApprovePassed()); + updateWrapper.set("approve_time", im.getApproveTime()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存检材信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + + return im; + } + + @Override + public EntrustmentIdentificationMaterial bizAccept_Save(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser) { + + // 检查委托原来的状态 + EntrustmentIdentificationMaterial im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + + if ((im.getAcceptPassed() != null) && (im.getAcceptPassed() != 0)) { + throw new RuntimeException(String.format("检材只能在未受理状态才能保存")); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) { + throw new RuntimeException("委托不在正在受理状态"); + } + + // if (!dlpUser.getId().equals(entrustment.getAcceptClaimUser())) { + // throw new RuntimeException(String.format("委托的受理任务是由其他人认领的。认领用户是: %s", entrustment.getAcceptClaimUser())); + // } + + + //------------------- + // 更新数据库表数据 + //------------------- + im.setFundQuantity(identificationMaterial.getFundQuantity()); + im.setQuantity(identificationMaterial.getQuantity()); + + im.setProvidedSample1No(identificationMaterial.getProvidedSample1No()); + im.setProvidedSample1FundQuantity(identificationMaterial.getProvidedSample1FundQuantity()); + im.setProvidedSample1Quantity(identificationMaterial.getProvidedSample1Quantity()); + + im.setProvidedSample2Present(identificationMaterial.getProvidedSample2Present()); + im.setProvidedSample2No(identificationMaterial.getProvidedSample2No()); + im.setProvidedSample2FundQuantity(identificationMaterial.getProvidedSample2FundQuantity()); + im.setProvidedSample2Quantity(identificationMaterial.getProvidedSample2Quantity()); + + im.setSplitedSample(identificationMaterial.getSplitedSample()); + + // 如果之前没有生成过样本编号, 现在填写样本重量了, 那么就生成样本编号 + //if ((identificationMaterial.getSample1Present() != null) && identificationMaterial.getSample1Present()) { + if (StrUtil.isBlank(identificationMaterial.getProvidedSample1No())) { + im.setProvidedSample1No(sampleService.getNewProvidedSampleNo(im.getImNo(), 1)); + } + //} + if ((identificationMaterial.getProvidedSample2Present() != null) && identificationMaterial.getProvidedSample2Present()) { + if (StrUtil.isBlank(identificationMaterial.getProvidedSample2No())) { + im.setProvidedSample2No(sampleService.getNewProvidedSampleNo(im.getImNo(), 2)); + } + } + + im.setSample1No(identificationMaterial.getSample1No()); + im.setSample1FundQuantity(identificationMaterial.getSample1FundQuantity()); + im.setSample1Quantity(identificationMaterial.getSample1Quantity()); + im.setSample1BoxId(identificationMaterial.getSample1BoxId()); + + im.setSample2Present(identificationMaterial.getSample2Present()); + im.setSample2No(identificationMaterial.getSample2No()); + im.setSample2FundQuantity(identificationMaterial.getSample2FundQuantity()); + im.setSample2Quantity(identificationMaterial.getSample2Quantity()); + im.setSample2BoxId(identificationMaterial.getSample2BoxId()); + + // 如果之前没有生成过样本编号, 现在填写样本重量了, 那么就生成样本编号 + //if ((identificationMaterial.getSample1Present() != null) && identificationMaterial.getSample1Present()) { + if (StrUtil.isBlank(identificationMaterial.getSample1No())) { + im.setSample1No(sampleService.getNewSampleNo(im.getImNo(), 1)); + } + //} + if ((identificationMaterial.getSample2Present() != null) && identificationMaterial.getSample2Present()) { + if (StrUtil.isBlank(identificationMaterial.getSample2No())) { + im.setSample2No(sampleService.getNewSampleNo(im.getImNo(), 2)); + } + } + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", im.getId()); // 查询条件是 id 相等 + + updateWrapper.set("fund_quantity", im.getFundQuantity()); + updateWrapper.set("quantity", im.getQuantity()); + + updateWrapper.set("provided_sample1_no", im.getProvidedSample1No()); + updateWrapper.set("provided_sample1_fund_quantity", im.getProvidedSample1FundQuantity()); + updateWrapper.set("provided_sample1_quantity", im.getProvidedSample1Quantity()); + + updateWrapper.set("provided_sample2_present", im.getProvidedSample2Present()); + updateWrapper.set("provided_sample2_no", im.getProvidedSample2No()); + updateWrapper.set("provided_sample2_fund_quantity", im.getProvidedSample2FundQuantity()); + updateWrapper.set("provided_sample2_quantity", im.getProvidedSample2Quantity()); + + updateWrapper.set("splited_sample", im.getSplitedSample()); + + //updateWrapper.set("sample1_present", im.getSample1Present()); + updateWrapper.set("sample1_no", im.getSample1No()); + updateWrapper.set("sample1_fund_quantity", im.getSample1FundQuantity()); + updateWrapper.set("sample1_quantity", im.getSample1Quantity()); + updateWrapper.set("sample1_box_id", im.getSample1BoxId()); + updateWrapper.set("sample2_present", im.getSample2Present()); + updateWrapper.set("sample2_no", im.getSample2No()); + updateWrapper.set("sample2_fund_quantity", im.getSample2FundQuantity()); + updateWrapper.set("sample2_quantity", im.getSample2Quantity()); + updateWrapper.set("sample2_box_id", im.getSample2BoxId()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存检材信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + return im; + } + + @Override + public EntrustmentIdentificationMaterial bizAccept_Apply(EntrustmentIdentificationMaterial identificationMaterial, Integer opCode, DLPUser dlpUser) { + if (opCode == null) { + throw new RuntimeException(String.format("受理结果必须提供 opCode")); + } + + // 检查委托原来的状态 + EntrustmentIdentificationMaterial im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) { + throw new RuntimeException("委托不在正在受理状态"); + } + + //------------------- + // 更新数据库表数据 + //------------------- + if (opCode == 1) { + // 受理通过, 修改属性 + String entrustAcceptNo = com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(entrustment.getAcceptNo()) ? entrustment.getAcceptNo() : ""; + String acceptNo = ""; + List materialList = this.list(Wrappers.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, im.getEntrustmentId()) + .isNotNull(EntrustmentIdentificationMaterial::getAcceptNo)); + //2024-3-26 修改:我们已经不需要在受理检材时生成受理编号,我们这时会生成受理顺序号,检材编号到最后受理完成的时候再生成! + if (entrustment.getDataSources() != 1) { + if (materialList.size() > 0) { + //说明该委托下,已经有受理的检材了,我们需要取出最大的那个编号生成新的编号 + entrustAcceptNo = materialList.get(0).getAcceptNo(); + entrustAcceptNo = entrustAcceptNo.substring(0, entrustAcceptNo.lastIndexOf("-")); + log.info("该检材对应的委托下,已经有检材被受理,我们根据已受理的检材读取出的受理编号是{}", entrustAcceptNo); + } + acceptNo = this.getNewMaterialAcceptNo(entrustAcceptNo); + } else { + if (materialList.size() > 0) { + if (materialList.size() + 1 != im.getOrderNo()) { + throw new RuntimeException(String.format("请按照当前页面检材的顺序进行受理,因为这会涉及到同步到大数据平台中的检材顺序!")); + } else { + acceptNo = String.valueOf(materialList.size() + 1); + } + } else { + acceptNo = "1"; + } + } + //设置受理编号 + im.setAcceptNo(acceptNo); + im.setProvidedSample1No(identificationMaterial.getProvidedSample1No()); + im.setProvidedSample1FundQuantity(identificationMaterial.getProvidedSample1FundQuantity()); + im.setProvidedSample1Quantity(identificationMaterial.getProvidedSample1Quantity()); + + im.setProvidedSample2Present(identificationMaterial.getProvidedSample2Present()); + im.setProvidedSample2No(identificationMaterial.getProvidedSample2No()); + im.setProvidedSample2FundQuantity(identificationMaterial.getProvidedSample2FundQuantity()); + im.setProvidedSample2Quantity(identificationMaterial.getProvidedSample2Quantity()); + + im.setSplitedSample(identificationMaterial.getSplitedSample()); + + im.setFundQuantity(identificationMaterial.getFundQuantity()); + im.setQuantity(identificationMaterial.getQuantity()); + im.setSample1No(identificationMaterial.getSample1No()); + im.setSample1FundQuantity(identificationMaterial.getSample1FundQuantity()); + im.setSample1Quantity(identificationMaterial.getSample1Quantity()); + im.setSample1BoxId(identificationMaterial.getSample1BoxId()); + + im.setSample2No(identificationMaterial.getSample2No()); + im.setSample2FundQuantity(identificationMaterial.getSample2FundQuantity()); + im.setSample2Quantity(identificationMaterial.getSample2Quantity()); + im.setSample2BoxId(identificationMaterial.getSample2BoxId()); + + SampleBox sb1 = null; + SampleBox sb2 = null; + // 如果之前没有生成过样本编号, 现在填写样本重量了, 那么就生成样本编号 + //if ((identificationMaterial.getSample1Present() != null) && (identificationMaterial.getSample1Present())) { + //12-4日我们不再将承载物信息设置成必填了 +// if ((identificationMaterial.getSample1FundQuantity() == null) || +// (identificationMaterial.getSample1FundQuantity().compareTo(0) == 0)) { +// throw new RuntimeException(String.format("样本1的承载物数量不能为空, 也不能为 0")); +// } + if ((identificationMaterial.getSample1Quantity() == null) || + (identificationMaterial.getSample1Quantity().equals(BigDecimal.ZERO))) { + throw new RuntimeException(String.format("样本1的数量不能为空, 也不能为 0")); + } + if (StrUtil.isBlank(identificationMaterial.getSample1No())) { + im.setSample1No(sampleService.getNewSampleNo(im.getImNo(), 1)); + } + + + if ((identificationMaterial.getSample2Present() != null) && (identificationMaterial.getSample2Present())) { + //12-4日我们不再将承载物信息设置成必填了 +// if ((identificationMaterial.getSample2FundQuantity() == null) || +// (identificationMaterial.getSample2FundQuantity().compareTo(0) == 0)) { +// throw new RuntimeException(String.format("样本2的承载物数量不能为空, 也不能为 0")); +// } + if ((identificationMaterial.getSample2Quantity() == null) || + (identificationMaterial.getSample2Quantity().compareTo(BigDecimal.ZERO) == 0)) { + throw new RuntimeException(String.format("样本2的数量不能为空, 也不能为 0")); + } + if (StrUtil.isBlank(identificationMaterial.getSample2No())) { + im.setSample2No(sampleService.getNewSampleNo(im.getImNo(), 2)); + } + } + + im.setAcceptPassed(opCode); + im.setAcceptTime(LocalDateTime.now()); + + if (!this.updateById(im)) { + throw new RuntimeException("保存检材信息失败"); + } + } else { + // 受理未通过, 不修改属性 + im.setAcceptPassed(opCode); + im.setAcceptTime(LocalDateTime.now()); + im.setAcceptNo("");//如果拒绝受理 + if (!this.updateById(im)) { + throw new RuntimeException("保存检材信息失败"); + } + } + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", identificationMaterial.getId())); + } + return im; + } + + @Override + public EntrustmentIdentificationMaterial createIdentificationMaterialByEvidenceId(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser) { + + String entrustmentId = identificationMaterial.getEntrustmentId(); + String evidenceId = identificationMaterial.getEvidenceId(); + Boolean copyAttachemnts = false; + if (copyAttachemnts == null) { + copyAttachemnts = false; + } + + if (StrUtil.isBlank(entrustmentId)) { + throw new RuntimeException(String.format("检材必须与某个委托关联, 必须提供 entrustmentId")); + } + if (StrUtil.isBlank(evidenceId)) { + throw new RuntimeException(String.format("检材必须与某个物证关联, 必须提供 evidentceId")); + } + + CaseEvidence ce = caseEvidenceService.getById(evidenceId); // 取出对应的物证 + if (ce == null) { + throw new RuntimeException(String.format("提供的 evidentceId [%s] 没有找到对应的物证", evidenceId)); + } + + identificationMaterial.setId(IdWorker.get32UUID().toUpperCase()); + identificationMaterial.setImNo(this.getNewIdentificationMaterialNo(ce.getEvidenceNo())); + //设置一些初始属性 + identificationMaterial.setCheckPassed(0); + identificationMaterial.setApprovePassed(0); + identificationMaterial.setAcceptPassed(0); + //设置序号,这里我们按先后顺序,给插入的检材排一个序号 + identificationMaterial.setOrderNo(getWtOrderNo(identificationMaterial.getEntrustmentId())); + + //保存采样人 + saveCollectors(identificationMaterial, dlpUser); + + //如果在创建检材这 + if (StrUtil.isBlank(identificationMaterial.getProvidedSample1No())) { + identificationMaterial.setProvidedSample1No(sampleService.getNewProvidedSampleNo(identificationMaterial.getImNo(), 1)); + } + if ((identificationMaterial.getProvidedSample2Present() != null) && identificationMaterial.getProvidedSample2Present()) { + //如果委托单位分样了 + if (StrUtil.isBlank(identificationMaterial.getProvidedSample2No())) { + identificationMaterial.setProvidedSample2No(sampleService.getNewProvidedSampleNo(identificationMaterial.getImNo(), 2)); + } + //受理的时候应该有2个样 + identificationMaterial = settingAcceptSampleInfoDivide(identificationMaterial); + } else { + //委托单位没分样 + identificationMaterial = settingAcceptSampleInfoNoDivide(identificationMaterial); + } + //默认肯定有一个是分析样是永远存在的,添加的时候,先将这个样本生成出来,所以受理时候的分样信息有一个是存在的,同理如果送检时候的分样信息,也是默认有一个存在的,这个在分样的时候,通过接口调用产生 + //这里判断委托单位是否分样 + //identificationMaterial.setSample1No(sampleService.getNewSampleNo(identificationMaterial.getImNo(),1)); + + identificationMaterial.setCreateBy(dlpUser.getId()); + identificationMaterial.setCreateTime(LocalDateTime.now()); + + //判断检材的重量不能大于物证的重量 暂不判断,因为可能单位不统一 + if (this.save(identificationMaterial)) { + // 新增检材记录成功 + try { + if (copyAttachemnts) { + List fileList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getCaseId() + "/" + identificationMaterial.getEvidenceId()); + for (String fileName : fileList) { + String srcFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getCaseId() + "/" + identificationMaterial.getEvidenceId() + "/" + fileName; + String destFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getEntrustmentId() + "/" + identificationMaterial.getId() + "/" + fileName; + ossFile.fileCopy(srcFileName, destFileName); + } + } + } catch (Exception e) { + System.out.println(String.format("复制物证附件到新建的检材附件目录出错: %s", e.getMessage())); + } + return identificationMaterial; + } else return null; + } + + @Override + public EntrustmentIdentificationMaterial putUpdateById(EntrustmentIdentificationMaterial identificationMaterial, DLPUser dlpUser) { + + + if (StrUtil.isNotBlank(identificationMaterial.getAcceptNo())) { + throw new RuntimeException(String.format("当前检材已经受理了,不允许再进行修改")); + } + + Entrustment entrustment = entrustmentService.getById(identificationMaterial.getEntrustmentId()); + + if (entrustment.getDataSources() == 1) { + EntrustOfThirdSys entrustOfThirdSys = synchronizeDataService.getOne(new LambdaQueryWrapper().eq(EntrustOfThirdSys::getEntrustMainId, entrustment.getId())); + EntrustMaterialOfThirdSys entrustMaterialOfThirdSys = synchronizeMaterialVoService.getById(identificationMaterial.getId()); + List list = synchronizeMaterialVoService.list(new LambdaQueryWrapper().eq(EntrustMaterialOfThirdSys::getEntrustId, entrustOfThirdSys.getId())); + entrustMaterialOfThirdSys.setOrder_index(((Integer) (list.size() + 1)).toString()); + entrustMaterialOfThirdSys.setName(identificationMaterial.getName()); + String unitByZhCn = ConvertUtils.getUnitByZhCn(identificationMaterial.getUnit()); + entrustMaterialOfThirdSys.setUnit(unitByZhCn); + entrustMaterialOfThirdSys.setSampleUnit(unitByZhCn); + entrustMaterialOfThirdSys.setColorType(identificationMaterial.getColor()); + entrustMaterialOfThirdSys.setShapeType(entrustmentMapper.getTypeForDictionary(identificationMaterial.getType())); + entrustMaterialOfThirdSys.setPackageType(entrustmentMapper.getTypeForDictionary(identificationMaterial.getPack())); + entrustMaterialOfThirdSys.setAmount(identificationMaterial.getQuantity()); + List candidateDrugs = identificationMaterial.getCandidateDrugs(); + List stringList = new ArrayList<>(); + + for (DrugLite candidateDrug : candidateDrugs) { + String name = candidateDrug.getName(); + stringList.add(name); + } + String listJSONString = JSON.toJSONString(stringList); + entrustMaterialOfThirdSys.setTargetObjectTypeList(listJSONString); + String analysisType = ""; + switch (identificationMaterial.getAnalysisOption()) { + case 1: + analysisType = "qualitative"; + break; + case 2: + analysisType = "ration"; + break; + case 3: + analysisType = "qualitativeAndRation"; + break; + case 4: + analysisType = "relevance"; + break; + case 5: + analysisType = "other"; + break; + } + entrustMaterialOfThirdSys.setAnalysisType(analysisType); + synchronizeMaterialVoService.updateById(entrustMaterialOfThirdSys); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus() && !dlpUser.isStaff()) { + throw new RuntimeException(String.format("当前委托不在可以修改的状态")); + } + + if (StrUtil.isBlank(identificationMaterial.getId())) { + throw new RuntimeException(String.format("检材信息中没有检材标识 id")); + } + if (StrUtil.isBlank(identificationMaterial.getCaseId())) { + throw new RuntimeException(String.format("检材必须与某个案件关联, 必须提供 caseId")); + } + if (StrUtil.isBlank(identificationMaterial.getEntrustmentId())) { + throw new RuntimeException(String.format("检材必须与某个委托关联, 必须提供 entrustmentId")); + } + //现在检材不一定会绑定物证了 12-1 +// if (StrUtil.isBlank(identificationMaterial.getEvidenceId())) { +// throw new RuntimeException(String.format("检材必须与某个物证关联, 必须提供 evidentceId")); +// } + + EntrustmentIdentificationMaterial im = this.getById(identificationMaterial.getId()); + if (im == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的检材", identificationMaterial.getId())); + } + + if ((im.getCheckPassed() != null && im.getCheckPassed() == 1) && !dlpUser.isStaff()) { + throw new RuntimeException(String.format("已审核的检材不能修改")); + } + if ((im.getApprovePassed() != null && im.getApprovePassed() == 1) && !dlpUser.isStaff()) { + throw new RuntimeException(String.format("已审批的检材不能修改")); + } + if ((im.getAcceptPassed() != null && im.getAcceptPassed() == 1) && !dlpUser.isStaff()) { + throw new RuntimeException(String.format("已受理的检材不能修改")); + } + + identificationMaterial.setCheckPassed(0); + identificationMaterial.setApprovePassed(0); + identificationMaterial.setAcceptPassed(0); + + //-- 更新采集员表信息 ---------------- + this.saveCollectors(identificationMaterial, dlpUser); + //-------------------------------- + + // 如果之前没有生成过样本编号, 现在填写样本重量了, 那么就生成样本编号 + //if ((identificationMaterial.getSample1Present() != null) && identificationMaterial.getSample1Present()) { + if (StrUtil.isBlank(identificationMaterial.getProvidedSample1No())) { + identificationMaterial.setProvidedSample1No(sampleService.getNewSampleNo(im.getImNo(), 1)); + } + + + //} + + if ((identificationMaterial.getProvidedSample2Present() != null) && identificationMaterial.getProvidedSample2Present()) { + identificationMaterial.setSample2Present(true); + if (identificationMaterial.getProvidedSample2Quantity() != null) { + identificationMaterial.setSample2Quantity(identificationMaterial.getProvidedSample2Quantity()); + } + if (StrUtil.isBlank(identificationMaterial.getProvidedSample2No())) { + identificationMaterial.setProvidedSample2No(sampleService.getNewSampleNo(im.getImNo(), 2)); + } + identificationMaterial.setSample1Quantity(identificationMaterial.getProvidedSample1Quantity()); + identificationMaterial = this.settingAcceptSampleInfoDivide(identificationMaterial); + } else { + //委托单位没分样,就按照Quantity赋值 + identificationMaterial = this.settingAcceptSampleInfoNoDivide(identificationMaterial); + identificationMaterial.setProvidedSample1Quantity(identificationMaterial.getQuantity()); + identificationMaterial.setSample1Quantity(identificationMaterial.getQuantity()); + identificationMaterial.setSample2Present(false); + + //因为有可能用户先分样了,后面又取消分样了,我们得把样本2的编号去除掉 + if (StrUtil.isNotBlank(identificationMaterial.getProvidedSample2No()) || StrUtil.isNotBlank(identificationMaterial.getSample2No())) { + identificationMaterial.setProvidedSample2No(""); + identificationMaterial.setSample2No(""); + } + + + } + + //这里要区分一下,前端只能传入一个值,所以我们需要将这个值赋值给sample2Quantity + identificationMaterial.setCreateBy(null); + identificationMaterial.setCreateTime(null); + identificationMaterial.setUpdateBy(dlpUser.getId()); + identificationMaterial.setUpdateTime(LocalDateTime.now()); + identificationMaterial.setPackName(entrustmentMapper.getTypeForDictionary(identificationMaterial.getPack())); + return this.updateById(identificationMaterial) ? identificationMaterial : null; + } + + + @Override + public void saveCollectors(EntrustmentIdentificationMaterial material, DLPUser dlpUser) { + Taker taker1 = new Taker(); + taker1.setOwnerUserId(dlpUser.getId()); + taker1.setName(material.getTake1Name()); + taker1.setPosition(material.getTake1Position()); + taker1.setCert(material.getTake1Cert()); + taker1.setIdnum(material.getTake1Id()); + taker1.setPhone(material.getTake1Phone()); + takerService.renew(taker1); + Taker taker2 = new Taker(); + taker2.setOwnerUserId(dlpUser.getId()); + taker2.setName(material.getTake2Name()); + taker2.setPosition(material.getTake2Position()); + taker2.setCert(material.getTake2Cert()); + taker2.setIdnum(material.getTake2Id()); + taker2.setPhone(material.getTake2Phone()); + takerService.renew(taker2); + } + + @Override + public EntrustmentIdentificationMaterial settingAcceptSampleInfoDivide(EntrustmentIdentificationMaterial material) { + material.setSample1No(sampleService.getNewSampleNo(material.getImNo(), 1)); + material.setSample1Quantity(material.getProvidedSample1Quantity()); + material.setSample1FundQuantity(material.getProvidedSample1FundQuantity()); + + material.setSample2No(sampleService.getNewSampleNo(material.getImNo(), 2)); + material.setSample2Quantity(material.getProvidedSample2Quantity()); + material.setSample2FundQuantity(material.getProvidedSample2FundQuantity()); + return material; + } + + @Override + //设置送检单位初始分样信息 + public EntrustmentIdentificationMaterial settingProviderSampleInfo(EntrustmentIdentificationMaterial material) { + material.setProvidedSample1No(sampleService.getNewProvidedSampleNo(material.getImNo(), 1)); + material.setProvidedSample1Quantity(material.getQuantity()); + material.setProvidedSample1FundQuantity(material.getFundQuantity()); + return material; + } + + @Override + public EntrustmentIdentificationMaterial settingAcceptSampleInfoNoDivide(EntrustmentIdentificationMaterial material) { + material.setSample1No(sampleService.getNewSampleNo(material.getImNo(), 1)); + //material.setSample1Quantity(material.getQuantity()); + material.setSample1Quantity(material.getProvidedSample1Quantity());//这里应该使用送检单位送检的样本重量 + material.setSample1FundQuantity(material.getFundQuantity()); + return material; + } + + private int getWtOrderNo(String entrustId) { + List materialList = this.list(Wrappers.query() + .eq("entrustment_id", entrustId)); + int count = materialList.size(); + int newNo = count + 1; + return newNo; + } + + @Override + public EntrustmentIdentificationMaterial deleteById(String id) { + if (StrUtil.isBlank(id)) { + throw new RuntimeException(String.format("必须把检材 id 作为路径的一部分提供!")); + } + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = this.getById(id); + if (entrustmentIdentificationMaterial == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的检材", id)); + } + + List attList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentIdentificationMaterial.getEntrustmentId() + "/" + id); + long attCount = attList.size(); + if (attCount > 0) { + throw new RuntimeException(String.format("这个检材下有 %d 个附件, 必须先删除全部附件后才能删除检材物证!", attCount)); + } + if (this.removeById(id)) { + return entrustmentIdentificationMaterial; + } else { + return null; + } + } + + @Override + public boolean saveRepWeigh(String id, double sample1RepeatWeigh, double sample2RepeatWeigh, boolean isUseBalance, String sampleFlag) { + + BigDecimal data1 = new BigDecimal(sample1RepeatWeigh); + BigDecimal data2 = new BigDecimal(!Double.isNaN(sample2RepeatWeigh) ? sample2RepeatWeigh : 0); + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = this.getById(id); + entrustmentIdentificationMaterial.setSample1RepeatWeigh(data1); + entrustmentIdentificationMaterial.setSample2RepeatWeigh(data2); + //设置样本的重量 + //如果没有原质量,我们就把复称的质量来设置原质量,如果有原质量,就啥都不干 + if (entrustmentIdentificationMaterial.getSample1Quantity() == null || entrustmentIdentificationMaterial.getSample1Quantity().compareTo(BigDecimal.ZERO) <= 0) { + entrustmentIdentificationMaterial.setSample1Quantity(data1); + } + if (entrustmentIdentificationMaterial.getSample2Quantity() == null || entrustmentIdentificationMaterial.getSample2Quantity().compareTo(BigDecimal.ZERO) <= 0) { + entrustmentIdentificationMaterial.setSample2Quantity(data2); + entrustmentIdentificationMaterial.setSample2FundQuantity(entrustmentIdentificationMaterial.getFundQuantity()); + } + //设置检材质量 + //如果是小于0.说明是未称量,那么我们复称的时候,就把称量的值拿他保存,也说明可能是其他的单位,比如是毫升,等单位 + + entrustmentIdentificationMaterial.setQuantity(entrustmentIdentificationMaterial.getQuantity().compareTo(BigDecimal.ZERO) == -1 ? new BigDecimal(sample1RepeatWeigh) : entrustmentIdentificationMaterial.getQuantity()); + + boolean ret = this.updateById(entrustmentIdentificationMaterial); + if (isUseBalance) { + //说明使用了 电子天平称量,这里我们需要生成使用记录 + BalanceUseRecord balanceUseRecord = new BalanceUseRecord(); + balanceUseRecord.setId(IdWorker.get32UUID()); + balanceUseRecord.setUseDate(LocalDate.now()); + balanceUseRecord.setUserId(SecurityUtils.getCurrentUserId()); + balanceUseRecord.setRemark("受理复秤"); + balanceUseRecord.setEquipmentId(""); + balanceUseRecord.setEquipmentNumber("NADL-Shaanxi-A-010"); + balanceUseRecord.setSampleName(entrustmentIdentificationMaterial.getName()); + balanceUseRecord.setSampleNumber(entrustmentIdentificationMaterial.getImNo()); + balanceUseRecord.setUserName(SecurityUtils.getUser().getName()); + if (sampleFlag.equals("1")) { + balanceUseRecord.setWeighingMass(new BigDecimal(sample1RepeatWeigh)); + } + if (sampleFlag.equals("2")) { + balanceUseRecord.setWeighingMass(new BigDecimal(sample2RepeatWeigh)); + } + List balanceUseRecordList = new ArrayList<>(); + balanceUseRecordList.add(balanceUseRecord); + log.info("保存天平使用记录{}", balanceUseRecord); + remoteEquipmentService.addUseRecord(balanceUseRecordList); + } + log.info("保存成功 {}"); + + return ret; + + } + + @Override + public EntrustmentIdentificationMaterial settingRetained(String id, int flag) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = this.getById(id); + if (flag == 1) { + entrustmentIdentificationMaterial.setSample2Present(true); + //应该设置样本2的编号 + entrustmentIdentificationMaterial.setSample2No(sampleService.getNewSampleNo(entrustmentIdentificationMaterial.getImNo(), 2)); + } else { + //如果传回-1的时候,表示删掉了,因此我们清空留存样的值,清除掉样品2的属性值 + entrustmentIdentificationMaterial.setSample2Present(false); + entrustmentIdentificationMaterial.setSample2RepeatWeigh(new BigDecimal(0)); + entrustmentIdentificationMaterial.setSample2Quantity(new BigDecimal(0)); + entrustmentIdentificationMaterial.setSample2No(""); + } + this.updateById(entrustmentIdentificationMaterial); + return entrustmentIdentificationMaterial; + + } + + + @Override + @Transactional + public List createNewIm(List identificationMaterialList, DLPUser dlpUser) { + + Entrustment entrustment = entrustmentService.getById(identificationMaterialList.get(0).getEntrustmentId()); + + + if (!dlpUser.isStaff() && entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + throw new RuntimeException(String.format("你已提交过该委托,无法再添加检材信息!")); + } + for (EntrustmentIdentificationMaterial identificationMaterial : identificationMaterialList) { + String id = IdWorker.get32UUID().toUpperCase(); + if (entrustment.getDataSources() == 1) { + EntrustOfThirdSys entrustOfThirdSys = synchronizeDataService.getOne(new LambdaQueryWrapper().eq(EntrustOfThirdSys::getEntrustMainId, entrustment.getId())); + EntrustMaterialOfThirdSys entrustMaterialOfThirdSys = new EntrustMaterialOfThirdSys(); + entrustMaterialOfThirdSys.setEntrustId(entrustOfThirdSys.getId()); + entrustMaterialOfThirdSys.setId(id); + List list = synchronizeMaterialVoService.list(new LambdaQueryWrapper().eq(EntrustMaterialOfThirdSys::getEntrustId, entrustOfThirdSys.getId())); + entrustMaterialOfThirdSys.setOrder_index(((Integer) (list.size() + 1)).toString()); + entrustMaterialOfThirdSys.setName(identificationMaterial.getName()); + String unitByZhCn = ConvertUtils.getUnitByZhCn(identificationMaterial.getUnit()); + entrustMaterialOfThirdSys.setUnit(unitByZhCn); + entrustMaterialOfThirdSys.setSampleUnit(unitByZhCn); + entrustMaterialOfThirdSys.setColorType(identificationMaterial.getColor()); + entrustMaterialOfThirdSys.setShapeType(entrustmentMapper.getTypeForDictionary(identificationMaterial.getType())); + entrustMaterialOfThirdSys.setPackageType(identificationMaterial.getPackName()); + entrustMaterialOfThirdSys.setAmount(identificationMaterial.getQuantity()); + List candidateDrugs = identificationMaterial.getCandidateDrugs(); + List stringList = new ArrayList<>(); + + for (DrugLite candidateDrug : candidateDrugs) { + String name = candidateDrug.getName(); + stringList.add(name); + } + String listJSONString = JSON.toJSONString(stringList); + entrustMaterialOfThirdSys.setTargetObjectTypeList(listJSONString); + String analysisType = ""; + switch (identificationMaterial.getAnalysisOption()) { + case 1: + analysisType = "qualitative"; + break; + case 2: + analysisType = "ration"; + break; + case 3: + analysisType = "qualitativeAndRation"; + break; + case 4: + analysisType = "relevance"; + break; + case 5: + analysisType = "other"; + break; + } + entrustMaterialOfThirdSys.setAnalysisType(analysisType); + synchronizeMaterialVoService.save(entrustMaterialOfThirdSys); + } + + String entrustmentId = identificationMaterial.getEntrustmentId(); + + if (StrUtil.isBlank(identificationMaterial.getCaseId())) { + throw new RuntimeException(String.format("检材必须与某个案件关联, 必须提供 caseId")); + } + CaseEvent cj = caseEventService.getById(identificationMaterial.getCaseId()); + if (cj == null) { + throw new RuntimeException(String.format("不存在 id 为 %s 的案件", identificationMaterial.getCaseId())); + } + if (StrUtil.isBlank(cj.getCaseNo())) { + throw new RuntimeException(String.format("对应的案件资料不完整, 不存在案件编号。请先完善案件资料")); + } + + ////若提前创建好了物证,则关联通过物证编号关联检材编号即可; + if (StrUtil.isNotBlank(identificationMaterial.getEvidenceId())) { + CaseEvidence caseEvidence = caseEvidenceService.getById(identificationMaterial.getEvidenceId()); + identificationMaterial.setImNo(this.getNewIdentificationMaterialNo(caseEvidence.getEvidenceNo())); + + } else { + String newEvidenceCode = caseEvidenceService.getNewEvidenceCode(cj.getCaseNo()); + String materialNo = this.getNewIdentificationMaterialNo(newEvidenceCode); + identificationMaterial.setImNo(materialNo); + } + Boolean copyAttachemnts = false; + if (copyAttachemnts == null) { + copyAttachemnts = false; + } + + + if (StrUtil.isBlank(entrustmentId)) { + throw new RuntimeException(String.format("检材必须与某个委托关联, 必须提供 entrustmentId")); + } + + identificationMaterial.setId(id); + //设置一些初始属性 + identificationMaterial.setCheckPassed(0); + identificationMaterial.setApprovePassed(0); + identificationMaterial.setAcceptPassed(0); + + identificationMaterial.setPackName(identificationMaterial.getPack()); + identificationMaterial.setTypeName(entrustmentMapper.getTypeForDictionary(identificationMaterial.getType())); + + identificationMaterial.setFormName(identificationMaterial.getForm()); + //设置序号,这里我们按先后顺序,给插入的检材排一个序号 + identificationMaterial.setOrderNo(getWtOrderNo(identificationMaterial.getEntrustmentId())); + //如果传来了样本1的质量,我们要将它赋给Sample1Quantity + if (identificationMaterial.getSample1Quantity() == null) { + identificationMaterial.setSample1Quantity(identificationMaterial.getProvidedSample1Quantity()); + } + //保存采样人 + saveCollectors(identificationMaterial, dlpUser); + + List list = this.list(new LambdaQueryWrapper().eq(EntrustmentIdentificationMaterial::getProvidedSample1No, identificationMaterial.getProvidedSample1No())); + //如果在创建检材这 + if (StrUtil.isBlank(identificationMaterial.getProvidedSample1No()) && list != null && list.size() > 0) { + identificationMaterial.setProvidedSample1No(sampleService.getNewProvidedSampleNo(identificationMaterial.getImNo(), 1)); + } + if ((identificationMaterial.getProvidedSample2Present() != null) && identificationMaterial.getProvidedSample2Present()) { + //如果委托单位分样了 + //如果委托单位分样了 + if (StrUtil.isBlank(identificationMaterial.getProvidedSample2No())) { + identificationMaterial.setProvidedSample2No(sampleService.getNewProvidedSampleNo(identificationMaterial.getImNo(), 2)); + } + //受理的时候应该有2个样 + identificationMaterial = settingAcceptSampleInfoDivide(identificationMaterial); + //如果分样了,并且传入了样本2的值,那么我们将这个值要赋给sample2Quantity,以便受理的时候使用 + if (identificationMaterial.getProvidedSample2Quantity() != null) { + identificationMaterial.setSample2Quantity(identificationMaterial.getProvidedSample2Quantity()); + } + } else { + //委托单位没分样 + identificationMaterial = settingAcceptSampleInfoNoDivide(identificationMaterial); + } + //默认肯定有一个是分析样是永远存在的,添加的时候,先将这个样本生成出来,所以受理时候的分样信息有一个是存在的,同理如果送检时候的分样信息,也是默认有一个存在的,这个在分样的时候,通过接口调用产生 + //这里判断委托单位是否分样 + //identificationMaterial.setSample1No(sampleService.getNewSampleNo(identificationMaterial.getImNo(),1)); + + identificationMaterial.setCreateBy(dlpUser.getId()); + identificationMaterial.setCreateTime(LocalDateTime.now()); + identificationMaterial.setAcceptNo(null); + identificationMaterial.setSample1RepeatWeigh(null); + identificationMaterial.setSample2RepeatWeigh(null); + + + //判断检材的重量不能大于物证的重量 暂不判断,因为可能单位不统一 + if (this.save(identificationMaterial)) { + // 新增检材记录成功 + try { + if (copyAttachemnts) { + List fileList = ossFile.fileList(OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getCaseId() + "/" + identificationMaterial.getEvidenceId()); + for (String fileName : fileList) { + String srcFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getCaseId() + "/" + identificationMaterial.getEvidenceId() + "/" + fileName; + String destFileName = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + identificationMaterial.getEntrustmentId() + "/" + identificationMaterial.getId() + "/" + fileName; + ossFile.fileCopy(srcFileName, destFileName); + } + } + } catch (Exception e) { + System.out.println(String.format("复制物证附件到新建的检材附件目录出错: %s", e.getMessage())); + } + } + } + return identificationMaterialList; + } + + @Override//打印小标签模板的方法 + public List printLabel(List printDTOList) { + + List> maps = new ArrayList<>(); + String templateFileName = "(小)受理时打印的检材条码模板.vm"; + for (PrintDTO printDTO : printDTOList) { + String id = printDTO.getId(); + EntrustmentIdentificationMaterial identificationMaterial = this.getById(id); + Map data = new HashMap<>(); + CaseEvent caseEvent = caseEventService.getById(identificationMaterial.getCaseId()); + Entrustment entrustment = entrustmentService.getById(identificationMaterial.getEntrustmentId()); + data.put("identificationMaterial", identificationMaterial); + data.put("caseEvent", caseEvent); + data.put("entrustment", entrustment); + maps.add(data); + } + return remoteTemplate2htmlService.getManyHtml(templateFileName, maps); + } + + @Override + public List printManyLabel(List printDTOList) { + //判断类型,打印小标签还是大标签 + Integer type = printDTOList.get(0).getType(); + + List htmlList = new ArrayList<>(); + + List> maps = new ArrayList<>(); + + //这里区分打印的是分析样还是留存样,因为调用的模板不一样,所以需要创建两个集合进行分别打印 + List printDTOA = new ArrayList<>(); + List printDTOB = new ArrayList<>(); + + for (PrintDTO printDTO : printDTOList) { + if (printDTO.getSample().equals("A")) { + printDTOA.add(printDTO); + } else if (printDTO.getSample().equals("B")) { + printDTOB.add(printDTO); + } + } + if (type == 1) {//区分是打印大标签还是小标签,1:大标签 0:小标签 + + for (PrintDTO printDTO : printDTOA) { + + String id = printDTO.getId(); + + //把数据填入上下文 + EntrustmentIdentificationMaterial im = this.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + CaseEvent ce = caseEventService.getById(im.getCaseId()); + if (ce == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的案件", im.getCaseId())); + } + +// CaseEvidence evidence = caseEvidenceService.getById(im.getEvidenceId()); +// if (evidence == null) { +// throw new RuntimeException(String.format("没有找到 id 为 %s 的物证", im.getEvidenceId())); +// } + + Map data = new HashMap<>(); + data.put("identificationMaterial", im); + data.put("caseEvent", ce); + data.put("entrustment", entrustment); +// data.put("evidence", evidence); + + maps.add(data); + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_SAMPLE1); + List htmlA = remoteTemplate2htmlService.getManyHtml(templateFileName, maps); + htmlList.addAll(htmlA); + } + + for (PrintDTO printDTO : printDTOB) { + + String id = printDTO.getId(); + + //把数据填入上下文 + EntrustmentIdentificationMaterial im = this.getById(id); + if (im == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的检材", id)); + } + + Entrustment entrustment = entrustmentService.getById(im.getEntrustmentId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", im.getEntrustmentId())); + } + + CaseEvent ce = caseEventService.getById(im.getCaseId()); + if (ce == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的案件", im.getCaseId())); + } + +// CaseEvidence evidence = caseEvidenceService.getById(im.getEvidenceId()); +// if (evidence == null) { +// throw new RuntimeException(String.format("没有找到 id 为 %s 的物证", im.getEvidenceId())); +// } + + Map data = new HashMap<>(); + data.put("identificationMaterial", im); + data.put("caseEvent", ce); + data.put("entrustment", entrustment); +// data.put("evidence", evidence); + + maps.add(data); + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LABEL_TEMPLATE_IM_SAMPLE2); + List htmlB = remoteTemplate2htmlService.getManyHtml(templateFileName, maps); + htmlList.addAll(htmlB); + } + return htmlList; + } else { + //打印小标签 + List htmlA = printLabel(printDTOA); + List htmlB = printLabel(printDTOB); + htmlList.addAll(htmlA); + htmlList.addAll(htmlB); + return htmlList; + } + } + + @Override + public String printMaterialArchives(String entrustmentId) throws Exception { + + String applyFileName = "检材样本档案.docx"; + String path = "document/accept/" + entrustmentId; + String finalPath = "document/accept/" + entrustmentId + "/" + applyFileName; + List fileList = ossFile.fileList(path); + for (String file : fileList) { + if (file.equals(applyFileName)) { + return finalPath; + } + } + + List materialList = this.list(Wrappers.lambdaQuery().eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustmentId)); + for (EntrustmentIdentificationMaterial material : materialList) { + material.setPrintAcceptTime(LocalDateTimeUtil.format(material.getAcceptTime(), "yyyy-MM-dd")); + material.setDescription(material.getOrderNo() + "号检材"); + } + Collections.sort(materialList, new Comparator() { + @Override + public int compare(EntrustmentIdentificationMaterial o1, EntrustmentIdentificationMaterial o2) { + String[] o1AcceptNo = o1.getAcceptNo().split("-"); + String[] o2AcceptNo = o2.getAcceptNo().split("-"); + return Integer.compare(Integer.parseInt(o1AcceptNo[o1AcceptNo.length - 1]), Integer.parseInt(o2AcceptNo[o2AcceptNo.length - 1])); + } + }); + int index = 0;//需要构建的空白的参数,用来填充表格 + if (materialList.size() < 18) {//这份文件的行数为18 + index = 18 - materialList.size(); + for (int i = 0; i < index; i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial(); + entrustmentIdentificationMaterial.setPrintAcceptTime(""); + entrustmentIdentificationMaterial.setAcceptNo(""); + entrustmentIdentificationMaterial.setTypeName(""); + entrustmentIdentificationMaterial.setFormName(""); + entrustmentIdentificationMaterial.setPackName(""); + entrustmentIdentificationMaterial.setDescription(""); + materialList.add(entrustmentIdentificationMaterial); + } + //如果大于18条数据了 证明不止一页了,那我们看看剩下的是否填充满了一页,如果没有就构建数据 + } else if (materialList.size() > 18) { + index = materialList.size() % 18; + if (index != 0) { + for (int i = 0; i < 18 - index; i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial(); + entrustmentIdentificationMaterial.setPrintAcceptTime(""); + entrustmentIdentificationMaterial.setAcceptNo(""); + entrustmentIdentificationMaterial.setTypeName(""); + entrustmentIdentificationMaterial.setFormName(""); + entrustmentIdentificationMaterial.setPackName(""); + entrustmentIdentificationMaterial.setDescription(""); + materialList.add(entrustmentIdentificationMaterial); + } + } + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ossFile.fileGet("template" + "/" + "检材样本档案.docx", bos); + byte[] templateArray = bos.toByteArray(); + ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); + bos.close(); + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + ConfigureBuilder builder = Configure.builder().buildGramer("${", "}").useSpringEL(false); + builder.bind("voList", policy).build(); + XWPFTemplate template = XWPFTemplate.compile(bis, builder.build()).render( + new HashMap() {{ + put("voList", materialList); + }} + + ); + bis.close(); + org.apache.commons.io.output.ByteArrayOutputStream fosWord = new org.apache.commons.io.output.ByteArrayOutputStream(); + template.write(fosWord); + template.close(); + + //------------ + ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); + fosWord.close(); + boolean ret = ossFile.fileSave(finalPath, fisWord); + if (ret) { + return path; + } else { + return null; + } + } + + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java new file mode 100644 index 0000000..7aef202 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustmentServiceImpl.java @@ -0,0 +1,3516 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.deepoove.poi.data.PictureType; +import com.deepoove.poi.data.Pictures; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import com.deepoove.poi.plugin.table.MultipleRowTableRenderPolicy; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants; +import digital.laboratory.platform.common.core.util.ClassUtils; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.feign.RemoteGenerateWordService; +import digital.laboratory.platform.common.feign.RemoteWord2PDFService; +import digital.laboratory.platform.common.mybatis.security.service.DLPUser; +import digital.laboratory.platform.common.oss.service.OssFile; +import digital.laboratory.platform.common.security.util.SecurityUtils; +import digital.laboratory.platform.entrustment.constant.EntrustMarkConstants; +import digital.laboratory.platform.entrustment.dto.EntrustmentDTO; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.mapper.EntrustmentMapper; +import digital.laboratory.platform.entrustment.misc.ProcessFlowMapper; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; +import digital.laboratory.platform.entrustment.vo.EntrustmentVO; +import digital.laboratory.platform.entrustment.vo.MaterialListForBookVo; +import digital.laboratory.platform.sewage.dto.StatisticsDiffStatusJobDTO; +import digital.laboratory.platform.sewage.entity.UpdateInfo; +import digital.laboratory.platform.sewage.feign.RemoteSewageJobService; +import digital.laboratory.platform.sys.entity.Deliverer; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.sys.entity.SysOrg; +import digital.laboratory.platform.sys.entity.SysUser; +import digital.laboratory.platform.sewage.utils.QRCodeUtils; +import digital.laboratory.platform.sys.feign.*; +import digital.laboratory.platform.sys.vo.entrustment.MarkersVO; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import feign.Response; +import io.seata.spring.annotation.GlobalTransactional; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.activation.MimetypesFileTypeMap; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.*; +import java.math.BigDecimal; +import java.security.Principal; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * 委托服务实现类 + *

+ * ===================================================================================================================== + * 这个类与 Controller 类似乎功能差不多。我们原则上规定: + * 本类的功能主要从技术角度考虑, 而 Controller 类主要从业务角度考虑。 + * 本类的功能主要是涉及 Entrustment 实体本身, 而 Controller 类则是综合的。 + * 例如, 进入到下一环节这个功能, 在本类中只考虑 Entrustment 本身的数据更新, Controller 类应该考虑更多的业务上的综合变化(如其他数据的变化) + *

+ * 流程的管理被看作是 Entrustment 的一部分, 也在此处处理。Controller 不用关心流程 + * ===================================================================================================================== + * + * @author Zhang Xiaolong created at 2022-03-22 + * @describe 委托服务实现类 + */ +@Slf4j +@Service +public class EntrustmentServiceImpl extends ServiceImpl implements EntrustmentService { + @Resource + private RemoteSewageJobService remoteSewageJobService; + @Resource + private RemoteDictionaryService remoteDictionaryService; + @Resource + private RemoteUserService remoteUserService; + @Resource + private CaseEventService caseEventService; + @Resource + private CaseEvidenceService caseEvidenceService; + @Resource + private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + @Resource + private SynchronizeDataService synchronizeDataService; + @Resource + private SynchronizeMaterialVoService synchronizeMaterialVoService; + @Resource + private RemoteGenerateWordService remoteGenerateWordService; + @Resource + private RemoteSampleService remoteSampleService; + @Resource + private OssFile ossFile; + + @Resource + private RemoteDeliverService remoteDeliverService; + @Resource + private RemoteOrgService remoteOrgService; + + @Resource + private RemoteWord2PDFService remoteWord2PDFService; + + @Resource + private IdentificationService identificationService; + + @Resource + private SampleService sampleService; + + @Resource + private RemoteHairJobService remoteHairJobService; + + @Resource + private RemoteAcceptanceService remoteAcceptanceService; + + @Resource + private RemoteFeatureAnalysis remoteFeatureAnalysis; + + +// /** +// * 审核人员由委托创建者选择。如果 true, 前台在委托提交审核前, 弹出界面让委托人选择审核者; 如果 false, 由系统自动选择审核者。 +// * 如果 singleOperateUser 为 true, 表示只能有一个候选; singleOperateUser 为 false 表示可以有多个候选。 +// * singleOperateUser 决定了委托人选择审核者时是单选还是多选, 如果由系统自动选, 有多个待选用户时, 随机选择一个 +// */ +// @Value("${dlp.entrustment.clientChoiceCheckers}") +// private boolean clientChoiceCheckers; +// /** +// * 如果多人审核, 审核候选人之一需要进行一个“领取任务”操作, 先占有这个任务, 此后, 其他候选人无法再“领取”该任务。已经领取任务的人, 可以进行一些处理后, 决定通过或不通过该任务 +// */ +// @Value("${dlp.entrustment.singleOperateUser}") +// private boolean singleOperateUser; // 为 true, 表示审核审批候选人只有一个 +// @Value("${dlp.entrustment.processDefinitionId}") +// private String processDefinitionId; // 委托受理流程的 流程定义Id + + + // /** +// * ## 委托编码 +// * 用于标识每一次委托。 +// * 有可能一个案件会有多次委托鉴定, 所以在案件编码后加4位作为顺序号。 +// * +// * ``` +// * WT <案件编码后 22 位> <顺序号4位> +// * 例如: +// * WT 5201010400002020030002 0002 +// * 合计 28 位 +// * ``` +// * @param caseNo +// * @return +// */ +// @Override +// public String getNewEntrustmentNo(String caseNo) { +// String prefix = CommonConstants.CODE_PREFIX_ENTRUSTMENT + StrUtil.removePrefixIgnoreCase(caseNo, CommonConstants.CODE_PREFIX_CASE); +// +// int newCount = 1; +// +// // 根据前缀查询最大委托编码 +// String maxno = entrustmentMapper.getMaxEntrustmentNo(prefix); +// if (maxno != null) { +// String strCount = StrUtil.removePrefix(maxno, prefix); +// try +// { +// int maxcount = Integer.parseUnsignedInt(strCount); +// newCount = maxcount + 1; +// } +// catch (NumberFormatException e) { +// // 如果后缀有非数字, 则无视之, 重头编码 +// newCount = 1; +// } +// } +// +// String newCode = prefix+ String.format("%06d", newCount); +// +// return newCode; +// } + //新委托编号规则 + //2023-07-09 调整检材编号规则,规则为年份+委托流水号,流水号为4位,不需要用0补充不足的位数,中间用 “-”相连接 + @Override + public String getNewEntrustmentNo() { + LocalDateTime date = LocalDateTime.now(); + String prefix = CommonConstants.CODE_PREFIX_ENTRUSTMENT; + String splitSymbol = "-"; + String first_part = prefix + splitSymbol + date.getYear(); + String maxNo = this.getBaseMapper().getMaxEntrustmentNoNew(first_part); + String newWtNO = ""; + if (StringUtils.isNotBlank(maxNo)) { + maxNo = maxNo.substring(maxNo.lastIndexOf("-") + 1); + int newCount = Integer.valueOf(maxNo) + 1; + String second_part = fillByZero(newCount); + newWtNO = first_part + splitSymbol + second_part; + } else { + newWtNO = first_part + splitSymbol + "0001"; + } + return newWtNO; + } + + //根据年份获得委托编号 + public String getNewEntrustNoByYear(String year) { + String prefix = CommonConstants.CODE_PREFIX_ENTRUSTMENT; + String splitSymbol = "-"; + String first_part = prefix + splitSymbol + year; + String maxNo = this.getBaseMapper().getMaxEntrustmentNoNew(first_part); + String newWtNO = ""; + if (StringUtils.isNotBlank(maxNo)) { + maxNo = maxNo.substring(maxNo.lastIndexOf("-") + 1); + int newCount = Integer.valueOf(maxNo) + 1; + String second_part = fillByZero(newCount); + newWtNO = first_part + splitSymbol + second_part; + } else { + newWtNO = first_part + splitSymbol + "0001"; + } + return newWtNO; + } + //获取案前送检的委托受理编号 + + @Override + public String getNewEntrustAcceptNoForBeforeCase() { + String prefix = CommonConstants.CODE_PREFIX_ACCEPT_BEFORE_CASE; + LocalDateTime date = LocalDateTime.now(); + String splitSymbol = "-"; + int current_year = date.getYear(); + String first_part = prefix + current_year; + String maxAcceptNo = this.getBaseMapper().getMaxEntrustAcceptNo(first_part); + String newAcceptNo = ""; + if (StringUtils.isNotBlank(maxAcceptNo)) { + //判断跨年的情况,如果跨年肯定现在年份和之前年份不一样,如果是新的一年编号应该从新编号 + String seqNo = maxAcceptNo.substring(maxAcceptNo.lastIndexOf("-") + 1); + int newCount = Integer.valueOf(seqNo) + 1; + String second_part = ""; + second_part = fillByZero(newCount); + newAcceptNo = first_part + splitSymbol + second_part; + } else { + //说明库里一条没有,则从1开始的编号 + newAcceptNo = first_part + splitSymbol + "0001"; + } + return newAcceptNo; + } + + //获取正常送检的委托受理编号 + @Override + public String getNewAcceptNo() { + LocalDateTime date = LocalDateTime.now(); + String prefix = CommonConstants.CODE_PREFIX_ACCEPT; + String splitSymbol = "-"; + int current_year = date.getYear(); + String first_part = prefix + current_year; + String maxAcceptNo = this.getBaseMapper().getMaxEntrustAcceptNo(first_part); + String newAcceptNo = ""; + if (StringUtils.isNotBlank(maxAcceptNo)) { + //判断跨年的情况,如果跨年肯定现在年份和之前年份不一样,如果是新的一年编号应该从新编号 + String seqNo = maxAcceptNo.substring(maxAcceptNo.lastIndexOf("-") + 1); + int newCount = Integer.valueOf(seqNo) + 1; + String second_part = ""; + second_part = fillByZero(newCount); + newAcceptNo = first_part + splitSymbol + second_part; + } else { + //说明库里一条没有,则从1开始的编号 + newAcceptNo = first_part + splitSymbol + "0001"; + } + return newAcceptNo; + } + + /** + * 用0填充编号 + * + * @param sourceNumber + * @return + */ + private String fillByZero(int sourceNumber) { + if (sourceNumber < 10) { + return "000" + sourceNumber; + } else if (sourceNumber < 100) { + return "00" + sourceNumber; + } else if (sourceNumber < 1000) { + return "0" + sourceNumber; + } else { + return sourceNumber + ""; + } + } + + @Override + public IPage getEntrustmentVOPage(IPage page, QueryWrapper qw) { + IPage r = baseMapper.getEntrustmentVOPage(page, qw); + + for (EntrustmentVO evo : r.getRecords()) { + int status = evo.getStatus(); + String statusDesc = EntrustmentStatusConstants.getStatusDescription(status); + evo.setStatusDescription(statusDesc); + + int prevStatus = evo.getPreviousStatus(); + String prevStatusDesc = EntrustmentStatusConstants.getStatusDescription(prevStatus); + evo.setPreviousStatusDescription(prevStatusDesc); + } + return r; + } + + @Override + public List getEntrustmentVOList(QueryWrapper qw) { + List r = baseMapper.getEntrustmentVOList(qw); + + for (EntrustmentVO evo : r) { + evo.setStatusDescription(EntrustmentStatusConstants.getStatusDescription(evo.getStatus())); + evo.setPreviousStatusDescription(EntrustmentStatusConstants.getStatusDescription(evo.getPreviousStatus())); + } + return r; + } + + @Override + public EntrustmentVO getEntrustmentVOById(String id) { + EntrustmentVO evo = baseMapper.getEntrustmentVOById(id); + evo.setStatusDescription(EntrustmentStatusConstants.getStatusDescription(evo.getStatus())); + evo.setPreviousStatusDescription(EntrustmentStatusConstants.getStatusDescription(evo.getPreviousStatus())); + return evo; + } + + + /** + * 取指定环节可用的用户列表 + * 当流程进行到某个环节的时候, 需要某个用户对这个环节进行处理(通过或不通过)。 + * 这里取可用的用户列表 + *

+ * 涉及到的环境有以下几个: + * 1、创建委托及提交 + * 委托的提交者就是委托的创建者。不存在不通过的可能。 + * 2、审核 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审核权限 + * 3、审批 + * 审核者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托审批权限 + * 4、送检确认 + * 送检确认者有几个条件: (1)必须与委托的创建者是同一个机构, 或上级机构的人 (2)必须拥有委托送检确认权限 + * 5、受理 + * 受理者有几个条件: (1)必须是鉴定中心的工作人员 (2)必须拥有委托受理权限 + * + * @return + */ + @Override + public List taskAvailableUserList_Check() { + R> r = remoteUserService.innerGetUsersByPermission(CommonConstants.ORG_TREE_ROOT_ID, Arrays.asList(new String[]{"EntrustmentCheck"})); + return r.getData(); + } + + @Override + public List taskAvailableUserList_Approve() { + R> r = remoteUserService.innerGetUsersByPermission(CommonConstants.ORG_TREE_ROOT_ID, Arrays.asList(new String[]{"EntrustmentApprove"})); + return r.getData(); + } + + @Override + public List taskAvailableUserList_Confirm(String clientOrgId) { + R> r = remoteUserService.innerGetUsersByPermission(clientOrgId, Arrays.asList(new String[]{"EntrustmentConfirm"})); + return r.getData(); + } + + @Override + public List taskAvailableUserList_Accept() { + R> r = remoteUserService.innerGetUsersByPermission(CommonConstants.ORG_TREE_ROOT_ID, Arrays.asList(new String[]{"EntrustmentAccept"})); + return r.getData(); + } + + @Override + public long countByCaseId(String caseId) { + return baseMapper.selectCount(Wrappers.query() + .eq(StrUtil.isNotBlank(caseId), "case_id", caseId) + ); + + } + + @Override + public void Entrustment2Word(EntrustmentVO ev) throws IOException { + XWPFTemplate template = XWPFTemplate.compile("jdwts.docx").render(ev); + + FileOutputStream out = new FileOutputStream("out_example_jdwts.docx"); + template.write(out); + + out.flush(); + out.close(); + template.close(); + } + + /** + * 清除案件送检受理的数据 + */ + @Override + public void initCaseSendAccept() { + List caseEventList = caseEventService.list(); + List entrustmentList = this.list(); + List entrustOfThirdSysList = synchronizeDataService.list(); + for (CaseEvent caseEvent : caseEventList) { + caseEvidenceService.remove(Wrappers.query().eq("case_id", caseEvent.getId())); + caseEventService.removeById(caseEvent); + System.out.println("删除案件-----" + caseEvent.getCaseName()); + } + for (Entrustment entrustment : entrustmentList) { + entrustmentIdentificationMaterialService.remove(Wrappers.query().eq("entrustment_id", entrustment.getId())); + this.removeById(entrustment); + System.out.println("删除委托-----" + entrustment.getId()); + } + //第三方系统的数据,也清理掉 + entrustOfThirdSysList.forEach(item -> { + synchronizeMaterialVoService.remove(Wrappers.query() + .eq("entrust_id", item.getId())); + synchronizeDataService.removeById(item); + System.out.println("删除第三方委托" + item.getId()); + }); + + } + + @Override + public Boolean generateIdentifyItemsBook(String entrustId) { + Entrustment entrustment = this.getOne(Wrappers.query() + .eq("id", entrustId)); + List materialList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustId) + .orderByAsc("accept_no")); + Collections.sort(materialList, new Comparator() { + @Override + public int compare(EntrustmentIdentificationMaterial o1, EntrustmentIdentificationMaterial o2) { + return Integer.parseInt(o1.getAcceptNo().split("-")[2]) - Integer.parseInt(o2.getAcceptNo().split("-")[2]); + } + }); + CaseEvent caseEvent = caseEventService.getOne(Wrappers.query() + .eq("id", entrustment.getCaseId())); + String templatePath = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + entrustment.getId() + "/" + "鉴定事项确认书-" + entrustment.getAcceptNo(); + String templateName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_IDENTIFY_ITEMS_CONFIRM_LETTER_TEMPLATE); + String originalFilename = "鉴定事项确认书-" + entrustment.getAcceptNo(); + String fileType = ".docx"; + String QRContent = entrustment.getAcceptNo(); + List listNameCollection = new ArrayList<>(); + listNameCollection.add("materialList"); + listNameCollection.add("drugList"); + listNameCollection.add("materialAList"); + listNameCollection.add("materialRList"); + Map data = generateIdentifyItemsData(caseEvent, entrustment, materialList); + R ret = remoteGenerateWordService.generateWord(templateName, originalFilename, templatePath, fileType, QRContent, listNameCollection, false, data); + if (ret.getCode() == 0) { + System.out.println("鉴定事项书生成完毕..........................."); + return true; + } else { + return false; + } + } + //下面是生成鉴定事项确认书需要的一系列方法 + + /** + * 构造鉴定事项确认书的数据 + * + * @param caseEvent + * @param entrustment + * @param materialList + * @return + */ + private Map generateIdentifyItemsData(CaseEvent caseEvent, Entrustment entrustment, List materialList) { + Map dm = new HashMap<>(); + //构建案件部分需要的参数值 + dm.put("caseName", caseEvent.getCaseName()); + dm.put("caseNo", caseEvent.getThirdPartySysNo()); + dm.put("caseBrief", caseEvent.getCaseBrief()); + //构造委托部分需要的数据 + dm.put("clientOrgName", entrustment.getClientOrgName());//委托单位 + dm.put("identificationNo", entrustment.getAcceptNo());//受理编号 + + dm.put("materialDes", buildMaterialDes(materialList));//检材描述 + dm.put("identifyReq", buildIdentfyReq(materialList).toString());//鉴定要求 + dm.put("identifyMethod", "委托鉴定单位未指定");//鉴定方法 + dm.put("oldIdentfyStatus", entrustment.getOldIdentificationResult());//原鉴定情况 + dm.put("identitfyLimit", "鉴定受理之日起15个工作日(检材疑难、复杂或数量较大的,或另有规定的除外)。");//鉴定时限 + dm.put("giveWay", changePublishWayToZhCn(entrustment.getReportReceiveMode()));//文书方法方式 + dm.put("disposalWay", getMaterialDisposalWay());//检材处置方式 + dm.put("deliverStatement", "本人及所属委托鉴定单位忠于案(事)件事实,保证检材及相关资料真实、合法,如有虚假,由本人及所属委托鉴定单位承担相关法律责任。");//送检人声明 + dm.put("sendDate", LocalDateTimeUtil.format(entrustment.getDeliverTime(), "yyyy年MM月dd日"));//送检日期 + dm.put("identityStatement", "本鉴定机构工作遵循公正独立、程序规范、方法科学、结论准确的原则,严格履行质量承诺。");//鉴定机构声明 + dm.put("acceptDate", LocalDateTimeUtil.format(entrustment.getAcceptTime(), "yyyy年MM月dd日"));//受理日期 + + dm.put("materialList", getMaterialBookVoList(materialList));//检材列表 + //设置取样方法 + dm.put("samplingMethod", getSamplingMethod(materialList)); + dm.put("drugList", getDrugNameList(materialList));//毒品筛查列表 + //构建送检人1的信息 + dm.put("deliverer1Name", entrustment.getDeliverer1Name());//姓名 + dm.put("deliverer1Position", entrustment.getDeliverer1Position());//职务 + dm.put("deliverer1Cert", entrustment.getDeliverer1Cert());//证件类型 + dm.put("deliverer1Id", entrustment.getDeliverer1Id());//证件号码 + dm.put("deliverer1Phone", entrustment.getDeliverer1Phone());//电话号码 + //构建送检人2的信息 + dm.put("deliverer2Name", entrustment.getDeliverer2Name());//姓名 + dm.put("deliverer2Position", entrustment.getDeliverer2Position());//职务 + dm.put("deliverer2Cert", entrustment.getDeliverer2Cert());//证件类型 + dm.put("deliverer2Id", entrustment.getDeliverer2Id());//证件号码 + dm.put("deliverer2Phone", entrustment.getDeliverer2Phone());//电话号码 + + //设置流转单得属性值 + dm.put("materialACount", getCountForAnyRet(materialList, "A").size());//分析样检材总的份数 + dm.put("materialRCount", getCountForAnyRet(materialList, "R").size());//留存样检材总的份数 + + dm.put("materialAList", getCountForAnyRet(materialList, "A"));//留存样检材总的份数 + dm.put("materialRList", getCountForAnyRet(materialList, "R"));//留存样检材总的份数 + + dm.put("materialMount", getAllMaterialMount(materialList, "A"));//检材总的质量-分析样 + dm.put("materialMount1", getAllMaterialMount(materialList, "R"));//检材总的质量-留存样 + dm.put("ac_yy", entrustment.getAcceptTime().getYear());//受理年 + dm.put("ac_mm", entrustment.getAcceptTime().getMonthValue());//受理月 + dm.put("ac_day", entrustment.getAcceptTime().getDayOfMonth());//受理日 + //条形码 因为调用feign接口的原因,图片传输过程中会受影响,这里改为在生成的地方再生成 + return dm; + } + + //文书发放方式转中文 + private String changePublishWayToZhCn(String flag) { + String ret = ""; + switch (flag) { + case "0": + ret = "自取"; + break; + case "2": + ret = "邮政专递EMS(到付)"; + break; + case "3": + ret = "机要寄递"; + break; + default: + ret = "未指定方式"; + break; + } + return ret; + } + + /** + * 分别求分析样是多少份,留存样是多少份 + * + * @param materialList + * @param flag + * @return + */ + private List getCountForAnyRet(List materialList, String flag) { + List anList = materialList.stream().filter(item -> { + //不能使用复称的值来判断分析样了,因为有可能不复称 +// if(item.getSample1RepeatWeigh()!=null&&item.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO)>0) +// { +// return true; +// }else { +// return false; +// } + if (item.getSample1Quantity() != null && item.getSample1Quantity().compareTo(BigDecimal.ZERO) > 0) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + List rtList = materialList.stream().filter(item -> { +// if(item.getSample2RepeatWeigh()!=null&&item.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO)>0) +// { +// return true; +// }else { +// return false; +// } + if (item.getSample2Quantity() != null && item.getSample2Quantity().compareTo(BigDecimal.ZERO) > 0) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + if (flag.equals("A")) { + return anList; + } else { + return rtList; + } + } + + //返回取样方法的描述 + private String getSamplingMethod(List materialList) { + int anCount = getCountForAnyRet(materialList, "A").size(); + int reCount = getCountForAnyRet(materialList, "R").size(); + String ret = ""; + if (anCount > 0 & reCount > 0) { + ret = "将检材分装为分析样、留存样"; + } else if (anCount > 0) { + ret = "检材全部为分析样"; + } else { + ret = "检材全部为留存样"; + } + return ret; + } + + /** + * 构造封装质量 + * + * @param materialList + * @param flag + * @return + */ + private BigDecimal getAllMaterialMount(List materialList, String flag) { + BigDecimal mount1 = new BigDecimal(0); + BigDecimal mount2 = new BigDecimal(0); + for (EntrustmentIdentificationMaterial item : materialList) { + //如果有复称质量,取复称质量,如果没有就取sample的质量 + if (item.getSample1RepeatWeigh() != null) { + mount1 = mount1.add(item.getSample1RepeatWeigh()); + //如果单位不是克或者毫克,就无法统计总质量 + } else { + if (item.getUnit().equals("克")) { + mount1 = mount1.add(item.getSample1Quantity()); + } + if (item.getUnit().equals("毫克")) { + mount1 = mount1.add(item.getSample1Quantity().multiply(new BigDecimal(1000))); + } + } + if (item.getSample2RepeatWeigh() != null) { + mount2 = mount2.add(item.getSample2RepeatWeigh()); + } else { + if (item.getUnit().equals("克")) { + mount2 = mount2.add(item.getSample2Quantity()); + } + if (item.getUnit().equals("毫克")) { + mount2 = mount2.add(item.getSample2Quantity().multiply(new BigDecimal(1000))); + } + } + } + ; + if (flag.equals("A"))//分析样 + { + return mount1; + } else if (flag.equals("R"))//留存样 + { + return mount2; + } else { + return mount1.add(mount2);//分析样+留存样 + } + } + + //构造鉴定事项确认书文书中的检材列表 + private List getMaterialBookVoList(List materialList) { + List materialListForBookVoList = new ArrayList<>(); + materialList.forEach(item -> { + MaterialListForBookVo eg = new MaterialListForBookVo(); + eg.setAcceptNo(item.getAcceptNo()); + eg.setIndexNo(item.getShortNameDes() + "检材"); + eg.setMaterialName(item.getName()); + eg.setFormName(StringUtils.isNotBlank(item.getColor()) ? item.getColor() + item.getFormName() : "" + item.getFormName()); + eg.setSpecies(item.getTypeName()); + eg.setPack(item.getPack()); + BigDecimal totalSampleMass = new BigDecimal(0); + + //因为现在有的检材可以不用复称,例如送来的一支电子烟,所以我们用送检的数量与单位进行描述即可 + if (item.getSample1RepeatWeigh() == null || item.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) == 0) { + eg.setAnalysisSampleDes(item.getSample1Quantity() + item.getUnit()); + totalSampleMass = item.getSample1Quantity(); + if (item.getSample2Present()) { + eg.setRetainedSampleDes(item.getSample2Quantity() + item.getUnit()); + totalSampleMass.add(item.getSample2Quantity()); + } else { + eg.setRetainedSampleDes(new BigDecimal(0) + item.getUnit()); + } + eg.setTotalSampleDes(totalSampleMass + item.getUnit()); + } else { + eg.setAnalysisSampleDes(item.getSample1RepeatWeigh() + "克"); + eg.setRetainedSampleDes(item.getSample2RepeatWeigh() + "克"); + eg.setTotalSampleDes((item.getSample1RepeatWeigh() == null ? new BigDecimal(0) : item.getSample1RepeatWeigh()).add(item.getSample2RepeatWeigh() == null ? new BigDecimal(0) : item.getSample2RepeatWeigh()) + "克"); + } + materialListForBookVoList.add(eg); + }); + return materialListForBookVoList; + } + //构造鉴定委托书文书中的检材列表 + + //检材处置方式 + private List getMaterialDisposalWay() { + List retList = new ArrayList<>(); + retList.add("1.将体外检材(缴获物)分装为分析样(用于鉴定)和留存样(封存备查),并保证该两份样本之间的一致性。检材不足或不能分装时全部取为分析样,无留存样。"); + retList.add("2.除非特别约定,体内检材(生物样本)不分装,全部取为分析样,无留存样。"); + retList.add("3.鉴定完毕后检材不退回,委托鉴定单位需要保留物证时请勿全部送检。"); + return retList; + } + + /** + * 构建检材描述和鉴定要求 + * + * @param materialList + * @return + */ + @Override + public String buildMaterialDes(List materialList) { + //形状+包装 + Map> retGroup = materialList.stream().collect(Collectors.groupingBy(item -> item.getFormName() + item.getPackName())); + StringBuffer retSb = new StringBuffer(); + retGroup.forEach((k, v) -> { + EntrustmentIdentificationMaterial materialObj = v.get(0); + String typeName = ""; + if (materialObj.getTypeName().equals("inVitro")) { + typeName = "缴获物"; + } else if (materialObj.getTypeName().equals("inVivo")) { + typeName = "生物样本"; + } else { + typeName = "其他样本"; + } + String des = materialObj.getColor() + materialObj.getFormName() + typeName + v.size() + "份," + materialObj.getPackName() + "包装"; + retSb.append(des).append(","); + }); + retSb.delete(retSb.length() - 1, retSb.length()); + return retSb.toString(); + } + + //构建鉴定要求 //返回鉴定要求//设置为接口方法,其他地方可能会使用 + @Override + public String buildIdentfyReq(List materialList) { + Map> retGroup = materialList.stream().collect(Collectors.groupingBy(item -> item.getAnalysisOption() + "_" + getDrugNameMsg(item.getCandidateDrugs()))); + List desList = new ArrayList<>(); + StringBuffer retSb = new StringBuffer(); + retGroup.forEach((k, v) -> { + retSb.append(getNameDesStr(v)).append(","); + }); + retSb.delete(retSb.length() - 1, retSb.length()); + return retSb.toString(); + } + + @Override + public String buildEntrustReq(List materialList) { + Map> retGroup = materialList.stream().collect(Collectors.groupingBy(item -> item.getAnalysisOption() + "_" + getDrugNameMsg(item.getCandidateDrugs()))); + StringBuffer retSb = new StringBuffer(); + //先给group排一个序 + List>> orderedDataList = + orderAnalysisOptionAndDrug(retGroup); + //开始构建 + for (Map.Entry> mapping : orderedDataList) { + retSb.append(getNameDesStrForEntrust(mapping.getValue())).append(","); + } + retSb.delete(retSb.length() - 1, retSb.length()); + return retSb.toString(); + } + + //对分析项目+目标物的组合进行排序,优先描述小的 + private List>> orderAnalysisOptionAndDrug(Map> targetMapData) { + List>> retList = + new ArrayList>>(targetMapData.entrySet()); + Collections.sort(retList, new Comparator>>() { + @Override + public int compare(Map.Entry> o1, + Map.Entry> o2) { + //我们将这个数组进行排序,选出时间最早的 + EntrustmentIdentificationMaterial m1 = getMinMaterial(o1.getValue()).get(0); + EntrustmentIdentificationMaterial m2 = getMinMaterial(o2.getValue()).get(0); + return m1.getCreateTime().compareTo(m2.getCreateTime()); + } + }); + return retList; + } + + //对检材排序,找出最早录入的 + private List getMinMaterial(List targetList) { + Collections.sort(targetList, new Comparator() { + @Override + public int compare(EntrustmentIdentificationMaterial o1, EntrustmentIdentificationMaterial o2) { + return o1.getCreateTime().compareTo(o2.getCreateTime()); + } + }); + return targetList; + } + + private String getDrugNameMsg(List drugLites) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < drugLites.size(); i++) { + DrugLite drugLite = (DrugLite) JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(drugLites.get(i))), DrugLite.class); + sb.append(drugLite.getName()); + } + return sb.toString(); + } + + public String getNameDesStr(List targetList) { + //格式 + //对 xx号,xx号检材中的xx1、xx2进行 xx 分析, + //对1号、2号检材中的海洛因、甲基苯丙胺进行定量分析 + // 1.定性,2.定量 3.定性定量 4.关联性性 5.其他 + StringBuffer sbMaterialName = new StringBuffer(); + StringBuffer sbDrugDes = new StringBuffer(); + StringBuffer sbAnalysisDes = new StringBuffer(); + int executeCount = 0; + for (EntrustmentIdentificationMaterial materialObj : targetList) { + sbMaterialName.append(materialObj.getShortNameDes()).append(","); + //只执行一次且执行一次 + if (executeCount == 0) { + String drugToString = JSONArray.toJSONString(materialObj.getCandidateDrugs()); + List drugLiteList = JSONArray.parseArray(drugToString, DrugLite.class); + drugLiteList.forEach(item -> { + sbDrugDes.append(item.getName()).append("、"); + }); + sbDrugDes.delete(sbDrugDes.length() - 1, sbDrugDes.length());//删除多余的连接号 + sbAnalysisDes.append(getZhCnName(materialObj.getAnalysisOption())); + } + executeCount++; + } + ; + sbMaterialName.delete(sbMaterialName.length() - 1, sbMaterialName.length()); + String req1 = "对" + sbMaterialName.toString() + "检材中的"; + String req2 = sbDrugDes.toString(); + String req3 = "进行" + sbAnalysisDes.toString() + "分析"; + return req1 + req2 + req3; + } + + public String getNameDesStrForEntrust(List targetList) { + //格式 + //对 xx号,xx号检材中的xx1、xx2进行 xx 分析, + //对1号、2号检材中的海洛因、甲基苯丙胺进行定量分析 + // 1.定性,2.定量 3.定性定量 4.关联性性 5.其他 + StringBuffer sbMaterialName = new StringBuffer(); + StringBuffer sbDrugDes = new StringBuffer(); + StringBuffer sbAnalysisDes = new StringBuffer(); + int executeCount = 0; + for (EntrustmentIdentificationMaterial materialObj : targetList) { + sbMaterialName.append(materialObj.getOrderNo1()).append(","); + //只执行一次且执行一次 + if (executeCount == 0) { + String drugToString = JSONArray.toJSONString(materialObj.getCandidateDrugs()); + List drugLiteList = JSONArray.parseArray(drugToString, DrugLite.class); + drugLiteList.forEach(item -> { + sbDrugDes.append(item.getName()).append("、"); + }); + sbDrugDes.delete(sbDrugDes.length() - 1, sbDrugDes.length());//删除多余的连接号 + sbAnalysisDes.append(getZhCnName(materialObj.getAnalysisOption())); + } + executeCount++; + } + ; + sbMaterialName.delete(sbMaterialName.length() - 1, sbMaterialName.length()); + String req1 = "对" + sbMaterialName.toString() + "中的"; + String req2 = sbDrugDes.toString(); + String req3 = "进行" + sbAnalysisDes.toString() + "分析"; + return req1 + req2 + req3; + } + + //获取分析项目的中文名字 + private String getZhCnName(int value) { + String retName = ""; + switch (value) { + case 1: + retName = "定性"; + break; + case 2: + retName = "定量"; + break; + case 3: + retName = "定性定量"; + break; + case 4: + retName = "关联性"; + break; + case 5: + retName = "其他"; + break; + } + return retName; + } + + /** + * 获取毒品筛查列表 + * + * @param targetList + * @return + */ + private List getDrugNameList(List targetList) { + List retList; + List allDrugLite = new ArrayList<>(); + targetList.forEach(item -> { + String drugToString = JSONArray.toJSONString(item.getCandidateDrugs()); + List drugLiteList = JSONArray.parseArray(drugToString, DrugLite.class); + drugLiteList.forEach(drugLite -> { + allDrugLite.add(drugLite); + }); + }); + retList = allDrugLite.stream().filter(distinctKey(i -> i.getName())).collect(Collectors.toList()); + return retList; + } + + /** + * 获取文书名称 + * + * @param entrustId + * @param whatBook entrust-委托书 identItemBook-鉴定事项确认书 identfyBook-鉴定书 + * @return + */ + @Override + public String getBookNameByEntrustId(String entrustId, String whatBook) { + //先判断需要的文书是否在OSS上存在,如果存在,直接返回地址,如果不存在,则需要生成 + String retBookName = ""; + Entrustment entrustment = this.getById(entrustId); + switch (whatBook) { + case "entrust": + retBookName = OSSDirectoryConstants.DOCUMENT_ENTRUSTMENT_DIRECTORY + "/" + entrustId + "/" + "鉴定委托书-" + entrustment.getEntrustmentNo() + ".pdf"; + break; + case "identItemBook": + retBookName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + entrustment.getId() + "/" + "鉴定事项确认书-" + entrustment.getAcceptNo() + ".docx"; + break; + case "identfyBook": + retBookName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + entrustment.getId() + "/" + "鉴定文书-" + entrustment.getAcceptNo() + ".docx"; + break; + } + try { + if (!ossFile.objectExist(retBookName)) { + //不存在就生成一个 + if ((whatBook.equals("identItemBook") || whatBook.equals("identfyBook")) && this.generateIdentifyItemsBook(entrustId)) { + return retBookName; + } else if (whatBook.equals("entrust") && GenerateEntrustmentLetterPDF(this.getEntrustmentVOById(entrustId))) { + return retBookName; + } else { + throw new RuntimeException("生成文书【" + retBookName + "】书失败:" + entrustId); + } + } + } catch (Exception exception) { + exception.printStackTrace(); + throw new RuntimeException("生成鉴定书失败:" + exception.getMessage()); + } + return retBookName; + } + + /** + * 检验完成 + * + * @param entrustId + * @return + */ + @Override + public boolean testsFinish(String entrustId) { + Entrustment entrustment = this.baseMapper.selectOne(Wrappers.query() + .eq("id", entrustId)); + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_TEST_FINISH.getStatus()); + return this.updateById(entrustment); + } + + /** + * 获取委托书各状态的数量 + * + * @param statues + */ + @Override + public Integer getEntrustStatusCount(List statues, DLPUser dlpUser) { + if (dlpUser.isStaff()) { + return this.list(Wrappers.query().in("status", statues)).size(); + } else { + String orgId = dlpUser.getOrgId(); + return this.list(Wrappers.query() + .in("status", statues) + .eq("client_org_id", orgId)).size(); + } + + } + + @Override + public Boolean checkDeliverPhoto(String entrustId) { + String path = OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY + "/" + entrustId + "/" + OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY_DELIVER; + List fileList = ossFile.fileList(path); + if (fileList.size() > 0) { + return true; + } else { + return false; + } + } + + @Override + public Boolean getDeliverMergePhoto(String entrustId, String acceptNo, String caseName, String deliverer1Name, String deliverer2Name) { + //String path=OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY+"/"+entrustId+"/"+OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY_DELIVER; + //先判断如果没有生成,我们就生成,如果生成了,我们就直接取 + return remoteGenerateWordService.genDeliverCertPhoto(entrustId, acceptNo, caseName, deliverer1Name, deliverer2Name); + } + +// @Override +// public String getMaterialMergePhoto(String entrustId, Integer groupCount) { +// //String path=OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY+"/"+entrustId+"/"+OSSDirectoryConstants.DOCUMENT_ACCEPT_DIRECTORY_DELIVER; +// //先判断如果没有生成,我们就生成,如果生成了,我们就直接取 +// Entrustment entrustment = this.getById(entrustId); +// CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId()); +// List materialList = entrustmentIdentificationMaterialService +// .list(Wrappers.lambdaQuery() +// .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId())); +// List materialIds = new ArrayList<>(); +// materialList.forEach(item -> { +// materialIds.add(item.getId()); +// }); +// String path = remoteGenerateWordService.genMaterialPhoto(entrustId, materialIds, caseEvent.getCaseName(), entrustment.getAcceptNo(), groupCount); +// +// return path; +// } + // + + @Override + public Boolean historyDataToTransSys(String status, List entrustIds) { + log.info("参数:status={} entrustIds={}", status, entrustIds); + List historyEntrustList = this.list(Wrappers.lambdaQuery() + .eq(Entrustment::getStatus, status) + //.eq(Entrustment::getDataSources, 1) + .in(Entrustment::getId, entrustIds)); + System.out.println("本次同步历史数据:" + historyEntrustList.size() + "条"); + log.info("本次同步历史数据:{} 条", historyEntrustList.size()); + List saveToTransObj = new ArrayList<>(); + historyEntrustList.forEach(item -> { + //我们需要查出该委托对应的受理检材 + List materialList = entrustmentIdentificationMaterialService + .list(Wrappers.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, item.getId())); + materialList.forEach(material -> { + //将检材构建为sample对象,并传递到流转系统 + saveToTransObj.add(genSampleObject(material)); + }); + item.setIsTrans(1);//流转后,转变为10 + }); + System.out.println("本次检材数量:" + saveToTransObj.size() + "个"); + log.info("本次检材数量:{} 条", saveToTransObj.size()); + R r = remoteSampleService.enterSample(saveToTransObj); + log.info("更新委托的状态:{} 条", historyEntrustList.size()); + this.updateBatchById(historyEntrustList); + + return true; + } + + //检查委托下的检材是否复秤 + @Override + public boolean checkRepeatWeigh(Entrustment _entrustment) { + List materialList = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, _entrustment.getId()) + .in(EntrustmentIdentificationMaterial::getUnit, "克", "毫克")); + List noWeighMaterialList = new ArrayList<>(); + materialList.forEach(item -> { + + if (item.getSample1RepeatWeigh() != null) { + if (item.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) <= 0) { + noWeighMaterialList.add(item); + } + } else { + noWeighMaterialList.add(item); + } + if (item.getProvidedSample2Present()) { + // + if (item.getSample2RepeatWeigh() != null) { + if (item.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) <= 0) { + noWeighMaterialList.add(item); + } + } else { + noWeighMaterialList.add(item); + } + } + }); + if (noWeighMaterialList.size() > 0) { + return true; + } else return false; + } + // + + @Override + public Boolean updateImportData(String flag) { + List thirdSysList = synchronizeDataService.list(); + List thirdMaterialList = synchronizeMaterialVoService.list(); + List caseUpdateList = new ArrayList<>(); + List entrustUpdateList = new ArrayList<>(); + List materialUpdateList = new ArrayList<>(); + + if (flag.equals("0")) { + thirdSysList.forEach(item -> { + Entrustment entrustObj = this.getById(item.getEntrustMainId()); + entrustObj.setDeliverer1Phone(item.getDeliverer1Phone()); + entrustObj.setDeliverer2Phone(item.getDeliverer2Phone()); + CaseEvent caseEventObj = caseEventService.getById(entrustObj.getCaseId()); + caseEventObj.setCaseBrief(item.getCaseRemark()); + caseEventObj.setThirdPartySysNo(item.getCaseCode()); + caseUpdateList.add(caseEventObj); + entrustUpdateList.add(entrustObj); + //更新检材的数据 + }); + log.info("共计更新案件案情简要信息{}条", caseUpdateList.size()); + log.info("共计更新送检人电话信息{}条", entrustUpdateList.size()); + caseEventService.updateBatchById(caseUpdateList); + this.updateBatchById(entrustUpdateList); + } + if (flag.equals("1")) { + thirdMaterialList.forEach(item -> { + EntrustmentIdentificationMaterial materialObj = entrustmentIdentificationMaterialService.getById(item.getId()); + if (item.getAmount() != null) { + materialObj.setSample1Quantity(item.getAmount()); + } else { + materialObj.setSample1Quantity(item.getAnalysisSampleAmount()); + } + materialUpdateList.add(materialObj); + //materialObj.setSample2Quantity(item.getRetainedSampleAmount()); + }); + log.info("共计更新检材信息 {} 条", materialUpdateList.size()); + entrustmentIdentificationMaterialService.updateBatchById(materialUpdateList); + } + + return true; + } + + private Sample genSampleObject(EntrustmentIdentificationMaterial material) { + Sample sample1 = new Sample(); + sample1.setId(IdWorker.get32UUID().toUpperCase()); + sample1.setIdentificationMaterialId(material.getId()); + sample1.setSource("entrustment-history"); + //sample1.setSampleNo(entrustmentIdentificationMaterial.getSample1No()); + sample1.setSampleNo(material.getAcceptNo()); + sample1.setCandidateDrugs(material.getCandidateDrugs()); + sample1.setFundName(material.getFundName()); + sample1.setFundQuantity(material.getSample1FundQuantity()); + sample1.setFundUnit(material.getFundUnit()); + sample1.setQuantity(material.getSample1Quantity()); + sample1.setUnit(material.getUnit()); + //sample1.setAdditionalProperties(material.getAdditionalProperties()); + sample1.setDrawWay(material.getDrawWay()); + sample1.setBoxId(material.getSample1BoxId()); + //sample1.setSampleType(sb1.getSampleType()); + sample1.setStorageMethod(material.getStorageMethod()); + sample1.setAcceptTime(material.getAcceptTime()); + + sample1.setSampleType("A");//设置类型 + sample1.setEntrustmentId(material.getEntrustmentId()); //设置任务ID + sample1.setHolder("1");//设置一个初始化账户 + sample1.setOrgId("0");//机构默认为分中心 + sample1.setName(material.getName()); + sample1.setAcceptNo(material.getAcceptNo()); + return sample1; + } + + private Predicate distinctKey(Function key) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(key.apply(t), Boolean.TRUE) == null; + } + + @Override + public Entrustment bizSubmitter_Save(Entrustment entrust, DLPUser dlpUser) { + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + throw new RuntimeException("委托已经提交, 不能再进行修改"); + } + +// List pis = entrustment.getProcessInfo(); +// if (pis == null) { +// pis = new ArrayList(); +// } +// if (pis.size() == 0) { +// UpdateInfo pi = new UpdateInfo(dlpUser.getId(), +// dlpUser.getName(), +// dlpUser.getOrgId(), +// dlpUser.getOrgName(), +// "已创建", +// 1, entrustment.getStatus()); +// pis.add(pi); +// } +// entrustment.setProcessInfo(pis); + + System.out.println(String.format("保存委托, entrust.getCandidateDrugs()=%s", entrust.getCandidateDrugs())); + + + //-- 更新送检员表的信息 + if (org.apache.commons.lang3.StringUtils.isNotBlank(entrust.getDeliverer1Name())) { + Deliverer deliverer1 = new Deliverer(); + deliverer1.setOwnerUserId(dlpUser.getId()); + deliverer1.setName(entrust.getDeliverer1Name()); + deliverer1.setPosition(entrust.getDeliverer1Position()); + deliverer1.setCert(entrust.getDeliverer1Cert()); + deliverer1.setIdnum(entrust.getDeliverer1Id()); + deliverer1.setPhone(entrust.getDeliverer1Phone()); + remoteDeliverService.renew(deliverer1); + } + if (org.apache.commons.lang3.StringUtils.isNotBlank(entrust.getDeliverer2Name())) { + Deliverer deliverer2 = new Deliverer(); + deliverer2.setOwnerUserId(dlpUser.getId()); + deliverer2.setName(entrust.getDeliverer2Name()); + deliverer2.setPosition(entrust.getDeliverer2Position()); + deliverer2.setCert(entrust.getDeliverer2Cert()); + deliverer2.setIdnum(entrust.getDeliverer2Id()); + deliverer2.setPhone(entrust.getDeliverer2Phone()); + remoteDeliverService.renew(deliverer2); + } + + //------------------- + + if (dlpUser.isStaff() && dlpUser.HasPermission("EntrustmentAidInput")) { + // 是代录员, clientOrgId 由用户提供 + } else { + // 不是代录, clientOrgId 被系统强制指定为用户所属机构 id + entrust.setClientOrgId(dlpUser.getOrgId()); + } + //------------------- + // 更新数据库表数据 + //------------------- + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrust.getId()); // 查询条件是 id 相等 + +// updateWrapper.set("case_id", entrust.getCaseId()); // CaseId 不能修改 +// updateWrapper.set("entrustment_no", entrust.getEntrustmentNo()); // EntrustmentNo 不能修改 +// updateWrapper.set("process_instance_id", entrust.getProcessInstanceId()); // 不能修改 +// updateWrapper.set("entrustment_time", entrust.getEntrustmentTime()); // 不能修改 +// updateWrapper.set("client_org_id", entrust.getClientOrgId()); +// updateWrapper.set("submitter", entrust.getSubmitter()); +// updateWrapper.set("submit_time", entrust.getsubmitTime()); + updateWrapper.set("client_org_id", entrust.getClientOrgId()); + updateWrapper.set("client_org_name", entrust.getClientOrgName()); + updateWrapper.set("client_address", entrust.getClientAddress()); + updateWrapper.set("client_postcode", entrust.getClientPostcode()); + updateWrapper.set("client_tel", entrust.getClientTel()); + updateWrapper.set("client_fax", entrust.getClientFax()); + updateWrapper.set("identification_domain", entrust.getIdentificationDomain()); + updateWrapper.set("identification_org_name", entrust.getIdentificationOrgName()); + updateWrapper.set("qualitative_analysis", entrust.getQualitativeAnalysis()); + updateWrapper.set("quantitative_analysis", entrust.getQuantitativeAnalysis()); + updateWrapper.set("other_identification_requests", entrust.getOtherIdentificationRequests()); + //updateWrapper.set("candidate_drugs", entrust.getCandidateDrugs(), "javaType=String,jdbcType=VARCHAR,typeHandler=digital.laboratory.platform.entrustment.config.StringListJsonHandler"); + updateWrapper.set("candidate_drugs", entrust.getCandidateDrugs(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + updateWrapper.set("is_client_specified_method", entrust.getIsClientSpecifiedMethod()); + updateWrapper.set("client_specified_method", entrust.getClientSpecifiedMethod()); + updateWrapper.set("destructive_analysis", entrust.getDestructiveAnalysis()); + updateWrapper.set("other_identification_notes", entrust.getOtherIdentificationNotes()); + updateWrapper.set("reidentification", entrust.getReidentification()); + updateWrapper.set("old_identification_org_name", entrust.getOldIdentificationOrgName()); + updateWrapper.set("old_identification_document", entrust.getOldIdentificationDocument()); + updateWrapper.set("old_identification_result", entrust.getOldIdentificationResult()); + updateWrapper.set("reidentification_reason", entrust.getReidentificationReason()); + updateWrapper.set("avoid_identifier", entrust.getAvoidIdentifier(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + updateWrapper.set("specified_identifier", entrust.getSpecifiedIdentifier()); + updateWrapper.set("other_agreement", entrust.getOtherAgreement()); + + updateWrapper.set("identification_id", entrust.getIdentificationId()); + + updateWrapper.set("report_receive_mode", entrust.getReportReceiveMode()); + updateWrapper.set("sample_receive_mode", entrust.getSampleReceiveMode()); + + updateWrapper.set("comments", entrust.getComments()); + +// updateWrapper.set("deliverer1_user_id", entrust.getDeliverer1UserId()); + updateWrapper.set("deliverer1_name", entrust.getDeliverer1Name()); + updateWrapper.set("deliverer1_position", entrust.getDeliverer1Position()); + updateWrapper.set("deliverer1_cert", entrust.getDeliverer1Cert()); + updateWrapper.set("deliverer1_id", entrust.getDeliverer1Id()); + updateWrapper.set("deliverer1_phone", entrust.getDeliverer1Phone()); + +// updateWrapper.set("deliverer2_user_id", entrust.getDeliverer2UserId()); + updateWrapper.set("deliverer2_name", entrust.getDeliverer2Name()); + updateWrapper.set("deliverer2_position", entrust.getDeliverer2Position()); + updateWrapper.set("deliverer2_cert", entrust.getDeliverer2Cert()); + updateWrapper.set("deliverer2_id", entrust.getDeliverer2Id()); + updateWrapper.set("deliverer2_phone", entrust.getDeliverer2Phone()); + updateWrapper.set("entrustment_type", entrust.getEntrustmentType());//委托类型: 0=正常司法鉴定委托, 1=案前委托 + +// updateWrapper.set("process_info", entrustment.getProcessInfo(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"); + updateWrapper.set("process_info", entrustment.getProcessInfo(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + System.out.println("AppStartupRunner.getCfg(CommonConstants.DLP_CODE_IDENTIFY_ITEMS_DEFINE_AT)=" + AppStartupRunner.getCfg(CommonConstants.DLP_CODE_IDENTIFY_ITEMS_DEFINE_AT)); + System.out.println("other str=========entrustment"); + if (StrUtil.equalsIgnoreCase(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_IDENTIFY_ITEMS_DEFINE_AT), "entrustment")) { + + // 检验目的(药品筛选清单)定义在委托上 + // 我们复制一份到检材上, 以后可以从检材带入到实验室的样本中 + UpdateWrapper imUpdateWrapper = new UpdateWrapper(); + imUpdateWrapper.eq("entrustment_id", entrustment.getId()); // 查询条件是 entrustment_id 相等 + imUpdateWrapper.set("candidate_drugs", entrustment.getCandidateDrugs(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + entrustmentIdentificationMaterialService.update(null, imUpdateWrapper); + } + return entrustment; + } + + @Override + public Entrustment bizSubmitter_Apply(Entrustment entrust, DLPUser dlpUser) { + Entrustment result; + String oldUserId = SecurityUtils.getCurrentUserId(); + System.out.println(String.format("Old user id=%s", oldUserId)); + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + throw new RuntimeException("委托已经提交, 无须再次提交"); + } + + if (dlpUser.isStaff() && dlpUser.HasPermission("EntrustmentAidInput")) { + // 是代录员, clientOrgId 由用户提供 + if (StrUtil.isEmpty(entrust.getClientOrgId())) { + throw new RuntimeException("代录委托必须录入委托单位数据"); + } + } + + //---- 也许有新的修改, 先保存一下 + Entrustment saveResult = bizSubmitter_Save(entrust, dlpUser); + if (saveResult == null) { + //-- 保存失败 + result = saveResult; + } else {// 如果不由客户选择审核候选人, 系统自动把符合条件的员工都作为审核候选人 + if (!StrUtil.equalsIgnoreCase("1", AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_CLIENT_CHOICE_CHECKERS))) { + List users = this.taskAvailableUserList_Check(); + String candidateUser = ""; + for (SysUser u : users) { + if (candidateUser.length() > 0) { + candidateUser += ","; + } + candidateUser += u.getUserId(); + } + entrustment.setCheckCandidateUser(candidateUser); // 不使用用户提交的候选人名单 + } else { + if (StrUtil.isBlank(entrust.getCheckCandidateUser())) { + throw new RuntimeException("必须提供审批候选人名单"); + } + + entrustment.setCheckCandidateUser(entrust.getCheckCandidateUser()); // 使用用户提交的候选人名单 + }// entrustment.setSubmitter(SecurityUtils.getCurrentUserId()); + entrustment.setSubmitter(dlpUser.getId()); + entrustment.setSubmitTime(LocalDateTime.now()); + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 +//entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus()); + entrustment.setStatus(ProcessFlowMapper.getNextStatus(entrustment.getStatus(), 1)); + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已提交", + 1, entrustment.getStatus(), true); + pis.add(pi); + entrustment.setProcessInfo(pis);//-- 更新送检员表的信息 + if (org.apache.commons.lang3.StringUtils.isNotBlank(entrust.getDeliverer1Name())) { + Deliverer deliverer1 = new Deliverer(); + deliverer1.setOwnerUserId(dlpUser.getId()); + deliverer1.setName(entrust.getDeliverer1Name()); + deliverer1.setPosition(entrust.getDeliverer1Position()); + deliverer1.setCert(entrust.getDeliverer1Cert()); + deliverer1.setIdnum(entrust.getDeliverer1Id()); + deliverer1.setPhone(entrust.getDeliverer1Phone()); + remoteDeliverService.renew(deliverer1); + } + if (org.apache.commons.lang3.StringUtils.isNotBlank(entrust.getDeliverer2Name())) { + Deliverer deliverer2 = new Deliverer(); + deliverer2.setOwnerUserId(dlpUser.getId()); + deliverer2.setName(entrust.getDeliverer2Name()); + deliverer2.setPosition(entrust.getDeliverer2Position()); + deliverer2.setCert(entrust.getDeliverer2Cert()); + deliverer2.setIdnum(entrust.getDeliverer2Id()); + deliverer2.setPhone(entrust.getDeliverer2Phone()); + remoteDeliverService.renew(deliverer2); + }//------------------- +// 更新数据库表数据 +//------------------- +//提交审核的时候设置委托的编号 xy add + CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId());//String entrustNewNo=entrustmentService.getNewEntrustmentNo(caseEvent.getCaseNo()); + String entrustNewNo = this.getNewEntrustmentNo(); + entrustment.setEntrustmentNo(entrustNewNo);//提交审核的时候,我们生成鉴定要求 + List materialList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId()) + .orderByAsc("create_time")); + entrustment.setEntrustRequirement(this.buildEntrustReq(materialList)); + this.updateById(entrustment); + result = entrustment; + } + + return result; + } + + @Override + @Transactional + public Entrustment bizChecker_Claim(Entrustment entrust, DLPUser dlpUser) { + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus()) { + // 已经有人认领这个审核任务了 + throw new RuntimeException(String.format("委托不在待审核状态, 审核任务认领人: %s", entrustment.getCheckClaimUser())); + } + + String checkCandidateUsers[] = entrustment.getCheckCandidateUser().split(","); + boolean currentUserIsCandidate = false; + for (String candidateUser : checkCandidateUsers) { + if (candidateUser.equals(dlpUser.getId())) { + currentUserIsCandidate = true; + break; + } + } + if (!currentUserIsCandidate) { + throw new RuntimeException("您不是候选审核用户, 无权进行审核"); + } + + // 检查一下流程实例创建没有。刚创建的委托只有提交时才创建流程实例, 其他环节流转过来的委托在之前已经创建过了 + /* + if (StrUtil.isBlank(entrustment.getProcessInstanceId())) { + throw new RuntimeException("系统错误, 这个委托没有对应的流程实例"); + } + */ + + + entrustment.setCheckClaimUser(dlpUser.getId()); + entrustment.setCheckClaimTime(LocalDateTime.now()); + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()); + + //------------------- + // 更新数据库表数据 + //------------------- + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + updateWrapper.set("check_claim_user", entrustment.getCheckClaimUser()); + updateWrapper.set("check_claim_time", entrustment.getCheckClaimTime()); + updateWrapper.set("status", entrustment.getStatus()); + updateWrapper.set("previous_status", entrustment.getPreviousStatus()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + @Transactional + public Entrustment bizChecker_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser) { + if (opCode == null) { + throw new RuntimeException(String.format("审核结果必须提供 opCode")); + } + + if (StrUtil.isBlank(entrust.getCheckComments())) { + throw new RuntimeException(String.format("必须提供审核意见")); + } + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (!dlpUser.getId().equals(entrustment.getCheckClaimUser())) { + throw new RuntimeException(String.format("委托的审核任务是由其他人认领的。认领用户是: %s", entrustment.getCheckClaimUser())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) { + throw new RuntimeException("委托不在待审核状态"); + } + + // 检查检材的审核状态 + if (opCode == 1) { + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + for (EntrustmentIdentificationMaterial im : imList) { + if ((im.getCheckPassed() == null) || (im.getCheckPassed() == 0)) { + throw new RuntimeException("有检材还没有审核"); + } else if (im.getCheckPassed() == -1) { + throw new RuntimeException("有检材审核没有通过"); + } else if (im.getCheckPassed() != 1) { + // 审核状态不是 null/-1/0/1, 这个状态很奇怪 + throw new RuntimeException("有检材审核状态不正确"); + } + } + } + + // 是否由审核人选择审批人, 系统自动把符合条件的员工都作为审批候选人 + if (!StrUtil.equalsIgnoreCase("1", AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_CHECKER_CHOICE_APPROVERS))) { + List users = this.taskAvailableUserList_Approve(); + String candidateUser = ""; + for (SysUser u : users) { + if (candidateUser.length() > 0) { + candidateUser += ","; + } + candidateUser += u.getUserId(); + } + entrustment.setApproveCandidateUser(candidateUser); // 不使用用户提交的候选人名单 + } else { + if (StrUtil.isBlank(entrust.getApproveCandidateUser())) { + throw new RuntimeException("必须提供审批候选人名单"); + } + entrustment.setApproveCandidateUser(entrust.getApproveCandidateUser()); // 使用用户提交的候选人名单 + } + + // 审核任务已经提交了, 转到新的环节 + int newStatus = -1; // 新的状态(环节) + { + newStatus = ProcessFlowMapper.getNextStatus(entrustment.getStatus(), opCode); + + if (opCode == 1) { + + } + + if (newStatus == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setCheckPassed(0); + im.setApprovePassed(0); + im.setAcceptPassed(0); + im.setAcceptNo(null); + entrustmentIdentificationMaterialService.setEntrustmentIdentificationMaterialStatusByEntrustment(im, entrustment.getId()); + } + + } + //退回后需标记 + if (opCode == -1) { + entrustment.setReturnOrNot(-1); + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setDestructiveAnalysis(entrust.getDestructiveAnalysis()); + entrustment.setOtherIdentificationNotes(entrust.getOtherIdentificationNotes()); + //entrustment.setOtherAgreement(entrust.getOtherAgreement()); + entrustment.setAvoidIdentifier(entrust.getAvoidIdentifier()); + entrustment.setComments(entrust.getComments()); + + entrustment.setCheckUser(dlpUser.getId()); + entrustment.setCheckTime(LocalDateTime.now()); + entrustment.setCheckComments(entrust.getCheckComments()); + entrustment.setCheckTimes(entrustment.getCheckTimes() + 1); // 审核次数加 1 + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(newStatus); // 新的状态(环节), 可能会是审批或提交前 + + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + if (opCode == 1) { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已审核", + opCode, entrustment.getStatus(), true); + + pis.add(pi); + } else { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "审核不通过", + opCode, entrustment.getStatus(), false, entrust.getCheckComments()); + + pis.add(pi); + } + entrustment.setProcessInfo(pis); + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + updateWrapper.set("destructive_analysis", entrustment.getDestructiveAnalysis()); + updateWrapper.set("other_identification_notes", entrustment.getOtherIdentificationNotes()); + updateWrapper.set("other_agreement", entrustment.getOtherAgreement()); + updateWrapper.set("avoid_identifier", entrustment.getAvoidIdentifier(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + updateWrapper.set("comments", entrustment.getComments()); + updateWrapper.set("return_or_not", entrustment.getReturnOrNot()); + + updateWrapper.set("check_user", entrustment.getCheckUser()); + updateWrapper.set("check_time", entrustment.getCheckTime()); + updateWrapper.set("check_comments", entrustment.getCheckComments()); + updateWrapper.set("check_times", entrustment.getCheckTimes()); + updateWrapper.set("approve_candidate_user", entrustment.getApproveCandidateUser()); + updateWrapper.set("status", entrustment.getStatus()); + updateWrapper.set("previous_status", entrustment.getPreviousStatus()); +// updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"); + updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + //让第三方系统完成审核-----------------------------------------------------------------------------开始 + try { + if (entrustment.getDataSources() == 1) { + if (opCode == 1) { + boolean ret = auditEntrustDataOfThirdSys("Province", entrustment.getId(), "/api/identify/entrust/{entrustId}/provinceAudit", "success", ""); + if (!ret) { + throw new RuntimeException(); + } + } else if (opCode == -1) { + boolean ret = auditEntrustDataOfThirdSys("Province", entrustment.getId(), "/api/identify/entrust/{entrustId}/provinceAudit", "fail", entrust.getCheckComments()); + if (!ret) { + throw new RuntimeException(); + } + } else { + System.out.println("不支持的审核类型参数"); + } + } + } catch (Exception e) { +// throw new RuntimeException(String.format("同步大数据平台审核出错,此次审核失败")); + } + + return entrustment; + } + + @Override + @Transactional + public Entrustment bizApprover_Claim(Entrustment entrust, DLPUser dlpUser) { + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus()) { + // 已经有人认领这个审批任务了 + throw new RuntimeException(String.format("委托不在待审批状态, 审批任务认领人: %s", entrustment.getApproveClaimUser())); + } + + String approveCandidateUsers[] = StringUtils.isNotBlank(entrustment.getApproveCandidateUser()) ? entrustment.getApproveCandidateUser().split(",") : new String[]{}; + + boolean currentUserIsCandidate = false; + for (String candidateUser : approveCandidateUsers) { + if (candidateUser.equals(dlpUser.getId())) { + currentUserIsCandidate = true; + break; + } + } + if (!currentUserIsCandidate) { + throw new RuntimeException("您不是候选审批用户, 无权进行审批"); + } + + // 检查一下流程实例创建没有。刚创建的委托只有提交时才创建流程实例, 其他环节流转过来的委托在之前已经创建过了 + /* + if (StrUtil.isBlank(entrustment.getProcessInstanceId())) { + throw new RuntimeException("系统错误, 这个委托没有对应的流程实例"); + } + */ + entrustment.setApproveClaimUser(dlpUser.getId()); + entrustment.setApproveClaimTime(LocalDateTime.now()); + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()); + + //------------------- + // 更新数据库表数据 + //------------------- + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + updateWrapper.set("approve_claim_user", entrustment.getApproveClaimUser()); + updateWrapper.set("approve_claim_time", entrustment.getApproveClaimTime()); + updateWrapper.set("status", entrustment.getStatus()); + updateWrapper.set("previous_status", entrustment.getPreviousStatus()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + @Transactional + public Entrustment bizApprover_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser) { + + if (opCode == null) { + throw new RuntimeException(String.format("审批必须提供 opCode")); + } + + if (StrUtil.isBlank(entrust.getApproveComments())) { + throw new RuntimeException(String.format("必须提供审批意见")); + } + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (!dlpUser.getId().equals(entrustment.getApproveClaimUser())) { + throw new RuntimeException(String.format("委托的审批任务是由其他人认领的。认领用户是: %s", entrustment.getCheckClaimUser())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) { + throw new RuntimeException("委托不在待审批状态"); + } + + // 检查检材的审批状态, 只有opCode==1才检查检材, 其他操作为回退, 不用管检材状态 + if (opCode == 1) { + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + for (EntrustmentIdentificationMaterial im : imList) { + if ((im.getApprovePassed() == null) || (im.getApprovePassed() == 0)) { + throw new RuntimeException("有检材还没有审批, 要先审批全部检材, 才能审批委托"); + } else if (im.getApprovePassed() == -1) { + throw new RuntimeException("有检材审批没有通过, 只有全部检材都审批通过, 才能审批委托"); + } else if (im.getApprovePassed() != 1) { + // 审核状态不是 null/-1/0/1, 这个状态很奇怪 + throw new RuntimeException("有检材审批状态不正确"); + } + } + } + // 审批任务已经提交了, 转到新的环节 + int newStatus = -1; // 新的状态(环节) + { + newStatus = ProcessFlowMapper.getNextStatus(entrustment.getStatus(), opCode); + if (newStatus == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setCheckPassed(0); + im.setApprovePassed(0); + im.setAcceptPassed(0); + entrustmentIdentificationMaterialService.setEntrustmentIdentificationMaterialStatusByEntrustment(im, entrustment.getId()); + } else if (newStatus == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setCheckPassed(0); + im.setApprovePassed(0); + im.setAcceptPassed(0); + entrustmentIdentificationMaterialService.setEntrustmentIdentificationMaterialStatusByEntrustment(im, entrustment.getId()); + } + } + //审批失败,需标记退回 + if (opCode == -2) { + entrustment.setReturnOrNot(-1); + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setApproveUser(dlpUser.getId()); + entrustment.setApproveTime(LocalDateTime.now()); + entrustment.setApproveComments(entrust.getApproveComments()); + entrustment.setApproveTimes(entrustment.getApproveTimes() + 1); // 审核次数加 1 + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(newStatus); // 新的状态(环节), 可能会是审批或提交前 + + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + if (opCode == 1) { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已审批", + opCode, entrustment.getStatus(), true); + pis.add(pi); + } else { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "审批不通过", + opCode, entrustment.getStatus(), false, entrust.getApproveComments()); + pis.add(pi); + } + entrustment.setProcessInfo(pis); + + this.updateById(entrustment); + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + //entrustment = entrustmentService.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + //第三方系统审批---------------------------------------------开始 + //需要判断是第三方系统的数据才可以做第三方的同步 + try { + if (entrustment.getDataSources() == 1) { + if (opCode == 1) { + boolean ret = auditEntrustDataOfThirdSys("SubCenter", entrustment.getId(), "/api/identify/entrust/{entrustId}/acceptAudit", "success", ""); + if (!ret) { + log.info("审批回写大数据平台数据未成功!{}", entrustment); + } + + } else if (opCode == -1) { + boolean ret = auditEntrustDataOfThirdSys("SubCenter", entrustment.getId(), "/api/identify/entrust/{entrustId}/acceptAudit", "fail", entrustment.getApproveComments()); + if (!ret) { + throw new RuntimeException(); + } + } else { + System.out.println("不支持的审批类型参数"); + } + } + + } catch (Exception e) { +// throw new RuntimeException(String.format("同步大数据平台审批出错,此次审批失败!")); + } finally { + if (entrustment.getDataSources() == 1 && opCode == 1) { + //将数据提升为待受理状态 + this.specialApprove(entrustment); + } + } + //第三方系统审批---------------------------------------------结束 + return entrustment; + } + + @Override + public Entrustment bizConfirm_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser) { + if (opCode == null) { + throw new RuntimeException(String.format("送检确认必须提供 opCode")); + } + + if (StrUtil.isBlank(entrust.getDeliverConfirmComments())) { + throw new RuntimeException(String.format("必须提供送检确认意见")); + } + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) { + throw new RuntimeException("委托不在待送检确认状态"); + } + + if (!dlpUser.isStaff()) { + // 不是分中心用户, 是普通用户, 必须是本单位的人才能确认送检 + if (!StrUtil.equalsIgnoreCase(entrustment.getClientOrgId(), dlpUser.getOrgId())) { + throw new RuntimeException("您只能对自己所在机构的委托进行送检确认"); + } + } + + + // 送检确认任务已经提交了, 转到新的环节 + int newStatus = -1; // 新的状态(环节) + { + newStatus = ProcessFlowMapper.getNextStatus(entrustment.getStatus(), opCode); + if (newStatus == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setCheckPassed(0); + im.setApprovePassed(0); + im.setAcceptPassed(0); + entrustmentIdentificationMaterialService.setEntrustmentIdentificationMaterialStatusByEntrustment(im, entrustment.getId()); + } + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setDeliverConfirmUser(dlpUser.getId()); + entrustment.setDeliverConfirmTime(LocalDateTime.now()); + entrustment.setDeliverConfirmComments(entrust.getDeliverConfirmComments()); + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(newStatus); // 新的状态(环节), 可能会是审批或提交前 + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + updateWrapper.set("deliver_confirm_user", entrustment.getDeliverConfirmUser()); + updateWrapper.set("deliver_confirm_time", entrustment.getDeliverConfirmTime()); + updateWrapper.set("deliver_confirm_comments", entrustment.getDeliverConfirmComments()); + updateWrapper.set("status", entrustment.getStatus()); + updateWrapper.set("previous_status", entrustment.getPreviousStatus()); +// updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"); + updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + public Entrustment bizDeliver_Save(Entrustment entrust, DLPUser dlpUser) { + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) { + throw new RuntimeException("委托不在待送检状态"); + } + + if (!StrUtil.equalsIgnoreCase(entrustment.getClientOrgId(), dlpUser.getOrgId())) { + throw new RuntimeException("您只能对自己所在机构的委托进行送检"); + } + //-- 更新送检员表的信息 + Deliverer deliverer = new Deliverer(); + deliverer.setOwnerUserId(dlpUser.getId()); + deliverer.setName(entrust.getDeliverer1Name()); + deliverer.setPosition(entrust.getDeliverer1Position()); + deliverer.setCert(entrust.getDeliverer1Cert()); + deliverer.setIdnum(entrust.getDeliverer1Id()); + deliverer.setPhone(entrust.getDeliverer1Phone()); + remoteDeliverService.renew(deliverer); + + deliverer = new Deliverer(); + deliverer.setOwnerUserId(dlpUser.getId()); + deliverer.setName(entrust.getDeliverer2Name()); + deliverer.setPosition(entrust.getDeliverer2Position()); + deliverer.setCert(entrust.getDeliverer2Cert()); + deliverer.setIdnum(entrust.getDeliverer2Id()); + deliverer.setPhone(entrust.getDeliverer2Phone()); + remoteDeliverService.renew(deliverer); + //------------------- + + + //------------------- + // 更新数据库表数据 + //------------------- + // entrustment.setDeliverer1UserId(entrust.getDeliverer1UserId()); + entrustment.setDeliverer1Name(entrust.getDeliverer1Name()); + entrustment.setDeliverer1Position(entrust.getDeliverer1Position()); + entrustment.setDeliverer1Cert(entrust.getDeliverer1Cert()); + entrustment.setDeliverer1Id(entrust.getDeliverer1Id()); + entrustment.setDeliverer1Phone(entrust.getDeliverer1Phone()); + // entrustment.setDeliverer2UserId(entrust.getDeliverer2UserId()); + entrustment.setDeliverer2Name(entrust.getDeliverer2Name()); + entrustment.setDeliverer2Position(entrust.getDeliverer2Position()); + entrustment.setDeliverer2Cert(entrust.getDeliverer2Cert()); + entrustment.setDeliverer2Id(entrust.getDeliverer2Id()); + entrustment.setDeliverer2Phone(entrust.getDeliverer2Phone()); + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + // updateWrapper.set("deliverer1_user_id", entrustment.getDeliverer1UserId()); + updateWrapper.set("deliverer1_name", entrustment.getDeliverer1Name()); + updateWrapper.set("deliverer1_position", entrustment.getDeliverer1Position()); + updateWrapper.set("deliverer1_cert", entrustment.getDeliverer1Cert()); + updateWrapper.set("deliverer1_id", entrustment.getDeliverer1Id()); + updateWrapper.set("deliverer1_phone", entrustment.getDeliverer1Phone()); + + // updateWrapper.set("deliverer2_user_id", entrustment.getDeliverer2UserId()); + updateWrapper.set("deliverer2_name", entrustment.getDeliverer2Name()); + updateWrapper.set("deliverer2_position", entrustment.getDeliverer2Position()); + updateWrapper.set("deliverer2_cert", entrustment.getDeliverer2Cert()); + updateWrapper.set("deliverer2_id", entrustment.getDeliverer2Id()); + updateWrapper.set("deliverer2_phone", entrustment.getDeliverer2Phone()); + + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + public Entrustment bizDeliver_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser) { + + if (opCode == null) { + throw new RuntimeException(String.format("送检操作必须提供 opCode")); + } + + { + if ((StrUtil.isBlank(entrust.getDeliverer1Name())) || + (StrUtil.isBlank(entrust.getDeliverer1Cert())) || (StrUtil.isBlank(entrust.getDeliverer1Id())) || + (StrUtil.isBlank(entrust.getDeliverer1Phone()))) { + throw new RuntimeException(String.format("送检人1 必须填写姓名、证件类型、证件号和电话号码")); + } + } + { + if ((StrUtil.isBlank(entrust.getDeliverer2Name())) || + (StrUtil.isBlank(entrust.getDeliverer2Cert())) || (StrUtil.isBlank(entrust.getDeliverer2Id())) || + (StrUtil.isBlank(entrust.getDeliverer2Phone()))) { + throw new RuntimeException(String.format("送检人2 必须填写姓名、证件类型、证件号和电话号码")); + } + } + + //-- 更新送检员表的信息 + Deliverer deliverer = new Deliverer(); + deliverer.setOwnerUserId(dlpUser.getId()); + deliverer.setName(entrust.getDeliverer1Name()); + deliverer.setPosition(entrust.getDeliverer1Position()); + deliverer.setCert(entrust.getDeliverer1Cert()); + deliverer.setIdnum(entrust.getDeliverer1Id()); + deliverer.setPhone(entrust.getDeliverer1Phone()); + remoteDeliverService.renew(deliverer); + + deliverer = new Deliverer(); + deliverer.setOwnerUserId(dlpUser.getId()); + deliverer.setName(entrust.getDeliverer2Name()); + deliverer.setPosition(entrust.getDeliverer2Position()); + deliverer.setCert(entrust.getDeliverer2Cert()); + deliverer.setIdnum(entrust.getDeliverer2Id()); + deliverer.setPhone(entrust.getDeliverer2Phone()); + remoteDeliverService.renew(deliverer); + //------------------- + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) { + throw new RuntimeException("委托不在待送检状态"); + } + + if (!dlpUser.isStaff()) { + if (!StrUtil.equalsIgnoreCase(entrustment.getClientOrgId(), dlpUser.getOrgId())) { + throw new RuntimeException("您只能对自己所在机构的委托进行送检"); + } + } + + // 送检任务已经提交了, 转到新的环节 + int newStatus = -1; // 新的状态(环节) + { + newStatus = ProcessFlowMapper.getNextStatus(entrustment.getStatus(), opCode); + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setDeliverer1Name(entrust.getDeliverer1Name()); + entrustment.setDeliverer1Position(entrust.getDeliverer1Position()); + entrustment.setDeliverer1Cert(entrust.getDeliverer1Cert()); + entrustment.setDeliverer1Id(entrust.getDeliverer1Id()); + entrustment.setDeliverer1Phone(entrust.getDeliverer1Phone()); + entrustment.setDeliverer2Name(entrust.getDeliverer2Name()); + entrustment.setDeliverer2Position(entrust.getDeliverer2Position()); + entrustment.setDeliverer2Cert(entrust.getDeliverer2Cert()); + entrustment.setDeliverer2Id(entrust.getDeliverer2Id()); + entrustment.setDeliverer2Phone(entrust.getDeliverer2Phone()); + + entrustment.setDeliverTime(LocalDateTime.now()); + entrustment.setDeliverSubmitter(dlpUser.getId()); + + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已送检", + opCode, entrustment.getStatus(), true); + + pis.add(pi); + entrustment.setProcessInfo(pis); + + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(newStatus); // 新的状态(环节), 可能会是受理 + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + // updateWrapper.set("deliverer1_user_id", entrustment.getDeliverer1UserId()); + updateWrapper.set("deliverer1_name", entrustment.getDeliverer1Name()); + updateWrapper.set("deliverer1_position", entrustment.getDeliverer1Position()); + updateWrapper.set("deliverer1_cert", entrustment.getDeliverer1Cert()); + updateWrapper.set("deliverer1_id", entrustment.getDeliverer1Id()); + updateWrapper.set("deliverer1_phone", entrustment.getDeliverer1Phone()); + + // updateWrapper.set("deliverer2_user_id", entrustment.getDeliverer2UserId()); + updateWrapper.set("deliverer2_name", entrustment.getDeliverer2Name()); + updateWrapper.set("deliverer2_position", entrustment.getDeliverer2Position()); + updateWrapper.set("deliverer2_cert", entrustment.getDeliverer2Cert()); + updateWrapper.set("deliverer2_id", entrustment.getDeliverer2Id()); + updateWrapper.set("deliverer2_phone", entrustment.getDeliverer2Phone()); + + updateWrapper.set("deliver_time", entrustment.getDeliverTime()); + updateWrapper.set("deliver_submitter", entrustment.getDeliverSubmitter()); + + updateWrapper.set("status", entrustment.getStatus()); + updateWrapper.set("previous_status", entrustment.getPreviousStatus()); +// updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"); + updateWrapper.set("process_info", entrustment.getProcessInfo(), "javaType=String,jdbcType=VARCHAR,typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + public void bizGetPDFEntrustmentLetter(String id, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse) { + + System.out.println("bizGenerateEntrustmentWord................."); + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + EntrustmentVO ev = getEntrustmentVOAndVaildData(id, dlpUser); + String entrustmentLetterFileName = "鉴定委托书" + "-" + ev.getEntrustmentNo(); + // 转换临时目录中的 word 文档为 PDF + String pdfFilePath = OSSDirectoryConstants.DOCUMENT_ENTRUSTMENT_DIRECTORY + "/" + ev.getId() + "/" + entrustmentLetterFileName + ".pdf"; + try { + if (!ossFile.objectExist(pdfFilePath)) { + GenerateEntrustmentLetterPDF(ev); + } + ossFile.fileGet(pdfFilePath, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(entrustmentLetterFileName)); + } catch (Exception e) { + System.out.println(String.format("minioFile objectExist() Exception. %s", e.getLocalizedMessage())); + e.printStackTrace(); + } + } + + /** + * 获取委托vo类,并验证数据是否合法 + * + * @param id + * @param dlpUser + * @return + */ + private EntrustmentVO getEntrustmentVOAndVaildData(String id, DLPUser dlpUser) { + EntrustmentVO ev = this.getEntrustmentVOById(id); + if (ev == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", id)); + } + + if (ev.getStatus() < EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) { + throw new RuntimeException("委托状态必须在[待送检]及之后才能打印鉴定委托书"); + } + + if (!dlpUser.isStaff()) { + if (!StrUtil.equalsIgnoreCase(ev.getClientOrgId(), dlpUser.getOrgId())) { + throw new RuntimeException("您只能打印自己所在机构的委托"); + } + } + return ev; + } + + /** + * 生成鉴定委托书 + * + * @return + */ + private boolean GenerateEntrustmentLetterPDF(EntrustmentVO ev /*, HttpServletRequest theHttpServletRequest, HttpServletResponse httpServletResponse*/) throws Exception { + System.out.println("bizGenerateEntrustmentWord................."); + + //try { + //--------------- + // 构造对象 Map + //Map dm = BeanMap.create(ev); //ClassUtils.objectToMap(ev); + Map dm = ClassUtils.objectToMap(ev); + + if (ev.getEntrustmentTime() == null) { + ev.setEntrustmentTime(LocalDateTime.now()); + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", ev.getId()); // 查询条件是 id 相等 + + updateWrapper.set("entrustment_time", ev.getEntrustmentTime()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托日期失败"); + } + } + + dm.put("entrustmentTime", LocalDateTimeUtil.format(ev.getEntrustmentTime(), "yyyy年MM月dd日")); + + List ems = entrustmentIdentificationMaterialService.getEntrustmentIdentificationMaterialVOList(Wrappers.query() + .eq("entrustment_id", ev.getId()).orderByAsc("im_no")); + + for (EntrustmentIdentificationMaterialVO eim : ems) { + if (StrUtil.isEmpty(eim.getFormName())) { // 如果找不到编码, 则是直接写的名字 + eim.setFormName(eim.getForm()); + } + } + //编码转换--- + dm.put("identificationMaterials", ems); + + SysOrg org = remoteOrgService.getById(ev.getClientOrgId()).getData(); + dm.put("clientOrg", ClassUtils.objectToMap(org)); + + List materialList = entrustmentIdentificationMaterialService.list( + Wrappers.query() + .eq("entrustment_id", ev.getId()) + .orderByAsc("create_time") + ); + //设置检材描述 + dm.put("materialDes", this.buildMaterialDes(materialList)); + //设置鉴定要求 + //dm.put("identifyReq",entrustmentService.buildIdentfyReq(materialList)); + dm.put("identifyReq", ev.getEntrustRequirement()); + //设置检材列表 + dm.put("materialList", materialList); + // QR Code +// BufferedImage bufferedImage = QRCodeUtils.genQRCode(ev.getEntrustmentNo(), 100, 100); +// dm.put("EntrustmentNoQRCode", Pictures.ofBufferedImage(bufferedImage, PictureType.PNG) +// .size(100, 100).create()); + BufferedImage bufferedImage = QRCodeUtils.getBarCode128Image(ev.getEntrustmentNo(), 280, 30); + dm.put("EntrustmentNoQRCode", Pictures.ofBufferedImage(bufferedImage, PictureType.PNG) + .size(280, 30).fitSize().create()); + + //----------------------------- + // 生成 word 版本的 + String entrustmentLetterFileName = "鉴定委托书-" + ev.getEntrustmentNo(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ossFile.fileGet(OSSDirectoryConstants.TEMPLATE_DIRECTORY + "/" + AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_LETTER_TEMPLATE), bos); + + byte[] templateArray = bos.toByteArray(); + ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); + bos.close(); + //处理要循环的表格 + MultipleRowTableRenderPolicy policy = new MultipleRowTableRenderPolicy(); + // 现在 bis 是模板的 InputStream + ConfigureBuilder builder = Configure.builder().buildGramer("${", "}").useSpringEL(false); + builder.bind("materialList", policy); + XWPFTemplate template = XWPFTemplate.compile(bis, builder.build()).render(dm); + bis.close(); + + ByteArrayOutputStream fosWord = new ByteArrayOutputStream(); + template.write(fosWord); + template.close(); + + //------------ + ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); + fosWord.close(); + + //MockMultipartFile mockMultipartFile = new MockMultipartFile("file", entrustmentLetterFileName + ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fisWord); + MockMultipartFile mockMultipartFile = new MockMultipartFile("file", entrustmentLetterFileName + ".docx", "image/jpg", fisWord); + Response response = remoteWord2PDFService.word2pdf(mockMultipartFile); + fisWord.close(); + + + ByteArrayOutputStream outPDF = new ByteArrayOutputStream(); + IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_BUFFER_SIZE); + ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray()); + outPDF.close(); + + boolean fileSave = ossFile.fileSave(OSSDirectoryConstants.DOCUMENT_ENTRUSTMENT_DIRECTORY + "/" + ev.getId() + "/" + entrustmentLetterFileName + ".pdf", isPDF); + isPDF.close(); + + System.out.println(String.format("转换为 PDF 结束")); + return fileSave; + } + + + public boolean auditEntrustDataOfThirdSys(String userFlag, String entrustId, String dataPath, String result, String reMark) throws Exception { + EntrustOfThirdSys entrustOfThirdSys = synchronizeDataService.getThirdSysEntrustByMainId(entrustId); + if (entrustOfThirdSys == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrustId)); + } + + String thirdSysEntrustID = entrustOfThirdSys.getId(); + String auditOrAccept = "Audit"; + Boolean ret = synchronizeDataService.auditEntrustByProvinceOrCenter(userFlag, dataPath, thirdSysEntrustID, result, reMark, auditOrAccept); + System.out.println("第三方数据推送结果:" + ret); + return ret; + } + + + //特殊审批委托 + public void specialApprove(Entrustment entrustment) { + //将审批状态直接提升为待受理状态 + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()); + entrustment.setPreviousStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()); + this.updateById(entrustment); + } + + //受理第三方委托 + public boolean acceptThirdSysEntrust(String dataPath, Entrustment selfEntrust) throws Exception { + EntrustOfThirdSys entrustOfThirdSys = synchronizeDataService.getThirdSysEntrustByMainId(selfEntrust.getId()); + if (entrustOfThirdSys == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", selfEntrust.getId())); + } + return synchronizeDataService.subCenterAccept(dataPath, selfEntrust, entrustOfThirdSys); + } + + @Override + public Entrustment bizAccept_Save(Entrustment entrust, DLPUser dlpUser) { + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + // if (!dlpUser.getId().equals(entrustment.getAcceptClaimUser())) { + // throw new RuntimeException(String.format("委托的受理任务是由其他人认领的。认领受理的用户是: %s", entrustment.getAcceptClaimUser())); + // } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) { + throw new RuntimeException("委托不在正在受理状态"); + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setDestructiveAnalysis(entrust.getDestructiveAnalysis()); + entrustment.setOtherIdentificationNotes(entrust.getOtherIdentificationNotes()); + entrustment.setAvoidIdentifier(entrust.getAvoidIdentifier()); + entrustment.setOtherAgreement(entrust.getOtherAgreement()); + entrustment.setComments(entrust.getComments()); + + entrustment.setAcceptUser(null); // 之前可能受理过, 现在后悔了, 置 null + entrustment.setAcceptTime(null); // 之前可能受理过, 现在后悔了, 置 null + entrustment.setAcceptComments(entrust.getAcceptComments()); + + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", entrustment.getId()); // 查询条件是 id 相等 + + updateWrapper.set("destructive_analysis", entrustment.getDestructiveAnalysis()); + updateWrapper.set("other_identification_notes", entrustment.getOtherIdentificationNotes()); + updateWrapper.set("avoid_identifier", entrustment.getAvoidIdentifier(), "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"); + updateWrapper.set("other_agreement", entrustment.getOtherAgreement()); + updateWrapper.set("comments", entrustment.getComments()); + + updateWrapper.set("accept_user", entrustment.getAcceptUser()); + updateWrapper.set("accept_time", entrustment.getAcceptTime()); + updateWrapper.set("accept_comments", entrustment.getAcceptComments()); + + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托信息失败"); + } + + // 从数据库表中取出保存的委托对象, 后续的操作我们以此为准 + entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + return entrustment; + } + + @Override + @GlobalTransactional + public Entrustment bizAccept_Apply(Entrustment entrust, Integer opCode, DLPUser dlpUser) { + String newEntrustAcceptNo = ""; + if (opCode == null) { + throw new RuntimeException(String.format("受理必须提供 opCode")); + } + + if (StrUtil.isBlank(entrust.getAcceptComments())) { + throw new RuntimeException(String.format("必须提供受理意见")); + } + + // 检查委托原来的状态 + Entrustment entrustment = this.getById(entrust.getId()); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrust.getId())); + } + + // if (!dlpUser.getId().equals(entrustment.getAcceptClaimUser())) { + // throw new RuntimeException(String.format("委托的受理任务是由其他人认领的。认领的用户是: %s", entrustment.getAcceptClaimUser())); + // } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()) { + throw new RuntimeException("委托不在正在受理状态"); + } + if (opCode < 0) { + List list = entrustmentIdentificationMaterialService.list(new LambdaQueryWrapper().eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId())); + for (EntrustmentIdentificationMaterial entrustmentIdentificationMaterial : list) { + entrustmentIdentificationMaterial.setAcceptNo(null); + } + entrustmentIdentificationMaterialService.updateBatchById(list); + } + //检查检材是否复秤,不复秤不能受理 + boolean b = this.checkRepeatWeigh(entrustment); + if (b) { + throw new RuntimeException(String.format("有未复秤的样本,请给样本复秤")); + } + if (opCode > 0) { + // 如果是确认受理, 需要检材全部都确认受理 + // 检查检材的受理状态 + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + + //检查检材受理编号前半段是否一致 + //3-26修改:因为我们无需在受理完成前生成检材编号了,所以不用这个校验 +// Map> tempMap = imList.stream().collect(Collectors.groupingBy(item -> item.getAcceptNo().substring(0, item.getAcceptNo().lastIndexOf("-")))); +// if (tempMap.size() > 1) { +// throw new RuntimeException("检材受理编号不一致,请检查"); +// } + + for (EntrustmentIdentificationMaterial im : imList) { + if (im.getSample2Present() != null && im.getSample2Present()) { + if ((im.getSample1RepeatWeigh() != null && im.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) && (im.getSample2RepeatWeigh() == null || im.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) == 0)) { + throw new RuntimeException("有检材存在留存样,只复称了分析样,要全部复称才能受理委托"); + } + + if ((im.getSample2RepeatWeigh() != null && im.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) && (im.getSample1RepeatWeigh() == null || im.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) == 0)) { + throw new RuntimeException("有检材只复称了留存样,要全部复称才能受理委托"); + } + } + + if ((im.getAcceptPassed() == null) || (im.getAcceptPassed() == 0)) { + throw new RuntimeException("有检材还没有受理, 要先受理全部检材, 才能受理委托"); + } else if (im.getAcceptPassed() == -1) { + throw new RuntimeException("有检材受理没有通过, 只有全部检材都受理通过, 才能受理委托"); + } else if (im.getAcceptPassed() != 1) { + // 审核状态不是 null/-1/0/1, 这个状态很奇怪 + throw new RuntimeException("有检材受理状态不正确"); + } + } + //从检材中取出委托的受理号 + String materialAcceptNo = imList.get(0).getAcceptNo(); + // 3-26 如果是大数据平台同步的委托,那么我们在受理完成的时候先生成一个空的受理编号,最后在同步大数据平台信息的时候会把这个编号赋值过去 +// newEntrustAcceptNo = materialAcceptNo.substring(0, materialAcceptNo.lastIndexOf("-")); + entrustmentIdentificationMaterialService.getNewIdentificationMaterialNo(newEntrustAcceptNo); + if (entrustment.getDataSources() != 1) { + newEntrustAcceptNo = materialAcceptNo.substring(0, materialAcceptNo.lastIndexOf("-")); + } else { + newEntrustAcceptNo = "acceptNo"; + } + } + int newStatus = ProcessFlowMapper.getNextStatus(entrustment.getStatus(), opCode); + + //-------------------------- + // 创建鉴定 + //-------------------------- + if (opCode == 1) { + if (StrUtil.isBlank(entrustment.getIdentificationId())) { + // 鉴定Id 是空, 说明不是补充委托, 是新的鉴定 + Identification identification = new Identification(); + identification.setId(IdWorker.get32UUID().toUpperCase()); + identification.setIdentificationNo(identificationService.getNewIdentificationNo()); + identificationService.save(identification); + //entrustment.setAcceptNo(identificationService.getNewIdentificationNo());//设置鉴定编号就是受理编号 + //给这个委托书设置鉴定ID + entrustment.setIdentificationId(identification.getId()); + } + } + + if (newStatus == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + EntrustmentIdentificationMaterial im = new EntrustmentIdentificationMaterial(); + im.setCheckPassed(0); + im.setApprovePassed(0); + im.setAcceptPassed(0); + im.setAcceptNo(null); + entrustmentIdentificationMaterialService.setEntrustmentIdentificationMaterialStatusByEntrustment(im, entrustment.getId()); + } + + //------------------- + // 更新数据库表数据 + //------------------- + entrustment.setDestructiveAnalysis(entrust.getDestructiveAnalysis()); + entrustment.setOtherIdentificationNotes(entrust.getOtherIdentificationNotes()); + entrustment.setAvoidIdentifier(entrust.getAvoidIdentifier()); + //entrustment.setOtherAgreement(entrust.getOtherAgreement()); + entrustment.setComments(entrust.getComments()); + + entrustment.setAcceptUser(dlpUser.getId()); + entrustment.setAcceptTime(LocalDateTime.now()); + entrustment.setAcceptComments(entrust.getApproveComments()); + entrustment.setPreviousStatus(entrustment.getStatus()); // 可能是从其他环节转过来的, 一旦提交, 保存上一个状态 + entrustment.setStatus(newStatus); // 新的状态(环节), 可能会是审批或提交前 + + + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + if (opCode == 1) { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已受理", + opCode, entrustment.getStatus(), true); + pis.add(pi); + } else { + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "受理不通过", + opCode, entrustment.getStatus(), false, entrust.getAcceptComments()); + pis.add(pi); + } + entrustment.setProcessInfo(pis); + + //上面注释的代码前面已经设置过,不需要再设置一次,直接更新 + if (StringUtils.isNotBlank(newEntrustAcceptNo)) { + entrustment.setAcceptNo(newEntrustAcceptNo);//设置受理编号 + } + if (!StringUtils.isNotBlank(newEntrustAcceptNo) && opCode == 1) { + throw new RuntimeException("受理编号不能为空"); + } + entrustment.setIsTrans(1);//如果是通过我们系统进行受理,就让他不能再手动流转了 + if (!this.updateById(entrustment)) { + throw new RuntimeException("保存委托信息失败"); + } + + + //同步第三方禁毒系统的受理功能 开始-------------------------------------------------------------- + boolean isSuccess = true; + try { + if (entrustment.getDataSources() == 1) { + if (opCode == 1) { + //auditEntrustDataOfThirdSys("SubCenter",entrustment.getId(),"/api/identify/entrust/{entrustId}/acceptAudit","success",""); + boolean ret = acceptThirdSysEntrust("/api/identify/entrust/{entrustId}/accept", entrustment); + if (ret) { + log.info("大数据平台受理成功 {}", entrustment.getId()); + if (opCode > 0) { + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + List newSampleList = new ArrayList(); + for (EntrustmentIdentificationMaterial im : imList) { + + List oldSampleList = sampleService.createSample(im, entrustment.getClientOrgId(), dlpUser.getId()); + for (Sample oldSamObj : oldSampleList) { + Sample newSamObj = new Sample(); + BeanUtils.copyProperties(oldSamObj, newSamObj); + newSampleList.add(newSamObj); + } + } + System.out.println("-------------准备写入远程检材系统的数据量为:" + newSampleList.size()); + //调用流转系统的接口,并将数据写过去 + remoteSampleService.enterSample(newSampleList); + } + } else { + isSuccess = false; + log.info("大数据平台受理失败 {}", entrustment.getId()); + throw new RuntimeException(String.format("同步受理信息至大数据平台失败,此次受理失败,请从大数据平台重新受理,然后将在本系统已受理页面将委托同步!")); + } + } else { + System.out.println("不支持的受理类型参数"); + } + } else { + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + List newSampleList = new ArrayList(); + for (EntrustmentIdentificationMaterial im : imList) { + + List oldSampleList = sampleService.createSample(im, entrustment.getClientOrgId(), dlpUser.getId()); + for (Sample oldSamObj : oldSampleList) { + Sample newSamObj = new Sample(); + BeanUtils.copyProperties(oldSamObj, newSamObj); + newSampleList.add(newSamObj); + } + } + System.out.println("-------------准备写入远程检材系统的数据量为:" + newSampleList.size()); + //调用流转系统的接口,并将数据写过去 + remoteSampleService.enterSample(newSampleList); + } + + } catch (Exception e) { + e.printStackTrace(); + log.info("大数据平台受理失败 {}", entrustment.getId()); +// throw new RuntimeException("同步大数据平台受理出错,此次受理失败"); + } + if (!isSuccess) { + throw new RuntimeException(String.format("同步受理信息至大数据平台失败,此次受理失败,请从大数据平台重新受理,然后将在本系统已受理页面将委托同步!")); + } + return entrustment; + } + + /** + * 创建需要流转到流转系统的检材列表 + * + * @param dlpUser + * @param entrustment + * @return + */ + @Override + public List getTransferMaterialList(DLPUser dlpUser, Entrustment entrustment) { + List imList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", entrustment.getId())); + List newSampleList = new ArrayList<>(); + for (EntrustmentIdentificationMaterial im : imList) { + + List oldSampleList = sampleService.createSample(im, entrustment.getClientOrgId(), dlpUser.getId()); + for (Sample oldSamObj : oldSampleList) { + Sample newSamObj = new Sample(); + BeanUtils.copyProperties(oldSamObj, newSamObj); + newSampleList.add(newSamObj); + } + } + return newSampleList; + } + + @Override + public void bizGetPDFIdentifyItemsConfirmLetter(String id, String pdfOrWord, HttpServletRequest + theHttpServletRequest, HttpServletResponse httpServletResponse) { + Principal principal = theHttpServletRequest.getUserPrincipal(); + DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal(); + + EntrustmentVO ev = this.getEntrustmentVOById(id); + if (ev == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", id)); + } + + if (!dlpUser.isStaff()) { + throw new RuntimeException("受理员必须是鉴定中心员工, 普通用户不能下载鉴定事项确认书。"); + } + + // 正在受理和已受理这2个状态下可以打印 + if (ev.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus() && + ev.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()) { + throw new RuntimeException("委托不在[受理中]或[已受理]状态"); + } + + // if (!StrUtil.equalsIgnoreCase(ev.getClientOrgId(), dlpUser.getOrgId())) { + // throw new RuntimeException("您只能打印自己所在机构的鉴定委托书"); + // } + + String identifyItemsConfirmLetterFileName = "鉴定事项确认书-" + ev.getEntrustmentNo(); + // 转换临时目录中的 word 文档为 PDF + String pdfFilePath = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + ev.getId() + "/" + identifyItemsConfirmLetterFileName + ".pdf"; + String wordFilePath = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + ev.getId() + "/" + identifyItemsConfirmLetterFileName + ".docx"; + String downFile = ""; + //判断是要获取PDF还是word + if (pdfOrWord.equals("1")) { + downFile = wordFilePath; + } else { + downFile = pdfFilePath; + } + try { + //如果文件不存在,则生成,否则直接从OSS中获取 + //if (!ossFile.objectExist(pdfFilePath)) { + if (!ossFile.objectExist(downFile)) { + + if (this.generateIdentifyItemsBook(ev.getId())) { + ossFile.fileGet(downFile, httpServletResponse.getOutputStream()); + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(identifyItemsConfirmLetterFileName)); + } else { + throw new RuntimeException("生成鉴定事项确认书失败"); + } + //GenerateIdentifyItemsConfirmLetterPDF(ev); + } else { + ossFile.fileGet(downFile, httpServletResponse.getOutputStream()); + + httpServletResponse.setContentType(new MimetypesFileTypeMap().getContentType(identifyItemsConfirmLetterFileName)); + } + + } catch (Exception e) { + System.out.println(String.format("minioFile objectExist() Exception. %s", e.getLocalizedMessage())); + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + } + + @Override + public void GenerateIdentifyItemsConfirmLetterPDF(EntrustmentVO ev) { + + System.out.println("GenerateIdentifyItemsConfirmLetterPDF()................."); + + try { + //--------------- + // 构造对象 Map + //Map dm = BeanMap.create(ev); //ClassUtils.objectToMap(ev); + Map dm = ClassUtils.objectToMap(ev); + + if (ev.getEntrustmentTime() == null) { + ev.setEntrustmentTime(LocalDateTime.now()); + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", ev.getId()); // 查询条件是 id 相等 + + updateWrapper.set("entrustment_time", ev.getEntrustmentTime()); + + if (!this.update(null, updateWrapper)) { + throw new RuntimeException("保存委托日期失败"); + } + } + + dm.put("entrustmentTime", LocalDateTimeUtil.format(ev.getEntrustmentTime(), "yyyy年MM月dd日")); + + + List ems = entrustmentIdentificationMaterialService.getEntrustmentIdentificationMaterialVOList( + Wrappers.query() + .eq("entrustment_id", ev.getId()).orderByAsc("im_no")); + dm.put("identificationMaterials", ems); + + SysOrg org = remoteOrgService.getById(ev.getClientOrgId()).getData(); + dm.put("clientOrg", ClassUtils.objectToMap(org)); + + // QR Code + BufferedImage bufferedImage = QRCodeUtils.genQRCode(ev.getEntrustmentNo(), 100, 100); + dm.put("EntrustmentNoQRCode", Pictures.ofBufferedImage(bufferedImage, PictureType.PNG) + .size(100, 100).create()); + + // 鉴定期限 + dm.put("identificationTimeLimit", AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_IDENTIFICATION_TIME_LIMIT)); + + //----------------------------- + // 生成 word 版本的 鉴定事项确认书 + String identifyItemsConfirmLetterFileName = "鉴定事项确认书-" + ev.getEntrustmentNo(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ossFile.fileGet(OSSDirectoryConstants.TEMPLATE_DIRECTORY + "/" + AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_IDENTIFY_ITEMS_CONFIRM_LETTER_TEMPLATE), bos); + + byte[] templateArray = bos.toByteArray(); + ByteArrayInputStream bis = new ByteArrayInputStream(templateArray); + bos.close(); + + MultipleRowTableRenderPolicy policy = new MultipleRowTableRenderPolicy(); + + Configure config = Configure.builder().buildGramer("${", "}") + .bind("identificationMaterials", policy) + .bind("candidateDrugs", policy) + .useSpringEL(false) + .build(); + + XWPFTemplate template = XWPFTemplate.compile(bis, config).render(dm); + bis.close(); + + // 输出 word 文档到临时目录 + // String identifyItemsConfirmLetterWordFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_TEMPORARY_PATH) + "/" + identifyItemsConfirmLetterFileName + ".docx"; + // FileOutputStream fosWord = new FileOutputStream(identifyItemsConfirmLetterWordFileName); + ByteArrayOutputStream fosWord = new ByteArrayOutputStream(); + template.write(fosWord); + template.close(); + + //------------ + ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); + fosWord.close(); + + // 转换临时目录中的 word 文档为 PDF + MockMultipartFile mockMultipartFile = new MockMultipartFile("file", identifyItemsConfirmLetterFileName + ".docx", "image/jpg", fisWord); + + Response response = remoteWord2PDFService.word2pdf(mockMultipartFile); + fisWord.close(); + + ByteArrayOutputStream outPDF = new ByteArrayOutputStream(); + IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_BUFFER_SIZE); + ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray()); + outPDF.close(); + + + ossFile.fileSave(OSSDirectoryConstants.DOCUMENT_ENTRUSTMENT_DIRECTORY + "/" + ev.getId() + "/" + identifyItemsConfirmLetterFileName + ".pdf", isPDF); + isPDF.close(); + + + System.out.println(String.format("转换为 PDF 结束")); + + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + } + + @Override + public Entrustment bizSubmitter_AddEntrustment(Entrustment entrustment, DLPUser dlpUser) { + + if (StringUtils.isNotEmpty(entrustment.getId())) { + throw new RuntimeException("新创建的委托的 Id 必须为空, Id 应该由系统自动生成"); + } + entrustment.setId(IdWorker.get32UUID().toUpperCase()); + + if (StringUtils.isEmpty(entrustment.getCaseId())) { + throw new RuntimeException("caseId 不能为空, 委托必须是基于某个案件"); + } + CaseEvent cj = caseEventService.getById(entrustment.getCaseId()); + if (cj == null) { + throw new RuntimeException(String.format("不存在 caseId 为 % 的案件", entrustment.getCaseId())); + } + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()); // 初始状态为待提交 + entrustment.setPreviousStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()); // 老的状态也为待提交 + List pis = entrustment.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已创建", + 1, entrustment.getStatus(), true); + pis.add(pi); + entrustment.setProcessInfo(pis); + entrustment.setSubmitter(dlpUser.getId()); + this.save(entrustment); + return entrustment; + + } + + @Override + public R deleteById(String id, DLPUser dlpUser) { + if (StrUtil.isBlank(id)) { + return R.failed("必须把委托 id 作为路径的一部分提供!"); + } + Entrustment entrustment = this.getById(id); + if (entrustment == null) { + return R.failed(String.format("不存在 id 为 %s 的委托!", id)); + } + + if (!StrUtil.equalsIgnoreCase(dlpUser.getOrgId(), entrustment.getClientOrgId())) { + return R.failed(String.format("这个委托的委托单位不是你的所属单位, 你无权删除!")); + } + + if (entrustment.getStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus() || + entrustment.getPreviousStatus() != EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + return R.failed(String.format("这个委托已被提交过, 不能删除!")); + } + + + long entrustmentCount = entrustmentIdentificationMaterialService.countByEntrustmentId(id); + if (entrustmentCount > 0) { + return R.failed(String.format("这个委托下有 %d 个检材, 必须先删除全部检材后才能删除委托!", entrustmentCount)); + } + + List attList = ossFile.fileList(OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + id); + long attCount = attList.size(); + if (attCount > 0) { + return R.failed(String.format("这个委托下有 %d 个附件, 必须先删除全部附件后才能删除委托!", attCount)); + } + + if (this.removeById(id)) { + return R.ok(entrustment, "委托删除成功"); + } else { + return R.failed(entrustment, "委托删除失败"); + } + } + + @Override + public R uploadAttachmentObj_Base64(String entrustmentId, JSONObject jsonParam) throws Exception { + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s jsonParam.size()=%d", entrustmentId, jsonParam.size())); + Entrustment entrustment = this.getById(entrustmentId); + if (entrustment != null) { + + String image = jsonParam.getString("image"); +// System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.ENTRUSTMENT_DIRECTORY + "/" + entrustmentId; + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + } + return R.failed("不存在这个委托"); + } + + @Override + public R uploadDeliverPhoto_Base64(String entrustmentId, JSONObject jsonParam) { + Assert.notBlank(entrustmentId, "委托ID不能为空"); + //证件照片特殊文件标识 + String deliverPhoto = "deliverPhoto"; + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId + "/" + deliverPhoto; + String image = jsonParam.getString("image"); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + if (suffix.equals("jpeg")) { + suffix = "jpg"; + } + //String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "-"+(picCount+1)+"." + suffix; + String fileName = IdWorker.get32UUID() + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + + } + + @Override + public R uploadAcceptAttachmentObj_Base64(String entrustmentId, JSONObject jsonParam) throws Exception { + System.out.println(String.format("uploadPhotoObj: entrustmentId=%s jsonParam.size()=%d", entrustmentId, jsonParam.size())); + Entrustment entrustment = this.getById(entrustmentId); + if (entrustment != null) { + + String image = jsonParam.getString("image"); +// System.out.println(String.format("image=%s", image)); + if (StringUtils.isNotEmpty(image)) { + try { + String suffix = image.substring(11, image.indexOf(";")); + String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "." + suffix; + System.out.println(String.format("fileName=[%s]", fileName)); + + //去掉头信息 + String imgBase64 = image.substring(image.indexOf(",") + 1); + byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(imgBase64); + InputStream is = new ByteArrayInputStream(decoded); + + String path = OSSDirectoryConstants.ACCEPT_DIRECTORY + "/" + entrustmentId; + Map ResultData = new HashMap<>(); + ResultData.put("fileName", fileName); + ResultData.put("path", path); + + boolean r = ossFile.fileSave(path + "/" + fileName, is); + if (r) { + return R.ok(ResultData, "上传成功"); + } + return R.failed("上传失败"); + + } catch (Exception e) { + e.printStackTrace(); + return R.failed("上传失败"); + } + } else { + return R.failed("上传的数据中没有图像"); + } + + } + return R.failed("不存在这个委托"); + } + + @Override + public R> bizGetAvailableUserList(String entrustmentId) { + + Entrustment entrustment = this.getById(entrustmentId); + if (entrustment == null) { + throw new RuntimeException(String.format("没有找到 id 为 %s 的委托", entrustmentId)); + } + + if (entrustment.getStatus() == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()) { + // 在创建人手中: 已创建, 等待提交 + return R.ok(this.taskAvailableUserList_Check()); + } else if (entrustment.getStatus() == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus()) { + // 在审核员手中: 已提交, 待审核 + return R.ok(this.taskAvailableUserList_Approve()); + } else if (entrustment.getStatus() == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE.getStatus()) { + // 在审批员手中: 已审核, 待审批 + return R.ok(this.taskAvailableUserList_Confirm(entrustment.getClientOrgId())); + } else if (entrustment.getStatus() == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus()) { + // 在确认者手中: 已审批, 待确认 + List users = new ArrayList(); + SysUser submitter = remoteUserService.innerGetById(entrustment.getSubmitter()).getData(); + users.add(submitter); + return R.ok(users); + } else if (entrustment.getStatus() == EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus()) { + // 在送检提交员(创建者)手中: 已确认, 待送检 + return R.ok(this.taskAvailableUserList_Accept()); + } else { + return R.failed("委托在当前状态下不需要其他用户处理"); + } + } + + @Override + + public List getImQuantityForInspection(DLPUser dlpUser) { + + List markersVOS = new ArrayList<>(); + String orgId = dlpUser.getOrgId(); + + Integer entrustmentIdentificationMaterialQuantity = 0; + Integer acceptanceIdentificationMaterialQuantity = 0; + Integer sewageJobIdentificationMaterialQuantity = 0; + Integer hairJobIdentificationMaterialQuantity = 0; + + //查询这个账户(机构)下的所有委托中的所有已受理检材的数量 + List entrustmentList = this.list(new LambdaQueryWrapper().eq(Entrustment::getClientOrgId, orgId)); + for (Entrustment entrustment : entrustmentList) { + List entrustmentIdentificationMaterialList = entrustmentIdentificationMaterialService.list(new LambdaQueryWrapper().eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId()) + .eq(EntrustmentIdentificationMaterial::getAcceptPassed, 1)); + entrustmentIdentificationMaterialQuantity += entrustmentIdentificationMaterialList.size(); + } + + markersVOS.add(new MarkersVO("案件委托", entrustmentIdentificationMaterialQuantity, "", "EntrustmentCreate")); + R imQuantity = remoteSewageJobService.getIMQuantity(dlpUser.getOrgId()); + if (imQuantity.getCode() == CommonConstants.SUCCESS) { + sewageJobIdentificationMaterialQuantity = imQuantity.getData(); + } else { + log.error("查询这个账户(机构)下面所送检且已受理的所有污水检材的数量 失败!失败原因:" + imQuantity.getMsg()); + sewageJobIdentificationMaterialQuantity = 0; + } + markersVOS.add(new MarkersVO("污水送检", sewageJobIdentificationMaterialQuantity, "", "SewageJobGet")); + + + try { + R sampleQuantity = remoteHairJobService.getSampleQuantity(orgId, 2); + if (sampleQuantity.getCode() == 0) { + hairJobIdentificationMaterialQuantity = sampleQuantity.getData(); + markersVOS.add(new MarkersVO("毛发送检", hairJobIdentificationMaterialQuantity, "", "HairJobGet")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data = remoteAcceptanceService.getEventByUser(dlpUser.getId()); + if (data.getCode() == 0) { + acceptanceIdentificationMaterialQuantity = data.getData(); + markersVOS.add(new MarkersVO("事件送检", acceptanceIdentificationMaterialQuantity, "", "ima_event")); + } + } catch (Exception e) { + e.printStackTrace(); + } + return markersVOS; + } + + @Override//创建一个委托(现在的顺序是创建委托——创建案件——创建检材(物证选填)) + public Entrustment addNewEmt(EntrustmentDTO entrustmentDTO, DLPUser dlpUser) { + if (StringUtils.isNotEmpty(entrustmentDTO.getId())) { + throw new RuntimeException("新创建的委托的 Id 必须为空, Id 应该由系统自动生成"); + } + + if (!StringUtils.isEmpty(entrustmentDTO.getCaseId())) { + throw new RuntimeException("caseId 必须为空"); + } + //开始创建案件 + CaseEvent caseEvent = new CaseEvent(); + caseEvent.setCaseName(entrustmentDTO.getCaseName()); + caseEvent.setCaseBrief(entrustmentDTO.getCaseBrief()); + caseEvent.setHappenTime(LocalDateTime.now()); + caseEvent.setCaseOwnOrgId(entrustmentDTO.getClientOrgId()); + + if (StrUtil.isBlank(caseEvent.getCaseNo())) { + // 如果没有提供案件编码, 生成一个 + + if ((caseEvent.getHappenTime() != null) && (StrUtil.isNotBlank(caseEvent.getCaseOwnOrgId()))) { + SysOrg caseOwnOrg = null; + R r = remoteOrgService.getById(caseEvent.getCaseOwnOrgId()); + if (r.getCode() == CommonConstants.SUCCESS) { + caseOwnOrg = (SysOrg) r.getData(); + Date happenTime = Date.from(caseEvent.getHappenTime().atZone(ZoneId.systemDefault()).toInstant()); + ; + caseEvent.setCaseNo(caseEventService.getNewCaseCode(caseOwnOrg.getOrgCode(), happenTime)); + } else { + throw new RuntimeException(String.format("没有找到 orgId 为 %s 的机构, 请确认案件所属机构(CaseOwnOrg)的正确性!", caseEvent.getCaseOwnOrgId())); + } + } + } + caseEvent.setId(IdWorker.get32UUID().toUpperCase()); + + caseEventService.save(caseEvent); + + entrustmentDTO.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()); // 初始状态为待提交 + entrustmentDTO.setPreviousStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus()); // 老的状态也为待提交 + List pis = entrustmentDTO.getProcessInfo(); + if (pis == null) { + pis = new ArrayList(); + } + UpdateInfo pi = new UpdateInfo(dlpUser.getId(), + dlpUser.getName(), + dlpUser.getOrgId(), + dlpUser.getOrgName(), + "已创建", + 1, entrustmentDTO.getStatus(), true); + pis.add(pi); + entrustmentDTO.setProcessInfo(pis); + entrustmentDTO.setSubmitter(dlpUser.getId()); + //将DTO的数据赋值给实体类 + Entrustment entrustment = new Entrustment(); + BeanUtils.copyProperties(entrustmentDTO, entrustment); + entrustment.setClientOrgId(entrustmentDTO.getClientOrgId()); + entrustment.setClientOrgName(entrustmentDTO.getClientOrgName()); + entrustment.setId(IdWorker.get32UUID().toUpperCase()); + entrustment.setCaseId(caseEvent.getId()); + this.save(entrustment); + return entrustment; + + } + + @Override//获得送检页面全局小红点 + public List getInspectMarkers(DLPUser dlpUser) { + + String orgId = dlpUser.getOrgId(); + + List sewageMarkers = new ArrayList<>(); + R> sewageMarkersR = remoteSewageJobService.getSewageMarkers(dlpUser.getOrgId()); + if (sewageMarkersR.getCode() == CommonConstants.SUCCESS) { + sewageMarkers = sewageMarkersR.getData(); + } else { + log.error("调用污水系统查询各个状态下的污水检材数量失败!失败原因:" + sewageMarkersR.getMsg()); + } + + + ArrayList markersVOS = new ArrayList<>(); + + markersVOS.addAll(sewageMarkers); + + List entrustmentList1 = this.list(new LambdaQueryWrapper().eq(Entrustment::getClientOrgId, orgId) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus())); + markersVOS.add(new MarkersVO("案件委托", entrustmentList1.size(), "待提交")); + + List entrustmentList2 = this.list(new LambdaQueryWrapper().eq(Entrustment::getClientOrgId, orgId) + .in(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus(), EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CONFIRM.getStatus())); + markersVOS.add(new MarkersVO("案件委托", entrustmentList2.size(), "待送检")); + + List entrustmentList3 = this.list(new LambdaQueryWrapper().eq(Entrustment::getClientOrgId, orgId) + .eq(Entrustment::getReturnOrNot, -1)); + markersVOS.add(new MarkersVO("案件委托", entrustmentList3.size(), "已退回")); + + List entrustmentList4 = this.list(new LambdaQueryWrapper().eq(Entrustment::getClientOrgId, orgId) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_COMPLETED.getStatus())); + + markersVOS.add(new MarkersVO("案件委托", entrustmentList4.size(), "已完成")); + + try { + R data1 = remoteHairJobService.getJobQuantity(orgId, 0); + if (data1.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务", data1.getData(), "待发布")); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data2 = remoteHairJobService.getJobQuantity(orgId, 1); + if (data2.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务", data2.getData(), "已发布")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data3 = remoteHairJobService.getJobQuantity(orgId, -2); + if (data3.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务", data3.getData(), "被拒收")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data4 = remoteAcceptanceService.getEventQuantity(dlpUser.getId(), 0, 0); + R data5 = remoteAcceptanceService.getEventQuantity(dlpUser.getId(), 1, 0); + if (data4.getCode() == 0 && data5.getCode() == 0) { + markersVOS.add(new MarkersVO("事件送检", data4.getData() + data5.getData(), "待处理")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data6 = remoteAcceptanceService.getEventQuantity(dlpUser.getId(), 2, 0); + if (data6.getCode() == 0) { + markersVOS.add(new MarkersVO("事件送检", data6.getData(), "已受理")); + } + + } catch (Exception e) { + e.printStackTrace(); + + } + return markersVOS; + } + + + @Override + public List getImQuantityForAccept() { + + ArrayList markersVOS = new ArrayList<>(); + + markersVOS.add(new MarkersVO("司法鉴定委托", entrustmentIdentificationMaterialService.list(new LambdaQueryWrapper() + .eq(EntrustmentIdentificationMaterial::getAcceptPassed, 1)).size(), "", "EntrustmentAccept")); + Integer imQuantityForAccept = 0; + R imQuantityForAcceptR = remoteSewageJobService.getImQuantityForAccept(); + if (imQuantityForAcceptR.getCode() == CommonConstants.SUCCESS) { + imQuantityForAccept = imQuantityForAcceptR.getData(); + } else { + log.error("受理系统统计已受理的污水检材数量接口数据获取失败!失败原因:" + imQuantityForAcceptR.getMsg()); + } + markersVOS.add(new MarkersVO("污水任务", imQuantityForAccept, "", "SewageJobCreate")); + + + try { + R data = remoteAcceptanceService.getImQuantityForAccept(); + if (data.getCode() == 0) { + markersVOS.add(new MarkersVO("事件委托", data.getData(), "", "ima_event_im")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data1 = remoteHairJobService.getSampleQuantityForAccept(); + if (data1.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务", data1.getData(), "", "HairJobSampleAccept")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data2 = remoteFeatureAnalysis.getReceivedImQuantity("received"); + if (data2.getCode() == 0) { + markersVOS.add(new MarkersVO("特征分析", data2.getData(), "", "FeatureAnalysisAllPermission")); + } + } catch (Exception e) { + e.printStackTrace(); + } + return markersVOS; + + } + + @Override + public List getMarkersForOther(DLPUser dlpUser) { + + List markersVOS = new ArrayList<>(); + + try { + R data3 = remoteHairJobService.getJobQuantity("0", null); + if (data3.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务受理", data3.getData(), "毛发任务")); + markersVOS.add(new MarkersVO("毛发任务受理", data3.getData(), "毛发受理")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data4 = remoteHairJobService.getJobGabQuantity(); + if (data4.getCode() == 0) { + markersVOS.add(new MarkersVO("毛发任务受理", data4.getData(), "毛发抽样")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data = remoteAcceptanceService.getEventQuantity(dlpUser.getId(), 1, 1); + if (data.getCode() == 0) { + markersVOS.add(new MarkersVO("事件受理", data.getData(), "待处理")); + } + } catch (Exception e) { + e.printStackTrace(); + } + try { + R data1 = remoteAcceptanceService.getEventQuantity(dlpUser.getId(), 2, 1); + if (data1.getCode() == 0) { + markersVOS.add(new MarkersVO("事件受理", data1.getData(), "已受理")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + R data2 = remoteFeatureAnalysis.getJobQuantity(); + if (data2.getCode() == 0) { + markersVOS.add(new MarkersVO("特征分析", data2.getData(), "特征分析")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + + return markersVOS; + } + + /** + * 获得委托的小红点标记 + * + * @return + */ + @Override + public List getMarkersForEntrustment() { + + List markersVOS = new ArrayList<>(); + + List entrustmentList1 = this.list(new LambdaQueryWrapper() + .eq(Entrustment::getDataSources, 0) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus())); + + List entrustmentList2 = this.list(new LambdaQueryWrapper() + .eq(Entrustment::getDataSources, 1) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus())); + + List entrustmentList3 = this.list(new LambdaQueryWrapper() + .eq(Entrustment::getDataSources, 0) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus())); + + List entrustmentList4 = this.list(new LambdaQueryWrapper() + .eq(Entrustment::getDataSources, 1) + .eq(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus())); + + List integers1 = new ArrayList<>(); + List integers2 = new ArrayList<>(); + integers1.add(1); + integers1.add(2); + integers2.add(3); + integers2.add(4); + // 创建一个污水系统的统计DTO 初始化统计数量为0 + StatisticsDiffStatusJobDTO statisticsDiffStatusSewageJobDTO = new StatisticsDiffStatusJobDTO( + 0, 0, 0, 0, 0); + R statisticsDiffStatusJobDTOR = remoteSewageJobService.statisticsDiffStatusJob(); + if (statisticsDiffStatusJobDTOR.getCode() == CommonConstants.SUCCESS) { + statisticsDiffStatusSewageJobDTO = statisticsDiffStatusJobDTOR.getData(); + } else { + log.error("通过查询接口调用获取污水系统统计数据失败!失败原因:" + statisticsDiffStatusJobDTOR.getMsg()); + } + + ArrayList integers = new ArrayList<>(); + integers.add(2); + markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, entrustmentList1.size(), String.format("待受理(%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, entrustmentList2.size(), "待受理 (大数据平台)")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, entrustmentList3.size(), String.format("已受理 (%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustMarkConstants.CASE_ACCEPT, entrustmentList4.size(), "已受理 (大数据平台)")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + this.list(new LambdaQueryWrapper() + .in(Entrustment::getStatus, integers1) + .eq(Entrustment::getDataSources, 0)).size(), String.format("委托审核(%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + this.list(new LambdaQueryWrapper() + .in(Entrustment::getStatus, integers2) + .eq(Entrustment::getDataSources, 0)).size(), String.format("委托审批(%s)", EntrustMarkConstants.PUBLIC_SECURITY_BUREAU))); + markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + this.list(new LambdaQueryWrapper() + .in(Entrustment::getStatus, integers1) + .eq(Entrustment::getDataSources, 1)).size(), "委托审核(大数据平台)")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.REVIEW_OR_APPROVAL, + this.list(new LambdaQueryWrapper() + .in(Entrustment::getStatus, integers2) + .eq(Entrustment::getDataSources, 1)).size(), "委托审批(大数据平台)")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusCreatedNum(), "污水任务待发布")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水任务已发布")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getJobStatusClaimNum(), "污水受理")); + markersVOS.add(new MarkersVO(EntrustMarkConstants.SEWAGE_JOB_ACCEPT, statisticsDiffStatusSewageJobDTO.getSewageTreatmentPlantNum(), "污水厂管理")); + + return markersVOS; + } + + /** + * 获得需要打印的检材信息 + * + * @return + */ + public List getAllSampleForPrint() { + List entrustmentIdentificationMaterials = new ArrayList<>(); + List entrustmentList = this.list(Wrappers.lambdaQuery() + .ge(Entrustment::getStatus, EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED) + .orderByAsc(Entrustment::getAcceptNo)); + + for (Entrustment entrustment : entrustmentList) { + List entrustmentIdentificationMaterialList = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId()) + .orderByAsc(EntrustmentIdentificationMaterial::getAcceptNo)); + if (entrustmentIdentificationMaterialList.size() > 0) { + if (entrustmentIdentificationMaterialList.size() > 18) { + int remainder = entrustmentIdentificationMaterialList.size() % 18; + if (remainder != 0) { + int index = 18 - remainder; + for (int i = 0; i < index; i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial(); + entrustmentIdentificationMaterial.setAcceptNo(""); + entrustmentIdentificationMaterial.setOrderNo(null); + entrustmentIdentificationMaterial.setTypeName(""); + entrustmentIdentificationMaterial.setFormName(""); + entrustmentIdentificationMaterial.setFundName(""); + entrustmentIdentificationMaterial.setAcceptTime(null); + entrustmentIdentificationMaterialList.add(entrustmentIdentificationMaterial); + } + } + } else { + int remainder = 18 - entrustmentIdentificationMaterialList.size(); + for (int i = 0; i < remainder; i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial(); + entrustmentIdentificationMaterial.setAcceptNo(""); + entrustmentIdentificationMaterial.setOrderNo(null); + entrustmentIdentificationMaterial.setTypeName(""); + entrustmentIdentificationMaterial.setFormName(""); + entrustmentIdentificationMaterial.setFundName(""); + entrustmentIdentificationMaterial.setAcceptTime(null); + entrustmentIdentificationMaterialList.add(entrustmentIdentificationMaterial); + } + } + for (int i = 0; i < entrustmentIdentificationMaterialList.size(); i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = entrustmentIdentificationMaterialList.get(i); + if (StringUtils.isNotBlank(entrustmentIdentificationMaterial.getAcceptNo())) { + entrustmentIdentificationMaterial.setOrderNo(i + 1); + } + entrustmentIdentificationMaterial.setPersonNationality(LocalDateTimeUtil.format(entrustmentIdentificationMaterial.getAcceptTime(), "yyyy-MM-dd")); + } + entrustmentIdentificationMaterials.addAll(entrustmentIdentificationMaterialList); + } + } + return entrustmentIdentificationMaterials; + } + + /** + * 打印样本档案 + * + * @param entrustmentId + * @throws Exception + */ + @Override + public void printSampleFile(String entrustmentId) throws Exception { + } + + /** + * 通过检材的类别设置委托的类别(生物样本、缴获物) + * + * @return + */ + @Override + public boolean synchronizationByMaterialType() { + List entrustmentList = this.list(Wrappers.lambdaQuery().eq(Entrustment::getDataSources, 1)); + ArrayList list = new ArrayList<>(); + entrustmentList.forEach(item -> { + EntrustOfThirdSys entrustOfThirdSys = synchronizeDataService.getOne(Wrappers.lambdaQuery().eq(EntrustOfThirdSys::getEntrustMainId, item.getId())); + if (entrustOfThirdSys != null && StrUtil.isNotBlank(entrustOfThirdSys.getMaterialType())) { + String materialType = entrustOfThirdSys.getMaterialType(); + if (materialType.equals("inVitro")) { + item.setEntrustmentType(0); + } else if (materialType.equals("inVivo")) { + item.setEntrustmentType(1); + } else { + item.setEntrustmentType(2); + } + list.add(item); + } + }); + return this.updateBatchById(list); + } + + /** + * 获得委托与检材信息 + * + * @param page + * @param status + * @param keywords + * @return + */ + @Override + public IPage getEntrustmentAndMaterial(Page page, Integer status, String keywords) { + IPage voPage = this.getEntrustmentVOPage(page, Wrappers.query() + .and(StrUtil.isNotBlank(keywords), wrapper -> wrapper + .like("e.entrustment_no", keywords) + .or() + .like("e.accept_no", keywords) + .or() + .like("c.case_name", keywords)) + .eq("status", status) + .orderByDesc("accept_no") + ); + + List records = voPage.getRecords(); + + for (EntrustmentVO entrustmentVO : records) { + List materialList = entrustmentIdentificationMaterialService + .list(Wrappers.lambdaQuery() + .eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustmentVO.getId()) + .orderByAsc(EntrustmentIdentificationMaterial::getAcceptNo)); + entrustmentVO.setMaterialList(materialList); + } + return voPage; + } + + /** + * 判断是否已经生成好了检材照片,如果生成了,返回给前端true 如果没有就返回false + * + * @param entrustmentId + * @return + */ + @Override + public boolean isMaterialPhoto(String entrustmentId) { + String path = "document/accept" + "/" + entrustmentId + "/materialPhoto"; + List fileName = ossFile.fileList(path); + if (fileName.size() > 0) { + return true; + } else return false; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/IdentificationServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/IdentificationServiceImpl.java new file mode 100644 index 0000000..fdd1eee --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/IdentificationServiceImpl.java @@ -0,0 +1,80 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.entrustment.entity.Identification; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.mapper.EntrustmentMapper; +import digital.laboratory.platform.entrustment.mapper.IdentificationMapper; +import digital.laboratory.platform.entrustment.service.IdentificationService; +import digital.laboratory.platform.entrustment.vo.IdentificationVO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** + * 鉴定表,一个鉴定可能会有多个委托服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-15 + * @describe 鉴定表,一个鉴定可能会有多个委托 服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class IdentificationServiceImpl extends ServiceImpl implements IdentificationService { + private final IdentificationMapper identificationMapper; + + @Override + public String getNewIdentificationNo() { + String year = String.valueOf(DateUtil.year(new Date())); + + String prefix = "JD" + year; +//System.out.printf("year=[%s]", year); + + int newCount = 1; + // 根据前缀查询最大物证编码 + String maxno = identificationMapper.getMaxIdentificationNo(prefix); + if (maxno != null) { + String strCount = StrUtil.removePrefix(maxno, prefix); + try { + int maxcount = Integer.parseUnsignedInt(strCount); + newCount = maxcount + 1; + } catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newCount = 1; + } + } + + String strFormat = "%0" + AppStartupRunner.getCfg(CommonConstants.CODE_IDENTIFICATION_NO_SEQUENCE_LENGTH) + "d"; + //System.out.printf("新的 prefix=[%s] newcount=[%s]", prefix, String.format(strFormat, newCount)); + String newCode = prefix + String.format(strFormat, newCount); + + return newCode; + } + + /** + * 根据 caseId 取 IdentificationVO 列表, 每个 Entrustment 一行 + * @param caseId + * @return + */ + @Override + public List getIdentificationVOList(String caseId) { + return baseMapper.getIdentificationVOList(caseId); + } + + /** + * 根据 caseId 取 Identification 列表, 供新建的补充委托选择老的 Identification(鉴定), 以使新建的委托作为老的鉴定的一部分 + * @param caseId + * @return + */ + @Override + public List getIdentificationListByCaseId(String caseId) { + return baseMapper.getIdentificationListByCaseId(caseId); + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxInLogServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxInLogServiceImpl.java new file mode 100644 index 0000000..cf16d9e --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxInLogServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.SampleBoxInLog; +import digital.laboratory.platform.entrustment.mapper.SampleBoxInLogMapper; +import digital.laboratory.platform.entrustment.service.SampleBoxInLogService; +import org.springframework.stereotype.Service; + +/** + * 样品包入库出库日志服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品包入库出库日志服务实现类 + */ +@Service +public class SampleBoxInLogServiceImpl extends ServiceImpl implements SampleBoxInLogService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxServiceImpl.java new file mode 100644 index 0000000..21edb7c --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleBoxServiceImpl.java @@ -0,0 +1,321 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.common.feign.RemoteTemplate2htmlService; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.mapper.SampleBoxMapper; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.entrustment.vo.SampleBoxLiteVO; +import digital.laboratory.platform.entrustment.vo.SampleBoxVO; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import digital.laboratory.platform.sys.feign.RemoteSampleService; +import digital.laboratory.platform.sys.feign.RemoteUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 受理时检材重新包装的容器服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 受理时检材重新包装的容器服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SampleBoxServiceImpl extends ServiceImpl implements SampleBoxService { + private final EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + private final SampleService sampleService; + + private final RemoteTemplate2htmlService remoteTemplate2htmlService; + + private final EntrustmentService entrustmentService; + private final CaseEventService caseEventService; + + private final RemoteSampleService remoteSampleService; + + private final RemoteUserService remoteUserService; + + /** + * ## 根据委托编码生成样本盒编码 + * 用于标识每一个样本盒。一个委托最多可以有99个样本盒子 + *

+ * ``` + * BZ <委托编码去掉前缀2个字符后剩下22位> <顺序号2位> + * 例如: + * BZ 6101022022100002000001 02 + * 合计 26 位 + * ``` + * + * @param entrustmentNo + * @return + */ + @Override + public String getNewBoxNoForEntrustment(String entrustmentNo) { + String prefix = CommonConstants.CODE_PREFIX_SAMPLE_BOX + "E" + StrUtil.removePrefixIgnoreCase(entrustmentNo, CommonConstants.CODE_PREFIX_ENTRUSTMENT); + + int newCount = 1; + + // 根据前缀查询最大物证编码 + String maxno = baseMapper.getMaxBoxNo(prefix); + if (maxno != null) { + String strCount = StrUtil.removePrefix(maxno, prefix); + try { + int maxcount = Integer.parseUnsignedInt(strCount); + newCount = maxcount + 1; + } catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newCount = 1; + } + } + + String newCode = prefix + String.format("%02d", newCount); + + return newCode; + } + + /** + * ## 根据污水任务编码生成样本盒编码 + * 用于标识每一个样本盒。一个委托最多可以有9999个样本盒子 + *

+ * ``` + * BZ <污水任务编码去掉前缀2个字符后剩下7位> <顺序号4位> + * 例如: + * BZ 2022201 0002 + * 合计 13 位 + * ``` + * + * @param sewageJobNo + * @return + */ + @Override + public String getNewBoxNoForSewageJob(String sewageJobNo) { + String prefix = CommonConstants.CODE_PREFIX_SAMPLE_BOX + "S" + StrUtil.removePrefixIgnoreCase(sewageJobNo, CommonConstants.CODE_PREFIX_SEWAGE_JOB); + + List list = this.list(Wrappers.query() + .likeRight("box_no", prefix) // LIKE '值%' + .orderByDesc("box_no") + ); + + int newNo = 1; + if ((list != null) && (list.size() > 0)) { + SampleBox sjimMax = list.get(0); + String strMaxNo = StrUtil.removePrefixIgnoreCase(sjimMax.getBoxNo(), prefix); + try { + int maxno = Integer.parseUnsignedInt(strMaxNo); + newNo = maxno + 1; + } catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newNo = 1; + } + } + + String newCode = prefix + String.format("%04d", newNo); + + return newCode; + } + + @Override + public String getNewBoxNoForOther(String newBoxNumber) { + + String prefix = CommonConstants.CODE_PREFIX_SAMPLE_BOX + newBoxNumber; + + List list = this.list(Wrappers.query() + .likeRight("box_no", prefix) // LIKE '值%' + .orderByDesc("box_no") + ); + + int newNo = 1; + if ((list != null) && (list.size() > 0)) { + SampleBox sjimMax = list.get(0); + String strMaxNo = StrUtil.removePrefixIgnoreCase(sjimMax.getBoxNo(), prefix); + try { + int maxno = Integer.parseUnsignedInt(strMaxNo); + newNo = maxno + 1; + } catch (NumberFormatException e) { + // 如果后缀有非数字, 则无视之, 重头编码 + newNo = 1; + } + } + + String newCode = prefix + String.format("%04d", newNo); + + return newCode; + + } + + @Override + public SampleBoxLiteVO getSampleBoxLiteVOById(String id) { + SampleBox sb = this.getById(id); + List imlist = entrustmentIdentificationMaterialService.list(Wrappers.query().eq("entrustment_id", sb.getEntrustmentId())); + List nolist = new ArrayList(); + for (EntrustmentIdentificationMaterial im : imlist) { + if (StrUtil.equalsIgnoreCase(im.getSample1BoxId(), sb.getId())) { + nolist.add(im.getSample1No()); + } + if (StrUtil.equalsIgnoreCase(im.getSample2BoxId(), sb.getId())) { + nolist.add(im.getSample2No()); + } + } + SampleBoxLiteVO sv = new SampleBoxLiteVO(sb, nolist); + + return sv; + } + + @Override + public SampleBoxVO getSampleBoxVOById(String id) { + SampleBox sb = this.getById(id); + List sampleList = sampleService.list(Wrappers.query().eq("box_id", sb.getId())); + SampleBoxVO sv = new SampleBoxVO(sb, sampleList); + + return sv; + } + + @Override + public String buildSampleBoxLabelContent(String id) throws Exception { + SampleBox sampleBoxBean = this.getById(id); + Map data = new HashMap<>(); + data.put("sampleBoxBean", sampleBoxBean); + String templateFileName = AppStartupRunner.getCfg(CommonConstants.DLP_CODE_SAMPLE_BOX_LABEL); + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } + + @Override + public List getSampleBoxList(SampleBox sampleBox) { + List list = new ArrayList<>(); + List sampleList = new ArrayList<>(); + List sampleBoxList = this.list(Wrappers.query().eq("entrustment_id", sampleBox.getEntrustmentId())); + + sampleBoxList.forEach(item -> { + int sampleCount = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("sample1_box_id", item.getId()) + .or() + .eq("sample2_box_id", item.getId())).size(); + SampleBoxVO eg = new SampleBoxVO(item, sampleList); + eg.setBoxSampleCount(sampleCount); + list.add(eg); + }); + return list; + } + + @Override + public String printBoxLabel(String id, Integer type) { + SampleBox sampleBox = this.getById(id); + if (!ObjUtil.isNotNull(sampleBox)) { + throw new RuntimeException(String.format("没有查询到ID为%s的包装盒", id)); + } + List materialList = entrustmentIdentificationMaterialService.list(new LambdaQueryWrapper() + .eq(EntrustmentIdentificationMaterial::getSample1BoxId, id) + .or() + .eq(EntrustmentIdentificationMaterial::getSample2BoxId, id)); + + if (materialList == null || materialList.size() == 0) { + + throw new RuntimeException(String.format("当前包装袋下并未加入检材,无法进行打印!")); + } + String acceptNo = materialList.get(0).getAcceptNo(); + String substring = acceptNo.substring(0, 9); + Map data = new HashMap<>(); + Entrustment entrustment = entrustmentService.getById(sampleBox.getEntrustmentId()); + CaseEvent caseEvent = caseEventService.getById(materialList.get(0).getCaseId()); + data.put("sampleBox", sampleBox); + data.put("acceptNo", substring); + data.put("materialQuantity", materialList.size()); + data.put("caseEvent", caseEvent); + data.put("entrustment", entrustment); + String templateFileName = ""; + if (type == 0) { + templateFileName = "(小)受理时打印的包装袋条码模板.vm"; + } else { + templateFileName = "(大)受理时打印的包装袋条码模板.vm"; + } + return remoteTemplate2htmlService.getHtml(templateFileName, data); + } + + @Override + public SampleBox controlsSampleBox(SampleBox sampleBox, Integer opCode) { + //删除这个包装袋 + if (opCode == -1) { + if (!StrUtil.isNotBlank(sampleBox.getId())) { + throw new RuntimeException(String.format("没有找到ID为%s的包装袋", sampleBox.getId())); + } + R> data = remoteSampleService.getSampleIdForBox(sampleBox.getId()); + List stringList = data.getData(); + if (stringList!=null&&stringList.size()>0){ + throw new RuntimeException(String.format("这个包装袋下还有检材未被移除,无法删除!")); + } + this.removeById(sampleBox.getId()); + } else { + //存在ID,修改这个包装袋 + if (StrUtil.isNotBlank(sampleBox.getId())) { + this.updateById(sampleBox); + } + //没有ID,则需要创建一个包装袋 + else { + sampleBox.setBoxNo(this.getNewBoxNoForOther(sampleBox.getBoxNo())); + sampleBox.setId(this.getOrderIdBy16UUId()); + this.save(sampleBox); + } + } + return sampleBox; + } + + //其他系统打印包装袋条码 + @Override + public String printLabelForOther(String boxId, Integer type) { + + SampleBox sampleBox = this.getById(boxId); + + if (sampleBox==null){ + throw new RuntimeException(String.format("没有查询到ID为%s的包装袋", boxId)); + } + + String source = ""; + + switch (sampleBox.getSource()) { + case "hairJob": + source = "毛发任务"; + break; + case "identificationMaterialAcceptance": + source = "事件受理"; + break; + case "featureAnalysis": + source = "特征分析"; + break; + } + Map map = new HashMap<>(); + map.put("sampleBox", sampleBox); + map.put("createTime", LocalDateTimeUtil.format(sampleBox.getCreateTime(), "yyyy-MM-dd")); + map.put("materialQuantity", remoteSampleService.getSampleIdForBox(boxId).getData().size()); + map.put("userName", remoteUserService.innerGetById(sampleBox.getCreateBy()).getData().getName()); + map.put("source", source); + + String templateFileName = ""; + if (type == 0) { + templateFileName = "(小)包装袋条码.vm"; + } else { + templateFileName = "(大)包装袋条码.vm"; + } + return remoteTemplate2htmlService.getHtml(templateFileName, map); + } + + @Override + public String getOrderIdBy16UUId(){ + int hashCodeV = UUID.randomUUID().toString().hashCode(); + if(hashCodeV < 0) {//有可能是负数 + hashCodeV = - hashCodeV; + } + return String.format("%016d", hashCodeV); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleServiceImpl.java new file mode 100644 index 0000000..fed305f --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleServiceImpl.java @@ -0,0 +1,226 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.sewage.entity.SewageJobIdentificationMaterial; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.handler.AppStartupRunner; +import digital.laboratory.platform.entrustment.mapper.SampleBoxMapper; +import digital.laboratory.platform.entrustment.mapper.SampleMapper; +import digital.laboratory.platform.entrustment.service.SampleService; +import digital.laboratory.platform.sys.entity.entrustment.IMAdditionalProperty; +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 检验用的样本服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 检验用的样本 服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SampleServiceImpl extends ServiceImpl implements SampleService { +// private final SampleBoxService sampleBoxService; + private final SampleBoxMapper sampleBoxMapper; + + @Override + public String getNewProvidedSampleNo(String IdentificationMaterialNo, int sampleSerialNumber) { + String pureIMNo = StrUtil.removePrefixIgnoreCase(IdentificationMaterialNo, CommonConstants.CODE_PREFIX_IDENTIFICATION_MATERIAL); // 去掉司法鉴定委托检材的前缀 JC + pureIMNo = StrUtil.removePrefixIgnoreCase(pureIMNo, CommonConstants.CODE_PREFIX_SEWAGE_IDENTIFICATION_MATERIAL); // 去掉污水任务检材的前缀 WJ + + String prefix = CommonConstants.CODE_PREFIX_PROVIDED_SAMPLE + pureIMNo; + String newCode = prefix + String.format("%d", sampleSerialNumber); + return newCode; + } + + @Override + public String getNewSampleNo(String IdentificationMaterialNo, int sampleSerialNumber) { + String pureIMNo = StrUtil.removePrefixIgnoreCase(IdentificationMaterialNo, CommonConstants.CODE_PREFIX_IDENTIFICATION_MATERIAL); // 去掉司法鉴定委托检材的前缀 JC + pureIMNo = StrUtil.removePrefixIgnoreCase(pureIMNo, CommonConstants.CODE_PREFIX_SEWAGE_IDENTIFICATION_MATERIAL); // 去掉污水任务检材的前缀 WJ + + String prefix = CommonConstants.CODE_PREFIX_SAMPLE + pureIMNo; + String newCode = prefix + String.format("%d", sampleSerialNumber); + return newCode; + } + //构建样本时的一些基本参数,污水检材转换为样本的参数,司法送检检材转化为样本的参数 + //复制对象属性 + + /** + * 根据检材创建样本 + * + * @param entrustmentIdentificationMaterial + * + * @return + */ + @Override + public List createSample(EntrustmentIdentificationMaterial entrustmentIdentificationMaterial,String orgId,String dlpUserId) { + // 生成 样本1 + List sampleList=new ArrayList(); + //if ((entrustmentIdentificationMaterial.getSample1Present() != null) && (entrustmentIdentificationMaterial.getSample1Present())) { + //SampleBox sb1 = sampleBoxMapper.selectById(entrustmentIdentificationMaterial.getSample1BoxId()); + Sample sample1 = new Sample(); + sample1.setId(IdWorker.get32UUID().toUpperCase()); + sample1.setIdentificationMaterialId(entrustmentIdentificationMaterial.getId()); + sample1.setSource("entrustment"); + //sample1.setSampleNo(entrustmentIdentificationMaterial.getSample1No()); + sample1.setSampleNo(entrustmentIdentificationMaterial.getAcceptNo()); + sample1.setCandidateDrugs(entrustmentIdentificationMaterial.getCandidateDrugs()); + sample1.setFundName(entrustmentIdentificationMaterial.getFundName()); + sample1.setFundQuantity(entrustmentIdentificationMaterial.getSample1FundQuantity()); + sample1.setFundUnit(entrustmentIdentificationMaterial.getFundUnit()); + sample1.setQuantity(entrustmentIdentificationMaterial.getSample1Quantity()); + sample1.setUnit(entrustmentIdentificationMaterial.getUnit()); + sample1.setAdditionalProperties(entrustmentIdentificationMaterial.getAdditionalProperties()); + sample1.setDrawWay(entrustmentIdentificationMaterial.getDrawWay()); + sample1.setBoxId(entrustmentIdentificationMaterial.getSample1BoxId()); + //sample1.setSampleType(sb1.getSampleType()); + sample1.setStorageMethod(entrustmentIdentificationMaterial.getStorageMethod()); + sample1.setAcceptTime(entrustmentIdentificationMaterial.getAcceptTime()); + + sample1.setSampleType("A");//设置类型 + sample1.setEntrustmentId(entrustmentIdentificationMaterial.getEntrustmentId()); //设置任务ID + sample1.setHolder(dlpUserId); + sample1.setOrgId(orgId); + sample1.setName(entrustmentIdentificationMaterial.getName()); + sample1.setAcceptNo(entrustmentIdentificationMaterial.getAcceptNo()); + this.save(sample1); + sampleList.add(sample1); + //} + + // 生成 样本2 + if ((entrustmentIdentificationMaterial.getSample2Present() != null) && (entrustmentIdentificationMaterial.getSample2Present())) { + // hasSample = true; + //SampleBox sb2 = sampleBoxMapper.selectById(entrustmentIdentificationMaterial.getSample2BoxId()); + Sample sample2 = new Sample(); + sample2.setId(IdWorker.get32UUID().toUpperCase()); + sample2.setIdentificationMaterialId(entrustmentIdentificationMaterial.getId()); + sample2.setSource("entrustment"); + //sample2.setSampleNo(entrustmentIdentificationMaterial.getSample2No()); + sample2.setSampleNo(entrustmentIdentificationMaterial.getAcceptNo()); + sample2.setCandidateDrugs(entrustmentIdentificationMaterial.getCandidateDrugs()); + sample2.setFundName(entrustmentIdentificationMaterial.getFundName()); + sample2.setFundQuantity(entrustmentIdentificationMaterial.getSample2FundQuantity()); + sample2.setFundUnit(entrustmentIdentificationMaterial.getFundUnit()); + sample2.setQuantity(entrustmentIdentificationMaterial.getSample2Quantity()); + sample2.setUnit(entrustmentIdentificationMaterial.getUnit()); + sample2.setAdditionalProperties(entrustmentIdentificationMaterial.getAdditionalProperties()); + sample2.setDrawWay(entrustmentIdentificationMaterial.getDrawWay()); + sample2.setBoxId(entrustmentIdentificationMaterial.getSample2BoxId()); + //sample2.setSampleType(sb2.getSampleType()); //取消了包装,所以这里没有盒子记录了,直接第一个样设置成A,第2个样设置成B + sample2.setStorageMethod(entrustmentIdentificationMaterial.getStorageMethod()); + sample2.setAcceptTime(entrustmentIdentificationMaterial.getAcceptTime()); + + + sample2.setSampleType("B");//设置类型 + sample2.setEntrustmentId(entrustmentIdentificationMaterial.getEntrustmentId()); //设置任务ID + sample2.setHolder(dlpUserId); + sample2.setOrgId(orgId); + sample2.setName(entrustmentIdentificationMaterial.getName()); + sample2.setAcceptNo(entrustmentIdentificationMaterial.getAcceptNo()); + this.save(sample2); + sampleList.add(sample2); + } + + return sampleList; + } + + + /** + * 根据污水检材创建样本 + * + * @param sewageJobIdentificationMaterial + * + * @return + */ +// @Override + public List createSample(SewageJobIdentificationMaterial sewageJobIdentificationMaterial, String dlpUserId) { + + //污水的编号重新生成,逻辑发生改变,现在一个检材就对应一个样本 8-31 + + List sampleList=new ArrayList(); + List candidateDrugs = JSON.parseArray(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_CANDIDATE_DRUGS), DrugLite.class); + List additionalProperties = JSON.parseArray(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_ADDITIONAL_PROPERTIES), IMAdditionalProperty.class); + BigDecimal quantity = new BigDecimal(Double.parseDouble(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_QUANTITY))); + // 生成 样本1 + //if ((sewageJobIdentificationMaterial.getSample1Present() != null) && (sewageJobIdentificationMaterial.getSample1Present())) { +// SampleBox sb1 = sampleBoxMapper.selectById(sewageJobIdentificationMaterial.getSample1BoxId()); + Sample sample1 = new Sample(); + sample1.setId(IdWorker.get32UUID().toUpperCase()); + sample1.setIdentificationMaterialId(sewageJobIdentificationMaterial.getId()); + sample1.setSource("sewageJob"); + //sample1.setSampleNo(sewageJobIdentificationMaterial.getSample1No()); + sample1.setSampleNo(sewageJobIdentificationMaterial.getImNo());//编号规则改变,改成新的编号 + + sample1.setCandidateDrugs(candidateDrugs); + sample1.setFundName(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_NAME)); + sample1.setFundQuantity(Integer.parseInt(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_QUANTITY))); + sample1.setFundUnit(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_UNIT)); + sample1.setQuantity(quantity); + sample1.setUnit(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_UNIT)); + sample1.setAdditionalProperties(additionalProperties); + sample1.setDrawWay(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_DRAWWAY)); + + sample1.setBoxId(sewageJobIdentificationMaterial.getSample1BoxId()); +// sample1.setSampleType(sb1.getSampleType()); + sample1.setStorageMethod(sewageJobIdentificationMaterial.getStorageMethod()); + sample1.setAcceptTime(sewageJobIdentificationMaterial.getAcceptTime()); + + sample1.setSampleType(sewageJobIdentificationMaterial.getSampleType().equals("1")?"A":"B");//设置类型 + sample1.setSewageJobId(sewageJobIdentificationMaterial.getJobId()); //设置任务ID + sample1.setHolder(dlpUserId); + sample1.setOrgId(sewageJobIdentificationMaterial.getDeliverOrgId()); + sample1.setName(sewageJobIdentificationMaterial.getSampleName()); + + this.save(sample1); + sampleList.add(sample1); + //} + + // 生成 样本2 + /*if ((sewageJobIdentificationMaterial.getSample2Present() != null) && (sewageJobIdentificationMaterial.getSample2Present())) { + // hasSample = true; +// SampleBox sb2 = sampleBoxMapper.selectById(sewageJobIdentificationMaterial.getSample2BoxId()); + Sample sample2 = new Sample(); + sample2.setId(IdWorker.get32UUID().toUpperCase()); + sample2.setIdentificationMaterialId(sewageJobIdentificationMaterial.getId()); + sample2.setSource("sewageJob"); + sample2.setSampleNo(sewageJobIdentificationMaterial.getSample2No()); + + sample2.setCandidateDrugs(candidateDrugs); + sample2.setFundName(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_NAME)); + sample2.setFundQuantity(Integer.parseInt(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_QUANTITY))); + sample2.setFundUnit(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_FUND_UNIT)); + sample2.setQuantity(quantity); + sample2.setUnit(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_UNIT)); + sample2.setAdditionalProperties(additionalProperties); + sample2.setDrawWay(AppStartupRunner.getCfg(CommonConstants.DLP_CODE_ENTRUSTMENT_SEWAGE_JOB_IDENTIFICATION_MATERIAL_DRAWWAY)); + + sample2.setBoxId(sewageJobIdentificationMaterial.getSample2BoxId()); +// sample2.setSampleType(sb2.getSampleType()); + sample2.setStorageMethod(sewageJobIdentificationMaterial.getStorageMethod()); + sample2.setAcceptTime(sewageJobIdentificationMaterial.getAcceptTime()); + + sample2.setSampleType("B");//设置类型 + sample2.setSewageJobId(sewageJobIdentificationMaterial.getJobId()); //设置任务ID + sample2.setHolder(dlpUserId); + sample2.setOrgId(sewageJobIdentificationMaterial.getDeliverOrgId()); + sample2.setName(sewageJobIdentificationMaterial.getSampleName()); + this.save(sample2); + sampleList.add(sample2); + }*/ + + return sampleList; + } + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreChangeDutyLogServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreChangeDutyLogServiceImpl.java new file mode 100644 index 0000000..81519bd --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreChangeDutyLogServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.SampleStoreChangeDutyLog; +import digital.laboratory.platform.entrustment.mapper.SampleStoreChangeDutyLogMapper; +import digital.laboratory.platform.entrustment.service.SampleStoreChangeDutyLogService; +import org.springframework.stereotype.Service; + +/** + * 样品库管理员换班日志服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库管理员换班日志服务实现类 + */ +@Service +public class SampleStoreChangeDutyLogServiceImpl extends ServiceImpl implements SampleStoreChangeDutyLogService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreLogServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreLogServiceImpl.java new file mode 100644 index 0000000..b37a2df --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreLogServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.SampleStoreLog; +import digital.laboratory.platform.entrustment.mapper.SampleStoreLogMapper; +import digital.laboratory.platform.entrustment.service.SampleStoreLogService; +import org.springframework.stereotype.Service; + +/** + * 样品库入库出库日志服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库入库出库日志服务实现类 + */ +@Service +public class SampleStoreLogServiceImpl extends ServiceImpl implements SampleStoreLogService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreServiceImpl.java new file mode 100644 index 0000000..274b12e --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SampleStoreServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.SampleStore; +import digital.laboratory.platform.entrustment.mapper.SampleStoreMapper; +import digital.laboratory.platform.entrustment.service.SampleStoreService; +import org.springframework.stereotype.Service; + +/** + * 样品库服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-06 + * @describe 样品库服务实现类 + */ +@Service +public class SampleStoreServiceImpl extends ServiceImpl implements SampleStoreService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCabinetServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCabinetServiceImpl.java new file mode 100644 index 0000000..7e8c216 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCabinetServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.StorageCabinet; +import digital.laboratory.platform.entrustment.mapper.StorageCabinetMapper; +import digital.laboratory.platform.entrustment.service.StorageCabinetService; +import org.springframework.stereotype.Service; + +/** + * 暂存柜服务实现类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜服务实现类 + */ +@Service +public class StorageCabinetServiceImpl extends ServiceImpl implements StorageCabinetService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellLogServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellLogServiceImpl.java new file mode 100644 index 0000000..1dd9733 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellLogServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.StorageCellLog; +import digital.laboratory.platform.entrustment.mapper.StorageCellLogMapper; +import digital.laboratory.platform.entrustment.service.StorageCellLogService; +import org.springframework.stereotype.Service; + +/** + * 暂存柜记录服务实现类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜记录服务实现类 + */ +@Service +public class StorageCellLogServiceImpl extends ServiceImpl implements StorageCellLogService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellServiceImpl.java new file mode 100644 index 0000000..dd0130e --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/StorageCellServiceImpl.java @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.StorageCell; +import digital.laboratory.platform.entrustment.mapper.StorageCellMapper; +import digital.laboratory.platform.entrustment.service.StorageCellService; +import org.springframework.stereotype.Service; + +/** + * 暂存柜,每行一个单元格服务实现类 + * + * @author Zhang Xiaolong created at 2022-04-25 + * @describe 暂存柜,每行一个单元格服务实现类 + */ +@Service +public class StorageCellServiceImpl extends ServiceImpl implements StorageCellService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeDataServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeDataServiceImpl.java new file mode 100644 index 0000000..e235e28 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeDataServiceImpl.java @@ -0,0 +1,1391 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.core.JsonProcessingException; +import digital.laboratory.platform.common.core.constant.CommonConstants; +import digital.laboratory.platform.common.core.util.R; +import digital.laboratory.platform.othersys.dto.EntrustQueryParams; +import digital.laboratory.platform.entrustment.entity.*; +import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants; +import digital.laboratory.platform.entrustment.mapper.EntrustDataVoMapper; +import digital.laboratory.platform.entrustment.service.*; +import digital.laboratory.platform.othersys.dto.DataAuditBaseDto; +import digital.laboratory.platform.othersys.dto.EntrustDataDto; +import digital.laboratory.platform.othersys.utils.ConvertUtils; +import digital.laboratory.platform.othersys.utils.HttpsUtils; +import digital.laboratory.platform.othersys.vo.*; +import digital.laboratory.platform.sys.entity.Dictionary; +import digital.laboratory.platform.sys.entity.DrugLite; +import digital.laboratory.platform.sys.entity.SysUser; +import digital.laboratory.platform.sys.entity.entrustment.IMAdditionalProperty; +import digital.laboratory.platform.sys.feign.RemoteDictionaryService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @ClassName SynchronizeDataServiceImpl + * @Description + * @Author xy + * @Date 2023/6/13 11:02 + * @Version 1.0 + **/ +@Slf4j +@Service +public class SynchronizeDataServiceImpl extends ServiceImpl implements SynchronizeDataService { + //保存第三方系统的委托数据 + @Resource + private SynchronizeMaterialVoService synchronizeMaterialVoService; + @Resource + private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService; + @Resource + private CaseEventService caseEventService; + @Resource + private CaseEvidenceService caseEvidenceService; + @Resource + private RemoteDictionaryService remoteDictionaryService;//字典接口 + @Resource + private EntrustmentService entrustmentService;//委托书服务 + + //鉴定结果提交 + public Boolean submitIdentifyResult(String dataPath, String entrustId) { + SynConnInfoVo synConnInfoVo = getSysSynConnInfo(); + String token = getTokenInfo("SubCenter", synConnInfoVo); + String remoteUrl = synConnInfoVo.getApiHost() + dataPath + "?token=" + token; + //构造请求体 + AnalysisDataVo analysisDataVo = new AnalysisDataVo(); + String jsonStr = JSON.toJSONString(analysisDataVo); + try { + DataModelVo retDataModelVo = HttpsUtils.PostDataToServerByPathParams(remoteUrl, jsonStr, HttpMethod.PUT, entrustId); + if (retDataModelVo.getStatusCode().equals("SUCCESS")) { + return true; + } else { + return false; + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 分中心受理 + * + * @param dataPath + * @param selfEntrust + * @param thirdSysEntrust + * @return + */ + @Override + @Transactional + public Boolean subCenterAccept(String dataPath, Entrustment selfEntrust, EntrustOfThirdSys thirdSysEntrust) throws JsonProcessingException { + SynConnInfoVo synConnInfoVo = getSysSynConnInfo(); + String token = getTokenInfo("SubCenter", synConnInfoVo); + String remoteUrl = synConnInfoVo.getApiHost() + dataPath + "?token=" + token; + //构造受理的请求体 + //我方检材 + List entrustmentIdentificationMaterialList = entrustmentIdentificationMaterialService.list(Wrappers.query() + .eq("entrustment_id", selfEntrust.getId()) + .orderByAsc("order_no")); + //创建方法描述 + String samplingMethod = ""; + BigDecimal analysisSampleAmountSum = new BigDecimal(0); + BigDecimal retainedSampleAmountSum = new BigDecimal(0); + for (EntrustmentIdentificationMaterial materialObj : entrustmentIdentificationMaterialList) { + // + if (materialObj.getSample1RepeatWeigh() != null && materialObj.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + analysisSampleAmountSum = analysisSampleAmountSum.add(materialObj.getSample1RepeatWeigh()); + } else { + analysisSampleAmountSum = analysisSampleAmountSum.add(materialObj.getSample1Quantity()); + } + if (materialObj.getSample2RepeatWeigh() != null && materialObj.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + retainedSampleAmountSum = retainedSampleAmountSum.add(materialObj.getSample2RepeatWeigh()); + } else { + retainedSampleAmountSum = retainedSampleAmountSum.add(materialObj.getSample2Quantity()); + } + + +// analysisSampleAmountSum=analysisSampleAmountSum.add(materialObj.getSample1RepeatWeigh()); +// retainedSampleAmountSum=retainedSampleAmountSum.add(materialObj.getSample2RepeatWeigh()); + } + if (analysisSampleAmountSum.compareTo(BigDecimal.ZERO) > 0 && retainedSampleAmountSum.compareTo(BigDecimal.ZERO) > 0) { + samplingMethod = "将检材分装为分析样、留存样"; + } else if (analysisSampleAmountSum.compareTo(BigDecimal.ZERO) == 0) { + samplingMethod = "检材全部为留存样"; + } else if (retainedSampleAmountSum.compareTo(BigDecimal.ZERO) == 0) { + samplingMethod = "检材全部为分析样"; + } + + //将受理时确定的方法持久化 + thirdSysEntrust.setSamplingMethod(samplingMethod); + this.updateById(thirdSysEntrust); + //第三方检材 + List entrustMaterialOfThirdSysList = synchronizeMaterialVoService.list( + Wrappers.query().eq("entrust_id", thirdSysEntrust.getId()).orderByAsc("order_index")); + + //给第三方检材复称的数据 + entrustmentIdentificationMaterialList.forEach(matreialObj -> { + + entrustMaterialOfThirdSysList.forEach(otherItem -> { + if (otherItem.getId().equals(matreialObj.getId())) { + //万一没复称数据,在受理委托的时候,如果发现没有复秤,就不让受理 1225 更新取消 + //这代表已经复称了 复称后单位要改为克,如果没有复称 单位则沿用原来的 + if (matreialObj.getSample1RepeatWeigh() != null && matreialObj.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + otherItem.setAnalysisSampleAmount(matreialObj.getSample1RepeatWeigh()); + otherItem.setUnit("gram"); + otherItem.setSampleUnit("gram"); + + } else { + otherItem.setAnalysisSampleAmount(matreialObj.getSample1Quantity()); + otherItem.setSampleUnit(ConvertUtils.getUnitByZhCn(matreialObj.getUnit())); + } + if (matreialObj.getSample2RepeatWeigh() != null && matreialObj.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + otherItem.setRetainedSampleAmount(matreialObj.getSample2RepeatWeigh()); + } else { + otherItem.setRetainedSampleAmount(matreialObj.getSample2Quantity()); + } + +// otherItem.setAnalysisSampleAmount(matreialObj.getSample1RepeatWeigh()); +// otherItem.setRetainedSampleAmount(matreialObj.getSample2RepeatWeigh()); +// otherItem.setSampleUnit(ConvertUtils.getUnitByZhCn(matreialObj.getUnit())); + + //有的检材不用复称了 + if (matreialObj.getSample1RepeatWeigh() != null && matreialObj.getSample1RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + otherItem.setTotalSampleAmount(matreialObj.getSample1RepeatWeigh()); + } else { + otherItem.setTotalSampleAmount(matreialObj.getSample1Quantity()); + } + if (matreialObj.getSample2RepeatWeigh() != null && matreialObj.getSample2RepeatWeigh().compareTo(BigDecimal.ZERO) != 0) { + otherItem.setTotalSampleAmount(otherItem.getTotalSampleAmount().add(matreialObj.getSample2RepeatWeigh())); + } else { + otherItem.setTotalSampleAmount(otherItem.getTotalSampleAmount().add(matreialObj.getSample2Quantity())); + } +// otherItem.setTotalSampleAmount(matreialObj.getSample1RepeatWeigh().add(matreialObj.getSample2RepeatWeigh())); + } + }); + }); + //这里我们将受理的属性也持久化 + boolean ret = synchronizeMaterialVoService.updateBatchById(entrustMaterialOfThirdSysList); +// for (EntrustMaterialOfThirdSys entrustMaterialOfThirdSys : entrustMaterialOfThirdSysList) { +// System.out.println(entrustMaterialOfThirdSys.getName() + "~~~~~~~~~~~~~~~~~~看看我们提供给大数据平台的Order编号:" + entrustMaterialOfThirdSys.getOrder_index()); +// } + System.out.println(ret); + DataAuditBaseDto dataAuditBaseDto = genSubCenterAcceptData(thirdSysEntrust, entrustMaterialOfThirdSysList, samplingMethod); + String jsonStr = JSON.toJSONString(dataAuditBaseDto); + System.out.println("submit的数据:" + jsonStr); + DataModelAcceptVo retDataModelVo = HttpsUtils.PostDataToServerByPathParamsAccept(remoteUrl, jsonStr, HttpMethod.PUT, thirdSysEntrust.getId()); + log.info("准备调用大数据平台委托受理接口,提交信息为{}", jsonStr); + if (retDataModelVo.getStatusCode().equals("SUCCESS")) { + System.out.println(JSONObject.toJSONString("受理执行结果" + retDataModelVo)); + //这里如果成功,我们应该获取受理成功的受理编号,并将这个编号存到我们的库中 + String thirdSysAcceptNo = retDataModelVo.getResult(); + log.info("接口调用成功 {} 返回的受理编号{}", remoteUrl, thirdSysAcceptNo); + //将这个编号反写到我们的系统中 + + selfEntrust.setAcceptNoThirdSys(thirdSysAcceptNo); + selfEntrust.setAcceptNo(thirdSysAcceptNo); + + //按受理顺序生成检材的受理编号 + for (int i = 0; i < entrustmentIdentificationMaterialList.size(); i++) { + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = entrustmentIdentificationMaterialList.get(i); + entrustmentIdentificationMaterial.setAcceptNo(thirdSysAcceptNo + "-" + entrustmentIdentificationMaterial.getOrderNo()); + } + entrustmentIdentificationMaterialService.updateBatchById(entrustmentIdentificationMaterialList); + entrustmentService.updateById(selfEntrust); + return true; + } else { + log.info("调用大数据平台委托受理接口失败,错误信息{} {} {}", retDataModelVo.getBusinessError().getCode(), retDataModelVo.getBusinessError().getMessage()); + return false; + } + + } + + /** + * 省级审核委托 和分中心审核委托 + * + * @param userFlag 用户标识,是分中心用户还是省级用户 + * @param dataPath API的访问路径 + * @param thirdSysEntrustID + * @param result + * @param reMark + * @param auditOrAccept + * @return + */ + @Override + public Boolean auditEntrustByProvinceOrCenter(String userFlag, String dataPath, String thirdSysEntrustID, String result, + String reMark, String auditOrAccept) { + SynConnInfoVo synConnInfoVo = getSysSynConnInfo(); + String token = getTokenInfo(userFlag, synConnInfoVo);//获取到token,根据用户标识 + // /api/identify/entrust/{entrustId}/provinceAudit,这个是省级审核地址,如果是分中心,则审核地址是/api/identify/entrust/{entrustId}/acceptAudit + String remoteUrl = synConnInfoVo.getApiHost() + dataPath + "?token=" + token; + //构建请求体 + EntrustOfThirdSys entrustOfThirdSys = this.getById(thirdSysEntrustID); + List entrustMaterialOfThirdSysList = synchronizeMaterialVoService.list( + Wrappers.query().eq("entrust_id", thirdSysEntrustID)); + DataAuditBaseDto dataAuditBaseDto = genProvinceAuditData(entrustOfThirdSys, entrustMaterialOfThirdSysList, result, reMark, auditOrAccept); + String jsonStr = JSON.toJSONString(dataAuditBaseDto); + try { + DataModelVo retDataModelVo = HttpsUtils.PostDataToServerByPathParams(remoteUrl, jsonStr, HttpMethod.PUT, thirdSysEntrustID); + log.info("准备调用大数据平台委托 {} 接口,提交信息为{}", auditOrAccept, jsonStr); + if (retDataModelVo.getStatusCode().equals("SUCCESS")) { + log.info("接口调用成功 {}", remoteUrl); + return true; + } else { + log.info("调用大数据平台委托接口失败,错误信息为{} {}", retDataModelVo.getBusinessError().getCode(), retDataModelVo.getBusinessError().getMessage()); + return false; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + /** + * 同步委托数据 + * + * @param entrustStatus + * @param userFlag + * @return + */ + public Boolean synEntrustDataToMyServer(String entrustStatus, String userFlag) { + Boolean ret = true; + + DataModelVo dataModelVo = fetchDataFromRemote(entrustStatus); + if (dataModelVo == null) { + ret = false; + throw new RuntimeException("远程获取数据失败,请检查网络及请求参数是否正常"); + } + List entrustDataVoList = dataModelVo.getResult().getList();//获取到的数据,分别处理这些数据 + if (entrustStatus.trim().equals("accepted")) { + log.info("本次处理的是已受理数据 数据量是 {} ", entrustDataVoList.size()); + //这里在系统初始化的时候,会同步禁毒系统已受理的数据,这单独用一个函数处理 + handelAcceptedStatusData(entrustDataVoList); + return true; + } + for (EntrustDataVo entrustDataVo : entrustDataVoList) { + //这里要查重复,如果已经同步过了,就不需要再同步 + if (checkExistEntrust(entrustDataVo.getId())) { + //这里需要注意另外一种情况要更新,我们此时需要判断是否符合更新条件,如果符合执行更新,如果有数据是被省级退回,或者分中心审核退回的, + // 这个时候,我们应该更新这条数据的委托编号,因为委托的ID 并没改变 + updateThirdSysData(entrustDataVo); + //这里需要判断,如果在审核、审批的列表中同步了数据过来,但是又没有通过智慧实验室系统进行审核、审批,然后又在禁毒大数据进行了审核审批, + //会导致两边系统委托的状态不一致,我们要以禁毒大数据平台的为准,所以要改变智慧实验室系统委托的状态 + if (entrustStatus.equals("toAccept")) { + EntrustOfThirdSys entrustOfThirdSys = this.getById(entrustDataVo.getId()); + Entrustment entrustment = entrustmentService.getById(entrustOfThirdSys.getEntrustMainId()); + if (entrustment != null && !(entrustment.getStatus().equals(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()))) { + //如果禁毒大数据平台的状态是待受理,而智慧实验室不是,那么我们将状态也改为待受理 + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus()); + entrustmentService.updateById(entrustment); + log.info("将数据更新至待受理状态了 {} ", entrustment.getId()); + } + } + System.out.println("数据已经同步过了,不需要再次同步"); + log.info("数据已经同步过了,不需要再次同步 {} ", entrustDataVo.getId()); + continue;//如果已经存在就不管了,进行下一条的同步 + } + Map>> caseSaveRet = caseEventService.syncCaseEventInfo(entrustDataVo, null, false); + log.info("插入案件成功 {} ", entrustDataVo.getId()); + //插入案件物证 + String caseID = caseSaveRet.entrySet().stream().findFirst().map(Map.Entry::getKey).get(); + List> evidToMaterial = caseSaveRet.entrySet().stream().findFirst().map(Map.Entry::getValue).get(); + log.info("插入物证成功 {} ", entrustDataVo.getId()); + //插入委托 + List stDataList = getSynEntrustStatus(entrustDataVo.getStatus()); + Entrustment entrustmentForSave = addEntrustmentByOtherSys(entrustDataVo, caseID, "add", stDataList); + log.info("插入委托成功 {} ", entrustDataVo.getId()); + //插入备用存储表 + this.addEntrustThirdSys(genThirdSysEntrustBean(entrustDataVo, entrustmentForSave.getId(), "add")); + log.info("插入第三方委托成功 {} ", entrustDataVo.getId()); + List materialVos = entrustDataVo.getMaterialList(); + //插入检材 + for (MaterialVo materialVo : materialVos) { + String materialIndex = materialVo.getIndex(); + //获取物证ID,根据索引 + String evidID = getEvidIdByIndex(materialIndex, evidToMaterial); + //查出这个物证ID对应的物证编号 + CaseEvidence caseEvidence = caseEvidenceService.getById(evidID); + String materialNo = entrustmentIdentificationMaterialService.getNewIdentificationMaterialNo(caseEvidence.getEvidenceNo()); + EntrustmentIdentificationMaterial selfEntrustmentIdentificationMaterial = addSampleByOtherSys(materialVo, entrustmentForSave, materialNo, caseID, evidID, entrustDataVo.getMaterialType()); + System.out.println("插入检材:" + materialVo.getName()); + log.info("插入委托的检材成功 检材名称:{} 检材ID:{}", materialVo.getName(), selfEntrustmentIdentificationMaterial.getId()); + materialVo.setEntrustId(entrustDataVo.getId()); + synchronizeMaterialVoService.addMaterialVoThirdSys(genThirdSysEntrustMaterialBean(materialVo, selfEntrustmentIdentificationMaterial.getId())); + log.info("插入第三方委托的检材成功 检材名称:{} 检材ID:{}", materialVo.getName(), selfEntrustmentIdentificationMaterial.getId()); + } + } + return ret; + } + + //从大数据平台同步已经受理的数据 + @Override + public Boolean synAcceptedEntrustDataToMyServer(EntrustQueryParams queryParams) { + Boolean ret = true; + log.info("查询参数是:{}", queryParams); + //DataModelVo dataModelVo=fetchDataFromRemote(entrustStatus); + List entrustDataVoList = fetchAcceptedDataFromRemote(queryParams); +// if (dataModelVo == null) { +// log.info("远程获取数据失败,请检查网络及请求参数是否正常"); +// ret = false; +// throw new RuntimeException("远程获取数据失败,请检查网络及请求参数是否正常"); +// } +// List entrustDataVoList = dataModelVo.getResult().getList();//获取到的数据,分别处理这些数据 + log.info("从大数据平台获取到的数据量 {}", entrustDataVoList.size()); + return handelAcceptedStatusData(entrustDataVoList); + } + + //同步已经受理的数据 + public List fetchAcceptedDataFromRemote(EntrustQueryParams entrustQueryParams) { + SynConnInfoVo synConnInfoVo = getSysSynConnInfo(); + String token = getTokenInfo("SubCenter", synConnInfoVo); + String remoteUrl = synConnInfoVo.getApiHost(); + String wtDataPath = synConnInfoVo.getDataPathInfo().getEntrustDataPath(); + //DataModelVo retDataModelVo= HttpsUtils.fetchWtDataFromRemote(remoteUrl,wtDataPath,token,wtStatus); + ArrayList entrustDataVos = new ArrayList<>(); + for (int i = 0; ; i++) { + entrustQueryParams.setPageIndex(i); + entrustQueryParams.setPageSize(100); + DataModelVo retDataModelVo = HttpsUtils.fetchAcceptedWtDataFromRemote(remoteUrl, wtDataPath, token, entrustQueryParams); + log.info("remoteUrl ====== {}", remoteUrl); + System.out.println("remoteUrl ===========================" + remoteUrl); + int pageCount = retDataModelVo.getResult().getPageCount(); + log.info("总条数:"+pageCount); + entrustDataVos.addAll(retDataModelVo.getResult().getList()); + if (i == 10) { + break; + } + if (i >= pageCount - 1) { + break; + } + } +// DataModelVo retDataModelVo = HttpsUtils.fetchAcceptedWtDataFromRemote(remoteUrl, wtDataPath, token, entrustQueryParams); +// int pageCount = retDataModelVo.getResult().getPageCount(); +// List list = retDataModelVo.getResult().getList(); +// if (pageCount > 1) { +// +// } + return entrustDataVos; + } + + //同步已受理数据的处理 + private boolean handelAcceptedStatusData(List entrustDataVoList) { + for (EntrustDataVo entrustDataVo : entrustDataVoList) { + System.out.println("正在同步-------------------------------------------" + entrustDataVo.getId()); + //这里需要判断一下,是否之前同步过,如果同步过的话,我们就不用再同步 + if (isSynAcceptEntrust(entrustDataVo)) { + //说明已经存在,不需要同步,但是如果我们系统中的状态不是已受理,那么就要进行更新,而且还要更新检材信息 + System.out.println("这个委托已经被通不过了,不需要再同步:" + entrustDataVo.getId()); + EntrustOfThirdSys thirdSys = this.getById(entrustDataVo.getId()); + Entrustment entrustment = entrustmentService.getById(thirdSys.getEntrustMainId()); + if (entrustment != null && !entrustment.getStatus().equals(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus())) { + entrustmentIdentificationMaterialService.remove(Wrappers.lambdaQuery().eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId())); + entrustmentService.removeById(entrustment); + synchronizeMaterialVoService.remove(Wrappers.lambdaQuery().eq(EntrustMaterialOfThirdSys::getEntrustId, thirdSys.getId())); + this.removeById(thirdSys); +// entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus()); +// entrustment.setAcceptNo(entrustDataVo.getSerialNumber()); +// List entrustmentIdentificationMaterialList = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery().eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustment.getId())); +// List materialList = entrustDataVo.getMaterialList(); +// List nameList = new ArrayList<>(); +// materialList.forEach(item -> +// nameList.add(item.getName())); +// int index = 1; +// for (MaterialVo materialVo : materialList) { +// for (EntrustmentIdentificationMaterial entrustmentIdentificationMaterial : entrustmentIdentificationMaterialList) { +// if (entrustmentIdentificationMaterial.getName().equals(materialVo.getName())) { +// entrustmentIdentificationMaterial.setAcceptNo(entrustDataVo.getSerialNumber() + "-" + index); +// entrustmentIdentificationMaterial.setProvidedSample1Quantity(materialVo.getAnalysisSampleAmount()); +// entrustmentIdentificationMaterial.setProvidedSample1FundQuantity(1); +// entrustmentIdentificationMaterial.setSample1Quantity(materialVo.getAnalysisSampleAmount()); +// entrustmentIdentificationMaterial.setSample1FundQuantity(1); +// entrustmentIdentificationMaterial.setAcceptPassed(1); +// if (materialVo.getRetainedSampleAmount() != null && materialVo.getRetainedSampleAmount().compareTo(BigDecimal.ZERO) != 0) { +// entrustmentIdentificationMaterial.setSample2Quantity(materialVo.getRetainedSampleAmount()); +// entrustmentIdentificationMaterial.setProvidedSample2Quantity(materialVo.getRetainedSampleAmount()); +// } +// index++; +// } +// } +// } +// entrustmentIdentificationMaterialService.updateBatchById(entrustmentIdentificationMaterialList); +// entrustmentService.updateById(entrustment); +// } +// continue; + } else { + continue; + } + } + //插入案件,和之前逻辑一样, + Map>> caseSaveRet = caseEventService.syncCaseEventInfo(entrustDataVo, null, false); + //插入案件物证 + String caseID = caseSaveRet.entrySet().stream().findFirst().map(Map.Entry::getKey).get(); + List> evidToMaterial = caseSaveRet.entrySet().stream().findFirst().map(Map.Entry::getValue).get(); + //插入委托,比之前的信息多,因为要补录受理信息 + Entrustment entrustmentForSave = addEntrustmentOfAccepted(caseID, entrustDataVo); + this.addEntrustThirdSys(genThirdSysEntrustBean(entrustDataVo, entrustmentForSave.getId(), "add")); + + //插入检材,比之前的信息多,因为要补录受理信息 + List materialVos = entrustDataVo.getMaterialList(); + for (MaterialVo materialVo : materialVos) { + String materialIndex = materialVo.getIndex(); + //获取物证ID,根据索引 + String evidID = getEvidIdByIndex(materialIndex, evidToMaterial); + //查出这个物证ID对应的物证编号 + CaseEvidence caseEvidence = caseEvidenceService.getById(evidID); + String materialNo = entrustmentIdentificationMaterialService.getNewIdentificationMaterialNo(caseEvidence.getEvidenceNo()); + EntrustmentIdentificationMaterial selfEntrustmentIdentificationMaterial = addSampleByOtherSys(materialVo, entrustmentForSave, materialNo, caseID, evidID, entrustDataVo.getMaterialType()); + System.out.println("插入检材:" + materialVo.getName()); + materialVo.setEntrustId(entrustDataVo.getId()); + synchronizeMaterialVoService.addMaterialVoThirdSys(genThirdSysEntrustMaterialBean(materialVo, selfEntrustmentIdentificationMaterial.getId())); + } + } + + return false; + } + + //判断已受理的委托是否已经被同步,返回true,已经同步 返回false,没有同步 + private Boolean isSynAcceptEntrust(EntrustDataVo entrustDataVo) { + EntrustOfThirdSys entrustOfThirdSys = this.getById(entrustDataVo.getId()); + if (entrustOfThirdSys != null) { + //说明已经存在,返回true + return true; + } + return false; + } + + //已受理委托的插入处理 + private Entrustment addEntrustmentOfAccepted(String caseID, EntrustDataVo entrustDataVo) { + CaseEvent caseEvent = caseEventService.getById(caseID); + Entrustment entrustment = new Entrustment(); + entrustment.setEntrustmentNo(entrustmentService.getNewEntrustNoByYear(entrustDataVo.getSerialYear() + ""));//设置委托编号 + entrustment.setId(IdWorker.get32UUID().toUpperCase());//设置系统编号 + entrustment.setDataSources(1);//设置数据来源,标识来自系统还是外部系统 + entrustment.setCaseId(caseID);//设置案件ID + entrustment.setThirdSysEntrustNo(entrustDataVo.getEntrustSerialNumber()); + + String materialType = entrustDataVo.getMaterialType(); + if (StringUtils.isNotBlank(materialType)) { + if (materialType.equals("inVitro")) { + entrustment.setEntrustmentType(0); + } else if (materialType.equals("inVivo")) { + entrustment.setEntrustmentType(1); + } else { + entrustment.setEntrustmentType(2); + } + } + //设置候选人员 + List users = entrustmentService.taskAvailableUserList_Check(); + String candidateUser = ""; + for (SysUser u : users) { + if (candidateUser.length() > 0) { + candidateUser += ","; + } + candidateUser += u.getUserId(); + } + entrustment.setCheckCandidateUser(candidateUser); + + + entrustment.setIdentificationOrgName("国家毒品实验室陕西分中心");//设置鉴定机构 + entrustment.setClientOrgId(entrustDataVo.getCreateUserDeptRegionCode());//设置委托单位ID + entrustment.setClientOrgName(entrustDataVo.getEntrustOrganization());//设置委托单位名称 + + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime ldt = LocalDateTime.parse(entrustDataVo.getSubmitTime(), df); + entrustment.setSubmitTime(ldt);//设置提交日期 + entrustment.setCreateTime(ldt); + //entrustment.setCreateBy(); +// entrustment.setEntrustmentType(0);//设置委托类型 正常委托 0,案件 是 1 2024-3-20已更新:这个字段现在已经被用做检材类别了 + entrustment.setReportReceiveMode(ConvertUtils.reportSendType(entrustDataVo.getReportSendType()) + "");//confidentialDelivery:机要寄递, ems:邮政专递EMS(到付),takeFromOneself: 自取 + + + //设置送检人1 + DelivererVo delivererVo1 = entrustDataVo.getUserList().get(0); + DelivererVo delivererVo2 = entrustDataVo.getUserList().get(1); + + entrustment.setDeliverer1Name(delivererVo1.getName());//姓名 + entrustment.setDeliverer1Position(delivererVo1.getPosition());//职务 + //证件名称 policeOfficerCard:警官证, identityCard:身份证, officerCard:军官证, workCard:工作证, passport:护照 + entrustment.setDeliverer1Cert(ConvertUtils.getCardTypeName(delivererVo1.getCardType())); + entrustment.setDeliverer1Id(delivererVo1.getCertificatesCode());//证件编号 + //设置送检人2 + entrustment.setDeliverer2Name(delivererVo2.getName());//姓名 + entrustment.setDeliverer2Position(delivererVo2.getPosition());//职务 + entrustment.setDeliverer2Cert(ConvertUtils.getCardTypeName(delivererVo2.getCardType()));//证件名称 + entrustment.setDeliverer2Id(delivererVo2.getCertificatesCode());//证件编号 + //设置委托状态 + entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus());//设置为待审核 + entrustment.setPreviousStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus());// + entrustment.setIdentificationDomain("毒品检验"); + //补充受理信息 + entrustment.setAcceptNo(entrustDataVo.getSerialNumber());//我们自己的受理编号, + entrustment.setAcceptNoThirdSys(entrustDataVo.getSerialNumber());//他们的受理编号 + LocalDateTime acceptDt = LocalDateTime.parse(entrustDataVo.getAcceptTime(), df); + entrustment.setAcceptTime(acceptDt); + entrustmentService.save(entrustment); + return entrustment; + } + + //退回逻辑的处理 + public void updateThirdSysData(EntrustDataVo entrustDataVo) { + if (checkRollBackCondition(entrustDataVo.getId(), entrustDataVo.getEntrustSerialNumber())) { + System.out.println("数据需要更新,开始执行更新操作"); + //符合更新逻辑 + EntrustOfThirdSys thirdEnObj = this.getById(entrustDataVo.getId()); + Entrustment _selfEntrust = entrustmentService.getById(thirdEnObj.getEntrustMainId()); + String caseID = _selfEntrust.getCaseId(); + Map>> caseUpdateRet = caseEventService.syncCaseEventInfo(entrustDataVo, caseID, true); + //先更新委托 + List stDataList = getSynEntrustStatus(entrustDataVo.getStatus()); + Entrustment entrustmentForUpdate = addEntrustmentByOtherSys(entrustDataVo, caseID, "update", stDataList); + this.updateEntrustThirdSys(genThirdSysEntrustBean(entrustDataVo, entrustmentForUpdate.getId(), "update")); + //再更新检材 + //更新之前,咱们把之前的检材先删除 + //删除本系统 + entrustmentIdentificationMaterialService.remove(Wrappers.query() + .eq("entrustment_id", entrustmentForUpdate.getId())); + //删除第三方系统的 + synchronizeMaterialVoService.remove(Wrappers.query() + .eq("entrust_id", thirdEnObj.getId())); + //删除后做插入 + List> evidToMaterial = caseUpdateRet.entrySet().stream().findFirst().map(Map.Entry::getValue).get(); + List materialVos = entrustDataVo.getMaterialList(); + //插入检材 + for (MaterialVo materialVo : materialVos) { + String materialIndex = materialVo.getIndex(); + //获取物证ID,根据索引 + String evidID = getEvidIdByIndex(materialIndex, evidToMaterial); + //查出这个物证ID对应的物证编号 + CaseEvidence caseEvidence = caseEvidenceService.getById(evidID); + String materialNo = entrustmentIdentificationMaterialService.getNewIdentificationMaterialNo(caseEvidence.getEvidenceNo()); + EntrustmentIdentificationMaterial selfMaterial = addSampleByOtherSys(materialVo, entrustmentForUpdate, materialNo, caseID, evidID, entrustDataVo.getMaterialType()); + System.out.println("插入检材:" + materialVo.getName()); + materialVo.setEntrustId(thirdEnObj.getId()); + synchronizeMaterialVoService.addMaterialVoThirdSys(genThirdSysEntrustMaterialBean(materialVo, selfMaterial.getId())); + } + } + } + + /** + * 检查是否符合更新条件 + * + * @param thirdEntrustID + * @param targetEntrustNo + * @return + */ + public Boolean checkRollBackCondition(String thirdEntrustID, String targetEntrustNo) { + List retList = this.list(Wrappers.query() + .eq("id", thirdEntrustID) + .eq("entrust_Serial_Number", targetEntrustNo)); + if (retList.size() > 0) { + return false;//说明是同样的数据,不用处理 + } else { + return true; + } + } + + + @Override + public void addEntrustThirdSys(EntrustOfThirdSys entrustOfThirdSys) { + this.save(entrustOfThirdSys); + } + + public void updateEntrustThirdSys(EntrustOfThirdSys entrustOfThirdSys) { + this.updateById(entrustOfThirdSys); + } + + //构建审核请求体 + public DataAuditBaseDto genProvinceAuditData(EntrustOfThirdSys entrustThirdSys, List materialVoList, + String successFlag, String reMark, String auditOrAccept) { + DataAuditBaseDto dataAuditBaseDto = new DataAuditBaseDto(); + dataAuditBaseDto.setResult(successFlag); + if (!StringUtils.isBlank(reMark)) { + dataAuditBaseDto.setRemark(reMark); + } else { + dataAuditBaseDto.setRemark(""); + } + EntrustDataDto entrustDataDto = new EntrustDataDto(); + entrustDataDto.setId(entrustThirdSys.getId()); + entrustDataDto.setEntrustNumber(entrustThirdSys.getEntrustSerialNumber()); + entrustDataDto.setEntrustOrganization(entrustThirdSys.getEntrustOrganization()); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + entrustDataDto.setScheduledDate(entrustThirdSys.getScheduledDate() == null ? "" : entrustThirdSys.getScheduledDate().format(df));//预约日期 + entrustDataDto.setCaseName(entrustThirdSys.getCaseName()); + entrustDataDto.setCaseCode(entrustThirdSys.getCaseCode()); + entrustDataDto.setCaseRemark(entrustThirdSys.getCaseRemark()); + entrustDataDto.setMaterialType(entrustThirdSys.getMaterialType()); + entrustDataDto.setMaterialDescribe(entrustThirdSys.getMaterialDescribe()); + entrustDataDto.setEntrustRequirement(entrustThirdSys.getEntrustRequirement()); + entrustDataDto.setEntrustMethod(entrustThirdSys.getEntrustMethod()); + entrustDataDto.setOriginalIdentification(entrustThirdSys.getOriginalIdentification());//原鉴定情况 + entrustDataDto.setReportSendType(entrustThirdSys.getReportSendType()); + entrustDataDto.setReportSendAddress(StringUtils.isBlank(entrustThirdSys.getReportSendAddress()) ? " " : entrustThirdSys.getReportSendAddress()); + + //如果是受理的时候,我们需要补充这个属性 + if (auditOrAccept.equals("Accept")) { + entrustDataDto.setSamplingMethod(entrustThirdSys.getSamplingMethod()); + } + //送检人信息 + DelivererVo delivererVo1 = new DelivererVo(); + delivererVo1.setName(entrustThirdSys.getDeliverer1Name()); + delivererVo1.setPosition(entrustThirdSys.getDeliverer1Position()); + delivererVo1.setCardType(entrustThirdSys.getDeliverer1CardType()); + delivererVo1.setCertificatesCode(entrustThirdSys.getDeliverer1CertificatesCode()); + delivererVo1.setPhone(entrustThirdSys.getDeliverer1Phone()); + DelivererVo delivererVo2 = new DelivererVo(); + delivererVo2.setName(entrustThirdSys.getDeliverer2Name()); + delivererVo2.setPosition(entrustThirdSys.getDeliverer2Position()); + delivererVo2.setCardType(entrustThirdSys.getDeliverer2CardType()); + delivererVo2.setCertificatesCode(entrustThirdSys.getDeliverer2CertificatesCode()); + delivererVo2.setPhone(entrustThirdSys.getDeliverer2Phone()); + List delivererVoList = new ArrayList<>(); + delivererVoList.add(delivererVo1); + delivererVoList.add(delivererVo2); + entrustDataDto.setUserList(delivererVoList); + List materialVos = new ArrayList<>(); + //获取该委托对应的检材 + materialVoList.forEach(item -> { + MaterialVo eg = new MaterialVo(); + eg.setIndex(item.getOrder_index()); + eg.setName(item.getName()); + eg.setColorType(item.getColorType()); + eg.setShapeType(item.getShapeType()); + eg.setPackageType(item.getPackageType()); + eg.setAmount(item.getAmount()); + eg.setUnit(item.getUnit()); + //JSONArray test=JSONObject.parseArray(item.getTargetObjectTypeList()); + List tmp = JSONObject.parseArray(item.getTargetObjectTypeList(), String.class); + eg.setTargetObjectTypeList(tmp); + eg.setAnalysisType(item.getAnalysisType()); + eg.setAnalysisSampleAmount(item.getAnalysisSampleAmount()); + eg.setRetainedSampleAmount(item.getRetainedSampleAmount()); + eg.setTotalSampleAmount(item.getTotalSampleAmount()); + eg.setSampleUnit(item.getSampleUnit()); + materialVos.add(eg); + }); + + + entrustDataDto.setMaterialList(materialVos); + dataAuditBaseDto.setEntrust(entrustDataDto); + return dataAuditBaseDto; + } + + // + public DataAuditBaseDto genSubCenterAcceptData(EntrustOfThirdSys entrustThirdSys, List materialVoList, String samplingMethod) { + DataAuditBaseDto dataAuditBaseDto = new DataAuditBaseDto(); + EntrustDataDto entrustDataDto = new EntrustDataDto(); + entrustDataDto.setId(entrustThirdSys.getId()); + entrustDataDto.setEntrustNumber(entrustThirdSys.getEntrustSerialNumber()); + entrustDataDto.setEntrustOrganization(entrustThirdSys.getEntrustOrganization()); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + entrustDataDto.setScheduledDate(entrustThirdSys.getScheduledDate() == null ? "" : entrustThirdSys.getScheduledDate().format(df));//预约日期 + entrustDataDto.setCaseName(entrustThirdSys.getCaseName()); + entrustDataDto.setCaseCode(entrustThirdSys.getCaseCode()); + entrustDataDto.setCaseRemark(entrustThirdSys.getCaseRemark()); + entrustDataDto.setMaterialType(entrustThirdSys.getMaterialType()); + entrustDataDto.setMaterialDescribe(entrustThirdSys.getMaterialDescribe()); + entrustDataDto.setEntrustRequirement(entrustThirdSys.getEntrustRequirement()); + entrustDataDto.setEntrustMethod(entrustThirdSys.getEntrustMethod()); + entrustDataDto.setOriginalIdentification(entrustThirdSys.getOriginalIdentification());//原鉴定情况 + entrustDataDto.setReportSendType(entrustThirdSys.getReportSendType()); + entrustDataDto.setReportSendAddress(StringUtils.isBlank(entrustThirdSys.getReportSendAddress()) ? " " : entrustThirdSys.getReportSendAddress()); + //如果是受理的时候,我们需要补充这个属性,这个属性可能是:1 全部为分析样,全部为留存,分装为分析样和留存样 + entrustDataDto.setSamplingMethod(samplingMethod); + //送检人信息 + DelivererVo delivererVo1 = new DelivererVo(); + delivererVo1.setName(entrustThirdSys.getDeliverer1Name()); + delivererVo1.setPosition(entrustThirdSys.getDeliverer1Position()); + delivererVo1.setCardType(entrustThirdSys.getDeliverer1CardType()); + delivererVo1.setCertificatesCode(entrustThirdSys.getDeliverer1CertificatesCode()); + delivererVo1.setPhone(entrustThirdSys.getDeliverer1Phone()); + DelivererVo delivererVo2 = new DelivererVo(); + delivererVo2.setName(entrustThirdSys.getDeliverer2Name()); + delivererVo2.setPosition(entrustThirdSys.getDeliverer2Position()); + delivererVo2.setCardType(entrustThirdSys.getDeliverer2CardType()); + delivererVo2.setCertificatesCode(entrustThirdSys.getDeliverer2CertificatesCode()); + delivererVo2.setPhone(entrustThirdSys.getDeliverer2Phone()); + List delivererVoList = new ArrayList<>(); + delivererVoList.add(delivererVo1); + delivererVoList.add(delivererVo2); + entrustDataDto.setUserList(delivererVoList); + List materialVos = new ArrayList<>(); + //获取该委托对应的检材 + materialVoList.forEach(item -> { + MaterialVo eg = new MaterialVo(); + eg.setIndex(item.getOrder_index()); + eg.setName(item.getName()); + eg.setColorType(item.getColorType()); + eg.setShapeType(item.getShapeType()); + eg.setPackageType(item.getPackageType()); + eg.setAmount(item.getAmount()); + eg.setUnit(item.getUnit()); + //JSONArray test=JSONObject.parseArray(item.getTargetObjectTypeList()); + List tmp = JSONObject.parseArray(item.getTargetObjectTypeList(), String.class); + eg.setTargetObjectTypeList(tmp); + eg.setAnalysisType(item.getAnalysisType()); + eg.setAnalysisSampleAmount(item.getAnalysisSampleAmount()); + eg.setRetainedSampleAmount(item.getRetainedSampleAmount()); + eg.setTotalSampleAmount(item.getTotalSampleAmount()); + eg.setSampleUnit(item.getSampleUnit()); + materialVos.add(eg); + }); + + + entrustDataDto.setMaterialList(materialVos); + dataAuditBaseDto.setEntrust(entrustDataDto); + return dataAuditBaseDto; + } + + //一些要用到的公共方法-------------------------------------------------------- + + /** + * 获取第三方系统中的配置参数 + * + * @return 返回连接的数据结构对象 + */ + @Override + public SynConnInfoVo getSysSynConnInfo() { + final SynConnInfoVo synConnInfoVo = new SynConnInfoVo(); + String parentID = "920f9dd9cd14281e8b488a34c649ff70"; + List retDataList = remoteDictionaryService.insideTreeData(parentID); + List> treeData = genTreeData(retDataList, parentID); + if (treeData.size() > 0) { + treeData.forEach(sourceObj -> { + if (sourceObj.get("code").equals("tokenFetch"))//如果是token获取 + { + SynConnInfoTokenVo synConnInfoTokenVo = buildTokenInfo(sourceObj.getChildren()); + synConnInfoVo.setProvinceTokenInfo(synConnInfoTokenVo.getProvinceTokenInfo()); + synConnInfoVo.setSubCenterTokenInfo(synConnInfoTokenVo.getSubCenterTokenInfo()); + synConnInfoVo.setTokenInfo(synConnInfoTokenVo); + } + if (sourceObj.get("code").equals("dataPath"))//如果是token获取 + { + SynConnInfoDataPathVo synConnInfoDataPathVo = buildDataPath(sourceObj.getChildren()); + synConnInfoVo.setApiHost(synConnInfoDataPathVo.getApiHost()); + synConnInfoVo.setDataPathInfo(synConnInfoDataPathVo); + } + }); + + } else { + System.out.println("没有获取到连接信息,请检查参数"); + } + return synConnInfoVo; + } + + /** + * 构造token对象信息 + * + * @param tokenAbout + * @return + */ + public SynConnInfoTokenVo buildTokenInfo(List> tokenAbout) { + SynConnInfoTokenVo synConnInfoTokenVo = new SynConnInfoTokenVo(); + tokenAbout.forEach(itemObj -> { + String retKey = itemObj.get("label").toString(); + String retValue = itemObj.get("code").toString(); + String keyID = itemObj.get("id").toString(); + switch (retKey) { + case "sx_sub_center_token": + synConnInfoTokenVo.setSubCenterTokenInfo(retValue); + synConnInfoTokenVo.setSubCenterTokenID(keyID); + break; + case "sx_province_token": + synConnInfoTokenVo.setProvinceTokenInfo(retValue); + synConnInfoTokenVo.setProvinceTokenID(keyID); + break; + case "accessKey": + synConnInfoTokenVo.setAccessSubCenterKey(retValue); + break; + case "accessSecret": + synConnInfoTokenVo.setAccessSubCenterSecret(retValue); + break; + case "accessProvinceKey": + synConnInfoTokenVo.setAccessProvinceKey(retValue); + break; + case "accessProvinceSecret": + synConnInfoTokenVo.setAccessProvinceSecret(retValue); + break; + } + }); + return synConnInfoTokenVo; + } + // + + /** + * 构建数据路径信息 + * + * @param dataPathAbout + * @return + */ + public SynConnInfoDataPathVo buildDataPath(List> dataPathAbout) { + SynConnInfoDataPathVo synConnInfoDataPathVo = new SynConnInfoDataPathVo(); + dataPathAbout.forEach(itemObj -> { + String retKey = itemObj.get("label").toString(); + String retValue = itemObj.get("code").toString(); + switch (retKey) { + case "ApiHost": + synConnInfoDataPathVo.setApiHost(retValue); + break; + case "tokenPath": + synConnInfoDataPathVo.setTokenPath(retValue); + break; + case "entrustDataPath": + synConnInfoDataPathVo.setEntrustDataPath(retValue); + break; + case "wtsStatus": + synConnInfoDataPathVo.setWtsStatus(retValue); + break; + case "uploadSewageJobDataPath": + synConnInfoDataPathVo.setUploadSewageJobDataUrl(retValue); + break; + case "province_audit_url": + synConnInfoDataPathVo.setProvinceAuditUrl(retValue); + break; + case "sx_subcenter_audit_url": + synConnInfoDataPathVo.setSxSubCenterAuditUrl(retValue); + break; + case "sx_subcenter_accept_url": + synConnInfoDataPathVo.setSxSubCenterAcceptUrl(retValue); + break; + } + }); + return synConnInfoDataPathVo; + } + + /** + * 检查委托数据是否已经同步过了 + * + * @param entrustID + * @return true 表示同步过了,false 表示没有同步 + */ + public Boolean checkExistEntrust(String entrustID) { + List entrustOfThirdSys = this.list(Wrappers.query().eq("id", entrustID)); + if (entrustOfThirdSys.size() > 0) { + return true;//存在 + } else { + return false;//不存在 + } + } + + // + //构造一个第三方的委托数据 + public EntrustOfThirdSys genThirdSysEntrustBean(EntrustDataVo entrustDataVo, String entrustMainId, String optFlag) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + EntrustOfThirdSys targetBean = new EntrustOfThirdSys(); + if (optFlag.equals("add")) { + targetBean.setEntrustMainId(entrustMainId);//主ID + targetBean.setId(entrustDataVo.getId()); + } else { + targetBean = this.getById(entrustDataVo.getId()); + } + + targetBean.setEntrustSerialNumber(entrustDataVo.getEntrustSerialNumber()); + targetBean.setStatus(entrustDataVo.getStatus()); + + targetBean.setSubmitTime(StringUtils.isBlank(entrustDataVo.getSubmitTime()) ? null : LocalDateTime.parse(entrustDataVo.getSubmitTime(), df)); + targetBean.setAcceptTime(StringUtils.isBlank(entrustDataVo.getAcceptTime()) ? null : LocalDateTime.parse(entrustDataVo.getAcceptTime(), df)); + targetBean.setFinishTime(StringUtils.isBlank(entrustDataVo.getFinishTime()) ? null : LocalDateTime.parse(entrustDataVo.getFinishTime(), df)); + targetBean.setScheduledDate(StringUtils.isBlank(entrustDataVo.getScheduledDate()) ? null : LocalDateTime.parse(entrustDataVo.getScheduledDate() + " 00:00:00", df)); + targetBean.setAnalysisStartTime(StringUtils.isBlank(entrustDataVo.getAnalysisStartTime()) ? null : LocalDateTime.parse(entrustDataVo.getAnalysisStartTime(), df)); + targetBean.setAnalysisEndTime(StringUtils.isBlank(entrustDataVo.getAnalysisEndTime()) ? null : LocalDateTime.parse(entrustDataVo.getAnalysisEndTime(), df)); + + targetBean.setEntrustOrganization(entrustDataVo.getEntrustOrganization()); + targetBean.setCreateUserDeptRegionCode(entrustDataVo.getCreateUserDeptRegionCode()); + targetBean.setCaseName(entrustDataVo.getCaseName()); + targetBean.setCaseCode(entrustDataVo.getCaseCode()); + targetBean.setCaseRemark(entrustDataVo.getCaseRemark()); + targetBean.setMaterialType(entrustDataVo.getMaterialType()); + targetBean.setMaterialDescribe(entrustDataVo.getMaterialDescribe()); + targetBean.setEntrustRequirement(entrustDataVo.getEntrustRequirement()); + targetBean.setEntrustMethod(entrustDataVo.getEntrustMethod()); + targetBean.setOriginalIdentification(entrustDataVo.getOriginalIdentification()); + targetBean.setReportSendType(entrustDataVo.getReportSendType()); + targetBean.setReportSendAddress(entrustDataVo.getReportSendAddress()); + + DelivererVo delivererVo1 = entrustDataVo.getUserList().get(0); + DelivererVo delivererVo2 = entrustDataVo.getUserList().get(1); + targetBean.setDeliverer1Name(delivererVo1.getName()); + targetBean.setDeliverer1Position(delivererVo1.getPosition()); + targetBean.setDeliverer1CardType(delivererVo1.getCardType()); + targetBean.setDeliverer1CertificatesCode(delivererVo1.getCertificatesCode()); + targetBean.setDeliverer1Phone(delivererVo1.getPhone()); + + targetBean.setDeliverer2Name(delivererVo2.getName()); + targetBean.setDeliverer2Position(delivererVo2.getPosition()); + targetBean.setDeliverer2CardType(delivererVo2.getCardType()); + targetBean.setDeliverer2CertificatesCode(delivererVo2.getCertificatesCode()); + targetBean.setDeliverer2Phone(delivererVo2.getPhone()); + + //补充字段 + targetBean.setAcceptSerialNumber(entrustDataVo.getAcceptSerialNumber()); + targetBean.setSerialYear(entrustDataVo.getSerialYear()); + targetBean.setSerialIndex(entrustDataVo.getSerialIndex()); + targetBean.setSerialNumber(entrustDataVo.getSerialNumber()); + targetBean.setProvinceCode(entrustDataVo.getProvinceCode()); + targetBean.setProvinceName(entrustDataVo.getProvinceName()); + targetBean.setProvinceDeptName(entrustDataVo.getProvinceDeptName()); + return targetBean; + } + + //构造第三方检材数据 + public EntrustMaterialOfThirdSys genThirdSysEntrustMaterialBean(MaterialVo materialVo, String localMaterialId) { + EntrustMaterialOfThirdSys retBean = new EntrustMaterialOfThirdSys(); + //retBean.setId(IdWorker.get32UUID()); + retBean.setId(localMaterialId);//使用我们系统的检材ID + retBean.setEntrustId(materialVo.getEntrustId()); + retBean.setOrder_index(materialVo.getIndex()); + retBean.setName(materialVo.getName()); + retBean.setColorType(materialVo.getColorType()); + retBean.setShapeType(materialVo.getShapeType()); + retBean.setPackageType(materialVo.getPackageType()); + retBean.setAmount(materialVo.getAmount()); + retBean.setUnit(materialVo.getUnit()); + retBean.setAnalysisType(materialVo.getAnalysisType()); + retBean.setTargetObjectTypeList(JSON.toJSONString(materialVo.getTargetObjectTypeList())); + + retBean.setAnalysisSampleAmount(materialVo.getAnalysisSampleAmount()); + retBean.setRetainedSampleAmount(materialVo.getRetainedSampleAmount()); + retBean.setTotalSampleAmount(materialVo.getTotalSampleAmount()); + retBean.setSampleUnit(materialVo.getSampleUnit()); + return retBean; + } + + //根据数组返回一个树形结构 + public List> genTreeData(List dictionaryList, String parentID) { + List> collect = dictionaryList + .stream() + .map(getNodeFunction()).collect(Collectors.toList()); + return TreeUtil.build(collect, parentID); + } + + //构造树形节点数据 + private Function> getNodeFunction() { + return dictionary -> { + TreeNode node = new TreeNode<>(); + node.setId(dictionary.getId()); + node.setParentId(dictionary.getType()); + node.setName(dictionary.getLabel()); + // 扩展属性 + Map extra = new HashMap<>(); + extra.put("type", dictionary.getType()); + extra.put("sort", dictionary.getSort()); + extra.put("code", dictionary.getCode()); + extra.put("label", dictionary.getLabel()); + extra.put("comments", dictionary.getComments()); + node.setExtra(extra); + return node; + }; + } + + /** + * 根据禁毒系统中的检材序号,查出同步到我们系统中的物证ID + * + * @param index + * @param evidIdList + * @return + */ + public String getEvidIdByIndex(String index, List> evidIdList) { + + String retEvid = ""; + for (Map mp : evidIdList) { + String evidIndex = mp.entrySet().stream().findFirst().map(Map.Entry::getKey).get(); + if (evidIndex.equals(index)) { + if (retEvid.length() > 0) { + System.out.println("注意:出现重复的物证ID----------------"); + } + retEvid = mp.entrySet().stream().findFirst().map(Map.Entry::getValue).get(); + } + } + return retEvid; + } + + /** + * 根据label和type 查到code + * + * @param dictLabel + * @param parentType + * @return + */ + public String getDictCode(String dictLabel, String parentType) { + String source = ""; + R sourceR = remoteDictionaryService.queryDictionaryVO(dictLabel, parentType); + if (sourceR.getCode() == CommonConstants.SUCCESS) { + source = (String) sourceR.getData(); + } + return source; + } + + /** + * 根据同步的数据,构造一个委托对象,方便插入数据库 + * + * @param entrustDataVo + * @param caseID + * @return + */ + public Entrustment addEntrustmentByOtherSys(EntrustDataVo entrustDataVo, String caseID, String optFlag, List setEntrustStatusValue) { + Entrustment entrustment = null; + if (optFlag.equals("add")) { + CaseEvent caseEvent = caseEventService.getById(caseID); + entrustment = new Entrustment(); + //entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo(caseEvent.getCaseNo()));//设置委托编号 + entrustment.setEntrustmentNo(entrustmentService.getNewEntrustmentNo());//设置委托编号 + + entrustment.setId(IdWorker.get32UUID().toUpperCase());//设置系统编号 + entrustment.setDataSources(1);//设置数据来源,标识来自系统还是外部系统 + entrustment.setCaseId(caseID);//设置案件ID + + } else { + EntrustOfThirdSys entrustOfThirdSys = this.getBaseMapper().selectOne(Wrappers.query() + .eq("id", entrustDataVo.getId())); + entrustment = entrustmentService.getById(entrustOfThirdSys.getEntrustMainId()); + } + + entrustment.setThirdSysEntrustNo(entrustDataVo.getEntrustSerialNumber()); + //设置审核候选人员 + List users = entrustmentService.taskAvailableUserList_Check(); + String candidateUser = ""; + for (SysUser u : users) { + if (candidateUser.length() > 0) { + candidateUser += ","; + } + candidateUser += u.getUserId(); + } + entrustment.setCheckCandidateUser(candidateUser); + //设置审批候选人员, 也就是受理审核的时候,才设置审批候选人 + if (entrustDataVo.getStatus().equals("acceptAuditing")) { + List approveUsers = entrustmentService.taskAvailableUserList_Approve(); + String approveCandidateUser = ""; + for (SysUser u : approveUsers) { + if (approveCandidateUser.length() > 0) { + approveCandidateUser += ","; + } + approveCandidateUser += u.getUserId(); + } + entrustment.setApproveCandidateUser(approveCandidateUser); + } + entrustment.setIdentificationOrgName("国家毒品实验室陕西分中心");//设置鉴定机构 + entrustment.setClientOrgId(entrustDataVo.getCreateUserDeptRegionCode());//设置委托单位ID + entrustment.setClientOrgName(entrustDataVo.getEntrustOrganization());//设置委托单位名称 + + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime ldt = LocalDateTime.parse(entrustDataVo.getSubmitTime(), df); + entrustment.setSubmitTime(ldt);//设置提交日期 + entrustment.setCreateTime(ldt); + + String materialType = entrustDataVo.getMaterialType(); + if (StringUtils.isNotBlank(materialType)) { + if (materialType.equals("inVitro")) { + entrustment.setEntrustmentType(0); + } else if (materialType.equals("inVivo")) { + entrustment.setEntrustmentType(1); + } else { + entrustment.setEntrustmentType(2); + } + } + //entrustment.setCreateBy(); +// entrustment.setEntrustmentType(0);//设置委托类型 正常委托 0,案件 是 1 2024-3-20已更新:这个字段现在已经被用做检材类别了 + entrustment.setReportReceiveMode(ConvertUtils.reportSendType(entrustDataVo.getReportSendType()) + "");//confidentialDelivery:机要寄递, ems:邮政专递EMS(到付),takeFromOneself: 自取 + + + //设置送检人1 + DelivererVo delivererVo1 = entrustDataVo.getUserList().get(0); + DelivererVo delivererVo2 = entrustDataVo.getUserList().get(1); + + entrustment.setDeliverer1Name(delivererVo1.getName());//姓名 + entrustment.setDeliverer1Position(delivererVo1.getPosition());//职务 + entrustment.setDeliverer1Phone(delivererVo1.getPhone());//电话 + //证件名称 policeOfficerCard:警官证, identityCard:身份证, officerCard:军官证, workCard:工作证, passport:护照 + entrustment.setDeliverer1Cert(ConvertUtils.getCardTypeName(delivererVo1.getCardType())); + entrustment.setDeliverer1Id(delivererVo1.getCertificatesCode());//证件编号 + //设置送检人2 + entrustment.setDeliverer2Name(delivererVo2.getName());//姓名 + entrustment.setDeliverer2Position(delivererVo2.getPosition());//职务 + entrustment.setDeliverer2Cert(ConvertUtils.getCardTypeName(delivererVo2.getCardType()));//证件名称 + entrustment.setDeliverer2Id(delivererVo2.getCertificatesCode());//证件编号 + entrustment.setDeliverer2Phone(delivererVo2.getPhone());//电话 + //设置委托鉴定要求 + entrustment.setEntrustRequirement(entrustDataVo.getEntrustRequirement()); + //设置邮寄地址 + entrustment.setPostAddress(entrustDataVo.getReportSendAddress()); + //设置原鉴定情况 + entrustment.setOldIdentificationResult(entrustDataVo.getOriginalIdentification()); + //设置委托状态 + //这里应根据情况,如果是省级审核 如果是受理审核, 如果是已受理 + //entrustment.setStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus());//设置为待审核 + //entrustment.setPreviousStatus(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus());// + entrustment.setStatus(setEntrustStatusValue.get(0));//设置为待审核 + entrustment.setPreviousStatus(setEntrustStatusValue.get(1));// + + entrustment.setIdentificationDomain("毒品检验"); + if (optFlag.equals("add")) { + entrustmentService.save(entrustment); + } else { + entrustmentService.updateById(entrustment); + } + return entrustment; + } + + //设置委托书状态 + private List getSynEntrustStatus(String statusStr) { + List statusList = new ArrayList<>(); + switch (statusStr) { + case "provinceAuditing": + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK_CLAIM.getStatus());//1 + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_CREATED.getStatus());//0 + break; + case "acceptAuditing": + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_APPROVE_CLAIM.getStatus());//3 + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_CHECK.getStatus());//2 + break; + case "toAccept": + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_ACCEPT.getStatus());//7 + statusList.add(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_WAITING_DELIVER.getStatus());//6 + break; + } + return statusList; + } + + /** + * 构造一个检材,并插入到数据库中 + * + * @param materialVo + * @param entrustment + * @param caseID + * @param evidenceID + * @param materialType + * @return + */ + public EntrustmentIdentificationMaterial addSampleByOtherSys(MaterialVo materialVo, Entrustment entrustment, String materilaNo, String caseID, String evidenceID, String materialType) { +// if(entrustment.getAcceptNo().equals("2023-0003")){ +// System.out.println("命中---------------------"); +// } + EntrustmentIdentificationMaterial entrustmentIdentificationMaterial = new EntrustmentIdentificationMaterial(); + //设置ID + entrustmentIdentificationMaterial.setId(IdWorker.get32UUID().toUpperCase()); + //设置委托ID + entrustmentIdentificationMaterial.setEntrustmentId(entrustment.getId()); + //设置案件ID + entrustmentIdentificationMaterial.setCaseId(caseID); + //设置物证ID + entrustmentIdentificationMaterial.setEvidenceId(evidenceID); + //检材名称 + entrustmentIdentificationMaterial.setName(materialVo.getName()); + //颜色 + entrustmentIdentificationMaterial.setColor(materialVo.getColorType()); + + //设置检材编号 + entrustmentIdentificationMaterial.setImNo(materilaNo); + entrustmentIdentificationMaterial.setSample1No(materilaNo); + entrustmentIdentificationMaterial.setProvidedSample1No(materilaNo); + + //检材类型 + //entrustmentIdentificationMaterial.setType(getDictCode(ConvertUtils.getCaseEvidenceSource(materialType),"WZFL.1.6")); + entrustmentIdentificationMaterial.setType(getDictCode(ConvertUtils.getCaseEvidenceSource(materialType), "6f4b55454a3ccde502493e04f63eed32")); + + entrustmentIdentificationMaterial.setTypeName(ConvertUtils.getCaseEvidenceSource(materialType)); + //形态 + + //entrustmentIdentificationMaterial.setForm(getDictCode(materialVo.getShapeType(),"wzxz.11")); + entrustmentIdentificationMaterial.setForm(getDictCode(materialVo.getShapeType(), "cdb0ca92f0d9c8f6af12457f8f924f21")); + + entrustmentIdentificationMaterial.setFormName(materialVo.getShapeType()); + //目标物✽ + //List drugLites=new ArrayList(); + //这里我们需要将毒品筛查目标物做一个转换,专门写一个转换函数 + entrustmentIdentificationMaterial.setCandidateDrugs(getDrugLiteList(materialVo)); + //分析项目 + entrustmentIdentificationMaterial.setAnalysisOption(ConvertUtils.getAnalysisName(materialVo.getAnalysisType())); + //包装 + //entrustmentIdentificationMaterial.setPack(getDictCode(materialVo.getPackageType(),"BZFL.08")); + entrustmentIdentificationMaterial.setPack(getDictCode(materialVo.getPackageType(), "56e4dda4300f99ae147c0c72d03f9488")); + entrustmentIdentificationMaterial.setPackName(materialVo.getPackageType());//名称 + //处理承载物信息 + entrustmentIdentificationMaterial.setFundName(materialVo.getPackageType()); + entrustmentIdentificationMaterial.setFundQuantity(1); + entrustmentIdentificationMaterial.setFundUnit(ConvertUtils.getFundUnit(materialVo.getPackageType())); + //设置序号 + entrustmentIdentificationMaterial.setOrderNo(Integer.parseInt(materialVo.getIndex())); + //检材的描述 + String materialUnit = ConvertUtils.getMaterialUnit(materialVo); + BigDecimal materialMount = ConvertUtils.getMaterialMount(materialVo); + String materialDes = materialVo.getColorType() + materialVo.getShapeType() + materialMount + + ConvertUtils.getCaseEvidenceUnit(materialUnit) + "," + materialVo.getPackageType() + "包装"; + entrustmentIdentificationMaterial.setDescription(materialDes); + + + //如果计量单位不是克,那么我们就将其质量设置为-1,方便客户端显示为 未称量 以前的逻辑 + // 11-27日修改:我们保留从大数据平台同步过来的检材单位与质量的信息,不对其进行二次处理了,也不需要在称量时计算质量差值 + if (ConvertUtils.getCaseEvidenceUnit(materialUnit).equals("克") || ConvertUtils.getCaseEvidenceUnit(materialUnit).equals("毫克")) { + //提取数量 + entrustmentIdentificationMaterial.setQuantity(materialMount); + //单位 + entrustmentIdentificationMaterial.setUnit(ConvertUtils.getCaseEvidenceUnit(materialUnit)); + //设置样本1的重量 + entrustmentIdentificationMaterial.setProvidedSample1Quantity(materialMount); + entrustmentIdentificationMaterial.setProvidedSample1FundQuantity(1); + entrustmentIdentificationMaterial.setSample1Quantity(materialMount);//必然存在一个样本 + entrustmentIdentificationMaterial.setSample1FundQuantity(1); + + } else { + //提取数量 + entrustmentIdentificationMaterial.setQuantity(materialMount); + //单位 + entrustmentIdentificationMaterial.setUnit(ConvertUtils.getCaseEvidenceUnit(materialUnit)); + //设置样本1的重量 + entrustmentIdentificationMaterial.setProvidedSample1Quantity(materialMount); + entrustmentIdentificationMaterial.setProvidedSample1FundQuantity(1); + entrustmentIdentificationMaterial.setSample1Quantity(materialMount);//必然存在一个样本 + entrustmentIdentificationMaterial.setSample1FundQuantity(1); + + //同时将其计量方式填入附加属性 + String propertyName = entrustmentIdentificationMaterial.getTypeName(); + //BigDecimal quantity=materialVo.getAmount(); + //String unit=ConvertUtils.getCaseEvidenceUnit(materialUnit); + + IMAdditionalProperty eg = new IMAdditionalProperty(propertyName, materialMount + "", materialUnit); + List addPros = new ArrayList<>(); + addPros.add(eg); + entrustmentIdentificationMaterial.setAdditionalProperties(addPros); + } + //设置存储类型 + entrustmentIdentificationMaterial.setStorageMethod("常规"); + entrustmentIdentificationMaterial.setDrawWay("转移"); + entrustmentIdentificationMaterial.setDataSources(1);//设置数据是来自何处 + //受理时候的属性 + if (StringUtils.isNotBlank(entrustment.getAcceptNo())) { + entrustmentIdentificationMaterial.setSample1Quantity(materialVo.getAnalysisSampleAmount()); + entrustmentIdentificationMaterial.setSample2Quantity(materialVo.getRetainedSampleAmount()); + entrustmentIdentificationMaterial.setSample1RepeatWeigh(materialVo.getAnalysisSampleAmount()); + entrustmentIdentificationMaterial.setSample2RepeatWeigh(materialVo.getRetainedSampleAmount()); + String acceptNo = entrustmentIdentificationMaterialService.getNewMaterialAcceptNo(entrustment.getAcceptNo()); + System.out.println("设置检材的受理编号:" + acceptNo); + entrustmentIdentificationMaterial.setAcceptNo(acceptNo); + entrustmentIdentificationMaterial.setAcceptPassed(1); + entrustmentIdentificationMaterial.setAcceptTime(entrustment.getAcceptTime()); + } + entrustmentIdentificationMaterialService.save(entrustmentIdentificationMaterial); + return entrustmentIdentificationMaterial; + } + + /** + * 获取token 并更新字典 + * + * @param remoteUrl + * @param tokenPath + * @param accessKey + * @param accessSecret + * @param tokenDictID + * @return + */ + public String getTokenAndUpdate(String remoteUrl, String tokenPath, String accessKey, String accessSecret, String tokenDictID) { + String retToken = ""; + Dictionary dictToken = remoteDictionaryService.getDictByID(tokenDictID); + DataModelVo dataModelVoTmp = HttpsUtils.fetchTokenFromRemote(remoteUrl, tokenPath, accessKey, accessSecret); + if (dataModelVoTmp.getStatusCode().equals("SUCCESS")) { + retToken = dataModelVoTmp.getResult().getToken(); + System.out.println("重新申请第三方的数据token成功--"); + //将token 存储起来 + dictToken.setCode(retToken); + remoteDictionaryService.updateById(dictToken); + System.out.println("更新第三方数据token成功--"); + } else { + System.out.println("获取第三方token失败,请检查网络或参数"); + } + return retToken; + } + + /** + * 根据参数不同,获取访问单位的token + * + * @param whoUse + * @return + */ + @Override + public String getTokenInfo(String whoUse, SynConnInfoVo synConnInfoVo) { + String retToken = ""; + String accCheckTokenPath = "/api/sample/drug/task"; + //如果是分中心申请 + if (whoUse.equals("SubCenter")) { + + DataModelVo retData = HttpsUtils.checkTokenValid(synConnInfoVo.getApiHost(), accCheckTokenPath, synConnInfoVo.getSubCenterTokenInfo()); + if (retData.getStatusCode().equals("UNAUTHORIZED")) { + //已经过期 + retToken = getTokenAndUpdate(synConnInfoVo.getApiHost(), synConnInfoVo.getDataPathInfo().getTokenPath(), + synConnInfoVo.getTokenInfo().getAccessSubCenterKey().trim(), synConnInfoVo.getTokenInfo().getAccessSubCenterSecret().trim(), + synConnInfoVo.getTokenInfo().getSubCenterTokenID()); + } else { + retToken = synConnInfoVo.getSubCenterTokenInfo(); + } + + } else { + //否则就认为是省总队申请 + DataModelVo retData = HttpsUtils.checkTokenValid(synConnInfoVo.getApiHost(), accCheckTokenPath, synConnInfoVo.getProvinceTokenInfo()); + if (retData.getStatusCode().equals("UNAUTHORIZED")) { + //已经过期 + retToken = getTokenAndUpdate(synConnInfoVo.getApiHost(), synConnInfoVo.getDataPathInfo().getTokenPath(), + synConnInfoVo.getTokenInfo().getAccessProvinceKey().trim(), synConnInfoVo.getTokenInfo().getAccessProvinceSecret().trim(), + synConnInfoVo.getTokenInfo().getProvinceTokenID()); + } else { + retToken = synConnInfoVo.getProvinceTokenInfo(); + } + } + return retToken; + } + + /** + * 获取远程系统中的数据 + * + * @return DataModelVo 远程系统中获取到的数据对象 + */ + public DataModelVo fetchDataFromRemote(String entrustStatus) { + SynConnInfoVo synConnInfoVo = getSysSynConnInfo(); + String token = getTokenInfo("SubCenter", synConnInfoVo); + String remoteUrl = synConnInfoVo.getApiHost(); + String wtDataPath = synConnInfoVo.getDataPathInfo().getEntrustDataPath(); + String wtStatus = entrustStatus;//synConnInfoVo.getDataPathInfo().getWtsStatus(); + DataModelVo retDataModelVo = HttpsUtils.fetchWtDataFromRemote(remoteUrl, wtDataPath, token, wtStatus); + return retDataModelVo; + } + + @Override + public EntrustOfThirdSys getThirdSysEntrustByMainId(String entrustMainId) { + List entrustOfThirdSysList = this.list(Wrappers.query() + .eq("entrust_main_id", entrustMainId)); + if (entrustOfThirdSysList.size() > 0) { + return entrustOfThirdSysList.get(0); + } else { + return null; + } + } + + //毒品筛查目标物转换函数 + private List getDrugLiteList(MaterialVo materialVo) { + List retDruglist = new ArrayList<>(); + List dta1 = materialVo.getTargetObjectTypeList(); + dta1.forEach(item -> { + DrugLite eg = new DrugLite(); + eg.setCode(item); + eg.setAlias(item); + eg.setName(item); + retDruglist.add(eg); + }); + return retDruglist; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeMaterialVoServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeMaterialVoServiceImpl.java new file mode 100644 index 0000000..875b7b7 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/SynchronizeMaterialVoServiceImpl.java @@ -0,0 +1,23 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.EntrustMaterialOfThirdSys; +import digital.laboratory.platform.entrustment.mapper.EntrustDataMaterialVoMapper; +import digital.laboratory.platform.entrustment.service.SynchronizeMaterialVoService; +import org.springframework.stereotype.Service; + +/** + * @ClassName SynchronizeMaterialVoServiceImpl + * @Description TODO + * @Author xy + * @Date 2023/6/13 16:30 + * @Version 1.0 + **/ +@Service +public class SynchronizeMaterialVoServiceImpl extends ServiceImpl implements SynchronizeMaterialVoService { + @Override + public void addMaterialVoThirdSys(EntrustMaterialOfThirdSys entrustMaterialOfThirdSys) { + + this.save(entrustMaterialOfThirdSys); + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/TakerServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/TakerServiceImpl.java new file mode 100644 index 0000000..414ffd2 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/TakerServiceImpl.java @@ -0,0 +1,62 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.Taker; +import digital.laboratory.platform.entrustment.mapper.TakerMapper; +import digital.laboratory.platform.entrustment.service.TakerService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 采集员服务实现类 + * + * @author Zhang Xiaolong created at 2022-08-25 + * @describe 采集员 服务实现类 + */ +@Service +public class TakerServiceImpl extends ServiceImpl implements TakerService { + /** + * 更新采集员 + * 以采集员的名字为关键字, 如果同名采集员存在, 更新其他属性; 如果同名采集员不存在, 则新增数据库记录 + * @param taker + */ + @Override + public boolean renew(Taker taker) { + if (StrUtil.isBlank(taker.getName())) { + return false; + } + List list = baseMapper.selectList(Wrappers.query() + .eq("owner_user_id", taker.getOwnerUserId()) + .eq("name", taker.getName()) + ); + + if (list.size() > 0) { + //== 存在同名送检员, 更新之 + taker.setId(list.get(0).getId()); + baseMapper.update(taker, Wrappers.query() + .eq("owner_user_id", taker.getOwnerUserId()) + .eq("name", taker.getName()) + ); + } + else { + taker.setId(IdWorker.get32UUID().toUpperCase()); + baseMapper.insert(taker); + } + return true; + } + + + @Override + public Taker getByName(String name, String ownerUserId) { + Taker taker = baseMapper.selectOne(Wrappers.query() + .eq("owner_user_id", ownerUserId) + .eq("name", name) + ); + + return taker; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobIdentificationMaterialServiceImpl.javax b/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobIdentificationMaterialServiceImpl.javax new file mode 100644 index 0000000..b0958eb --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobIdentificationMaterialServiceImpl.javax @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.HairJobIdentificationMaterial; +import digital.laboratory.platform.entrustment.mapper.HairJobIdentificationMaterialMapper; +import digital.laboratory.platform.entrustment.service.HairJobIdentificationMaterialService; +import org.springframework.stereotype.Service; + +/** + * 毛发任务的检材信息服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发任务的检材信息 服务实现类 + */ +@Service +public class HairJobIdentificationMaterialServiceImpl extends ServiceImpl implements HairJobIdentificationMaterialService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobServiceImpl.javax b/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobServiceImpl.javax new file mode 100644 index 0000000..77caab5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/xHairJobServiceImpl.javax @@ -0,0 +1,18 @@ +package digital.laboratory.platform.entrustment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import digital.laboratory.platform.entrustment.entity.HairJob; +import digital.laboratory.platform.entrustment.mapper.HairJobMapper; +import digital.laboratory.platform.entrustment.service.HairJobService; +import org.springframework.stereotype.Service; + +/** + * 毛发检测任务服务实现类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发检测任务 服务实现类 + */ +@Service +public class HairJobServiceImpl extends ServiceImpl implements HairJobService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobIdentificationMaterialService.javax b/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobIdentificationMaterialService.javax new file mode 100644 index 0000000..20d0636 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobIdentificationMaterialService.javax @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.HairJobIdentificationMaterial; + +/** + * 毛发任务的检材信息服务类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发任务的检材信息 服务类 + */ +public interface HairJobIdentificationMaterialService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobService.javax b/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobService.javax new file mode 100644 index 0000000..f0c37c7 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/service/xHairJobService.javax @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import digital.laboratory.platform.entrustment.entity.HairJob; + +/** + * 毛发检测任务服务类 + * + * @author Zhang Xiaolong created at 2022-07-26 + * @describe 毛发检测任务 服务类 + */ +public interface HairJobService extends IService { + +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/CaseEventVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/CaseEventVO.java new file mode 100644 index 0000000..a256195 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/CaseEventVO.java @@ -0,0 +1,27 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.entrustment.entity.CaseEvent; +import digital.laboratory.platform.entrustment.entity.CaseEvidence; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class CaseEventVO extends CaseEvent { + +// String caseTypeName; +// String criminalTypeName; + String caseOrgName; // 案属机构名称 + String caseOrgShortName; // 案属机构名称 + String caseCreateUserName; + String caseUpdateUserName; + String caseAreaName; // 案发地的名字(到县一级, 根据 case_area 代码查询到的名字) + +// String caseOwnOrgName; // 案属机构名称 + List caseOwnOrgAncestors; // 案属机构的祖先 id, json 字符串数组 + + int caseEntrustmentCount; + int caseEvidenceCount; + List caseEvidenceList; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentIdentificationMaterialVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentIdentificationMaterialVO.java new file mode 100644 index 0000000..c54c33b --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentIdentificationMaterialVO.java @@ -0,0 +1,14 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import lombok.Data; + +import java.util.List; + +@Data +public class EntrustmentIdentificationMaterialVO extends EntrustmentIdentificationMaterial { + String formName; // 检材性状 + String sample1Type; // 样本1的类型:A/B, 根据盒子的 sampleType 而得 + String sample2Type; // 样本2的类型:A/B, 根据盒子的 sampleType 而得 +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java new file mode 100644 index 0000000..f14473f --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustmentVO.java @@ -0,0 +1,41 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.entrustment.entity.Entrustment; +import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; +import lombok.Data; + +import java.util.List; + +@Data +public class EntrustmentVO extends Entrustment { + String caseName; // 案件名称 + String caseNo; // 案件编号 + String caseBrief; // 案情简要 + List clientOrgAncestors; // 委托单位的祖先 id, json 字符串数组 + + String submitterName; // 委托提交人姓名 + String checkClaimUserName; // 审核任务认领人姓名 + String checkUserName; // 审核人姓名 + String approveClaimUserName; // 审批任务认领人姓名 + String approveUserName; // 审批人姓名 + String deliverConfirmUserName; // 送检确认人姓名 + String deliverSubmitterName; // 送检操作提交人姓名 + String acceptClaimUserName; // 受理任务认领人姓名 + String acceptUserName; // 受理人姓名 + String reportSenderUserName; // 报告发放人姓名 + String sampleSenderUserName; // 检材发放人姓名 + + String createUserName; // 创建人姓名 + String updateUserName; // 更新人姓名 + + String statusDescription; // 状态描述 + String previousStatusDescription; // 上一个状态的描述 + + int identificationMaterialCount; // 检材数量 + + String oldIdentificationBrief; // 原鉴定情况(组合5个字段形成综述) + + String identificationNo; + + private List materialList;//检材列表 +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/IdentificationVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/IdentificationVO.java new file mode 100644 index 0000000..f0bc9d5 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/IdentificationVO.java @@ -0,0 +1,20 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.entrustment.entity.Identification; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 这个 VO 类是 Identification 的扩展。 + * 这个类的目的是供用户在创建新的委托时,可以选择某个案件目前有哪些"鉴定"存在, 以便新的委托可以作为某个鉴定的补充委托。 + * 这个类提供一个鉴定列表, 其实主要内容是委托列表, 因为用户对“鉴定”不敏感, 对“委托”敏感, 所以这个 vo 的主要属性是委托相关的, 给用户看的 + */ +@Data +public class IdentificationVO extends Identification { + String entrustmentId; + String entrustmentNo; + LocalDateTime entrustmentTime; + LocalDateTime acceptTime; + Integer entrustmentStatus; +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/MaterialListForBookVo.java b/src/main/java/digital/laboratory/platform/entrustment/vo/MaterialListForBookVo.java new file mode 100644 index 0000000..277dcb1 --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/MaterialListForBookVo.java @@ -0,0 +1,25 @@ +package digital.laboratory.platform.entrustment.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @ClassName MaterialListForBookVo + * @Description 文书中的检材列表VO + * @Author xy + * @Date 2023/7/12 10:05 + * @Version 1.0 + **/ +@Data +public class MaterialListForBookVo { + private String indexNo; + private String acceptNo;//公安部的鉴定事项确认书 改变,因此加入受理编号 + private String materialName; + private String formName; + private String analysisSampleDes;//分析样描述 + private String retainedSampleDes;//留存样 + private String totalSampleDes;//总计描述 + private String species;//种类 + private String pack;//包装 +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxLiteVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxLiteVO.java new file mode 100644 index 0000000..e5c1c6a --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxLiteVO.java @@ -0,0 +1,28 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import lombok.Data; + +import java.util.List; + +/** + * 这个 VO 类额外提供了保存在盒子中的样本对象的编号列表 + * 在委托受理完成之前, 系统还没有生成样本, 只有检材, 所以无法提供样本对象, 只能从检材对象中取样本的编号 + */ +@Data +public class SampleBoxLiteVO extends SampleBox { + List sampleNoList; + + public SampleBoxLiteVO(SampleBox sb, List nolist) { + this.setId(sb.getId()); + this.setBoxNo(sb.getBoxNo()); + this.setBoxType(sb.getBoxType()); + this.setStorageMethod(sb.getStorageMethod()); + this.setSource(sb.getSource()); + this.setEntrustmentId(sb.getEntrustmentId()); + this.setJobId(sb.getJobId()); + this.setSampleType(sb.getSampleType()); + this.setComments(sb.getComments()); + this.sampleNoList = nolist; + } +} diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxVO.java new file mode 100644 index 0000000..7932b3c --- /dev/null +++ b/src/main/java/digital/laboratory/platform/entrustment/vo/SampleBoxVO.java @@ -0,0 +1,29 @@ +package digital.laboratory.platform.entrustment.vo; + +import digital.laboratory.platform.sys.entity.entrustment.Sample; +import digital.laboratory.platform.sys.entity.entrustment.SampleBox; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 这个 VO 类额外提供了保存在盒子中的样品对象的列表 + */ +@Data +public class SampleBoxVO extends SampleBox { + List sampleList; + private int boxSampleCount;//盒子下有多少个样本 + public SampleBoxVO(SampleBox sb, List sampleList) { + this.setId(sb.getId()); + this.setBoxNo(sb.getBoxNo()); + this.setBoxType(sb.getBoxType()); + this.setStorageMethod(sb.getStorageMethod()); + this.setSource(sb.getSource()); + this.setEntrustmentId(sb.getEntrustmentId()); + this.setJobId(sb.getJobId()); + this.setSampleType(sb.getSampleType()); + this.setComments(sb.getComments()); + this.sampleList = new ArrayList(sampleList); + } +} diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt new file mode 100644 index 0000000..9687834 --- /dev/null +++ b/src/main/resources/banner.txt @@ -0,0 +1,39 @@ +${AnsiColor.BRIGHT_GREEN} + +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMWWMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMWWMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMWMMMMMWKk0WMMMMMMMMMNkxOXWMMMMMMMMMMMMMMMMMMWk::cOWMMMMMMMMMMMW0llokKWMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNXK0OkxocoXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMN0ockWWMMMMMMNo. .oXMMMMMMMMk. .'xNMMMMMMMMMMMMMMMMMWc oMMMMMMMMMMMMX: .xWWMMMMMMMMMMMMMMMMMMMWK0000OOOOkkkxxdddollc::;,'... ;0WMMMMMMMMMMMMMMMMMMMMMMMMNkoooooooooooooooooooooooKMMMMMMM +MMMMMWO' .cKWMMMMWW0: ,kWMMWWWK; cKMMMMMMMMMMMMMMMMMMWl .xMMMMMMMMMMMNo. ;0WMMMMMMMMMMMMMMMMMMMNo. . .....'',,,;:::ccxNMMMMMMW0xdxxxxxxxxxxxxx0X: .xMMMMMMM +MMWMMMWO; .xNMWWMMMNx. .lXMWWXc .lXWMMMMMMMMMMMMMMMMMWWl .xMMMMMMMMMMNo. ', 'kNWMMMMMMMMMMMMMMMMMMXl'',;;,;clloddoc,,l00KXXNNWXo;lxOXWMMWWMMMMNc cXc cOkOOx' .lkkkOx' .kMMMMMMM +MMMMMWWWNx. cXWNKOO0Oo. ,lOK00l. ;k0OO0OKWMMMMMMMMNKKXXKc .oXXXKXWMMWKc. :KXl. .:OWMMMMMMMMMMMMMMMMMMWNN0l,.:0MMWMWd. 'OWWMMMMNl. ,kWWMMMMMMWWkllooo, ,oolllONc .xMMMMX; .kMMMMX; .kMMMMMMM +MMMMMWMMMW0,.'oKWX:. .. ..... . lNMMMMMMMWo..... .....;0MWO, cXMMWk' .:kXMMMMMMMMMMMMMMMWWMWK: ;KMMMWXc .OWMMMXl. .cKWWMMMMMMMMMMMMMMMd. oMMMMMMWc .xMMMMX; .kMMMMX; .kMMMMMMM +MMMMMWMMMMMX0NMWWXo,;;;;;::,. ,:::;:;;;;,dWMMMMMMWWx,',,. .,,,'cKKl. .oNMWMMW0c. 'cxKWMMMMMMMMMMMMMMWMK; :XMWWMXc ..oXWWK: 'kNMMMMMMMMMMMMMMMMMMd. dMMMMMMWc ':;;:,. ':;:;;. .xMMMMMMM +MMMMMWWMMMWMMMWWMWWWWMMMMWMK; '0MMMMMMMMMWWMMWMMMMWWWNNWWd. .dWWWN0o. ,oddoddodo;'. .,lkNMMMMMMWNKKKKKKd,;coOKKKKKkodO000x' ,kKKKKKKKXWMMMMMMMMMMMx. dMMMWMMWc ..''.. .''.'.. .kMMMMMMM +MMMWKkkkkkOOk0NWWWMMMMMMMMM0' ,KMMMMMMMMMMMMMMWMMMMMMWMMK, .xMNOc. .' c0d;. .xNMMMMMMNl........................ .........lNMMMMMWWWWMWd. oWWWWWMWc .oNXNN0; .xNNNNK; .xMMMMMMM +MMMWc 'OWXkkkOOOOOOOo. 'xOOOkOOOOkkk0WMMMMMMMMMMNc .xWNk:. .lK0doddddddddddOWMWKxc;kWMMMMMMMWc .,,'''''''''''''''''','',,'''',. cNMMWMMKl,,;;. .;;,,xWNc .xMWWMX; .kMMMMX; .xMMMMMMM +MMMWx;;;:,. '0Mx. :XMMMMMMMMMNl .;c;xNOd0WWWMWNKkdOWMMMMMKxx0XNWWMMMMMMMMWc oNNNWWWWWWWWWWWWWWWWWNNWWWWNNNWd. :NMMMMM0;.... ....lNNc .oXKKXO, .dKXXXO, .xMMMMMMM +MMMMMWMMM0, '0M0c:::cccc:;. .::cccccc::::xNMMMMMMMMNl. .oXN0ol0MWx. 'OWMMMWo .'xWMMMMMMMMMNc oWNOxxxxxkkkkkkkkkkkkkkxkkk0WMMx. :NMMMMMWK0KKKl cKK00XWX: ...... ...... .xMMMMMMM +MMMMMMMMM0, '0MWMMMMMMMMNd. .:xKWMMMMMMMMMMMMMMMMMXl. c: .c; .cl. ,KMXc :XMMM0' :XMMMMMMMMMMNkcclOM0, .dWWWXkxx0WMMMMMMMMMMMx. oMMMMMMNx::;;::::,. ';;::;::;c0MMMMMMM +MMMMMMMMM0' ,0WMMMMMMMMXl. .'. .:xXWMMMMMMMMMMMMM0: cXl .x0;'ckO; :XMK; oWMNl ;KMMMMMMMMMMMMMMMMMMXd::. .;:::::::::. .lNMMMMMMMMMMMMMMMMMMMMx. dMMMMMMMMMMMMMMMMX; .kWWMMMMMMMMMMMMMMM +MMMMMMMMM0' '0MMMMMMMXx, ;0NOc. .ckXMWWMMMMMWWK: :XWl .xWNNWMM0' cNMk. .kWx. '0MMMMMMMMMMMMMMMMMMMMMMW0, .dNWMMMMWNx. .oNMMMMMMMMMMMMMMMMMMMMMx. oMMMMMMMWWMMMMMMMX; .kMMMMMMMMWWMMMMMMM +MMMMMMMMM0' '0MMMWWKd, .oXMMMWXd, 'o0NMMMMMMMN0o'cXWWl .xMMMMMMWk. .dWNc .oO, .kWMMMMMMMMMMMMMMMMMMMMMMMMK: .cKWMMWKl. .xNMMMMMMMMMMMMMMMMMMMMMMx. oMWX0k00c;;;;;;;;,. ';;;;;;;;,oXMMMMMM +MMMMMMMMM0' '0MWXd:. .c0WMMMMMMMNk:. ;KWMMWWMMWMWXNWWWl .dMMMMMMMWo ,0WKxOKKc .dWMMMMMMMMMMMMMMMMMMMMMMMMWWXo. .o0Kd' .:0WMMMMMMMMMMMMMMMMMMMMMMWx. ;o:.. :x;......... ..........:KMMMMMM +MMMMMMMMNd. .oXWKc. ,dKWMWMMMMMMMMMWO:'lXWWWMMMMMMMMMMMMWl .xMMMMMMMMKolx0NMWWMNo. lNMMMMMMMMMMMMMMMMMMMMMMMMMWWMW0c. .. ,kNWWMMMMMMMMMMMMMMMMMWNKOxl' ..;ckXXXXXXXXXX0, .dXXXXXXXXKXWMMMMMM +MMMMMNOl' .:dkxokNMMMMMMMMMMMMMMMMWXNWNXKXMMMMMMMMMMMWl .xMWKkxkkOOOOOOOOOOkl. 'dOOkkxxONMMMMMMMMMMMMMWMMMWWX0kd:. .;oxOKNWWMMMWMWWMMMMMWWO;. .':lx0XWMMMMMMMMMMMMX; .kMMMMMMMMMMMMMMMMM +MWWNO;. .;odl,. .',;:clllllolllllccc:;,''.:0MMMMMMMMMMMWl .xMWo '0MMMMMMMMNOOOxdolc:,.. .;lc;. ..,;::cllllxXMMMMWXc .,lx0NWMMMMWKOO000000000x' .oO00000000OkKWMMMM +WWMNk;..;kNWWMN0dc;'.. .kWMMMMMMMMMMMWc .dWM0llooooooooooooolooooooooollxXMMMMMMMMK:. .';ldOXWWMWKOdl:,'. ,ONMMMMMWXOKWMWWMMMMWMWl .. . .... :XMMMM +MMMMMWOONMMMMMMMWWWNK0OkxxdddddoddddddddxxxxONMMMMMMMMMMMMWd..'kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo,;:lodk0KNMMMMMMMMMWWMMMWNK0kxdooldKMMMMMMMWWMMMMMMMMMMMMWkccccccccccccccccccccccccccc:xWMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXXNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + + +Entrustment 委托(送检受理)系统 + +版本: ${version} +创建: ${timestamp} + +${AnsiColor.DEFAULT} + diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..835a7da --- /dev/null +++ b/src/main/resources/bootstrap.yml @@ -0,0 +1,89 @@ +logging: + level: + digital.laboratory.platform.entrustment.mapper: debug +server: + port: 5203 +mybatis: + mapper-locations: classpath*:mapper/*.xml + +mybatis-plus: + type-handlers-package: digital.laboratory.platform.entrustment.config + +spring: + application: + name: @artifactId@ + + cloud: + nacos: + discovery: + server-addr: ${NACOS_HOST:dlp-nacos}:${NACOS_PORT:8848} + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + file-extension: yml + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + + profiles: + active: @profiles.active@ + +# datasource: +# type: com.zaxxer.hikari.HikariDataSource +# driver-class-name: com.mysql.cj.jdbc.Driver +# username: root +# password: 7990016 +# url: jdbc:mysql://dlp-mysql:3306/dlp_entrustment?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true + + mvc: + pathmatch: + matching-strategy: ant-path-matcher + hiddenmethod: + filter: + enabled: true + + servlet: + multipart: + # 根据实际需求作调整 + # 默认最大上传文件大小为1M, 单个文件大小 + max-file-size: 20MB + # 默认最大请求大小为10M, 总上传的数据大小 + max-request-size: 55MB + + +# 文件上传相关 支持阿里云、华为云、腾讯、minio +oss: + endpoint: http://127.0.0.1:9000 + accessKey: admin + secretKey: 87990016 + bucket-name: dlpfiles + +dlp: + entrustment: + clientChoiceCheckers: true # 审核人员由委托创建者选择 + singleOperateUser: true # 委托的审核审批是否由单一人员负责 + processDefinitionId: EntrustmentAccept:3:53fef9cb-cde0-11ec-bdc1-0862664bd485 + + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + username: dlp + password: 7990016 + jdbcUrl: jdbc:mysql://dlp-mysql:3306/dlp_entrustment?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true + +config: + activemq: + brokerUrl: tcp://192.168.9.74:61616 +# brokerUrl: tcp://omen-chen:61616 + user: admin + password: admin + #true:topic模式,false:queue模式 + pub-sub-domain: true + msgListener: + hardwareTopicName: hardware +countryDrugSystem: + apiPath: + tokenPath: /api/token + taskListPath: /api/sample/environment/sample # 污水样品列表查询 + receivePath: /api/sample/environment/receive # 样品签收 + rejectPath: /api/sample/environment/reject # 样品拒收 + returnPath: /api/sample/environment/return # 样品退回 + closePath: /api/sample/environment/close # 样品作废申请 diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..fe3c40b --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${log.path}/debug.log + + ${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + + + + ${log.path}/error.log + + ${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + ERROR + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/CaseEventMapper.xml b/src/main/resources/mapper/CaseEventMapper.xml new file mode 100644 index 0000000..849a142 --- /dev/null +++ b/src/main/resources/mapper/CaseEventMapper.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/CaseEvidenceMapper.xml b/src/main/resources/mapper/CaseEvidenceMapper.xml new file mode 100644 index 0000000..6d1cf62 --- /dev/null +++ b/src/main/resources/mapper/CaseEvidenceMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/DelivererMapper.xmlx b/src/main/resources/mapper/DelivererMapper.xmlx new file mode 100644 index 0000000..0dadbc3 --- /dev/null +++ b/src/main/resources/mapper/DelivererMapper.xmlx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/EntrustmentIdentificationMaterialMapper.xml b/src/main/resources/mapper/EntrustmentIdentificationMaterialMapper.xml new file mode 100644 index 0000000..4c0efc9 --- /dev/null +++ b/src/main/resources/mapper/EntrustmentIdentificationMaterialMapper.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/EntrustmentMapper.xml b/src/main/resources/mapper/EntrustmentMapper.xml new file mode 100644 index 0000000..2dfe200 --- /dev/null +++ b/src/main/resources/mapper/EntrustmentMapper.xml @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT e.*, + c.case_name, + c.case_no, + c.case_brief, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.submitter + ) AS submitter_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.check_claim_user + ) AS check_claim_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.check_user + ) AS check_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.approve_claim_user + ) AS approve_claim_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.approve_user + ) AS approve_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.deliver_confirm_user + ) AS deliver_confirm_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.deliver_submitter + ) AS deliver_submitter_name, +-- ( +-- SELECT user.name +-- FROM dlp_base.sys_user user +-- WHERE user.user_id=e.accept_claim_user +-- ) AS accept_claim_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.accept_user + ) AS accept_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.report_sender_user_id + ) AS report_sender_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.sample_sender_user_id + ) AS sample_sender_user_name, + + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.create_by + ) AS create_user_name, + ( + SELECT user.name + FROM dlp_base.sys_user user + WHERE user.user_id=e.update_by + ) AS update_user_name, + + ( + SELECT COUNT(*) + FROM b_entrustment_identification_material eim + WHERE eim.entrustment_id=e.id + ) AS identification_material_count, + + ( + select identification_no + from b_identification i + where i.id = e.identification_id + ) as identification_no + + FROM b_entrustment e + LEFT JOIN b_case_event c on e.case_id=c.id + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/IdentificationMapper.xml b/src/main/resources/mapper/IdentificationMapper.xml new file mode 100644 index 0000000..fdfc42e --- /dev/null +++ b/src/main/resources/mapper/IdentificationMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/SampleBoxInLogMapper.xml b/src/main/resources/mapper/SampleBoxInLogMapper.xml new file mode 100644 index 0000000..f5cece8 --- /dev/null +++ b/src/main/resources/mapper/SampleBoxInLogMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SampleBoxMapper.xml b/src/main/resources/mapper/SampleBoxMapper.xml new file mode 100644 index 0000000..fd9b4db --- /dev/null +++ b/src/main/resources/mapper/SampleBoxMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SampleMapper.xml b/src/main/resources/mapper/SampleMapper.xml new file mode 100644 index 0000000..77eb8f4 --- /dev/null +++ b/src/main/resources/mapper/SampleMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SampleStoreChangeDutyLogMapper.xml b/src/main/resources/mapper/SampleStoreChangeDutyLogMapper.xml new file mode 100644 index 0000000..1e428e1 --- /dev/null +++ b/src/main/resources/mapper/SampleStoreChangeDutyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SampleStoreLogMapper.xml b/src/main/resources/mapper/SampleStoreLogMapper.xml new file mode 100644 index 0000000..24b3136 --- /dev/null +++ b/src/main/resources/mapper/SampleStoreLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SampleStoreMapper.xml b/src/main/resources/mapper/SampleStoreMapper.xml new file mode 100644 index 0000000..950a181 --- /dev/null +++ b/src/main/resources/mapper/SampleStoreMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/StorageCabinetMapper.xml b/src/main/resources/mapper/StorageCabinetMapper.xml new file mode 100644 index 0000000..7b52c6c --- /dev/null +++ b/src/main/resources/mapper/StorageCabinetMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/StorageCellLogMapper.xml b/src/main/resources/mapper/StorageCellLogMapper.xml new file mode 100644 index 0000000..0383c76 --- /dev/null +++ b/src/main/resources/mapper/StorageCellLogMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/StorageCellMapper.xml b/src/main/resources/mapper/StorageCellMapper.xml new file mode 100644 index 0000000..d3d1bca --- /dev/null +++ b/src/main/resources/mapper/StorageCellMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/TakerMapper.xml b/src/main/resources/mapper/TakerMapper.xml new file mode 100644 index 0000000..6468596 --- /dev/null +++ b/src/main/resources/mapper/TakerMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/xHairJobIdentificationMaterialMapper.xmlx b/src/main/resources/mapper/xHairJobIdentificationMaterialMapper.xmlx new file mode 100644 index 0000000..6646fc3 --- /dev/null +++ b/src/main/resources/mapper/xHairJobIdentificationMaterialMapper.xmlx @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/xHairJobMapper.xmlx b/src/main/resources/mapper/xHairJobMapper.xmlx new file mode 100644 index 0000000..79fcbaf --- /dev/null +++ b/src/main/resources/mapper/xHairJobMapper.xmlx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +