From 95d26b89df2efadca575fccc125ae642279666eb Mon Sep 17 00:00:00 2001 From: shilei <798989044@qq.com> Date: Mon, 1 Sep 2025 18:41:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8C=B6=E7=99=BE=E9=81=93=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chapanda/hrm/constant/Constants.java | 9 + .../chapanda/hrm/constant/DownLoadTypeEnum.java | 68 +++ .../HrmCertificateFilesController.java | 231 ++++++++++ .../HrmInformationFilesController.java | 328 +++++++++++++ .../hrm/controller/HrmTableFieldController.java | 33 ++ .../chapanda/hrm/dao/HrmFormFieldDao.java | 209 +++++++++ .../hrm/service/HrmDownloadFilesService.java | 18 + .../hrm/service/HrmTableFieldService.java | 12 + .../impl/HrmDownloadFilesServiceImpl.java | 174 +++++++ .../service/impl/HrmTableFieldServiceImpl.java | 24 + .../seconddev/chapanda/hrm/util/CommonUtils.java | 430 ++++++++++++++++++ .../chapanda/hrm/util/DatabaseUtils.java | 366 +++++++++++++++ .../beisen/cache/BeisenTokenCacheKey.java | 30 ++ .../chapanda/beisen/constant/Constants.java | 82 ++++ .../controller/ConversionResignController.java | 64 +++ .../controller/EmployeePointsController.java | 201 ++++++++ .../chapanda/beisen/dao/ConversionResignDao.java | 103 +++++ .../chapanda/beisen/dao/EmployeePointsDao.java | 239 ++++++++++ .../chapanda/beisen/dao/HrmAssessment360Dao.java | 123 +++++ .../chapanda/beisen/dao/HrmAssessmentNewDao.java | 260 +++++++++++ .../beisen/dao/HrmBeisenPositionDao.java | 94 ++++ .../chapanda/beisen/dao/HrmDepartmentDao.java | 148 ++++++ .../chapanda/beisen/dao/HrmEmployeeDao.java | 86 ++++ .../chapanda/beisen/dao/HrmFormFieldDao.java | 174 +++++++ .../chapanda/beisen/dao/HrmPerformanceDao.java | 95 ++++ .../beisen/entity/BeisenDepartmentDto.java | 86 ++++ .../beisen/entity/BeisenHireRequestDto.java | 16 + .../beisen/entity/BeisenStaffDepartmentDto.java | 90 ++++ .../chapanda/beisen/entity/BeisenStaffDto.java | 286 ++++++++++++ .../beisen/entity/BeisenStaffPositionDto.java | 50 ++ .../beisen/esb/Esb2BeisenAssessCronJob.java | 34 ++ .../esb/Esb2BeisenAssessment360Action.java | 154 +++++++ .../esb/Esb2BeisenAssessment360FullCronJob.java | 47 ++ .../beisen/esb/Esb2BeisenCityDataAction.java | 194 ++++++++ .../esb/Esb2BeisenCreateBlackListAction.java | 103 +++++ .../esb/Esb2BeisenDeleteBlackListAction.java | 67 +++ .../esb/Esb2BeisenJobRequirementAction.java | 234 ++++++++++ .../Esb2BeisenJobRequirementCreateAction.java | 237 ++++++++++ .../Esb2BeisenJobRequirementUnRelateAction.java | 51 +++ .../beisen/esb/Esb2BeisenOfferCronJob.java | 73 +++ .../beisen/esb/Esb2BeisenPerformanceCronJob.java | 171 +++++++ .../esb/Esb2BeisenPerformanceCronJobNew.java | 427 +++++++++++++++++ .../esb/Esb2BeisenPositionFullCronJob.java | 284 ++++++++++++ .../esb/Esb2BeisenPositionTimeCronJob.java | 277 +++++++++++ .../beisen/module/BeisenTokenModuleKey.java | 14 + .../beisen/service/ConversionResignService.java | 13 + .../impl/ConversionResignServiceImpl.java | 172 +++++++ .../BeisenDepartmentInfoByOriginalIdUtil.java | 183 ++++++++ .../util/BeisenDeptInfoByOriginalIdUtil.java | 103 +++++ .../beisen/util/BeisenQueryDeptIdUtil.java | 85 ++++ .../beisen/util/BeisenQueryUseridUtil.java | 135 ++++++ .../util/BeisenStaffInfoByStaffCodeUtil.java | 193 ++++++++ .../beisen/util/BlackList2BeiSenUtil.java | 206 +++++++++ .../chapanda/beisen/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/beisen/util/DatabaseUtils.java | 366 +++++++++++++++ .../beisen/util/EbuilderOperateUtils.java | 132 ++++++ .../chapanda/beisen/util/EbuilderUtils.java | 108 +++++ .../beisen/util/Esb2BeiSenAssessment360Util.java | 171 +++++++ .../beisen/util/Esb2BeiSenAssessmentUtil.java | 118 +++++ .../beisen/util/Esb2BeiSenPositionUtil.java | 112 +++++ .../beisen/util/Esb2BeisenAssessUtil.java | 150 ++++++ .../util/Esb2BeisenUnRelateRequestUtil.java | 62 +++ .../beisen/util/JobRequirement2BeisenUtil.java | 246 ++++++++++ .../chapanda/beisen/util/Offer2BeiSenUtil.java | 144 ++++++ .../beisen/util/Performance2BeiSenUtil.java | 309 +++++++++++++ .../chapanda/beisen/util/Token2BeiSenUtil.java | 242 ++++++++++ .../chapanda/cost/constant/Constants.java | 8 + .../controller/ConvertStaffCodeController.java | 38 ++ .../Request2CostControlController.java | 106 +++++ .../cost/controller/RequestInfoController.java | 107 +++++ .../chapanda/cost/dao/ConvertStaffCodeDao.java | 98 ++++ .../cost/service/ConvertStaffCodeService.java | 11 + .../cost/service/Request2CostControlService.java | 12 + .../impl/ConvertStaffCodeServiceImpl.java | 45 ++ .../impl/Request2CostControlServiceImpl.java | 126 +++++ .../chapanda/cost/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/cost/util/DatabaseUtils.java | 366 +++++++++++++++ .../chapanda/dmp/constant/Constants.java | 14 + .../seconddev/chapanda/dmp/dao/FormFieldDao.java | 195 ++++++++ .../chapanda/dmp/esb/Esb2DmpGetGmvCron.java | 48 ++ .../seconddev/chapanda/dmp/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/dmp/util/DatabaseUtils.java | 367 +++++++++++++++ .../chapanda/dmp/util/EbuilderOperateUtils.java | 133 ++++++ .../chapanda/dmp/util/Esb2DmpGetGmvUtil.java | 206 +++++++++ .../chapanda/esign/constant/Constants.java | 86 ++++ .../esign/controller/SealTemplateController.java | 88 ++++ .../controller/SignFlowsCallBackController.java | 109 +++++ .../chapanda/esign/dao/FormFieldDao.java | 329 ++++++++++++++ .../chapanda/esign/dao/SealTemplateDao.java | 135 ++++++ .../chapanda/esign/dao/SealsManageDao.java | 80 ++++ .../chapanda/esign/dao/SignFlowCallBackDao.java | 95 ++++ .../chapanda/esign/entity/AccountInfoBean.java | 19 + .../chapanda/esign/entity/CallBackBean.java | 39 ++ .../chapanda/esign/entity/CallbackUrlBean.java | 102 +++++ .../chapanda/esign/entity/FinishDocUrlBean.java | 49 ++ .../chapanda/esign/entity/OkHttpDto.java | 65 +++ .../Esb2EsignCreateRequest4OrganizeAction.java | 131 ++++++ .../Esb2EsignCreateRequest4PartiesAction.java | 132 ++++++ .../esign/esb/Esb2EsignCreateRequestAction.java | 89 ++++ .../esign/esb/Esb2EsignCreateUserAction.java | 71 +++ .../esign/esb/Esb2EsignFileUploadAction.java | 153 +++++++ .../Esb2EsignFileUploadForOrganizeAction.java | 159 +++++++ .../esb/Esb2EsignQueryPreviewUrlAction.java | 82 ++++ .../esign/esb/Esb2EsignQuerySealsAction.java | 116 +++++ .../esb/Esb2EsignReminderRequestAction.java | 64 +++ .../esign/esb/Esb2EsignSealsTemplateAction.java | 108 +++++ .../esign/esb/Esb2EsignSyncSealsCron.java | 305 +++++++++++++ .../esign/esb/Esb2EsignSyncTemplateCron.java | 294 ++++++++++++ .../esign/service/SealTemplateService.java | 14 + .../esign/service/SignFlowsCallBackService.java | 10 + .../service/impl/SealTemplateServiceImpl.java | 391 ++++++++++++++++ .../impl/SignFlowsCallBackServiceImpl.java | 68 +++ .../chapanda/esign/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/esign/util/DatabaseUtils.java | 366 +++++++++++++++ .../esign/util/EbuilderOperateUtils.java | 201 ++++++++ .../util/Esb2EsignApplyRequest4OrgainzeUtil.java | 220 +++++++++ .../esign/util/Esb2EsignApplyRequestUtil.java | 203 +++++++++ .../util/Esb2EsignBuildTemplatDoceUtil.java | 309 +++++++++++++ .../esign/util/Esb2EsignCreateUserUtil.java | 146 ++++++ .../esign/util/Esb2EsignDownlUrlUtil.java | 191 ++++++++ .../esign/util/Esb2EsignFileUploadUtil.java | 118 +++++ .../esign/util/Esb2EsignPreviewUrlUtil.java | 132 ++++++ .../esign/util/Esb2EsignReminderRequestUtil.java | 116 +++++ .../esign/util/Esb2EsignSealTemplateUtil.java | 131 ++++++ .../esign/util/Esb2EsignSyncSealsUtil.java | 168 +++++++ .../esign/util/Esb2EsignTemplateFormUtil.java | 132 ++++++ .../util/Esb2EsignTemplateSealPostionUtil.java | 343 ++++++++++++++ .../chapanda/esign/util/Esb2EsignUtil.java | 116 +++++ .../feishu/cache/FeishuTokenCacheKey.java | 29 ++ .../chapanda/feishu/constant/Constants.java | 73 +++ .../QueryFeishuCardDataController.java | 155 +++++++ .../chapanda/feishu/dao/HrmQueryOpenIdDao.java | 58 +++ .../chapanda/feishu/dao/HrmUserAvatarDao.java | 93 ++++ .../feishu/dao/WorkflowBotMessageDao.java | 59 +++ .../feishu/dao/WorkflowDegreeLevelDao.java | 91 ++++ .../chapanda/feishu/dao/WorkflowTableDao.java | 58 +++ .../esb/Esb2FeishuBotCreateTodoAction.java | 120 +++++ .../esb/Esb2FeishuBotDeleteTodoAction.java | 62 +++ .../esb/Esb2FeishuBotUpdateTodoAction.java | 63 +++ .../esb/Esb2FeishuCalendarsCancelAction.java | 62 +++ .../esb/Esb2FeishuCalendarsEventsAction.java | 133 ++++++ .../esb/Esb2FeishuCalendarsPrimaryAction.java | 35 ++ .../esb/Esb2FeishuCalendarsUpdateAction.java | 90 ++++ .../Esb2FeishuCreateCalendarsTimeoffAction.java | 89 ++++ .../Esb2FeishuDeleteCalendarsTimeoffAction.java | 56 +++ .../feishu/esb/Esb2FeishuHrmAvatarAction.java | 57 +++ .../feishu/esb/Esb2FeishuHrmAvatarDateCron.java | 40 ++ .../feishu/esb/Esb2FeishuHrmAvatarFullCron.java | 38 ++ .../esb/Esb2FeishuProfilePictureCardAction.java | 34 ++ .../feishu/esb/Esb2FeishuSendDeleteAction.java | 167 +++++++ .../feishu/esb/Esb2FeishuSendDoneAction.java | 164 +++++++ .../feishu/esb/Esb2FeishuSendFinishAction.java | 162 +++++++ .../esb/Esb2FeishuSendMessageCardAction.java | 73 +++ .../esb/Esb2FeishuSendMessageTxtAction.java | 61 +++ .../feishu/esb/Esb2FeishuSendTodoAction.java | 174 +++++++ .../feishu/module/FeishuTokenModuleKey.java | 14 + .../chapanda/feishu/util/CommonUtil.java | 26 ++ .../chapanda/feishu/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/feishu/util/DatabaseUtils.java | 366 +++++++++++++++ .../feishu/util/Esb2FeishuBotCreateTodoUtil.java | 182 ++++++++ .../feishu/util/Esb2FeishuBotDeleteTodoUtil.java | 87 ++++ .../feishu/util/Esb2FeishuBotUpdateTodoUtil.java | 88 ++++ .../util/Esb2FeishuCalendarAttendeesUtil.java | 96 ++++ .../util/Esb2FeishuCalendarEventsUtil.java | 164 +++++++ .../util/Esb2FeishuCalendarPrimaryUtil.java | 88 ++++ .../util/Esb2FeishuCalendarUpdateUtil.java | 157 +++++++ .../util/Esb2FeishuCancelCalendarUtil.java | 67 +++ .../Esb2FeishuCreateCalendarTimeoffUtil.java | 133 ++++++ .../Esb2FeishuDeleteCalendarTimeoffUtil.java | 68 +++ .../feishu/util/Esb2FeishuHrmAvatarUtil.java | 101 ++++ .../feishu/util/Esb2FeishuOpenIdUtil.java | 171 +++++++ .../util/Esb2FeishuProfilePictureUtil.java | 272 +++++++++++ .../feishu/util/Esb2FeishuSendDeleteUtil.java | 391 ++++++++++++++++ .../feishu/util/Esb2FeishuSendDoneUtil.java | 393 ++++++++++++++++ .../feishu/util/Esb2FeishuSendFinishUtil.java | 391 ++++++++++++++++ .../feishu/util/Esb2FeishuSendMessageUtil.java | 292 ++++++++++++ .../feishu/util/Esb2FeishuSendTodoUtil.java | 378 +++++++++++++++ .../feishu/util/Esb2FeishuTokenUtil.java | 88 ++++ .../feishu/util/Esb2FeishuUploadImageUtil.java | 198 ++++++++ .../chapanda/kaixinyi/constant/Constants.java | 19 + .../chapanda/kaixinyi/esb/Esb2KaixinyAction.java | 70 +++ .../chapanda/kaixinyi/util/AESUtil.java | 81 ++++ .../chapanda/kaixinyi/util/DecryptUtil.java | 4 + .../chapanda/kaixinyi/util/EncryptionUtil.java | 65 +++ .../chapanda/kaixinyi/util/SignatureUtil.java | 118 +++++ .../chapanda/kaixinyi/util/VerificationUtil.java | 4 + .../chapanda/qunjie/constant/Constants.java | 58 +++ .../chapanda/qunjie/dao/FormFieldDao.java | 135 ++++++ .../chapanda/qunjie/dao/SealsManageDao.java | 86 ++++ .../esb/Esb2QunjieCreateSealApplyAction.java | 98 ++++ .../Esb2QunjieEconomicCompensationAction.java | 111 +++++ .../esb/Esb2QunjieFinshSealApplyAction.java | 51 +++ .../qunjie/esb/Esb2QunjieQuerySealBaseCron.java | 43 ++ .../qunjie/esb/Esb2QunjieTestAttachmentCron.java | 113 +++++ .../chapanda/qunjie/util/DatabaseUtils.java | 367 +++++++++++++++ .../qunjie/util/EbuilderOperateUtils.java | 194 ++++++++ .../util/Esb2QunjieCreateApplySealUtil.java | 333 ++++++++++++++ .../util/Esb2QunjieEconomicCompensationUtil.java | 284 ++++++++++++ .../util/Esb2QunjieFinshSealApplyUtil.java | 77 ++++ .../qunjie/util/Esb2QunjieQuerySealUtil.java | 244 ++++++++++ .../qunjie/util/Esb2QunjieTokenUtil.java | 61 +++ .../chapanda/sap/constant/Constants.java | 21 + .../sap/dao/Esb2SapUpdateIncorporatedDao.java | 171 +++++++ .../seconddev/chapanda/sap/dao/FormFieldDao.java | 135 ++++++ .../seconddev/chapanda/sap/entity/OkHttpDto.java | 65 +++ .../sap/esb/Esb2SapIncorporatedCompanyCron.java | 115 +++++ .../seconddev/chapanda/sap/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/sap/util/DatabaseUtils.java | 366 +++++++++++++++ .../chapanda/sap/util/EbuilderOperateUtils.java | 195 ++++++++ .../sap/util/Esb2SapIncorporatedCompanyUtil.java | 332 ++++++++++++++ .../chapanda/test/HmacSHA256Example.java | 72 +++ .../seconddev/chapanda/test/HmacSha1Example.java | 46 ++ .../seconddev/chapanda/test/SignatureDemo.java | 417 +++++++++++++++++ .../weaver/seconddev/chapanda/test/Test88.java | 140 ++++++ .../weaver/seconddev/chapanda/test/Test99.java | 141 ++++++ .../weaver/seconddev/chapanda/test/TestMain.java | 229 ++++++++++ .../weaver/seconddev/chapanda/test/main899.java | 44 ++ .../seconddev/chapanda/test/mainTest2.java | 10 + .../weaver/seconddev/chapanda/test/test100.java | 32 ++ .../weaver/seconddev/chapanda/test/test12.java | 78 ++++ .../weaver/seconddev/chapanda/test/test55.java | 56 +++ .../weaver/seconddev/chapanda/test/test7.java | 40 ++ .../weaver/seconddev/chapanda/test/test8.java | 141 ++++++ .../weaver/seconddev/chapanda/test/test9.java | 74 +++ .../weaver/seconddev/chapanda/test/testFile.java | 87 ++++ .../seconddev/chapanda/test/testFile2.java | 92 ++++ .../weaver/seconddev/chapanda/test/testJson.java | 138 ++++++ .../chapanda/prop/constant/Constants.java | 8 + .../chapanda/prop/dao/ParamConfigDao.java | 53 +++ .../chapanda/prop/util/CommonUtils.java | 422 +++++++++++++++++ .../chapanda/prop/util/DatabaseUtils.java | 366 +++++++++++++++ .../chapanda/prop/util/ParamConfigUtil.java | 36 ++ .../chapanda/prop/util/SecDevProperty.java | 35 ++ 233 files changed, 33713 insertions(+) create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/DownLoadTypeEnum.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmCertificateFilesController.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmInformationFilesController.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmTableFieldController.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/dao/HrmFormFieldDao.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmDownloadFilesService.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmTableFieldService.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/impl/HrmDownloadFilesServiceImpl.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/impl/HrmTableFieldServiceImpl.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/cache/BeisenTokenCacheKey.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/ConversionResignController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/EmployeePointsController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/ConversionResignDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/EmployeePointsDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessment360Dao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessmentNewDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmBeisenPositionDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmDepartmentDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmEmployeeDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmFormFieldDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmPerformanceDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenDepartmentDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenHireRequestDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDepartmentDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffPositionDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360Action.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360FullCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenCityDataAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenCreateBlackListAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenDeleteBlackListAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementCreateAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementUnRelateAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenOfferCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJobNew.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionFullCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionTimeCronJob.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/module/BeisenTokenModuleKey.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/ConversionResignService.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/impl/ConversionResignServiceImpl.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDepartmentInfoByOriginalIdUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDeptInfoByOriginalIdUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryDeptIdUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryUseridUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenStaffInfoByStaffCodeUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BlackList2BeiSenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderOperateUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenAssessment360Util.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenAssessmentUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenPositionUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeisenAssessUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeisenUnRelateRequestUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/JobRequirement2BeisenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Offer2BeiSenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Performance2BeiSenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Token2BeiSenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/ConvertStaffCodeController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/Request2CostControlController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/RequestInfoController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/dao/ConvertStaffCodeDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/ConvertStaffCodeService.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/Request2CostControlService.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/ConvertStaffCodeServiceImpl.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/Request2CostControlServiceImpl.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/dao/FormFieldDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/esb/Esb2DmpGetGmvCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/EbuilderOperateUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/Esb2DmpGetGmvUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/controller/SealTemplateController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/controller/SignFlowsCallBackController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/FormFieldDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealTemplateDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealsManageDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SignFlowCallBackDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/AccountInfoBean.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallBackBean.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallbackUrlBean.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/FinishDocUrlBean.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/OkHttpDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4OrganizeAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4PartiesAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequestAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateUserAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadForOrganizeAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQueryPreviewUrlAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQuerySealsAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignReminderRequestAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSealsTemplateAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncSealsCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncTemplateCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/SealTemplateService.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/SignFlowsCallBackService.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SealTemplateServiceImpl.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SignFlowsCallBackServiceImpl.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/EbuilderOperateUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignApplyRequest4OrgainzeUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignApplyRequestUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignBuildTemplatDoceUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignCreateUserUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignDownlUrlUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignFileUploadUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignPreviewUrlUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignReminderRequestUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSealTemplateUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSyncSealsUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignTemplateFormUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignTemplateSealPostionUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/cache/FeishuTokenCacheKey.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/controller/QueryFeishuCardDataController.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmQueryOpenIdDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmUserAvatarDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowBotMessageDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowDegreeLevelDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowTableDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotCreateTodoAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotDeleteTodoAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotUpdateTodoAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsCancelAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsEventsAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsPrimaryAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsUpdateAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCreateCalendarsTimeoffAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuDeleteCalendarsTimeoffAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarDateCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarFullCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuProfilePictureCardAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDeleteAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDoneAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendFinishAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageCardAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageTxtAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendTodoAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/module/FeishuTokenModuleKey.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotCreateTodoUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotDeleteTodoUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotUpdateTodoUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarAttendeesUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarEventsUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarPrimaryUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarUpdateUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCancelCalendarUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCreateCalendarTimeoffUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuDeleteCalendarTimeoffUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuHrmAvatarUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuOpenIdUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuProfilePictureUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDeleteUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDoneUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendFinishUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendMessageUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendTodoUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuTokenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuUploadImageUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/esb/Esb2KaixinyAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/AESUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/DecryptUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/EncryptionUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/SignatureUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/VerificationUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/FormFieldDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/SealsManageDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieCreateSealApplyAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieEconomicCompensationAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieFinshSealApplyAction.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieQuerySealBaseCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieTestAttachmentCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/EbuilderOperateUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieCreateApplySealUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieEconomicCompensationUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieFinshSealApplyUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieQuerySealUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieTokenUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/Esb2SapUpdateIncorporatedDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/FormFieldDao.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/entity/OkHttpDto.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/esb/Esb2SapIncorporatedCompanyCron.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/EbuilderOperateUtils.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/Esb2SapIncorporatedCompanyUtil.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/HmacSHA256Example.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/HmacSha1Example.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/SignatureDemo.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test88.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test99.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/TestMain.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/main899.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/mainTest2.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test100.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test12.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test55.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test7.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test8.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test9.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/testFile.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/testFile2.java create mode 100644 茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/testJson.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/constant/Constants.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/dao/ParamConfigDao.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/CommonUtils.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/DatabaseUtils.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/ParamConfigUtil.java create mode 100644 茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/SecDevProperty.java diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/Constants.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/Constants.java new file mode 100644 index 0000000..dbd67ed --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/Constants.java @@ -0,0 +1,9 @@ +package com.weaver.seconddev.chapanda.hrm.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; + + public static String templatePath = "/nfs/data/weatempfiles/downloadtemp"; +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/DownLoadTypeEnum.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/DownLoadTypeEnum.java new file mode 100644 index 0000000..f7e113b --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/constant/DownLoadTypeEnum.java @@ -0,0 +1,68 @@ +package com.weaver.seconddev.chapanda.hrm.constant; + + +public enum DownLoadTypeEnum { + + INFORMATION("0","info", "info","签署文件下载","附件管理"), + CONTRACT("1","contract", "contract","签署文件下载","人事合同"), + INCOME("2","income", "income","签署文件下载","收入证明"), + EMPLOYMENT("3","employment", "employment","签署文件下载","在职证明"), + RESIGN("4","resign", "resign","签署文件下载","离职证明"); + + private String code; + private String type; + + private String path; + + private String fileName; + + private String description; + + private DownLoadTypeEnum(String code,String type, String path,String fileName,String description) { + this.code = code; + this.type = type; + this.path = path; + this.fileName = fileName; + this.description = description; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmCertificateFilesController.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmCertificateFilesController.java new file mode 100644 index 0000000..7fee016 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmCertificateFilesController.java @@ -0,0 +1,231 @@ +package com.weaver.seconddev.chapanda.hrm.controller; + +import com.alibaba.fastjson.JSONArray; +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.chapanda.hrm.constant.Constants; +import com.weaver.seconddev.chapanda.hrm.constant.DownLoadTypeEnum; +import com.weaver.seconddev.chapanda.hrm.service.HrmDownloadFilesService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/secondev/chapanda/hrm/cert") +public class HrmCertificateFilesController { + + private final Logger log = LoggerFactory.getLogger(HrmCertificateFilesController.class); + + @Autowired + HrmDownloadFilesService hrmDownloadFilesService; + + /*** + * + * @param paramMap + * @return + */ + @WeaPermission(publicPermission = true) + @PostMapping("/getincomepath") + public WeaResult getIncomePath(@RequestBody Map paramMap){ + String data = String.valueOf(paramMap.get("data")); + log.error("data:{}",data); + JSONArray dataArray = new JSONArray(); + if(StringUtils.isNotBlank(data)){ + String decodedData = hrmDownloadFilesService.convertBase64Data(data); + log.error("decodedData:{}",decodedData); + if(StringUtils.isNotBlank(decodedData)){ + try{ + dataArray = JSONArray.parseArray(decodedData); + }catch (Exception e){ + log.error("{}",e); + } + } + } + log.error("dataArray:{}",dataArray.size()); + + String newZipFilePath = hrmDownloadFilesService.convertZipFile(dataArray, DownLoadTypeEnum.INCOME.getPath()); + + Map dataMap = new HashMap(); + dataMap.put("filepath",newZipFilePath); + return WeaResult.success(dataMap); + } + + + /*** + * 离职证明下载接口 + * @param paramMap + * @return + */ + @WeaPermission(publicPermission = true) + @PostMapping("/getresignpath") + public WeaResult getResignPath(@RequestBody Map paramMap){ + String data = String.valueOf(paramMap.get("data")); + log.error("data:{}",data); + JSONArray dataArray = new JSONArray(); + if(StringUtils.isNotBlank(data)){ + String decodedData = hrmDownloadFilesService.convertBase64Data(data); + log.error("decodedData:{}",decodedData); + if(StringUtils.isNotBlank(decodedData)){ + try{ + dataArray = JSONArray.parseArray(decodedData); + }catch (Exception e){ + log.error("{}",e); + } + } + } + log.error("dataArray:{}",dataArray.size()); + + String newZipFilePath = hrmDownloadFilesService.convertZipFile(dataArray, DownLoadTypeEnum.RESIGN.getPath()); + Map dataMap = new HashMap(); + dataMap.put("filepath",newZipFilePath); + return WeaResult.success(dataMap); + } + + + /*** + * 在职证明下载接口 + * @param paramMap + * @return + */ + @WeaPermission(publicPermission = true) + @PostMapping("/getemploymentpath") + public WeaResult getEmploymentPath(@RequestBody Map paramMap){ + String data = String.valueOf(paramMap.get("data")); + log.error("data:{}",data); + JSONArray dataArray = new JSONArray(); + if(StringUtils.isNotBlank(data)){ + String decodedData = hrmDownloadFilesService.convertBase64Data(data); + if(StringUtils.isNotBlank(decodedData)){ + try{ + dataArray = JSONArray.parseArray(decodedData); + }catch (Exception e){ + log.error("{}",e); + } + } + } + log.error("dataArray:{}",dataArray.size()); + + String newZipFilePath = hrmDownloadFilesService.convertZipFile(dataArray,DownLoadTypeEnum.EMPLOYMENT.getPath()); + + Map dataMap = new HashMap(); + dataMap.put("filepath",newZipFilePath); + return WeaResult.success(dataMap); + } + + + @WeaPermission(publicPermission = true) + @PostMapping("/getcontractpath") + public WeaResult getContractPath(@RequestBody Map paramMap){ + String data = String.valueOf(paramMap.get("data")); + log.error("data:{}",data); + JSONArray dataArray = new JSONArray(); + if(StringUtils.isNotBlank(data)){ + String decodedData = hrmDownloadFilesService.convertBase64Data(data); + if(StringUtils.isNotBlank(decodedData)){ + try{ + dataArray = JSONArray.parseArray(decodedData); + }catch (Exception e){ + log.error("{}",e); + } + } + } + log.error("dataArray:{}",dataArray.size()); + + String newZipFilePath = hrmDownloadFilesService.convertZipFile(dataArray, DownLoadTypeEnum.CONTRACT.getPath()); + + Map dataMap = new HashMap(); + dataMap.put("filepath",newZipFilePath); + return WeaResult.success(dataMap); + } + + /*** + * 电子签名模板预览接口 + * @return + * @throws IOException + */ + @WeaPermission(publicPermission = true) + @GetMapping("/downloadZip") + public ResponseEntity downloadZip(HttpServletRequest request) throws IOException{ + String data = request.getParameter("data"); + String type = request.getParameter("type"); + log.error("data2:{}",data); + log.error("typ2e:{}",type); + String filename = ""; + try{ + DownLoadTypeEnum[] values = DownLoadTypeEnum.values(); + for (DownLoadTypeEnum item : values) { + log.error("item.getCode():{}",item.getCode()); + if(item.getCode().equals(type)){ + filename = DownLoadTypeEnum.INCOME.getFileName(); + } + } + if(StringUtils.isNotBlank(filename)){ + filename = URLEncoder.encode(filename, "UTF-8"); // 使用UTF-8编码 + } + }catch (Exception e){ + log.error("e:{}",e); + } + + log.error("filename2:{}",filename); + + if(StringUtils.isNotBlank(filename)){ + log.error("data:{}",data); + String zipFilePath = ""; + if(StringUtils.isNotBlank(data)){ + zipFilePath = hrmDownloadFilesService.convertBase64Data(data); + } + log.error("zipFilePath:{}",zipFilePath); + if(StringUtils.isNotBlank(zipFilePath) && zipFilePath.contains(Constants.templatePath) && new File(zipFilePath).exists()){ + // 文件转成字节数组 + File file = ResourceUtils.getFile(zipFilePath); + byte[] fileBytes = Files.readAllBytes(file.toPath()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String filename2 = filename+"-"+sdf.format(new Date())+".zip"; + log.error("filename2:{}",filename2); + + return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM) + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + new String(filename2.getBytes(), "UTF-8") + "\"") + .body(fileBytes); + }else{ + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new String("文件下载失败".getBytes(), "utf-8")); + } + }else{ + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new String("文件下载失败".getBytes(), "utf-8")); + } + } + + + + /** + * 测试接口 + * @param request + * @param response + * @return + * @throws IOException + */ + @WeaPermission(publicPermission = true) + @GetMapping("/test") + public WeaResult test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmInformationFilesController.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmInformationFilesController.java new file mode 100644 index 0000000..053d1a7 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmInformationFilesController.java @@ -0,0 +1,328 @@ +package com.weaver.seconddev.chapanda.hrm.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.eteams.file.client.file.FileData; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.file.ud.api.FileDownloadService; +import com.weaver.seconddev.chapanda.hrm.constant.Constants; +import com.weaver.seconddev.chapanda.hrm.constant.DownLoadTypeEnum; +import com.weaver.seconddev.chapanda.hrm.service.HrmDownloadFilesService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import java.util.Base64; +import java.nio.file.Paths; + +@RestController +@RequestMapping("/api/secondev/chapanda/hrm/info") +public class HrmInformationFilesController { + + private final Logger log = LoggerFactory.getLogger(HrmInformationFilesController.class); + + @Autowired + private FileDownloadService fileDownloadService; + + @Autowired + HrmDownloadFilesService hrmDownloadFilesService; + + @WeaPermission(publicPermission = true) + @PostMapping("/getinformationpath") + public WeaResult getInformationPath(@RequestBody Map paramMap){ + String data = String.valueOf(paramMap.get("data")); + log.error("data:{}",data); + JSONArray dataArray = new JSONArray(); + if(StringUtils.isNotBlank(data)){ + String decodedData = hrmDownloadFilesService.convertBase64Data(data); + log.error("decodedData:{}",decodedData); + if(StringUtils.isNotBlank(decodedData)){ + try{ + dataArray = JSONArray.parseArray(decodedData); + }catch (Exception e){ + log.error("{}",e); + } + } + } + log.error("dataArray:{}",dataArray.size()); + + String newZipFilePath = convertZipFile(dataArray, DownLoadTypeEnum.INFORMATION.getCode()); + +// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); +// String filename = sdf.format(new Date())+".zip"; +// +// String directoryPath = Constants.templatePath+File.separator+sdf.format(new Date()); +// // 将字符串路径转换为Path对象 +// Path path = Paths.get(directoryPath); +// // 检查目录是否存在 +// if (Files.notExists(path)) { +// try { +// Files.createDirectories(path); +// } catch (IOException e) { +// log.error("e:{}",e); +// } +// } +// +// String zipFilePath = directoryPath+File.separator+filename; +// try { +// log.error("path:{}",zipFilePath); +// FileOutputStream fos = new FileOutputStream(zipFilePath); +// ZipOutputStream zos = new ZipOutputStream(fos); +// for(int i=0;i dataMap = new HashMap(); + dataMap.put("filepath",newZipFilePath); + return WeaResult.success(dataMap); + } + + + /*** + * 转换为zip文件 + * @param dataArray + * @param downloadType + * @return + */ + public String convertZipFile(JSONArray dataArray,String downloadType) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String filename = sdf.format(new Date())+".zip"; + + String directoryPath = Constants.templatePath+ File.separator+downloadType+File.separator+sdf.format(new Date()); + // 将字符串路径转换为Path对象 + Path path = Paths.get(directoryPath); + // 检查目录是否存在 + if (Files.notExists(path)) { + try { + Files.createDirectories(path); + } catch (IOException e) { + log.error("e:{}",e); + } + } + + String zipFilePath = directoryPath+File.separator+filename; + FileOutputStream fos = null; + ZipOutputStream zos = null; + try { + log.error("path:{}",zipFilePath); + fos = new FileOutputStream(zipFilePath); + zos = new ZipOutputStream(fos); + for(int i=0;i test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + + + public static void main(String[] args) { + String originalString = "/nfs/data/weatempfiles/downloadtemp/1111/1111.zip"; + + // +// String originalString = "[{\"fielid\":\"1169600692452909062\",\"jobnum\":\"10000000000\",\"username\":\"王文猛\"},{\"fielid\":\"1169600688166330369\",\"jobnum\":\"10000000000\",\"username\":\"王文猛\"},{\"fielid\":\"1167396240209780739\",\"jobnum\":\"1000002229\",\"username\":\"崔晓龙\"},{\"fielid\":\"1167650515133440001\",\"jobnum\":\"1000002805\",\"username\":\"刘琪琪\"},{\"fielid\":\"1167395969819779075\",\"jobnum\":\"1000003958\",\"username\":\"刘颖慧\"},{\"fielid\":\"1169538849218813953\",\"jobnum\":\"1000003958\",\"username\":\"刘颖慧\"},{\"fielid\":\"1169601053305659394\",\"jobnum\":\"1000003958\",\"username\":\"刘颖慧\"},{\"fielid\":\"1169543698203336705\",\"jobnum\":\"1000003958\",\"username\":\"刘颖慧\"},{\"fielid\":\"1169501139481452545\",\"jobnum\":\"1000004336\",\"username\":\"蒋欢\"},{\"fielid\":\"1167403559018602499\",\"jobnum\":\"1000004410\",\"username\":\"刘贤松\"},{\"fielid\":\"1167394818600771585\",\"jobnum\":\"1000004846\",\"username\":\"刘刚菊\"},{\"fielid\":\"1167389900896772097\",\"jobnum\":\"1000006146\",\"username\":\"周娟\"},{\"fielid\":\"1169540279359037441\",\"jobnum\":\"1000006146\",\"username\":\"周娟\"},{\"fielid\":\"1167718573191520257\",\"jobnum\":\"1000006146\",\"username\":\"周娟\"}]"; + // 将字符串转换为字节数组 + byte[] bytesToEncode = originalString.getBytes(); + + // 创建Base64编码器 + Base64.Encoder encoder = Base64.getEncoder(); + + // 编码字节数组 + String encodedString = encoder.encodeToString(bytesToEncode); + + System.out.println("Encoded String: " + encodedString); + + Base64.Decoder decoder = Base64.getDecoder(); + + // 解码Base64字符串 + byte[] bytesDecoded = decoder.decode(encodedString); + + // 将字节数组转换回字符串 + String decodedString = new String(bytesDecoded); + + System.out.println("Decoded String: " + decodedString); + + } + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmTableFieldController.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmTableFieldController.java new file mode 100644 index 0000000..c9aad2d --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/controller/HrmTableFieldController.java @@ -0,0 +1,33 @@ +package com.weaver.seconddev.chapanda.hrm.controller; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import java.util.*; +import com.weaver.seconddev.chapanda.hrm.service.HrmTableFieldService; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@RestController +@RequestMapping("/api/secondev/chapanda/hrm/form") +public class HrmTableFieldController { + private final Logger log = LoggerFactory.getLogger(HrmTableFieldController.class); + + @Autowired + private HrmTableFieldService hrmTableFieldService; + + @WeaPermission(publicPermission = true) + @GetMapping("/getdetailfield") + public WeaResult getDetailField(HttpServletRequest request, HttpServletResponse response){ + String tablename = String.valueOf(request.getParameter("tablename")); + log.error("tablename:{}",tablename); + String detailname = String.valueOf(request.getParameter("detailname")); + log.error("detailname:{}",detailname); + List> dataList = hrmTableFieldService.queryTableDetailFieldByTableName(tablename,detailname); + return WeaResult.success(dataList); + } +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/dao/HrmFormFieldDao.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/dao/HrmFormFieldDao.java new file mode 100644 index 0000000..4a58195 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/dao/HrmFormFieldDao.java @@ -0,0 +1,209 @@ +package com.weaver.seconddev.chapanda.hrm.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.hrm.constant.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.weaver.seconddev.chapanda.hrm.util.DatabaseUtils; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class HrmFormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(HrmFormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + + /*** + * 获取eb表的appid和formid + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * 获取Eb表的字段信息 + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + + /** + * 获取下拉框的名称 + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public String queryTableFormIdByTableName(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + String form_id = ""; + try{ + String dataSql =" select form_id from form_table where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + form_id = String.valueOf(recordMap.get("form_id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return form_id; + } + + + public List> queryTableDetailFieldByTableName(String tableName,String detailName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + List> recordList = new ArrayList>(); + try{ + +// String dataSql =" select id,form_id,title,data_key\n" + +// " from form_field\n" + +// " where form_id in( select form_id from form_table where table_name='uf_xxbgcj' and delete_type=0 and tenant_key =?)\n" + +// " and sub_form_id in(select id from sub_form where data_key='uf_jcl_empxxbg_work' and FORM_ID in(select form_id from form_table where table_name='uf_xxbgcj' and delete_type=0 and tenant_key=?) and delete_type=0 and tenant_key =? \n" + +// " )\n" + +// " and delete_type=0\n" + +// " and tenant_key = ?" ; + + String dataSql =" select id,form_id,title,data_key\n" + + " from form_field\n" + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key =?)\n" + + " and sub_form_id in(select id from sub_form where data_key=? and form_id in(select form_id from form_table where table_name=? and delete_type=0 and tenant_key=?) and delete_type=0 and tenant_key =? \n" + + " )\n" + + " and delete_type=0\n" + + " and tenant_key = ?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + paramList.add(detailName); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + }catch (Exception e){ + log.error("e:" + e); + } + return recordList; + } + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmDownloadFilesService.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmDownloadFilesService.java new file mode 100644 index 0000000..3225b93 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmDownloadFilesService.java @@ -0,0 +1,18 @@ +package com.weaver.seconddev.chapanda.hrm.service; + +import com.alibaba.fastjson.JSONArray; +import org.springframework.stereotype.Component; +import java.io.InputStream; + +@Component +public interface HrmDownloadFilesService { + + byte[] convertInputStreamToBytes(InputStream inputStream); + + String convertBase64Data(String base64Data); + + String convertZipFile(JSONArray dataArray, String downloadType); + + + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmTableFieldService.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmTableFieldService.java new file mode 100644 index 0000000..9e0a5b0 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/HrmTableFieldService.java @@ -0,0 +1,12 @@ +package com.weaver.seconddev.chapanda.hrm.service; + +import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + +@Component +public interface HrmTableFieldService { + + List> queryTableDetailFieldByTableName(String tableName,String detailName); + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/impl/HrmDownloadFilesServiceImpl.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/impl/HrmDownloadFilesServiceImpl.java new file mode 100644 index 0000000..6be6202 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/service/impl/HrmDownloadFilesServiceImpl.java @@ -0,0 +1,174 @@ +package com.weaver.seconddev.chapanda.hrm.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.eteams.file.client.file.FileData; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.file.ud.api.FileDownloadService; +import com.weaver.seconddev.chapanda.hrm.constant.Constants; +import com.weaver.seconddev.chapanda.hrm.service.HrmDownloadFilesService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Base64; +import java.util.Date; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/*** + * author:shil + */ + +@Service +public class HrmDownloadFilesServiceImpl implements HrmDownloadFilesService { + + private final static Logger log = LoggerFactory.getLogger(HrmDownloadFilesServiceImpl.class); + + @Autowired + HrmDownloadFilesService hrmDownloadFilesService; + + @Autowired + private FileDownloadService fileDownloadService; + + /*** + * 将InputStream转换为byte[] + * @param inputStream + * @return + */ + public byte[] convertInputStreamToBytes(InputStream inputStream) { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + int bytesRead; + try{ + while ((bytesRead = inputStream.read(buffer)) != -1) { + byteStream.write(buffer, 0, bytesRead); + } + log.error("byteStream:{}",byteStream.toByteArray().length); + }catch (IOException e) { + log.error("e:{}",e.getMessage()); + } + return byteStream.toByteArray(); + } + + /*** + * + * @param base64Data + * @return + */ + @Override + public String convertBase64Data(String base64Data) { + String decodedData = ""; + try{ + Base64.Decoder decoder = Base64.getDecoder(); + // 解码Base64字符串 + byte[] bytesDecoded = decoder.decode(base64Data); + // 将字节数组转换回字符串 + decodedData = new String(bytesDecoded, StandardCharsets.UTF_8); + }catch (Exception e){ + log.error("e:{}",e); + } + return decodedData; + } + + + public String convertZipFile(JSONArray dataArray,String downloadType) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String filename = sdf.format(new Date())+".zip"; + + String directoryPath = Constants.templatePath+ File.separator+downloadType+File.separator+sdf.format(new Date()); + // 将字符串路径转换为Path对象 + Path path = Paths.get(directoryPath); + // 检查目录是否存在 + if (Files.notExists(path)) { + try { + Files.createDirectories(path); + } catch (IOException e) { + log.error("e:{}",e); + } + } + + String zipFilePath = directoryPath+File.separator+filename; + FileOutputStream fos = null; + ZipOutputStream zos = null; + try { + log.error("path:{}",zipFilePath); + fos = new FileOutputStream(zipFilePath); + zos = new ZipOutputStream(fos); + for(int i=0;i> queryTableDetailFieldByTableName(String tableName, String detailName) { + List> dataList = hrmFormFieldDao.queryTableDetailFieldByTableName(tableName,detailName); + return dataList; + } +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/CommonUtils.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/CommonUtils.java new file mode 100644 index 0000000..de1a76a --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/CommonUtils.java @@ -0,0 +1,430 @@ +package com.weaver.seconddev.chapanda.hrm.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + public Long convertStringToLong(String str) { + try { + return Long.valueOf(str); + } catch (NumberFormatException e) { + return 0L; + } + } + + + +} diff --git a/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/DatabaseUtils.java b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/DatabaseUtils.java new file mode 100644 index 0000000..1caa795 --- /dev/null +++ b/茶百道/secondev-chapanda-hrmdev/src/main/java/com/weaver/seconddev/chapanda/hrm/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.hrm.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/cache/BeisenTokenCacheKey.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/cache/BeisenTokenCacheKey.java new file mode 100644 index 0000000..8f882cf --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/cache/BeisenTokenCacheKey.java @@ -0,0 +1,30 @@ +package com.weaver.seconddev.chapanda.beisen.cache; + +import com.weaver.common.cache.base.BaseCache; +import com.weaver.common.cache.base.ModuleCacheInterface; +import com.weaver.common.cache.base.exception.IllegalCacheAccessException; +import com.weaver.seconddev.chapanda.beisen.module.BeisenTokenModuleKey; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 集成缓存类 + * + * @author wangj + * @version 1.00版本 + * @Date 2025-6-3 + */ +@Component +public class BeisenTokenCacheKey implements ModuleCacheInterface { + + @Autowired + private BaseCache baseCache; + + //科大accesstoken + public final static String BEISEN_TOKEN = "BEISEN_TOKEN"; + + @Override + public void register() throws IllegalCacheAccessException, IllegalAccessException { + baseCache.register(BeisenTokenModuleKey.BENSENTOKEN_DATACENTER, this.getClass()); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/constant/Constants.java new file mode 100644 index 0000000..cfc5b06 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/constant/Constants.java @@ -0,0 +1,82 @@ +package com.weaver.seconddev.chapanda.beisen.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; +// public static String SysUserId = "1147262704872284161"; + + public static String app_key = "0F0F2B3F6356464EB59FB651E8DAACBA"; + public static String app_secret = "AF4A2BFC6BB741FD9D80B7F56DA07F08F703AC14B40C453E8DA5BCABAF43A003"; + + public static String tokenUrl = "https://openapi.italent.cn/token"; + + public static String beishenHost = "https://openapi.italent.cn"; + public static String createBlackListUrl = "/TenantBaseExternal/api/v5/BlackList/Create"; + public static String deleteBlackListUrl = "/TenantBaseExternal/api/v5/BlackList/BatchDelete"; + + public static String offerUrl = "/TenantBaseExternal/api/v5/Offer/GetByTimeWindow"; + + public static String activityManagerUrl = "/PerformanceCloudOpen/api/v5/ActivityManager/GetOrgActivityManagers"; + public static String assessmentItemUrl = "/PerformanceCloudOpen/api/v5/AssessmentItem/GetAssessmentItemCount"; + + public static String assessmentUrl = "/PerformanceCloudOpen/api/v5/Assessment/GetAssessmentsByIds"; + + public static String userInfoUrl = "/UserFrameworkApiV3/api/v1/staffs/Get"; + + public static String deppartmentUrl = "/UserFrameworkApiV3/api/v1/departments/Get"; + + public static String jobRequirementUrl = "/RecruitV6/api/v1/Requirement/CreateRequirement"; + + public static String assessmentFormTable = "uf_jxsjtz"; + + public static String assessmentFilterUrl = "/PerformanceCloudOpen/api/v5/Assessment/GetAssessmentsByFilters"; + + public static String beishenAssessHost = "http://api.beisenapp.com"; + + public static String tenantId = "431582"; + public static String queryAssessUrl = "/Assess/"+Constants.tenantId+"/activity/testee/result/email"; + + public static String beisenAccount = "jiekou@test-chabaidao.com"; + + public static String consumerKey = "594581d3d5444778a168bb511deb70f7"; // AppKey + + public static String consumerSecret = "6bdef18164794475ac38233c2af4ba01"; // AppSecret + + public static String accessToken = "ae32056b4f6d45199ab036e817dfd98f"; // Token + + public static String tokenSecret = "2e99b9da11cf4ce591a063457a23d5ed"; // Secret + + public static String oauthSignatureMethod = "HMAC-SHA1"; + + public static String oauthVersion = "1.0"; + + public static String format = "json"; + + public static String nyyqzdm = "extnianlingyaoqiu_431582_2032843164"; + + //职位(新) + public static String zwzd = "extzhiweixin_431582_698711961"; + public static String unRelateRequirementUrl = "/RecruitV6/api/v1/Requirement/OperateRequirementBeforeCheck"; + + public static String positionUrl = "/TenantBaseExternal/api/v5/Position/GetByTimeWindow"; + + public static String beisenPostionTable = "uf_bs_gw"; + + public static String hrmPostionTable = "eteams.ft_1155455711525494797"; + + public static String queryUserIdByEmailUrl = "/TenantBaseExternal/api/v5/Employee/GetUserIDByEmail"; + + public static String queryUserIdByCodeUrl = "/TenantBaseExternal/api/v5/Employee/GetUserIDsByJobNumbers"; + + public static String queryDeptIdByCodeUrl = "/TenantBaseExternal/api/v5/Organization/GetOrganizationInfoByCodes"; + + + public static String query360AssessmentUrl = "/I360API/api/opencustom/getpersonelscoredataapi"; + + public static String assessment360Table = "uf_cpjg"; + + public static String zpssyfzd = "extzhaoxushishiyuefen_431582_1686993167"; + public static String jjcdzdm = "extzhaopinjinjidu_431582_1886847991"; + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/ConversionResignController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/ConversionResignController.java new file mode 100644 index 0000000..8be9e42 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/ConversionResignController.java @@ -0,0 +1,64 @@ +package com.weaver.seconddev.chapanda.beisen.controller; + + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.weaver.seconddev.chapanda.beisen.service.ConversionResignService; +import com.weaver.seconddev.chapanda.beisen.util.CommonUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/*** + * 离职年假转换 POC开发的 + */ +@RestController +@RequestMapping("/api/secondev/cbdhr/annual") +public class ConversionResignController { + + private final Logger log = LoggerFactory.getLogger(ConversionResignController.class); + + @Autowired + ConversionResignService conversionResignService; + + @Autowired + CommonUtils CommonUtils; + + @WeaPermission(publicPermission = true) + @GetMapping("/resignConversion") + public WeaResult resignConversion(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map paraMap = CommonUtils.requestToMap(request); + Map recordMap = conversionResignService.resignConversion(paraMap); + return WeaResult.success(recordMap); + } + + + @WeaPermission(publicPermission = true) + @GetMapping("/resignConversion2") + public WeaResult resignConversion2(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map paraMap = CommonUtils.requestToMap(request); + Map recordMap = conversionResignService.resignConversion2(paraMap); + return WeaResult.success(recordMap); + } + + + + @WeaPermission(publicPermission = true) + @GetMapping("/test") + public WeaResult test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/EmployeePointsController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/EmployeePointsController.java new file mode 100644 index 0000000..8b4fc18 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/controller/EmployeePointsController.java @@ -0,0 +1,201 @@ +package com.weaver.seconddev.chapanda.beisen.controller; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.weaver.seconddev.chapanda.beisen.dao.EmployeePointsDao; +import com.weaver.seconddev.chapanda.beisen.service.ConversionResignService; +import com.weaver.seconddev.chapanda.beisen.util.CommonUtils; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderUtils; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/*** + * + * 积分计算 POC开发的 + */ +@RestController +@RequestMapping("/api/secondev/cbdhr/points") +public class EmployeePointsController { + + private final Logger log = LoggerFactory.getLogger(EmployeePointsController.class); + + @Autowired + ConversionResignService conversionResignService; + + @Autowired + CommonUtils CommonUtils; + + @Autowired + EmployeePointsDao employeePointsDao; + + @Autowired + EbuilderUtils ebuilderUtils; + + @WeaPermission(publicPermission = true) + @GetMapping("/getpoints") + public WeaResult resignConversion(HttpServletRequest request, HttpServletResponse response) throws IOException { + + List> recordList = new ArrayList>(); + try{ + List> interviewerList = employeePointsDao.queryInterviewerList(); + Map recordMap = new HashMap(); + log.error("interviewerList:"+interviewerList.size()); + recordMap.put("interviewerList",interviewerList.size()); + recordList.add(recordMap); + + for(int i=0;i(); + + /** + * 招聘阶段 + */ + String stage_id = String.valueOf(interviewerList.get(i).get("stage_id")); + /** + * 人才ID + */ + String talent_id = String.valueOf(interviewerList.get(i).get("talent_id")); + /*** + * 推荐人ID + */ + String referrer_id = String.valueOf(interviewerList.get(i).get("referrer_id")); + + + log.error("stage_id:"+stage_id); + log.error("talent_id:"+talent_id); + log.error("referrer_id:"+referrer_id); + + recordMap.put("stage_id",stage_id); + recordMap.put("talent_id",talent_id); + recordMap.put("referrer_id",referrer_id); + + int points = 0; + + /*** + * 出试 + */ + if("937153853968544649".equals(stage_id)){ + points = 100; + + }else if("937153853968544650".equals(stage_id)){ + /*** + * 部门筛选 + */ + points = 200; + }else if("937153853968544653".equals(stage_id)){ + /*** + * 待入职 + */ + points = 500; + } + log.error("points:{}",points); + + recordMap.put("points",points); + + if(points > 0){ + Map pointsMap = employeePointsDao.queryPointsByEmployeeId(referrer_id); + /*** + * 积分主表id + */ + String mainid = String.valueOf(pointsMap.get("id")); + if("null".equals(mainid) || mainid == null){ + mainid = ""; + } + /** + * 积分主表form_data_id + */ + String pointsFormDataId= String.valueOf(pointsMap.get("form_data_id")); + if("null".equals(pointsFormDataId) || pointsFormDataId == null){ + pointsFormDataId = ""; + } + + log.error("mainid:{}",mainid); + log.error("pointsFormDataId:{}",pointsFormDataId); + + recordMap.put("mainid",mainid); + recordMap.put("pointsFormDataId",pointsFormDataId); + + EBDataChangeResult ebDataChangeResult = null; + if(StringUtils.isNotBlank(mainid)){ + + recordMap.put("num","1"); + String detailId = employeePointsDao.queryPointsDeatilByEmployeeId(talent_id,pointsFormDataId); + log.error("detailId:{}",detailId); + + recordMap.put("detailId",detailId); + if(StringUtils.isNotBlank(detailId)){ + recordMap.put("num","2"); + employeePointsDao.updatePointsDeatilByFormDataId(talent_id,pointsFormDataId,points); + employeePointsDao.updatePointsTotalByFormDataId(pointsFormDataId); + + }else{ + recordMap.put("num","3"); + ebDataChangeResult = ebuilderUtils.bacthAppendEbDetail(talent_id,points,pointsFormDataId); + boolean status = false; + String message = ""; + if(ebDataChangeResult != null){ + status = ebDataChangeResult.getStatus() ; + message = ebDataChangeResult.getMessage(); + } + log.error("message:{}",message); + if(status){ + employeePointsDao.updatePointsTotalByFormDataId(pointsFormDataId); + } + recordMap.put("status",status); + recordMap.put("message",message); + } + }else{ + recordMap.put("num","4"); + ebDataChangeResult = ebuilderUtils.bacthInsertDbForm(referrer_id,points,talent_id); + boolean status = false; + String message = ""; + if(ebDataChangeResult != null){ + status = ebDataChangeResult.getStatus() ; + message = ebDataChangeResult.getMessage(); + } + log.error("message:{}",message); + log.error("status:{}",status); + + recordMap.put("status",status); + recordMap.put("message",message); + + } + }else{ + recordMap.put("message","积分为空"); + } + recordList.add(recordMap); + } + + }catch (Exception e){ + Map recordMap = new HashMap(); + recordMap.put("message",e.getMessage()); + recordList.add(recordMap); + } + return WeaResult.success(recordList); + } + + + @WeaPermission(publicPermission = true) + @GetMapping("/test") + public WeaResult test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/ConversionResignDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/ConversionResignDao.java new file mode 100644 index 0000000..e4006ff --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/ConversionResignDao.java @@ -0,0 +1,103 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import java.util.*; + + +/*** + * 离职年假转换 POC开发的 + */ +@Component +public class ConversionResignDao { + + private final static Logger log = LoggerFactory.getLogger(ConversionResignDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + + /*** + * + * @return + */ + public String queryEmployeeById(String employeeId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String hiredate = ""; + try{ + String dataSql =" select hiredate " + + " from eteams.employee " + + " where id = '"+employeeId+"' \n" + + " and delete_type = 0 \n" + + " and tenant_key = '"+Constants.TENANT_KEY+"' " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + hiredate = String.valueOf(recordMap.get("hiredate")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return hiredate; + } + + + /*** + * + * @param employeeid + * @param lznf + * @return + */ + public Double queryEmployeeAnnualLeave(String employeeid,String lznf){ + String groupId = "weaver-salary-report"; + String sourceType = "LOGIC"; + Double annualBase = 0.0; + try{ + String dataSql =" select base " + + " from attend_vacation_info_v2 " + + " where employee = ? \n" + + " and year = ? " + + " and tenant_key= ?\n" + + " and DELETE_TYPE = 0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + + paramList.add(employeeid); + paramList.add(lznf); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + String base = String.valueOf(recordMap.get("base")); + if(StringUtils.isNotBlank(base)){ + annualBase = Double.valueOf(base); + } + } + }catch (Exception e){ + e.printStackTrace(); + annualBase = 0.0 ; + log.error("e:" + e); + } + return annualBase; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/EmployeePointsDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/EmployeePointsDao.java new file mode 100644 index 0000000..8e2d4c5 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/EmployeePointsDao.java @@ -0,0 +1,239 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/*** + * + * 积分计算 POC开发的 + */ +@Component +public class EmployeePointsDao { + + private final static Logger log = LoggerFactory.getLogger(EmployeePointsDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + public Map queryPointsByEmployeeId(String employeeId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map recordMap = new HashMap(); + + try{ + String dataSql =" select id,form_data_id " + + " from uf_jfgl " + + " where ry = ? \n" + + " and delete_type=0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:{}" , e); + } + return recordMap; + } + + /*** + * + * @return + */ + public List> queryInterviewerList(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(100); + try{ +// String dataSql =" select id,referrer_id,recruit_status " + +// " from uf_rcrt_talent " + +// " where referrer_id is not null \n" + +// " and delete_type=0 \n" + +// " and tenant_key = ? " ; + + String dataSql =" select t.id,\n" + + " t.talent_id,\n" + + " t.stage_id,\n" + + " t.candidate_id,\n" + + " k.referrer_id\n" + + " from uf_rcrt_candidate_stage t \n" + + " inner join uf_rcrt_candidate_batch p on p.id = t.candidate_id\n" + + " left join uf_rcrt_talent k on k.id = t.talent_id\n" + + " where t.arrive_status =1\n" + + " and p.archive_status = '840811264954613765' " + + " and t.delete_type=0 \n" + + " and t.tenant_key = '"+Constants.TENANT_KEY+"' " + + " and k.delete_type=0 \n" + + " and k.tenant_key = '"+Constants.TENANT_KEY+"' " + + " and p.delete_type=0 \n" + + " and p.tenant_key = '"+Constants.TENANT_KEY+"' " + + " " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList(100); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}" ,recordList.size()); + }catch (Exception e){ + e.printStackTrace(); + log.error("e:{}" , e); + } + return recordList; + } + + + public String queryPointsDeatilByEmployeeId(String rcid,String form_data_id){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String detailId = ""; + try{ + String dataSql =" select id,form_data_id " + + " from uf_jfgl_mxb1 " + + " where rcxx = ? " + + " and form_data_id = ? \n" + + " and delete_type=0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(rcid); + paramList.add(form_data_id); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + detailId = String.valueOf(recordMap.get("id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:{}" , e); + } + return detailId; + } + + + public Map updatePointsDeatilByFormDataId(String rcid,String form_data_id,int jf){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update uf_jfgl_mxb1 set hqjf = " + jf + + " where rcxx = ? and form_data_id = ? \n" + + " and delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(rcid); + paramList.add(form_data_id); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return result; + } + + public Map updatePointsTotalByFormDataId(String form_data_id){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update uf_jfgl set jf = (select ifnull(sum(hqjf),0) as hqjf from uf_jfgl_mxb1 where form_data_id= ? and delete_type = 0 and tenant_key = ? ) " + + " where form_data_id = ? \n" + + " and delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(form_data_id); + paramList.add(Constants.TENANT_KEY); + paramList.add(form_data_id); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return result; + } + + + /*** + * + * @param employeeid + * @param lznf + * @return + */ + public Double queryEmployeeAnnualLeave(String employeeid,String lznf){ + String groupId = "weaver-salary-report"; + String sourceType = "LOGIC"; + Double annualBase = 0.0; + try{ + String dataSql =" select base " + + " from attend_vacation_info_v2 " + + " where employee = ? \n" + + " and year = ? " + + " and tenant_key= ?\n" + + " and DELETE_TYPE = 0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + + paramList.add(employeeid); + paramList.add(lznf); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + String base = String.valueOf(recordMap.get("base")); + if(StringUtils.isNotBlank(base)){ + annualBase = Double.valueOf(base); + } + } + }catch (Exception e){ + e.printStackTrace(); + annualBase = 0.0 ; + log.error("e:" + e); + } + return annualBase; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessment360Dao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessment360Dao.java new file mode 100644 index 0000000..de7a195 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessment360Dao.java @@ -0,0 +1,123 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/*** + * 360测评 + * + */ +@Component +public class HrmAssessment360Dao { + + private final static Logger log = LoggerFactory.getLogger(HrmAssessment360Dao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * 判断360测评数据在Eb表是否存在 + * @return + */ + public String getAssessment360Data(String gh,String hdid,String wjid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String id = ""; + try{ + String dataSql =" select id from " +Constants.assessment360Table + + " where gh = ? " + + " and hdid = ? " + + " and wjid = ? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(gh); + paramList.add(hdid); + paramList.add(wjid); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + id = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return id; + } + + + /** + * 根据工号获取人员ID + * @param jobNum + * @return + */ + public String queryEmployeeJobNumData(String jobNum){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String employeeId = ""; + try{ + String dataSql =" select id from eteams.employee where job_num = ? and tenant_key=? and delete_type = 0" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(jobNum); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size() > 0){ + employeeId = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return employeeId; + } + + + public List> queryEmployeeEmail(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + + List> recordList = new ArrayList>(); + try{ + + String dataSql =" select id,email from eteams.employee \n" + + " where tenant_key=? \n" + + " and delete_type=0 " ; + + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + }catch (Exception e){ + log.error("e:{}" ,e); + } + return recordList; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessmentNewDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessmentNewDao.java new file mode 100644 index 0000000..df2dc13 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmAssessmentNewDao.java @@ -0,0 +1,260 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class HrmAssessmentNewDao { + + private final static Logger log = LoggerFactory.getLogger(HrmAssessmentNewDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @return + */ + public String getAssessmentData(String khnf,String khzq,String jxhdid,String bkhr){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String id = ""; + try{ + String dataSql =" select id from uf_jxsjtz " + + " where khnf = ? " + + " and khzq = ? " + + " and jxhdid = ? " + + " and bkhr = ? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(khnf); + paramList.add(khzq); + paramList.add(jxhdid); + paramList.add(bkhr); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + id = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return id; + } + + /*** + * + * @param tableName + * @return + */ + public String queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + String form_id = ""; + try{ + String dataSql =" select form_id from form_table where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + form_id = String.valueOf(recordMap.get("form_id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return form_id; + } + + + /** + * + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + + String dataSql =" select id,form_id,title,data_key " + + " from eteams.form_field " + + " where form_id in( select form_id from eteams.form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + + + public String queryEmailByEmployeeId(String employeeId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String gryx = ""; + try{ + + String dataSql =" select k.gryx from eteams.employee t\n" + + " inner join eteams.ft_1152026012537184302 k on k.id = t.formdata\n" + + " where t.id=? " + + " and t.tenant_key=? \n" + + " and t.delete_type=0" + + " and k.tenant_key=? \n" + + " and k.delete_type=0"; + + log.error("queryEmailByEmployeeId--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryEmailByEmployeeId:"+recordList.size()); + if(recordList.size() > 0){ + gryx = String.valueOf(recordList.get(0).get("gryx")); + } + }catch (Exception e){ + log.error("queryEmailByEmployeeId:e:" + e); + } + return gryx; + } + + + public Map queryDepartmentData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + String dataSql =" select code,id from eteams.department where status = 1 " + + " and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String code = String.valueOf(recordMap.get("code")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(code,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } + + + + + + public Map queryEmployeeAssessmentOtherInfo(String employeeid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map employeeMap = new HashMap(); + try{ + + String dataSql =" select hiredate as rzrq,zhgzr as lzrq,zzrq,personnel_status as ryzt,subcompany as gs,yjbm as bm1,ejbm as bm2,sanjbm as bm3,sijbm as bm4,rylb,location as gzdd" + + " from uf_jcl_employee_information \n" + + " where id = ? " + + " and tenant_key = ? \n" + + " and delete_type = 0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeid); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size() > 0){ + employeeMap = recordList.get(0); + } + }catch (Exception e){ + log.error("e:{}", e); + } + return employeeMap; + } + + + public List> queryEmployeeEmail(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + + List> recordList = new ArrayList>(); + try{ + + String dataSql =" select id,email from eteams.employee \n" + + " where tenant_key=? \n" + + " and delete_type=0 " ; + + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + }catch (Exception e){ + log.error("e:{}" ,e); + } + return recordList; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmBeisenPositionDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmBeisenPositionDao.java new file mode 100644 index 0000000..0d89c6a --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmBeisenPositionDao.java @@ -0,0 +1,94 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 北森岗位数据同步 + * + */ +@Component +public class HrmBeisenPositionDao { + + private final static Logger log = LoggerFactory.getLogger(HrmBeisenPositionDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * 根据北森岗位id获取ebid + * @return + */ + public String getPositionIdByGwId(String gwid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String id = ""; + try{ + String dataSql =" select id from " +Constants.beisenPostionTable + + " where bs_gwid = ? " + + " and tenant_key = ? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(gwid); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + id = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return id; + } + +/** + * 更新岗位信息 + * @param code + * @param objectId + * @param oIdOrganization + * @return + */ + public Map updateHrmPositionByBensen(String code,String objectId,String oIdOrganization){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update " +Constants.hrmPostionTable + " set oid=?,odeptid=? "+ + " where code = ? " + + " and tenant_key = ? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(objectId); + paramList.add(oIdOrganization); + paramList.add(code); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + result = databaseUtils.executeForUpdate(sourceType, groupId, dataSql, sqlParamList); + + }catch (Exception e){ + log.error("e:{}" , e); + } + return result; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmDepartmentDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmDepartmentDao.java new file mode 100644 index 0000000..e75895c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmDepartmentDao.java @@ -0,0 +1,148 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class HrmDepartmentDao { + + private final static Logger log = LoggerFactory.getLogger(HrmDepartmentDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @param deptId + * @return + */ + public String getDepartmentCodeById(String deptId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String code = ""; + try{ + String dataSql =" select code from eteams.department where id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(deptId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("getDepartmentCodeById:"+recordList.size()); + if(recordList.size()>0){ + code = String.valueOf(recordList.get(0).get("code")); + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return code; + } + + +// +// +// public String queryEmailByEmployeeId(String employeeId){ +// String groupId = "weaver-ebuilder-form-service"; +// String sourceType = "LOGIC"; +// String gryx = ""; +// try{ +// +// String dataSql =" select k.gryx from eteams.employee t\n" + +// " inner join eteams.ft_1152026012537184302 k on k.id = t.formdata\n" + +// " where t.id=? " + +// " and t.tenant_key=? \n" + +// " and t.delete_type=0" + +// " and k.tenant_key=? \n" + +// " and k.delete_type=0"; +// +// log.error("queryEmailByEmployeeId--dataSql:" + dataSql); +// List paramList = new ArrayList<>(100); +// paramList.add(employeeId); +// paramList.add(Constants.TENANT_KEY); +// paramList.add(Constants.TENANT_KEY); +// +// List sqlParamList = databaseUtils.querySqlParamEntity(paramList); +// Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); +// List> recordList = databaseUtils.getDataSourceList(result); +// log.error("queryEmailByEmployeeId:"+recordList.size()); +// if(recordList.size() > 0){ +// gryx = String.valueOf(recordList.get(0).get("gryx")); +// } +// }catch (Exception e){ +// log.error("queryEmailByEmployeeId:e:" + e); +// } +// return gryx; +// } + + + public Map queryDepartmentData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + String dataSql =" select code,id from eteams.department where status = 1 " + + " and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String code = String.valueOf(recordMap.get("code")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(code,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } + + + public Map queryEmployeeData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + + try{ + String dataSql =" select job_num,id from eteams.employee where tenant_key=? and delete_type = 0" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String job_num = String.valueOf(recordMap.get("job_num")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(job_num,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmEmployeeDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmEmployeeDao.java new file mode 100644 index 0000000..1c86061 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmEmployeeDao.java @@ -0,0 +1,86 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class HrmEmployeeDao { + + private final static Logger log = LoggerFactory.getLogger(HrmEmployeeDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + public String queryPersonalEmailByEmployeeId(String employeeId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String gryx = ""; + try{ + + String dataSql =" select k.gryx from eteams.employee t\n" + + " inner join eteams.ft_1152026012537184302 k on k.id = t.formdata\n" + + " where t.id=? " + + " and t.tenant_key=? \n" + + " and t.delete_type=0" + + " and k.tenant_key=? \n" + + " and k.delete_type=0"; + + log.error("queryEmailByEmployeeId--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryEmailByEmployeeId:"+recordList.size()); + if(recordList.size() > 0){ + gryx = String.valueOf(recordList.get(0).get("gryx")); + } + }catch (Exception e){ + log.error("queryEmailByEmployeeId:e:" + e); + } + return gryx; + } + + + public Map queryEmployeeData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + + try{ + String dataSql =" select job_num,id from eteams.employee where tenant_key=? and delete_type = 0" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String job_num = String.valueOf(recordMap.get("job_num")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(job_num,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmFormFieldDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmFormFieldDao.java new file mode 100644 index 0000000..7afcad4 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmFormFieldDao.java @@ -0,0 +1,174 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.dmp.constant.Constants; +import com.weaver.seconddev.chapanda.dmp.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class HrmFormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(HrmFormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + + /*** + * 获取eb表的appid和formid + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * 获取Eb表的字段信息 + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + + /** + * 获取下拉框的名称 + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public String queryTableFormIdByTableName(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + String form_id = ""; + try{ + String dataSql =" select form_id from form_table where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(com.weaver.seconddev.chapanda.beisen.constant.Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + form_id = String.valueOf(recordMap.get("form_id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return form_id; + } + + + + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmPerformanceDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmPerformanceDao.java new file mode 100644 index 0000000..a4f5681 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/dao/HrmPerformanceDao.java @@ -0,0 +1,95 @@ +package com.weaver.seconddev.chapanda.beisen.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class HrmPerformanceDao { + + private final static Logger log = LoggerFactory.getLogger(HrmPerformanceDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @return + */ + public String getAssessmentData(String khnf,String khzq,String jxhdid,String bkhr){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String id = ""; + try{ + String dataSql =" select id from uf_jxsjtz " + + " where khnf = ? " + + " and khzq = ? " + + " and jxhdid = ? " + + " and bkhr = ? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(khnf); + paramList.add(khzq); + paramList.add(jxhdid); + paramList.add(bkhr); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size()>0){ + id = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return id; + } + + public Map queryEmployeeAssessmentOtherInfo(String employeeid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map employeeMap = new HashMap(); + try{ + + String dataSql =" select hiredate as rzrq,zhgzr as lzrq,zzrq,personnel_status as ryzt,subcompany as gs,yjbm as bm1,ejbm as bm2,sanjbm as bm3,sijbm as bm4,rylb,location as gzdd" + + " from uf_jcl_employee_information \n" + + " where glzzyg = ? " + + " and tenant_key = ? \n" + + " and delete_type = 0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeid); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size() > 0){ + employeeMap = recordList.get(0); + } + }catch (Exception e){ + log.error("e:{}", e); + } + return employeeMap; + } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenDepartmentDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenDepartmentDto.java new file mode 100644 index 0000000..bcb3372 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenDepartmentDto.java @@ -0,0 +1,86 @@ +package com.weaver.seconddev.chapanda.beisen.entity; + + +public class BeisenDepartmentDto { + int orgId; + String name; + String code; + String abbreviation; + String parentOriginalId; + String originalId; + String status; + String isDelete; + String orderId; + + public int getOrgId() { + return orgId; + } + + public void setOrgId(int orgId) { + this.orgId = orgId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getAbbreviation() { + return abbreviation; + } + + public void setAbbreviation(String abbreviation) { + this.abbreviation = abbreviation; + } + + public String getParentOriginalId() { + return parentOriginalId; + } + + public void setParentOriginalId(String parentOriginalId) { + this.parentOriginalId = parentOriginalId; + } + + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(String originalId) { + this.originalId = originalId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenHireRequestDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenHireRequestDto.java new file mode 100644 index 0000000..f2ba025 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenHireRequestDto.java @@ -0,0 +1,16 @@ +package com.weaver.seconddev.chapanda.beisen.entity; + + +public class BeisenHireRequestDto { + int requirementStatus; + int requirementType; + String name; + int createBy; + String createDate; + String arivalTime; + String dutyUserEmail; + String createByEmail; + int departmentId; + int requirementCount; + int salaryType; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDepartmentDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDepartmentDto.java new file mode 100644 index 0000000..adb68dd --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDepartmentDto.java @@ -0,0 +1,90 @@ +package com.weaver.seconddev.chapanda.beisen.entity; + + +public class BeisenStaffDepartmentDto { + String id; + String name; + String code; + String abbreviation; + String parentId; + String level; + String status; + String originalId; + String isDelete; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getAbbreviation() { + return abbreviation; + } + + public void setAbbreviation(String abbreviation) { + this.abbreviation = abbreviation; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(String originalId) { + this.originalId = originalId; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDto.java new file mode 100644 index 0000000..63a52af --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffDto.java @@ -0,0 +1,286 @@ +package com.weaver.seconddev.chapanda.beisen.entity; + + +public class BeisenStaffDto { + String departmentId; + String departmentName; + String employedDate; + String jobCode; + String positionName; + String lineManagerId; + String staffCode; + String staffStatus; + String isDelete; + int userId; + String tenantId; + String email; + String userType; + String userStatus; + String origin; + String originalId; + String name; + String englishName; + String sex; + + String birthday; + String mobile; + String idCardType; + String idCardNumber; + String graduateDate; + String nativePlace; + String beganWorkDate; + String graduateFrom; + String major; + String positionCategory; + BeisenStaffDepartmentDto beisenStaffDepartmentDto; + BeisenStaffPositionDto beisenStaffPositionDto; + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getDepartmentName() { + return departmentName; + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public String getEmployedDate() { + return employedDate; + } + + public void setEmployedDate(String employedDate) { + this.employedDate = employedDate; + } + + public String getJobCode() { + return jobCode; + } + + public void setJobCode(String jobCode) { + this.jobCode = jobCode; + } + + public String getPositionName() { + return positionName; + } + + public void setPositionName(String positionName) { + this.positionName = positionName; + } + + public String getLineManagerId() { + return lineManagerId; + } + + public void setLineManagerId(String lineManagerId) { + this.lineManagerId = lineManagerId; + } + + public String getStaffCode() { + return staffCode; + } + + public void setStaffCode(String staffCode) { + this.staffCode = staffCode; + } + + public String getStaffStatus() { + return staffStatus; + } + + public void setStaffStatus(String staffStatus) { + this.staffStatus = staffStatus; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + + public String getUserStatus() { + return userStatus; + } + + public void setUserStatus(String userStatus) { + this.userStatus = userStatus; + } + + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(String originalId) { + this.originalId = originalId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEnglishName() { + return englishName; + } + + public void setEnglishName(String englishName) { + this.englishName = englishName; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getIdCardType() { + return idCardType; + } + + public void setIdCardType(String idCardType) { + this.idCardType = idCardType; + } + + public String getIdCardNumber() { + return idCardNumber; + } + + public void setIdCardNumber(String idCardNumber) { + this.idCardNumber = idCardNumber; + } + + public String getGraduateDate() { + return graduateDate; + } + + public void setGraduateDate(String graduateDate) { + this.graduateDate = graduateDate; + } + + public String getNativePlace() { + return nativePlace; + } + + public void setNativePlace(String nativePlace) { + this.nativePlace = nativePlace; + } + + public String getBeganWorkDate() { + return beganWorkDate; + } + + public void setBeganWorkDate(String beganWorkDate) { + this.beganWorkDate = beganWorkDate; + } + + public String getGraduateFrom() { + return graduateFrom; + } + + public void setGraduateFrom(String graduateFrom) { + this.graduateFrom = graduateFrom; + } + + public String getMajor() { + return major; + } + + public void setMajor(String major) { + this.major = major; + } + + public String getPositionCategory() { + return positionCategory; + } + + public void setPositionCategory(String positionCategory) { + this.positionCategory = positionCategory; + } + + public BeisenStaffDepartmentDto getBeisenStaffDepartmentDto() { + return beisenStaffDepartmentDto; + } + + public void setBeisenStaffDepartmentDto(BeisenStaffDepartmentDto beisenStaffDepartmentDto) { + this.beisenStaffDepartmentDto = beisenStaffDepartmentDto; + } + + public BeisenStaffPositionDto getBeisenStaffPositionDto() { + return beisenStaffPositionDto; + } + + public void setBeisenStaffPositionDto(BeisenStaffPositionDto beisenStaffPositionDto) { + this.beisenStaffPositionDto = beisenStaffPositionDto; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffPositionDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffPositionDto.java new file mode 100644 index 0000000..57c97a6 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/entity/BeisenStaffPositionDto.java @@ -0,0 +1,50 @@ +package com.weaver.seconddev.chapanda.beisen.entity; + + +public class BeisenStaffPositionDto { + String id; + String name; + String code; + String status; + String isDelete; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessCronJob.java new file mode 100644 index 0000000..b30ba00 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessCronJob.java @@ -0,0 +1,34 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeisenAssessUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2BeisenAssessCronJob") +public class Esb2BeisenAssessCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenAssessCronJob.class); + + @Autowired + Esb2BeisenAssessUtil esb2BeisenAssessUtil; + + @Override + public WeaResult> execute(Map params) { + + String emails = String.valueOf(params.get("emails")); + log.error("emails:{}",emails); + esb2BeisenAssessUtil.queryAssessData(emails); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + return WeaResult.success(actionMap); + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360Action.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360Action.java new file mode 100644 index 0000000..5c2a842 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360Action.java @@ -0,0 +1,154 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmFormFieldDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmAssessment360Dao; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeiSenAssessment360Util; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2BeisenAssessment360Action") +public class Esb2BeisenAssessment360Action implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenAssessment360Action.class); + + @Autowired + HrmFormFieldDao hrmFormFieldDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + Esb2BeiSenAssessment360Util esb2BeiSenAssessment360Util; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + HrmAssessment360Dao hrmAssessment360Dao; + + @Override + public WeaResult> execute(Map params) { + + List ebList = new ArrayList(); + + List fieldList = new ArrayList(); + fieldList.add("ryid"); + fieldList.add("gsyx"); + fieldList.add("gh"); + fieldList.add("hdid"); + fieldList.add("hdmc"); + fieldList.add("wjid"); + fieldList.add("wjmc"); + fieldList.add("zzjg"); + fieldList.add("cjsj"); + fieldList.add("wcsj"); + + log.error("Esb2BeisenAssessment360Action"); + + String employeeid = String.valueOf(params.get("employeeid")); + log.error("employeeid:{}",employeeid); + if(StringUtils.isNotBlank(employeeid)){ + Long employeeId = Long.valueOf(employeeid); + log.error("employeeId:{}",employeeId); + SimpleEmployee createByEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + String email = createByEmployee.getEmail(); + log.error("email:{}",email); + JSONArray assessmentArray = esb2BeiSenAssessment360Util.convertAssessmentData(email); + log.error("assessmentArray:{}",assessmentArray.size()); + + Map fieldMap = hrmFormFieldDao.queryFromTableField(Constants.assessment360Table,fieldList); + log.error("fieldMap:{}",fieldMap.size()); + + List addDatas = new ArrayList(); + for(int i=0;i mainData = new ArrayList(); + for(int n=0;n recordMap = hrmFormFieldDao.queryTableFormId(Constants.assessment360Table); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertDbForm(addDatas,formId,appId); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + actionMap.put("ebList",ebList.size()); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360FullCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360FullCronJob.java new file mode 100644 index 0000000..074359b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenAssessment360FullCronJob.java @@ -0,0 +1,47 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.dao.HrmFormFieldDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmBeisenPositionDao; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeiSenAssessment360Util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2BeisenAssessment360FullCronJob") +public class Esb2BeisenAssessment360FullCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenAssessment360FullCronJob.class); + + @Autowired + HrmFormFieldDao hrmFormFieldDao; + + @Autowired + HrmBeisenPositionDao hrmBeisenPositionDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + Esb2BeiSenAssessment360Util esb2BeiSenAssessment360Util; + @Override + public WeaResult> execute(Map params) { + + JSONArray assessmentArray = new JSONArray(); + + esb2BeiSenAssessment360Util.queryAssessment360Data(); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + return WeaResult.success(actionMap); + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenCityDataAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenCityDataAction.java new file mode 100644 index 0000000..e2c268d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenCityDataAction.java @@ -0,0 +1,194 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.util.DatabaseUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2BeisenCityDataAction") +public class Esb2BeisenCityDataAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenCityDataAction.class); + + @Autowired + DatabaseUtils databaseUtils; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2BeisenCityDataAction start"); + JSONArray totalArray = new JSONArray(); + + StringBuilder data = new StringBuilder(); + data.append("[[\"1\",\"全国\"],[\"2\",\"国外\",[[\"201\",\"阿根廷\"],[\"202\",\"澳大利亚\"],[\"203\",\"奥地利\"],[\"204\",\"白俄罗斯\"],[\"205\",\"比利时\"],[\"206\",\"巴西\"],[\"207\",\"保加利亚\"],[\"208\",\"加拿大\"],[\"209\",\"塞浦路斯\"],[\"210\",\"捷克\"],[\"211\",\"丹麦\"],[\"212\",\"埃及\"],[\"213\",\"芬兰\"],[\"214\",\"法国\"],[\"215\",\"德国\"],[\"216\",\"希腊\"],[\"217\",\"匈牙利\"],[\"218\",\"冰岛\"],[\"219\",\"印度\"],[\"220\",\"印度尼西亚\"],[\"221\",\"爱尔兰\"],[\"222\",\"以色列\"],[\"223\",\"意大利\"],[\"224\",\"日本\"],[\"225\",\"韩国\"],[\"226\",\"科威特\"],[\"227\",\"马来西亚\"],[\"228\",\"荷兰\"],[\"229\",\"新西兰\"],[\"230\",\"挪威\"],[\"231\",\"巴基斯坦\"],[\"232\",\"波兰\"],[\"233\",\"葡萄牙\"],[\"234\",\"俄罗斯联邦\"],[\"235\",\"沙特阿拉伯\"],[\"236\",\"新加坡\"],[\"237\",\"南非\"],[\"238\",\"西班牙\"],[\"239\",\"瑞典\"],[\"240\",\"瑞士\"],[\"241\",\"泰国\"],[\"242\",\"土耳其\"],[\"243\",\"乌克兰\"],[\"244\",\"阿联酋\"],[\"245\",\"英国\"],[\"246\",\"美国\"],[\"247\",\"越南\"],[\"248\",\"安哥拉\"],[\"249\",\"加纳\"],[\"250\",\"尼日利亚\"],[\"251\",\"坦桑尼亚\"],[\"252\",\"乌干达\"],[\"253\",\"阿尔及利亚\"],[\"254\",\"塞内加尔\"],[\"255\",\"阿尔巴尼亚\",[[\"25501\",\"爱尔巴桑\"],[\"25502\",\"迪勃拉\"],[\"25504\",\"都拉斯\"],[\"25506\",\"费里\"],[\"25507\",\"吉诺卡斯特\"],[\"25511\",\"培拉特\"],[\"246181174\",\"地拉那州\",[[\"25503\",\"地拉那\"]]],[\"246181175\",\"发罗拉州\",[[\"25505\",\"发罗拉\"]]],[\"246181176\",\"科尔察州\",[[\"25508\",\"科尔察\"]]],[\"246181177\",\"库克斯州\",[[\"25509\",\"库克斯\"]]],[\"246181178\",\"莱什州\",[[\"25510\",\"莱什\"]]],[\"246181179\",\"斯库台州\",[[\"25512\",\"斯库台\"]]]]],[\"246180220\",\"黑山\"]]],[\"1100\",\"北京市\",[[\"1199\",\"亦庄开发区\"],[\"1101\",\"东城区\"],[\"1102\",\"西城区\"],[\"1103\",\"海淀区\"],[\"1104\",\"朝阳区\"],[\"1105\",\"丰台区\"],[\"1106\",\"石景山区\"],[\"1107\",\"通州区\"],[\"1108\",\"顺义区\"],[\"1109\",\"房山区\"],[\"1110\",\"大兴区\"],[\"1111\",\"昌平区\"],[\"1112\",\"怀柔区\"],[\"1113\",\"平谷区\"],[\"1114\",\"门头沟区\"],[\"1115\",\"密云区\"],[\"1116\",\"延庆区\"]]],[\"1200\",\"天津市\",[[\"1201\",\"和平区\"],[\"1202\",\"河东区\"],[\"1203\",\"河西区\"],[\"1204\",\"南开区\"],[\"1205\",\"河北区\"],[\"1206\",\"红桥区\"],[\"1207\",\"滨海新区\"],[\"1208\",\"东丽区\"],[\"1209\",\"西青区\"],[\"1210\",\"津南区\"],[\"1211\",\"北辰区\"],[\"1212\",\"武清区\"],[\"1213\",\"宝坻区\"],[\"1214\",\"静海区\"],[\"1215\",\"宁河区\"],[\"1216\",\"蓟州区\"]]],[\"1300\",\"河北省\",[[\"1301\",\"石家庄市\",[[\"130101\",\"长安区\"],[\"130103\",\"桥西区\"],[\"130104\",\"新华区\"],[\"130105\",\"裕华区\"],[\"130106\",\"东开发区\"],[\"130107\",\"井陉矿区\"],[\"130108\",\"辛集市\"],[\"130109\",\"藁城区\"],[\"130110\",\"晋州市\"],[\"130111\",\"新乐市\"],[\"130112\",\"鹿泉区\"],[\"130113\",\"正定县\"],[\"130114\",\"平山县\"],[\"130115\",\"元氏县\"],[\"130116\",\"栾城区\"],[\"130117\",\"行唐县\"],[\"130118\",\"灵寿县\"],[\"130119\",\"深泽县\"],[\"130120\",\"无极县\"],[\"130121\",\"赵县\"],[\"130122\",\"高邑县\"],[\"130123\",\"赞皇县\"],[\"130124\",\"井陉县\"]]],[\"1302\",\"唐山市\",[[\"130201\",\"遵化市\"],[\"130202\",\"路南区\"],[\"130203\",\"路北区\"],[\"130204\",\"古冶区\"],[\"130205\",\"开平区\"],[\"130206\",\"丰南区\"],[\"130207\",\"丰润区\"],[\"130208\",\"曹妃甸区\"],[\"130209\",\"滦州市\"],[\"130210\",\"滦南县\"],[\"130211\",\"乐亭县\"],[\"130212\",\"迁西县\"],[\"130213\",\"玉田县\"],[\"130214\",\"迁安市\"]]],[\"1303\",\"秦皇岛市\",[[\"130301\",\"海港区\"],[\"130302\",\"山海关区\"],[\"130303\",\"北戴河区\"],[\"130304\",\"青龙满族自治县\"],[\"130305\",\"昌黎县\"],[\"130306\",\"抚宁区\"],[\"130307\",\"卢龙县\"],[\"130399\",\"北戴河新区\"]]],[\"1304\",\"邯郸市\",[[\"130401\",\"邯山区\"],[\"130402\",\"丛台区\"],[\"130403\",\"复兴区\"],[\"130404\",\"峰峰矿区\"],[\"130406\",\"临漳县\"],[\"130407\",\"成安县\"],[\"130408\",\"大名县\"],[\"130409\",\"涉县\"],[\"130410\",\"磁县\"],[\"130411\",\"肥乡区\"],[\"130412\",\"永年区\"],[\"130413\",\"邱县\"],[\"130414\",\"鸡泽县\"],[\"130415\",\"广平县\"],[\"130416\",\"馆陶县\"],[\"130417\",\"魏县\"],[\"130418\",\"曲周县\"],[\"130419\",\"武安市\"],[\"246180771\",\"冀南新区\"],[\"246180772\",\"邯郸经济技术开发区\"]]],[\"1305\",\"邢台市\",[[\"130501\",\"襄都区\"],[\"130502\",\"信都区\"],[\"130504\",\"临城县\"],[\"130505\",\"内丘县\"],[\"130506\",\"柏乡县\"],[\"130507\",\"隆尧县\"],[\"130508\",\"任泽区\"],[\"130509\",\"南和区\"],[\"130510\",\"宁晋县\"],[\"130511\",\"巨鹿县\"],[\"130512\",\"新河县\"],[\"130513\",\"广宗县\"],[\"130514\",\"平乡县\"],[\"130515\",\"威县\"],[\"130516\",\"清河县\"],[\"130517\",\"临西县\"],[\"130518\",\"南宫市\"],[\"130519\",\"沙河市\"]]],[\"1306\",\"保定市\",[[\"1312\",\"定州市\"],[\"130604\",\"满城区\"],[\"130605\",\"清苑区\"],[\"130606\",\"涞水县\"],[\"130607\",\"阜平县\"],[\"130608\",\"徐水区\"],[\"130609\",\"定兴县\"],[\"130610\",\"唐县\"],[\"130611\",\"高阳县\"],[\"130612\",\"容城县\"],[\"130613\",\"涞源县\"],[\"130614\",\"望都县\"],[\"130615\",\"安新县\"],[\"130616\",\"易县\"],[\"130617\",\"曲阳县\"],[\"130618\",\"蠡县\"],[\"130619\",\"顺平县\"],[\"130620\",\"博野县\"],[\"130621\",\"雄县\"],[\"130622\",\"涿州市\"],[\"130624\",\"安国市\"],[\"130625\",\"高碑店市\"],[\"130626\",\"竞秀区\"],[\"130627\",\"莲池区\"]]],[\"1307\",\"张家口市\",[[\"130701\",\"桥东区\"],[\"130702\",\"桥西区\"],[\"130703\",\"宣化区\"],[\"130704\",\"下花园区\"],[\"130706\",\"张北县\"],[\"130707\",\"康保县\"],[\"130708\",\"沽源县\"],[\"130709\",\"尚义县\"],[\"130710\",\"蔚县\"],[\"130711\",\"阳原县\"],[\"130712\",\"怀安县\"],[\"130713\",\"万全区\"],[\"130714\",\"怀来县\"],[\"130715\",\"涿鹿县\"],[\"130716\",\"赤城县\"],[\"130717\",\"崇礼区\"]]],[\"1308\",\"承德市\",[[\"130801\",\"双桥区\"],[\"130802\",\"双滦区\"],[\"130803\",\"鹰手营子矿区\"],[\"130804\",\"承德县\"],[\"130805\",\"兴隆县\"],[\"130806\",\"平泉市\"],[\"130807\",\"滦平县\"],[\"130808\",\"隆化县\"],[\"130809\",\"丰宁满族自治县\"],[\"130810\",\"宽城满族自治县\"],[\"130811\",\"围场满族蒙古族自治县\"]]],[\"1309\",\"沧州市\",[[\"130901\",\"新华区\"],[\"130902\",\"运河区\"],[\"130903\",\"沧县\"],[\"130904\",\"青县\"],[\"130905\",\"东光县\"],[\"130906\",\"海兴县\"],[\"130907\",\"盐山县\"],[\"130908\",\"肃宁县\"],[\"130909\",\"南皮县\"],[\"130910\",\"吴桥县\"],[\"130911\",\"献县\"],[\"130912\",\"孟村回族自治县\"],[\"130913\",\"泊头市\"],[\"130914\",\"任丘市\"],[\"130915\",\"黄骅市\"],[\"130916\",\"河间市\"],[\"130999\",\"渤海新区\"]]],[\"1310\",\"廊坊市\",[[\"131001\",\"香河县\"],[\"131002\",\"三河市\"],[\"131003\",\"固安县\"],[\"131004\",\"安次区\"],[\"131005\",\"广阳区\"],[\"131006\",\"永清县\"],[\"131007\",\"大城县\"],[\"131008\",\"文安县\"],[\"131009\",\"大厂回族自治县\"],[\"131010\",\"霸州市\"]]],[\"1311\",\"衡水市\",[[\"131101\",\"桃城区\"],[\"131102\",\"枣强县\"],[\"131103\",\"武邑县\"],[\"131104\",\"武强县\"],[\"131105\",\"饶阳县\"],[\"131106\",\"安平县\"],[\"131107\",\"故城县\"],[\"131108\",\"景县\"],[\"131109\",\"阜城县\"],[\"131110\",\"冀州区\"],[\"131111\",\"深州市\"]]],[\"246180205\",\"雄安新区\"]]],[\"1400\",\"山西省\",[[\"1401\",\"太原市\",[[\"140101\",\"小店区\"],[\"140102\",\"迎泽区\"],[\"140103\",\"杏花岭区\"],[\"140104\",\"尖草坪区\"],[\"140105\",\"万柏林区\"],[\"140106\",\"晋源区\"],[\"140107\",\"清徐县\"],[\"140108\",\"阳曲县\"],[\"140109\",\"娄烦县\"],[\"140110\",\"古交市\"]]],[\"1402\",\"大同市\",[[\"140204\",\"新荣区\"],[\"140205\",\"阳高县\"],[\"140206\",\"天镇县\"],[\"140207\",\"广灵县\"],[\"140208\",\"灵丘县\"],[\"140209\",\"浑源县\"],[\"140210\",\"左云县\"],[\"140211\",\"云州区\"],[\"140213\",\"平城区\"],[\"140214\",\"云冈区\"]]],[\"1403\",\"阳泉市\",[[\"140301\",\"城区\"],[\"140302\",\"矿区\"],[\"140303\",\"郊区\"],[\"140304\",\"平定县\"],[\"140305\",\"盂县\"]]],[\"1404\",\"长治市\",[[\"140428\",\"潞州区\"],[\"140403\",\"上党区\"],[\"140404\",\"襄垣县\"],[\"140405\",\"屯留区\"],[\"140406\",\"平顺县\"],[\"140407\",\"黎城县\"],[\"140408\",\"壶关县\"],[\"140409\",\"长子县\"],[\"140410\",\"武乡县\"],[\"140411\",\"沁县\"],[\"140412\",\"沁源县\"],[\"140413\",\"潞城区\"]]],[\"1405\",\"晋城市\",[[\"140501\",\"城区\"],[\"140502\",\"沁水县\"],[\"140503\",\"阳城县\"],[\"140504\",\"陵川县\"],[\"140505\",\"泽州县\"],[\"140506\",\"高平市\"]]],[\"1406\",\"朔州市\",[[\"140601\",\"朔城区\"],[\"140602\",\"平鲁区\"],[\"140603\",\"山阴县\"],[\"140604\",\"应县\"],[\"140605\",\"右玉县\"],[\"140606\",\"怀仁市\"]]],[\"1407\",\"晋中市\",[[\"140701\",\"和顺县\"],[\"140702\",\"榆次区\"],[\"140703\",\"榆社县\"],[\"140704\",\"左权县\"],[\"140705\",\"昔阳县\"],[\"140706\",\"寿阳县\"],[\"140707\",\"太谷区\"],[\"140708\",\"祁县\"],[\"140709\",\"平遥县\"],[\"140710\",\"灵石县\"],[\"140711\",\"介休市\"]]],[\"1408\",\"运城市\",[[\"140801\",\"永济市\"],[\"140802\",\"盐湖区\"],[\"140803\",\"临猗县\"],[\"140804\",\"万荣县\"],[\"140805\",\"闻喜县\"],[\"140806\",\"稷山县\"],[\"140807\",\"新绛县\"],[\"140808\",\"绛县\"],[\"140809\",\"垣曲县\"],[\"140810\",\"夏县\"],[\"140811\",\"平陆县\"],[\"140812\",\"芮城县\"],[\"140813\",\"河津市\"]]],[\"1409\",\"忻州市\",[[\"140901\",\"忻府区\"],[\"140902\",\"定襄县\"],[\"140903\",\"五台县\"],[\"140904\",\"代县\"],[\"140905\",\"繁峙县\"],[\"140906\",\"宁武县\"],[\"140907\",\"静乐县\"],[\"140908\",\"神池县\"],[\"140909\",\"五寨县\"],[\"140910\",\"岢岚县\"],[\"140911\",\"河曲县\"],[\"140912\",\"保德县\"],[\"140913\",\"偏关县\"],[\"140914\",\"原平市\"]]],[\"1410\",\"临汾市\",[[\"141001\",\"尧都区\"],[\"141002\",\"曲沃县\"],[\"141003\",\"翼城县\"],[\"141004\",\"襄汾县\"],[\"141005\",\"洪洞县\"],[\"141006\",\"古县\"],[\"141007\",\"安泽县\"],[\"141008\",\"浮山县\"],[\"141009\",\"吉县\"],[\"141010\",\"乡宁县\"],[\"141011\",\"大宁县\"],[\"141012\",\"隰县\"],[\"141013\",\"永和县\"],[\"141014\",\"蒲县\"],[\"141015\",\"汾西县\"],[\"141016\",\"侯马市\"],[\"141017\",\"霍州市\"]]],[\"1411\",\"吕梁市\",[[\"141101\",\"离石区\"],[\"141102\",\"文水县\"],[\"141103\",\"交城县\"],[\"141104\",\"兴县\"],[\"141105\",\"临县\"],[\"141106\",\"柳林县\"],[\"141107\",\"石楼县\"],[\"141108\",\"岚县\"],[\"141109\",\"方山县\"],[\"141110\",\"中阳县\"],[\"141111\",\"交口县\"],[\"141112\",\"孝义市\"],[\"141113\",\"汾阳市\"]]]]],[\"1500\",\"内蒙古自治区\",[[\"1501\",\"呼和浩特市\",[[\"150101\",\"新城区\"],[\"150102\",\"回民区\"],[\"150103\",\"玉泉区\"],[\"150104\",\"赛罕区\"],[\"150105\",\"土默特左旗\"],[\"150106\",\"托克托县\"],[\"150107\",\"和林格尔县\"],[\"150108\",\"清水河县\"],[\"150109\",\"武川县\"]]],[\"1502\",\"包头市\",[[\"150201\",\"东河区\"],[\"150202\",\"昆都仑区\"],[\"150203\",\"青山区\"],[\"150204\",\"石拐区\"],[\"150205\",\"白云鄂博矿区\"],[\"150206\",\"九原区\"],[\"150207\",\"土默特右旗\"],[\"150208\",\"固阳县\"],[\"150209\",\"达尔罕茂明安联合旗\"]]],[\"1503\",\"乌海市\",[[\"150301\",\"海勃湾区\"],[\"150302\",\"海南区\"],[\"150303\",\"乌达区\"]]],[\"1504\",\"赤峰市\",[[\"150401\",\"红山区\"],[\"150402\",\"元宝山区\"],[\"150403\",\"松山区\"],[\"150404\",\"阿鲁科尔沁旗\"],[\"150405\",\"巴林左旗\"],[\"150406\",\"巴林右旗\"],[\"150407\",\"林西县\"],[\"150408\",\"克什克腾旗\"],[\"150409\",\"翁牛特旗\"],[\"150410\",\"喀喇沁旗\"],[\"150411\",\"宁城县\"],[\"150412\",\"敖汉旗\"]]],[\"1505\",\"通辽市\",[[\"150501\",\"科尔沁区\"],[\"150502\",\"科尔沁左翼中旗\"],[\"150503\",\"科尔沁左翼后旗\"],[\"150504\",\"开鲁县\"],[\"150505\",\"库伦旗\"],[\"150506\",\"奈曼旗\"],[\"150507\",\"扎鲁特旗\"],[\"150508\",\"霍林郭勒市\"]]],[\"1506\",\"鄂尔多斯市\",[[\"150601\",\"乌审旗\"],[\"150602\",\"东胜区\"],[\"150603\",\"达拉特旗\"],[\"150628\",\"康巴什区\"],[\"150604\",\"准格尔旗\"],[\"150605\",\"鄂托克前旗\"],[\"150606\",\"鄂托克旗\"],[\"150607\",\"杭锦旗\"],[\"150608\",\"伊金霍洛旗\"]]],[\"1507\",\"呼伦贝尔市\",[[\"150701\",\"海拉尔区\"],[\"150702\",\"阿荣旗\"],[\"150703\",\"莫力达瓦达斡尔族自治旗\"],[\"150704\",\"鄂伦春自治旗\"],[\"150705\",\"鄂温克族自治旗\"],[\"150706\",\"陈巴尔虎旗\"],[\"150707\",\"新巴尔虎左旗\"],[\"150708\",\"新巴尔虎右旗\"],[\"150709\",\"满洲里市\"],[\"150710\",\"牙克石市\"],[\"150711\",\"扎兰屯市\"],[\"150712\",\"额尔古纳市\"],[\"150713\",\"根河市\"],[\"150714\",\"扎赉诺尔区\"]]],[\"1508\",\"巴彦淖尔市\",[[\"150801\",\"临河区\"],[\"150802\",\"五原县\"],[\"150803\",\"磴口县\"],[\"150804\",\"乌拉特前旗\"],[\"150805\",\"乌拉特中旗\"],[\"150806\",\"乌拉特后旗\"],[\"150807\",\"杭锦后旗\"]]],[\"1509\",\"乌兰察布市\",[[\"150901\",\"集宁区\"],[\"150902\",\"卓资县\"],[\"150903\",\"化德县\"],[\"150904\",\"商都县\"],[\"150905\",\"兴和县\"],[\"150906\",\"凉城县\"],[\"150907\",\"察哈尔右翼前旗\"],[\"150908\",\"察哈尔右翼中旗\"],[\"150909\",\"察哈尔右翼后旗\"],[\"150910\",\"四子王旗\"],[\"150911\",\"丰镇市\"]]],[\"1522\",\"兴安盟\",[[\"152201\",\"乌兰浩特市\"],[\"152202\",\"阿尔山市\"],[\"152203\",\"科尔沁右翼前旗\"],[\"152204\",\"科尔沁右翼中旗\"],[\"152205\",\"扎赉特旗\"],[\"152206\",\"突泉县\"]]],[\"1525\",\"锡林郭勒盟\",[[\"152501\",\"二连浩特市\"],[\"152502\",\"锡林浩特市\"],[\"152503\",\"阿巴嘎旗\"],[\"152504\",\"苏尼特左旗\"],[\"152505\",\"苏尼特右旗\"],[\"152506\",\"东乌珠穆沁旗\"],[\"152507\",\"西乌珠穆沁旗\"],[\"152508\",\"太仆寺旗\"],[\"152509\",\"镶黄旗\"],[\"152510\",\"正镶白旗\"],[\"152511\",\"正蓝旗\"],[\"152512\",\"多伦县\"]]],[\"1529\",\"阿拉善盟\",[[\"152901\",\"阿拉善左旗\"],[\"152902\",\"阿拉善右旗\"],[\"152903\",\"额济纳旗\"]]]]],[\"2100\",\"辽宁省\",[[\"2101\",\"沈阳市\",[[\"210101\",\"和平区\"],[\"210102\",\"沈河区\"],[\"210103\",\"皇姑区\"],[\"210104\",\"大东区\"],[\"210105\",\"铁西区\"],[\"210106\",\"浑南区\"],[\"210107\",\"于洪区\"],[\"210108\",\"沈北新区\"],[\"210109\",\"棋盘山开发区\"],[\"210110\",\"新民市\"],[\"210111\",\"辽中区\"],[\"210112\",\"康平县\"],[\"210113\",\"法库县\"],[\"210114\",\"苏家屯区\"]]],[\"2102\",\"大连市\",[[\"210201\",\"西岗区\"],[\"210202\",\"中山区\"],[\"210203\",\"沙河口区\"],[\"210204\",\"甘井子区\"],[\"210205\",\"高新园区\"],[\"210206\",\"开发区\"],[\"210207\",\"旅顺口区\"],[\"210208\",\"金州区\"],[\"210209\",\"普兰店区\"],[\"210210\",\"瓦房店市\"],[\"210211\",\"庄河市\"],[\"210212\",\"长海县\"],[\"210213\",\"长兴岛\"]]],[\"2103\",\"鞍山市\",[[\"210301\",\"海城市\"],[\"210302\",\"铁东区\"],[\"210303\",\"铁西区\"],[\"210304\",\"立山区\"],[\"210305\",\"千山区\"],[\"210306\",\"台安县\"],[\"210307\",\"岫岩满族自治县\"]]],[\"2104\",\"抚顺市\",[[\"210401\",\"新抚区\"],[\"210402\",\"东洲区\"],[\"210403\",\"望花区\"],[\"210404\",\"顺城区\"],[\"210405\",\"抚顺县\"],[\"210406\",\"新宾满族自治县\"],[\"210407\",\"清原满族自治县\"]]],[\"2105\",\"本溪市\",[[\"210501\",\"平山区\"],[\"210502\",\"溪湖区\"],[\"210503\",\"明山区\"],[\"210504\",\"南芬区\"],[\"210505\",\"本溪满族自治县\"],[\"210506\",\"桓仁满族自治县\"]]],[\"2106\",\"丹东市\",[[\"210601\",\"元宝区\"],[\"210602\",\"振兴区\"],[\"210603\",\"振安区\"],[\"210604\",\"宽甸满族自治县\"],[\"210605\",\"东港市\"],[\"210606\",\"凤城市\"]]],[\"2107\",\"锦州市\",[[\"210701\",\"古塔区\"],[\"210702\",\"凌河区\"],[\"210703\",\"太和区\"],[\"210704\",\"黑山县\"],[\"210705\",\"义县\"],[\"210706\",\"凌海市\"],[\"210707\",\"北镇市\"]]],[\"2108\",\"营口市\",[[\"210801\",\"站前区\"],[\"210802\",\"西市区\"],[\"210803\",\"鲅鱼圈区\"],[\"210804\",\"老边区\"],[\"210805\",\"盖州市\"],[\"210806\",\"大石桥市\"]]],[\"2109\",\"阜新市\",[[\"210901\",\"海州区\"],[\"210902\",\"新邱区\"],[\"210903\",\"太平区\"],[\"210904\",\"清河门区\"],[\"210905\",\"细河区\"],[\"210906\",\"阜新蒙古族自治县\"],[\"210907\",\"彰武县\"]]],[\"2110\",\"辽阳市\",[[\"211001\",\"白塔区\"],[\"211002\",\"文圣区\"],[\"211003\",\"宏伟区\"],[\"211004\",\"弓长岭区\"],[\"211005\",\"太子河区\"],[\"211006\",\"辽阳县\"],[\"211007\",\"灯塔市\"]]],[\"2111\",\"盘锦市\",[[\"211101\",\"双台子区\"],[\"211102\",\"兴隆台区\"],[\"211103\",\"大洼区\"],[\"211104\",\"盘山县\"]]],[\"2112\",\"铁岭市\",[[\"211201\",\"昌图县\"],[\"211202\",\"开原市\"],[\"211203\",\"银州区\"],[\"211204\",\"清河区\"],[\"211205\",\"铁岭县\"],[\"211206\",\"西丰县\"],[\"211207\",\"调兵山市\"]]],[\"2113\",\"朝阳市\",[[\"211301\",\"双塔区\"],[\"211302\",\"龙城区\"],[\"211303\",\"朝阳县\"],[\"211304\",\"建平县\"],[\"211305\",\"喀喇沁左翼蒙古族自治县\"],[\"211306\",\"北票市\"],[\"211307\",\"凌源市\"]]],[\"2114\",\"葫芦岛市\",[[\"2115\",\"兴城市\"],[\"211401\",\"连山区\"],[\"211402\",\"龙港区\"],[\"211403\",\"南票区\"],[\"211404\",\"绥中县\"],[\"211405\",\"建昌县\"]]]]],[\"2200\",\"吉林省\",[[\"2201\",\"长春市\",[[\"2209\",\"公主岭市\"],[\"220101\",\"南关区\"],[\"220102\",\"宽城区\"],[\"220103\",\"朝阳区\"],[\"220104\",\"二道区\"],[\"220105\",\"绿园区\"],[\"220106\",\"高新开发区\"],[\"220107\",\"经济开发区\"],[\"220108\",\"汽车产业开发区\"],[\"220109\",\"双阳区\"],[\"220110\",\"榆树市\"],[\"220111\",\"九台区\"],[\"220112\",\"德惠市\"],[\"220113\",\"农安县\"],[\"220114\",\"保税区\"]]],[\"2202\",\"吉林市\",[[\"220201\",\"昌邑区\"],[\"220202\",\"龙潭区\"],[\"220203\",\"船营区\"],[\"220204\",\"丰满区\"],[\"220205\",\"永吉县\"],[\"220206\",\"蛟河市\"],[\"220207\",\"桦甸市\"],[\"220208\",\"舒兰市\"],[\"220209\",\"磐石市\"]]],[\"2203\",\"四平市\",[[\"220301\",\"铁西区\"],[\"220302\",\"铁东区\"],[\"220303\",\"梨树县\"],[\"220304\",\"伊通满族自治县\"],[\"220306\",\"双辽市\"]]],[\"2204\",\"辽源市\",[[\"220401\",\"龙山区\"],[\"220402\",\"西安区\"],[\"220403\",\"东丰县\"],[\"220404\",\"东辽县\"]]],[\"2205\",\"通化市\",[[\"220501\",\"东昌区\"],[\"220502\",\"二道江区\"],[\"220503\",\"通化县\"],[\"220504\",\"辉南县\"],[\"220505\",\"柳河县\"],[\"220506\",\"梅河口市\"],[\"220507\",\"集安市\"]]],[\"2206\",\"白山市\",[[\"220601\",\"浑江区\"],[\"220602\",\"江源区\"],[\"220603\",\"抚松县\"],[\"220604\",\"靖宇县\"],[\"220605\",\"长白朝鲜族自治县\"],[\"220606\",\"临江市\"]]],[\"2207\",\"松原市\",[[\"220701\",\"宁江区\"],[\"220702\",\"前郭尔罗斯蒙古族自治县\"],[\"220703\",\"长岭县\"],[\"220704\",\"乾安县\"],[\"220705\",\"扶余市\"]]],[\"2208\",\"白城市\",[[\"220801\",\"洮北区\"],[\"220802\",\"镇赉县\"],[\"220803\",\"通榆县\"],[\"220804\",\"洮南市\"],[\"220805\",\"大安市\"]]],[\"2224\",\"延边朝鲜族自治州\",[[\"2210\",\"延吉市\"],[\"221001\",\"图们市\"],[\"221002\",\"敦化市\"],[\"221003\",\"珲春市\"],[\"221004\",\"龙井市\"],[\"221005\",\"和龙市\"],[\"221006\",\"汪清县\"],[\"221007\",\"安图县\"]]]]],[\"2300\",\"黑龙江省\",[[\"2301\",\"哈尔滨市\",[[\"230101\",\"道里区\"],[\"230102\",\"道外区\"],[\"230103\",\"香坊区\"],[\"230104\",\"松北区\"],[\"230105\",\"平房区\"],[\"230106\",\"呼兰区\"],[\"230107\",\"阿城区\"],[\"230108\",\"五常市\"],[\"230109\",\"方正县\"],[\"230110\",\"依兰县\"],[\"230111\",\"宾县\"],[\"230112\",\"巴彦县\"],[\"230113\",\"木兰县\"],[\"230114\",\"通河县\"],[\"230115\",\"延寿县\"],[\"230116\",\"双城区\"],[\"230117\",\"尚志市\"],[\"350207\",\"南岗区\"]]],[\"2302\",\"齐齐哈尔市\",[[\"230201\",\"龙沙区\"],[\"230202\",\"建华区\"],[\"230203\",\"铁锋区\"],[\"230204\",\"昂昂溪区\"],[\"230205\",\"富拉尔基区\"],[\"230206\",\"碾子山区\"],[\"230207\",\"梅里斯达斡尔族区\"],[\"230208\",\"龙江县\"],[\"230209\",\"依安县\"],[\"230210\",\"泰来县\"],[\"230211\",\"甘南县\"],[\"230212\",\"富裕县\"],[\"230213\",\"克山县\"],[\"230214\",\"克东县\"],[\"230215\",\"拜泉县\"],[\"230216\",\"讷河市\"]]],[\"2303\",\"鸡西市\",[[\"230301\",\"鸡冠区\"],[\"230302\",\"恒山区\"],[\"230303\",\"滴道区\"],[\"230304\",\"梨树区\"],[\"230305\",\"城子河区\"],[\"230306\",\"麻山区\"],[\"230307\",\"鸡东县\"],[\"230308\",\"虎林市\"],[\"230309\",\"密山市\"]]],[\"2304\",\"鹤岗市\",[[\"230401\",\"向阳区\"],[\"230402\",\"工农区\"],[\"230403\",\"南山区\"],[\"230404\",\"兴安区\"],[\"230405\",\"东山区\"],[\"230406\",\"兴山区\"],[\"230407\",\"萝北县\"],[\"230408\",\"绥滨县\"]]],[\"2305\",\"双鸭山市\",[[\"230501\",\"尖山区\"],[\"230502\",\"岭东区\"],[\"230503\",\"四方台区\"],[\"230504\",\"宝山区\"],[\"230505\",\"集贤县\"],[\"230506\",\"友谊县\"],[\"230507\",\"宝清县\"],[\"230508\",\"饶河县\"]]],[\"2306\",\"大庆市\",[[\"230601\",\"萨尔图区\"],[\"230602\",\"龙凤区\"],[\"230603\",\"让胡路区\"],[\"230604\",\"红岗区\"],[\"230605\",\"大同区\"],[\"230606\",\"肇州县\"],[\"230607\",\"肇源县\"],[\"230608\",\"林甸县\"],[\"230609\",\"杜尔伯特蒙古族自治县\"]]],[\"2307\",\"伊春市\",[[\"230701\",\"伊美区\"],[\"230702\",\"南岔县\"],[\"230703\",\"友好区\"],[\"230708\",\"金林区\"],[\"230710\",\"乌翠区\"],[\"230711\",\"汤旺县\"],[\"230716\",\"嘉荫县\"],[\"230717\",\"铁力市\"],[\"230724\",\"丰林县\"],[\"230725\",\"大箐山县\"]]],[\"2308\",\"佳木斯市\",[[\"230801\",\"向阳区\"],[\"230802\",\"前进区\"],[\"230803\",\"东风区\"],[\"230804\",\"郊区\"],[\"230805\",\"桦南县\"],[\"230806\",\"桦川县\"],[\"230807\",\"汤原县\"],[\"230808\",\"抚远市\"],[\"230809\",\"同江市\"],[\"230810\",\"富锦市\"],[\"230811\",\"建三江\"]]],[\"2309\",\"七台河市\",[[\"230901\",\"新兴区\"],[\"230902\",\"桃山区\"],[\"230903\",\"茄子河区\"],[\"230904\",\"勃利县\"]]],[\"2310\",\"牡丹江市\",[[\"2314\",\"绥芬河市\"],[\"231001\",\"东安区\"],[\"231002\",\"阳明区\"],[\"231003\",\"爱民区\"],[\"231004\",\"西安区\"],[\"231005\",\"东宁市\"],[\"231006\",\"林口县\"],[\"231008\",\"海林市\"],[\"231009\",\"宁安市\"],[\"231010\",\"穆棱市\"]]],[\"2311\",\"黑河市\",[[\"231101\",\"爱辉区\"],[\"231102\",\"嫩江市\"],[\"231103\",\"逊克县\"],[\"231104\",\"孙吴县\"],[\"231105\",\"北安市\"],[\"231106\",\"五大连池市\"]]],[\"2312\",\"绥化市\",[[\"2313\",\"安达市\"],[\"231201\",\"肇东市\"],[\"231202\",\"北林区\"],[\"231203\",\"望奎县\"],[\"231204\",\"兰西县\"],[\"231205\",\"青冈县\"],[\"231206\",\"庆安县\"],[\"231207\",\"明水县\"],[\"231208\",\"绥棱县\"],[\"231209\",\"海伦市\"]]],[\"2327\",\"大兴安岭地区\",[[\"2328\",\"加格达奇区\"],[\"232702\",\"呼玛县\"],[\"232703\",\"塔河县\"],[\"232704\",\"漠河市\"],[\"232707\",\"呼中区\"],[\"232706\",\"新林区\"],[\"232705\",\"松岭区\"]]]]],[\"3100\",\"上海市\",[[\"3101\",\"黄浦区\"],[\"3102\",\"徐汇区\"],[\"3103\",\"长宁区\"],[\"3104\",\"静安区\"],[\"3105\",\"普陀区\"],[\"3107\",\"虹口区\"],[\"3108\",\"杨浦区\"],[\"3109\",\"浦东新区\"],[\"3110\",\"闵行区\"],[\"3111\",\"宝山区\"],[\"3112\",\"嘉定区\"],[\"3113\",\"金山区\"],[\"3114\",\"松江区\"],[\"3115\",\"青浦区\"],[\"3116\",\"奉贤区\"],[\"3117\",\"崇明区\"]]],[\"3200\",\"江苏省\",[[\"3201\",\"南京市\",[[\"320101\",\"玄武区\"],[\"320103\",\"秦淮区\"],[\"320104\",\"建邺区\"],[\"320105\",\"鼓楼区\"],[\"320107\",\"浦口区\"],[\"320108\",\"六合区\"],[\"320109\",\"栖霞区\"],[\"320110\",\"雨花台区\"],[\"320111\",\"江宁区\"],[\"320112\",\"溧水区\"],[\"320113\",\"高淳区\"]]],[\"3202\",\"无锡市\",[[\"320201\",\"宜兴市\"],[\"320202\",\"江阴市\"],[\"320206\",\"滨湖区\"],[\"320207\",\"新吴区\"],[\"320208\",\"惠山区\"],[\"320209\",\"锡山区\"],[\"320210\",\"梁溪区\"]]],[\"3203\",\"徐州市\",[[\"320301\",\"鼓楼区\"],[\"320302\",\"云龙区\"],[\"320304\",\"贾汪区\"],[\"320305\",\"泉山区\"],[\"320306\",\"丰县\"],[\"320307\",\"沛县\"],[\"320308\",\"铜山区\"],[\"320309\",\"睢宁县\"],[\"320310\",\"新沂市\"],[\"320311\",\"邳州市\"]]],[\"3204\",\"常州市\",[[\"320401\",\"溧阳市\"],[\"320402\",\"天宁区\"],[\"320403\",\"钟楼区\"],[\"320405\",\"新北区\"],[\"320406\",\"武进区\"],[\"320407\",\"金坛区\"]]],[\"3205\",\"苏州市\",[[\"320504\",\"虎丘区\"],[\"320505\",\"吴中区\"],[\"320506\",\"相城区\"],[\"320507\",\"工业园区\"],[\"320508\",\"吴江区\"],[\"320509\",\"昆山市\"],[\"320510\",\"常熟市\"],[\"320511\",\"太仓市\"],[\"320512\",\"张家港市\"],[\"320514\",\"姑苏区\"]]],[\"3206\",\"南通市\",[[\"3216\",\"如皋市\"],[\"320601\",\"通州区\"],[\"320602\",\"启东市\"],[\"320603\",\"崇川区\"],[\"320605\",\"海安市\"],[\"320606\",\"如东县\"],[\"320608\",\"海门区\"]]],[\"3207\",\"连云港市\",[[\"320701\",\"连云区\"],[\"320703\",\"海州区\"],[\"320704\",\"赣榆区\"],[\"320705\",\"东海县\"],[\"320706\",\"灌云县\"],[\"320707\",\"灌南县\"]]],[\"3208\",\"淮安市\",[[\"320801\",\"金湖县\"],[\"320802\",\"盱眙县\"],[\"320803\",\"清江浦区\"],[\"320804\",\"淮安区\"],[\"320805\",\"淮阴区\"],[\"320807\",\"涟水县\"],[\"320808\",\"洪泽区\"]]],[\"3209\",\"盐城市\",[[\"320901\",\"亭湖区\"],[\"320902\",\"盐都区\"],[\"320903\",\"响水县\"],[\"320904\",\"滨海县\"],[\"320905\",\"阜宁县\"],[\"320906\",\"射阳县\"],[\"320907\",\"建湖县\"],[\"320908\",\"东台市\"],[\"320909\",\"大丰区\"]]],[\"3210\",\"扬州市\",[[\"321001\",\"高邮市\"],[\"321002\",\"广陵区\"],[\"321003\",\"邗江区\"],[\"321005\",\"宝应县\"],[\"321006\",\"仪征市\"],[\"321007\",\"江都区\"]]],[\"3211\",\"镇江市\",[[\"3215\",\"丹阳市\"],[\"3217\",\"句容市\"],[\"321101\",\"京口区\"],[\"321102\",\"润州区\"],[\"321103\",\"丹徒区\"],[\"321105\",\"扬中市\"]]],[\"3212\",\"泰州市\",[[\"321201\",\"泰兴市\"],[\"321202\",\"靖江市\"],[\"321203\",\"海陵区\"],[\"321204\",\"高港区\"],[\"321205\",\"兴化市\"],[\"321206\",\"姜堰区\"]]],[\"3213\",\"宿迁市\",[[\"321301\",\"宿城区\"],[\"321302\",\"宿豫区\"],[\"321303\",\"沭阳县\"],[\"321304\",\"泗阳县\"],[\"321305\",\"泗洪县\"]]]]],[\"3300\",\"浙江省\",[[\"3301\",\"杭州市\",[[\"330101\",\"上城区\"],[\"330104\",\"拱墅区\"],[\"330105\",\"西湖区\"],[\"330106\",\"滨江区\"],[\"330107\",\"萧山区\"],[\"330108\",\"余杭区\"],[\"330109\",\"桐庐县\"],[\"330110\",\"淳安县\"],[\"330111\",\"建德市\"],[\"330112\",\"富阳区\"],[\"330113\",\"临安区\"],[\"246180212\",\"钱塘区\"],[\"246180213\",\"临平区\"]]],[\"3302\",\"宁波市\",[[\"330114\",\"余姚市\"],[\"330201\",\"象山县\"],[\"330202\",\"宁海县\"],[\"330203\",\"慈溪市\"],[\"330205\",\"海曙区\"],[\"330207\",\"江北区\"],[\"330208\",\"北仑区\"],[\"330209\",\"镇海区\"],[\"330210\",\"鄞州区\"],[\"330211\",\"奉化区\"]]],[\"3303\",\"温州市\",[[\"330301\",\"瑞安市\"],[\"330302\",\"永嘉县\"],[\"330303\",\"乐清市\"],[\"330304\",\"鹿城区\"],[\"330305\",\"龙湾区\"],[\"330306\",\"瓯海区\"],[\"330307\",\"洞头区\"],[\"330308\",\"平阳县\"],[\"330309\",\"苍南县\"],[\"330310\",\"文成县\"],[\"330311\",\"泰顺县\"],[\"330383\",\"龙港市\"]]],[\"3304\",\"嘉兴市\",[[\"330401\",\"海宁市\"],[\"330402\",\"桐乡市\"],[\"330403\",\"平湖市\"],[\"330404\",\"嘉善县\"],[\"330405\",\"南湖区\"],[\"330406\",\"秀洲区\"],[\"330407\",\"海盐县\"]]],[\"3305\",\"湖州市\",[[\"330501\",\"德清县\"],[\"330502\",\"吴兴区\"],[\"330503\",\"南浔区\"],[\"330504\",\"长兴县\"],[\"330505\",\"安吉县\"]]],[\"3306\",\"绍兴市\",[[\"3312\",\"诸暨市\"],[\"330601\",\"上虞区\"],[\"330603\",\"越城区\"],[\"330604\",\"柯桥区\"],[\"330605\",\"新昌县\"],[\"330607\",\"嵊州市\"]]],[\"3307\",\"金华市\",[[\"3313\",\"永康市\"],[\"330701\",\"义乌市\"],[\"330702\",\"东阳市\",[[\"33070201\",\"横店\"]]],[\"330703\",\"婺城区\"],[\"330704\",\"金东区\"],[\"330705\",\"武义县\"],[\"330706\",\"浦江县\"],[\"330707\",\"磐安县\"],[\"330708\",\"兰溪市\"]]],[\"3308\",\"衢州市\",[[\"330801\",\"柯城区\"],[\"330802\",\"衢江区\"],[\"330803\",\"常山县\"],[\"330804\",\"开化县\"],[\"330805\",\"龙游县\"],[\"330806\",\"江山市\"]]],[\"3309\",\"舟山市\",[[\"330901\",\"定海区\"],[\"330902\",\"普陀区\"],[\"330903\",\"岱山县\"],[\"330904\",\"嵊泗县\"]]],[\"3310\",\"台州市\",[[\"331001\",\"三门县\"],[\"331002\",\"温岭市\"],[\"331004\",\"玉环市\"],[\"331005\",\"椒江区\"],[\"331006\",\"黄岩区\"],[\"331007\",\"路桥区\"],[\"331008\",\"天台县\"],[\"331009\",\"仙居县\"],[\"331010\",\"临海市\"]]],[\"3311\",\"丽水市\",[[\"331101\",\"莲都区\"],[\"331102\",\"青田县\"],[\"331103\",\"缙云县\"],[\"331104\",\"遂昌县\"],[\"331105\",\"松阳县\"],[\"331106\",\"云和县\"],[\"331107\",\"庆元县\"],[\"331108\",\"景宁畲族自治县\"],[\"331109\",\"龙泉市\"]]]]],[\"3400\",\"安徽省\",[[\"3401\",\"合肥市\",[[\"3414\",\"巢湖市\"],[\"340101\",\"庐阳区\"],[\"340102\",\"瑶海区\"],[\"340103\",\"蜀山区\"],[\"340104\",\"包河区\"],[\"340105\",\"经济技术开发区\"],[\"340106\",\"滨湖新区\"],[\"340107\",\"新站综合开发试验区\"],[\"340108\",\"高新区\"],[\"340109\",\"政务文化新区\"],[\"340110\",\"北城新区\"],[\"340111\",\"长丰县\"],[\"340112\",\"肥东县\"],[\"340113\",\"肥西县\"],[\"340114\",\"庐江县\"]]],[\"3402\",\"芜湖市\",[[\"340201\",\"镜湖区\"],[\"340202\",\"弋江区\"],[\"340203\",\"鸠江区\"],[\"340205\",\"湾沚区\"],[\"340206\",\"繁昌区\"],[\"340207\",\"南陵县\"],[\"340208\",\"无为市\"]]],[\"3403\",\"蚌埠市\",[[\"340301\",\"龙子湖区\"],[\"340302\",\"蚌山区\"],[\"340303\",\"禹会区\"],[\"340304\",\"淮上区\"],[\"340305\",\"怀远县\"],[\"340306\",\"五河县\"],[\"340307\",\"固镇县\"]]],[\"3404\",\"淮南市\",[[\"340401\",\"大通区\"],[\"340402\",\"田家庵区\"],[\"340403\",\"谢家集区\"],[\"340404\",\"八公山区\"],[\"340405\",\"潘集区\"],[\"340406\",\"凤台县\"],[\"341503\",\"寿县\"]]],[\"3405\",\"马鞍山市\",[[\"340501\",\"花山区\"],[\"340502\",\"雨山区\"],[\"340503\",\"博望区\"],[\"340504\",\"当涂县\"],[\"340505\",\"含山县\"],[\"340506\",\"和县\"]]],[\"3406\",\"淮北市\",[[\"340601\",\"杜集区\"],[\"340602\",\"相山区\"],[\"340603\",\"烈山区\"],[\"340604\",\"濉溪县\"]]],[\"3407\",\"铜陵市\",[[\"340701\",\"铜官区\"],[\"340703\",\"郊区\"],[\"340704\",\"义安区\"],[\"340807\",\"枞阳县\"]]],[\"3408\",\"安庆市\",[[\"340801\",\"宿松县\"],[\"340803\",\"迎江区\"],[\"340804\",\"大观区\"],[\"340805\",\"宜秀区\"],[\"340806\",\"怀宁县\"],[\"340808\",\"潜山市\"],[\"340809\",\"太湖县\"],[\"340810\",\"望江县\"],[\"340811\",\"岳西县\"],[\"340812\",\"桐城市\"]]],[\"3410\",\"黄山市\",[[\"341001\",\"屯溪区\"],[\"341002\",\"黄山区\"],[\"341003\",\"徽州区\"],[\"341004\",\"歙县\"],[\"341005\",\"休宁县\"],[\"341006\",\"黟县\"],[\"341007\",\"祁门县\"]]],[\"3411\",\"滁州市\",[[\"341101\",\"凤阳县\"],[\"341102\",\"琅琊区\"],[\"341103\",\"南谯区\"],[\"341104\",\"来安县\"],[\"341105\",\"全椒县\"],[\"341106\",\"定远县\"],[\"341107\",\"天长市\"],[\"341108\",\"明光市\"]]],[\"3412\",\"阜阳市\",[[\"341201\",\"颍州区\"],[\"341202\",\"颍东区\"],[\"341203\",\"颍泉区\"],[\"341204\",\"临泉县\"],[\"341205\",\"太和县\"],[\"341206\",\"阜南县\"],[\"341207\",\"颍上县\"],[\"341208\",\"界首市\"]]],[\"3413\",\"宿州市\",[[\"341301\",\"埇桥区\"],[\"341302\",\"砀山县\"],[\"341303\",\"萧县\"],[\"341304\",\"灵璧县\"],[\"341305\",\"泗县\"]]],[\"3415\",\"六安市\",[[\"341501\",\"金安区\"],[\"341502\",\"裕安区\"],[\"341504\",\"霍邱县\"],[\"341505\",\"舒城县\"],[\"341506\",\"金寨县\"],[\"341507\",\"霍山县\"],[\"341508\",\"叶集区\"]]],[\"3416\",\"亳州市\",[[\"341601\",\"谯城区\"],[\"341602\",\"涡阳县\"],[\"341603\",\"蒙城县\"],[\"341604\",\"利辛县\"]]],[\"3417\",\"池州市\",[[\"341701\",\"贵池区\"],[\"341702\",\"东至县\"],[\"341703\",\"石台县\"],[\"341704\",\"青阳县\"]]],[\"3418\",\"宣城市\",[[\"341801\",\"广德市\"],[\"341802\",\"宣州区\"],[\"341803\",\"郎溪县\"],[\"341804\",\"泾县\"],[\"341805\",\"绩溪县\"],[\"341806\",\"旌德县\"],[\"341807\",\"宁国市\"]]]]],[\"3500\",\"福建省\",[[\"3501\",\"福州市\",[[\"3510\",\"福清市\"],[\"350101\",\"鼓楼区\"],[\"350102\",\"台江区\"],[\"350103\",\"仓山区\"],[\"350104\",\"马尾区\"],[\"350105\",\"晋安区\"],[\"350106\",\"闽侯县\"],[\"350107\",\"罗源县\"],[\"350108\",\"连江县\",[[\"35010801\",\"南竿\"]]],[\"350109\",\"永泰县\"],[\"350110\",\"闽清县\"],[\"350111\",\"平潭县\"],[\"350112\",\"长乐区\"]]],[\"3502\",\"厦门市\",[[\"350201\",\"思明区\"],[\"350202\",\"湖里区\"],[\"350203\",\"集美区\"],[\"350204\",\"海沧区\"],[\"350205\",\"同安区\"],[\"350206\",\"翔安区\"]]],[\"3503\",\"莆田市\",[[\"350301\",\"城厢区\"],[\"350302\",\"涵江区\"],[\"350303\",\"荔城区\"],[\"350304\",\"秀屿区\"],[\"350305\",\"仙游县\"]]],[\"3504\",\"三明市\",[[\"350402\",\"三元区\"],[\"350403\",\"明溪县\"],[\"350404\",\"清流县\"],[\"350405\",\"宁化县\"],[\"350406\",\"大田县\"],[\"350407\",\"尤溪县\"],[\"350408\",\"沙县区\"],[\"350409\",\"将乐县\"],[\"350410\",\"泰宁县\"],[\"350411\",\"建宁县\"],[\"350412\",\"永安市\"]]],[\"3505\",\"泉州市\",[[\"350501\",\"泉港区\"],[\"350502\",\"晋江市\"],[\"350503\",\"鲤城区\"],[\"350504\",\"丰泽区\"],[\"350505\",\"洛江区\"],[\"350506\",\"惠安县\"],[\"350507\",\"安溪县\"],[\"350508\",\"永春县\"],[\"350509\",\"德化县\"],[\"350510\",\"金门县\"],[\"350511\",\"石狮市\"],[\"350512\",\"南安市\"]]],[\"3506\",\"漳州市\",[[\"350601\",\"芗城区\"],[\"350602\",\"龙文区\"],[\"350603\",\"云霄县\"],[\"350604\",\"漳浦县\"],[\"350605\",\"诏安县\"],[\"350606\",\"长泰区\"],[\"350607\",\"东山县\"],[\"350608\",\"南靖县\"],[\"350609\",\"平和县\"],[\"350610\",\"华安县\"],[\"350611\",\"龙海区\"]]],[\"3507\",\"南平市\",[[\"350701\",\"延平区\"],[\"350702\",\"顺昌县\"],[\"350703\",\"浦城县\"],[\"350704\",\"光泽县\"],[\"350705\",\"松溪县\"],[\"350706\",\"政和县\"],[\"350707\",\"邵武市\"],[\"350708\",\"武夷山市\"],[\"350709\",\"建瓯市\"],[\"350710\",\"建阳区\"]]],[\"3508\",\"龙岩市\",[[\"350801\",\"新罗区\"],[\"350802\",\"长汀县\"],[\"350803\",\"永定区\"],[\"350804\",\"上杭县\"],[\"350805\",\"武平县\"],[\"350806\",\"连城县\"],[\"350807\",\"漳平市\"]]],[\"3509\",\"宁德市\",[[\"350901\",\"福安市\"],[\"350902\",\"蕉城区\"],[\"350903\",\"霞浦县\"],[\"350904\",\"古田县\"],[\"350905\",\"屏南县\"],[\"350906\",\"寿宁县\"],[\"350907\",\"周宁县\"],[\"350908\",\"柘荣县\"],[\"350909\",\"福鼎市\"]]]]],[\"3600\",\"江西省\",[[\"3601\",\"南昌市\",[[\"360101\",\"东湖区\"],[\"360102\",\"西湖区\"],[\"360103\",\"青云谱区\"],[\"360104\",\"青山湖区\"],[\"360106\",\"南昌县\"],[\"360107\",\"新建区\"],[\"360108\",\"进贤县\"],[\"360109\",\"安义县\"],[\"246180206\",\"红谷滩区\"],[\"246180207\",\"高新技术产业开发区\"],[\"246180208\",\"经济技术开发区\"],[\"246180209\",\"南昌综合保税区\"],[\"246180210\",\"临空经济区\"],[\"246180211\",\"小蓝经济技术开发区\"]]],[\"3602\",\"景德镇市\",[[\"360201\",\"昌江区\"],[\"360202\",\"珠山区\"],[\"360203\",\"浮梁县\"],[\"360204\",\"乐平市\"]]],[\"3603\",\"萍乡市\",[[\"360301\",\"安源区\"],[\"360302\",\"湘东区\"],[\"360303\",\"莲花县\"],[\"360304\",\"上栗县\"],[\"360305\",\"芦溪县\"]]],[\"3604\",\"九江市\",[[\"360401\",\"濂溪区\"],[\"360402\",\"浔阳区\"],[\"360403\",\"柴桑区\"],[\"360404\",\"武宁县\"],[\"360405\",\"修水县\"],[\"360406\",\"永修县\"],[\"360407\",\"德安县\"],[\"360408\",\"庐山市\"],[\"360409\",\"都昌县\"],[\"360410\",\"湖口县\"],[\"360411\",\"彭泽县\"],[\"360412\",\"瑞昌市\"],[\"360413\",\"共青城市\"]]],[\"3605\",\"新余市\",[[\"360501\",\"渝水区\"],[\"360502\",\"分宜县\"]]],[\"3606\",\"鹰潭市\",[[\"360601\",\"月湖区\"],[\"360602\",\"余江区\"],[\"360603\",\"贵溪市\"]]],[\"3607\",\"赣州市\",[[\"360701\",\"章贡区\"],[\"360702\",\"赣县区\"],[\"360703\",\"信丰县\"],[\"360704\",\"大余县\"],[\"360705\",\"上犹县\"],[\"360706\",\"崇义县\"],[\"360707\",\"安远县\"],[\"360708\",\"龙南市\"],[\"360709\",\"定南县\"],[\"360710\",\"全南县\"],[\"360711\",\"宁都县\"],[\"360712\",\"于都县\"],[\"360713\",\"兴国县\"],[\"360714\",\"会昌县\"],[\"360715\",\"寻乌县\"],[\"360716\",\"石城县\"],[\"360717\",\"瑞金市\"],[\"360718\",\"南康区\"]]],[\"3608\",\"吉安市\",[[\"360801\",\"吉州区\"],[\"360802\",\"青原区\"],[\"360803\",\"吉安县\"],[\"360804\",\"吉水县\"],[\"360805\",\"峡江县\"],[\"360806\",\"新干县\"],[\"360807\",\"永丰县\"],[\"360808\",\"泰和县\"],[\"360809\",\"遂川县\"],[\"360810\",\"万安县\"],[\"360811\",\"安福县\"],[\"360812\",\"永新县\"],[\"360813\",\"井冈山市\"]]],[\"3609\",\"宜春市\",[[\"360901\",\"袁州区\"],[\"360902\",\"奉新县\"],[\"360903\",\"万载县\"],[\"360904\",\"上高县\"],[\"360905\",\"宜丰县\"],[\"360906\",\"靖安县\"],[\"360907\",\"铜鼓县\"],[\"360908\",\"丰城市\"],[\"360909\",\"樟树市\"],[\"360910\",\"高安市\"]]],[\"3610\",\"抚州市\",[[\"361001\",\"临川区\"],[\"361002\",\"南城县\"],[\"361003\",\"黎川县\"],[\"361004\",\"南丰县\"],[\"361005\",\"崇仁县\"],[\"361006\",\"乐安县\"],[\"361007\",\"宜黄县\"],[\"361008\",\"金溪县\"],[\"361009\",\"资溪县\"],[\"361010\",\"东乡区\"],[\"361011\",\"广昌县\"]]],[\"3611\",\"上饶市\",[[\"361101\",\"信州区\"],[\"361102\",\"广信区\"],[\"361103\",\"广丰区\"],[\"361104\",\"玉山县\"],[\"361105\",\"铅山县\"],[\"361106\",\"横峰县\"],[\"361107\",\"弋阳县\"],[\"361108\",\"余干县\"],[\"361109\",\"鄱阳县\"],[\"361110\",\"万年县\"],[\"361111\",\"婺源县\"],[\"361112\",\"德兴市\"]]]]],[\"3700\",\"山东省\",[[\"3701\",\"济南市\",[[\"3712\",\"莱芜区\"],[\"3718\",\"章丘区\"],[\"370101\",\"市中区\"],[\"370102\",\"历下区\"],[\"370103\",\"天桥区\"],[\"370104\",\"槐荫区\"],[\"370105\",\"历城区\"],[\"370106\",\"长清区\"],[\"370107\",\"平阴县\"],[\"370108\",\"济阳区\"],[\"370109\",\"商河县\"],[\"370110\",\"济南高新区\"],[\"371202\",\"钢城区\"]]],[\"3702\",\"青岛市\",[[\"370201\",\"市南区\"],[\"370202\",\"市北区\"],[\"370204\",\"李沧区\"],[\"370205\",\"黄岛区\"],[\"370206\",\"崂山区\"],[\"370207\",\"城阳区\"],[\"370208\",\"胶州市\"],[\"370209\",\"即墨区\"],[\"370210\",\"平度市\"],[\"370212\",\"莱西市\"],[\"370213\",\"青岛经济技术开发区\"],[\"370214\",\"青岛高新技术产业开发区\"]]],[\"3703\",\"淄博市\",[[\"370301\",\"淄川区\"],[\"370302\",\"张店区\"],[\"370303\",\"博山区\"],[\"370304\",\"临淄区\"],[\"370305\",\"周村区\"],[\"370306\",\"桓台县\"],[\"370307\",\"高青县\"],[\"370308\",\"沂源县\"]]],[\"3704\",\"枣庄市\",[[\"370401\",\"市中区\"],[\"370402\",\"薛城区\"],[\"370403\",\"峄城区\"],[\"370404\",\"台儿庄区\"],[\"370405\",\"山亭区\"],[\"370406\",\"滕州市\"]]],[\"3705\",\"东营市\",[[\"370501\",\"东营区\"],[\"370502\",\"河口区\"],[\"370503\",\"垦利区\"],[\"370504\",\"利津县\"],[\"370505\",\"广饶县\"]]],[\"3706\",\"烟台市\",[[\"370601\",\"海阳市\"],[\"370602\",\"芝罘区\"],[\"370603\",\"福山区\"],[\"370604\",\"牟平区\"],[\"370605\",\"莱山区\"],[\"370607\",\"龙口市\"],[\"370608\",\"莱阳市\"],[\"370609\",\"莱州市\"],[\"370610\",\"蓬莱区\"],[\"370611\",\"招远市\"],[\"370612\",\"栖霞市\"],[\"370613\",\"高新区\"],[\"370614\",\"开发区\"]]],[\"3707\",\"潍坊市\",[[\"370701\",\"潍城区\"],[\"370702\",\"寒亭区\"],[\"370703\",\"坊子区\"],[\"370704\",\"奎文区\"],[\"370705\",\"临朐县\"],[\"370706\",\"昌乐县\"],[\"370707\",\"青州市\"],[\"370708\",\"诸城市\"],[\"370709\",\"寿光市\"],[\"370710\",\"安丘市\"],[\"370711\",\"高密市\"],[\"370712\",\"昌邑市\"]]],[\"3708\",\"济宁市\",[[\"3729\",\"兖州区\"],[\"370802\",\"任城区\"],[\"370803\",\"微山县\"],[\"370804\",\"鱼台县\"],[\"370805\",\"金乡县\"],[\"370806\",\"嘉祥县\"],[\"370807\",\"汶上县\"],[\"370808\",\"泗水县\"],[\"370809\",\"梁山县\"],[\"370810\",\"曲阜市\"],[\"370812\",\"邹城市\"]]],[\"3709\",\"泰安市\",[[\"3721\",\"肥城市\"],[\"370901\",\"泰山区\"],[\"370902\",\"岱岳区\"],[\"370903\",\"宁阳县\"],[\"370904\",\"东平县\"],[\"370905\",\"新泰市\"]]],[\"3710\",\"威海市\",[[\"3719\",\"荣成市\"],[\"3720\",\"乳山市\"],[\"371001\",\"环翠区\"],[\"371002\",\"文登区\"]]],[\"3711\",\"日照市\",[[\"371101\",\"东港区\"],[\"371102\",\"岚山区\"],[\"371103\",\"五莲县\"],[\"371104\",\"莒县\"]]],[\"3713\",\"临沂市\",[[\"371301\",\"兰山区\"],[\"371302\",\"罗庄区\"],[\"371303\",\"河东区\"],[\"371304\",\"沂南县\"],[\"371305\",\"郯城县\"],[\"371306\",\"沂水县\"],[\"371307\",\"兰陵县\"],[\"371308\",\"费县\"],[\"371309\",\"平邑县\"],[\"371310\",\"莒南县\"],[\"371311\",\"蒙阴县\"],[\"371312\",\"临沭县\"]]],[\"3714\",\"德州市\",[[\"371401\",\"德城区\"],[\"371402\",\"陵城区\"],[\"371403\",\"宁津县\"],[\"371404\",\"庆云县\"],[\"371405\",\"临邑县\"],[\"371406\",\"齐河县\"],[\"371407\",\"平原县\"],[\"371408\",\"夏津县\"],[\"371409\",\"武城县\"],[\"371410\",\"乐陵市\"],[\"371411\",\"禹城市\"]]],[\"3715\",\"聊城市\",[[\"371501\",\"东昌府区\"],[\"371502\",\"阳谷县\"],[\"371503\",\"莘县\"],[\"371504\",\"茌平区\"],[\"371505\",\"东阿县\"],[\"371506\",\"冠县\"],[\"371507\",\"高唐县\"],[\"371508\",\"临清市\"]]],[\"3716\",\"滨州市\",[[\"371601\",\"滨城区\"],[\"371602\",\"惠民县\"],[\"371603\",\"阳信县\"],[\"371604\",\"无棣县\"],[\"371606\",\"博兴县\"],[\"371607\",\"邹平市\"],[\"371608\",\"沾化区\"]]],[\"3717\",\"菏泽市\",[[\"371701\",\"牡丹区\"],[\"371702\",\"曹县\"],[\"371703\",\"单县\"],[\"371704\",\"成武县\"],[\"371705\",\"巨野县\"],[\"371706\",\"郓城县\"],[\"371707\",\"鄄城县\"],[\"371708\",\"定陶区\"],[\"371709\",\"东明县\"]]]]],[\"4100\",\"河南省\",[[\"4101\",\"郑州市\",[[\"410101\",\"中原区\"],[\"410102\",\"二七区\"],[\"410103\",\"管城回族区\"],[\"410104\",\"金水区\"],[\"410105\",\"惠济区\"],[\"410106\",\"郑东新区\"],[\"410107\",\"经开区\"],[\"410108\",\"高新区\"],"); + data.append("[\"410109\",\"上街区\"],[\"410110\",\"新郑市\"],[\"410111\",\"登封市\"],[\"410112\",\"新密市\"],[\"410113\",\"荥阳市\"],[\"410114\",\"中牟县\"],[\"410115\",\"巩义市\"],[\"410116\",\"航空港区\"]]],[\"4102\",\"开封市\",[[\"410201\",\"龙亭区\"],[\"410202\",\"顺河回族区\"],[\"410203\",\"鼓楼区\"],[\"410204\",\"禹王台区\"],[\"410206\",\"杞县\"],[\"410207\",\"通许县\"],[\"410208\",\"尉氏县\"],[\"410209\",\"祥符区\"],[\"410210\",\"兰考县\"]]],[\"4103\",\"洛阳市\",[[\"410301\",\"老城区\"],[\"410302\",\"西工区\"],[\"410303\",\"瀍河回族区\"],[\"410304\",\"涧西区\"],[\"410306\",\"洛龙区\"],[\"410307\",\"孟津区\"],[\"410308\",\"新安县\"],[\"410309\",\"栾川县\"],[\"410310\",\"嵩县\"],[\"410311\",\"汝阳县\"],[\"410312\",\"宜阳县\"],[\"410313\",\"洛宁县\"],[\"410314\",\"伊川县\"],[\"410315\",\"偃师区\"]]],[\"4104\",\"平顶山市\",[[\"410401\",\"新华区\"],[\"410402\",\"卫东区\"],[\"410403\",\"石龙区\"],[\"410404\",\"湛河区\"],[\"410405\",\"宝丰县\"],[\"410406\",\"叶县\"],[\"410407\",\"鲁山县\"],[\"410408\",\"郏县\"],[\"410409\",\"舞钢市\"],[\"410410\",\"汝州市\"]]],[\"4105\",\"安阳市\",[[\"410501\",\"文峰区\"],[\"410502\",\"北关区\"],[\"410503\",\"殷都区\"],[\"410504\",\"龙安区\"],[\"410505\",\"安阳县\"],[\"410506\",\"汤阴县\"],[\"410507\",\"滑县\"],[\"410508\",\"内黄县\"],[\"410509\",\"林州市\"]]],[\"4106\",\"鹤壁市\",[[\"410601\",\"鹤山区\"],[\"410602\",\"山城区\"],[\"410603\",\"淇滨区\"],[\"410604\",\"浚县\"],[\"410605\",\"淇县\"]]],[\"4107\",\"新乡市\",[[\"410701\",\"红旗区\"],[\"410702\",\"卫滨区\"],[\"410703\",\"凤泉区\"],[\"410704\",\"牧野区\"],[\"410705\",\"新乡县\"],[\"410706\",\"获嘉县\"],[\"410707\",\"原阳县\"],[\"410708\",\"延津县\"],[\"410709\",\"封丘县\"],[\"410710\",\"长垣市\"],[\"410711\",\"卫辉市\"],[\"410712\",\"辉县市\"]]],[\"4108\",\"焦作市\",[[\"410801\",\"解放区\"],[\"410802\",\"中站区\"],[\"410803\",\"马村区\"],[\"410804\",\"山阳区\"],[\"410805\",\"修武县\"],[\"410806\",\"博爱县\"],[\"410807\",\"武陟县\"],[\"410808\",\"温县\"],[\"410809\",\"沁阳市\"],[\"410810\",\"孟州市\"]]],[\"4109\",\"濮阳市\",[[\"410901\",\"华龙区\"],[\"410902\",\"清丰县\"],[\"410903\",\"南乐县\"],[\"410904\",\"范县\"],[\"410905\",\"台前县\"],[\"410906\",\"濮阳县\"]]],[\"4110\",\"许昌市\",[[\"411001\",\"长葛市\"],[\"411002\",\"魏都区\"],[\"411003\",\"建安区\"],[\"411004\",\"鄢陵县\"],[\"411005\",\"襄城县\"],[\"411006\",\"禹州市\"]]],[\"4111\",\"漯河市\",[[\"411101\",\"源汇区\"],[\"411102\",\"郾城区\"],[\"411103\",\"召陵区\"],[\"411104\",\"舞阳县\"],[\"411105\",\"临颍县\"]]],[\"4112\",\"三门峡市\",[[\"411201\",\"湖滨区\"],[\"411202\",\"渑池县\"],[\"411203\",\"陕州区\"],[\"411204\",\"卢氏县\"],[\"411205\",\"义马市\"],[\"411206\",\"灵宝市\"]]],[\"4113\",\"南阳市\",[[\"411301\",\"宛城区\"],[\"411302\",\"卧龙区\"],[\"411303\",\"南召县\"],[\"411304\",\"方城县\"],[\"411305\",\"西峡县\"],[\"411306\",\"镇平县\"],[\"411307\",\"内乡县\"],[\"411308\",\"淅川县\"],[\"411309\",\"社旗县\"],[\"411310\",\"唐河县\"],[\"411311\",\"新野县\"],[\"411312\",\"桐柏县\"],[\"411313\",\"邓州市\"]]],[\"4114\",\"商丘市\",[[\"411401\",\"梁园区\"],[\"411402\",\"睢阳区\"],[\"411403\",\"民权县\"],[\"411404\",\"睢县\"],[\"411405\",\"宁陵县\"],[\"411406\",\"柘城县\"],[\"411407\",\"虞城县\"],[\"411408\",\"夏邑县\"],[\"411409\",\"永城市\"]]],[\"4115\",\"信阳市\",[[\"411501\",\"浉河区\"],[\"411502\",\"平桥区\"],[\"411503\",\"罗山县\"],[\"411504\",\"光山县\"],[\"411505\",\"新县\"],[\"411506\",\"商城县\"],[\"411507\",\"固始县\"],[\"411508\",\"潢川县\"],[\"411509\",\"淮滨县\"],[\"411510\",\"息县\"]]],[\"4116\",\"周口市\",[[\"411601\",\"川汇区\"],[\"411602\",\"扶沟县\"],[\"411603\",\"西华县\"],[\"411604\",\"商水县\"],[\"411605\",\"沈丘县\"],[\"411606\",\"郸城县\"],[\"411607\",\"淮阳区\"],[\"411608\",\"太康县\"],[\"411609\",\"鹿邑县\"],[\"411610\",\"项城市\"]]],[\"4117\",\"驻马店市\",[[\"411701\",\"西平县\"],[\"411702\",\"驿城区\"],[\"411703\",\"上蔡县\"],[\"411704\",\"平舆县\"],[\"411705\",\"正阳县\"],[\"411706\",\"确山县\"],[\"411707\",\"泌阳县\"],[\"411708\",\"汝南县\"],[\"411709\",\"遂平县\"],[\"411710\",\"新蔡县\"]]],[\"4118\",\"济源市\"]]],[\"4200\",\"湖北省\",[[\"4201\",\"武汉市\",[[\"420101\",\"江岸区\"],[\"420102\",\"江汉区\"],[\"420103\",\"硚口区\"],[\"420104\",\"汉阳区\"],[\"420105\",\"武昌区\"],[\"420106\",\"青山区\"],[\"420107\",\"洪山区\"],[\"420108\",\"蔡甸区\"],[\"420109\",\"东西湖区\"],[\"420110\",\"汉南区\"],[\"420111\",\"江夏区\"],[\"420112\",\"黄陂区\"],[\"420113\",\"新洲区\"],[\"420114\",\"武汉经济技术开发区\"],[\"420115\",\"东湖新技术开发区\"],[\"420116\",\"武汉吴家山经济技术开发区\"],[\"420117\",\"高新技术产业开发区\"],[\"420118\",\"经济技术开发区\"]]],[\"4202\",\"黄石市\",[[\"420201\",\"黄石港区\"],[\"420202\",\"西塞山区\"],[\"420203\",\"下陆区\"],[\"420204\",\"铁山区\"],[\"420205\",\"阳新县\"],[\"420206\",\"大冶市\"]]],[\"4203\",\"十堰市\",[[\"420301\",\"茅箭区\"],[\"420302\",\"张湾区\"],[\"420303\",\"郧阳区\"],[\"420304\",\"郧西县\"],[\"420305\",\"竹山县\"],[\"420306\",\"竹溪县\"],[\"420307\",\"房县\"],[\"420308\",\"丹江口市\"]]],[\"4205\",\"宜昌市\",[[\"420501\",\"西陵区\"],[\"420502\",\"伍家岗区\"],[\"420503\",\"点军区\"],[\"420504\",\"猇亭区\"],[\"420505\",\"夷陵区\"],[\"420506\",\"远安县\"],[\"420507\",\"兴山县\"],[\"420508\",\"秭归县\"],[\"420509\",\"长阳土家族自治县\"],[\"420510\",\"五峰土家族自治县\"],[\"420511\",\"宜都市\"],[\"420512\",\"当阳市\"],[\"420513\",\"枝江市\"]]],[\"4206\",\"襄阳市\",[[\"420601\",\"襄城区\"],[\"420602\",\"樊城区\"],[\"420603\",\"襄州区\"],[\"420604\",\"南漳县\"],[\"420605\",\"谷城县\"],[\"420606\",\"保康县\"],[\"420607\",\"老河口市\"],[\"420608\",\"枣阳市\"],[\"420609\",\"宜城市\"],[\"420699\",\"高新区\"]]],[\"4207\",\"鄂州市\",[[\"420701\",\"梁子湖区\"],[\"420702\",\"华容区\"],[\"420703\",\"鄂城区\"]]],[\"4208\",\"荆门市\",[[\"420801\",\"东宝区\"],[\"420802\",\"掇刀区\"],[\"420803\",\"京山市\"],[\"420804\",\"沙洋县\"],[\"420805\",\"钟祥市\"]]],[\"4209\",\"孝感市\",[[\"420901\",\"孝南区\"],[\"420902\",\"孝昌县\"],[\"420903\",\"大悟县\"],[\"420904\",\"云梦县\"],[\"420905\",\"应城市\"],[\"420906\",\"安陆市\"],[\"420907\",\"汉川市\"]]],[\"4210\",\"荆州市\",[[\"421001\",\"公安县\"],[\"421002\",\"沙市区\"],[\"421003\",\"荆州区\"],[\"421004\",\"监利市\"],[\"421005\",\"江陵县\"],[\"421006\",\"石首市\"],[\"421007\",\"洪湖市\"],[\"421008\",\"松滋市\"]]],[\"4211\",\"黄冈市\",[[\"421101\",\"武穴市\"],[\"421102\",\"黄州区\"],[\"421103\",\"团风县\"],[\"421104\",\"红安县\"],[\"421105\",\"罗田县\"],[\"421106\",\"英山县\"],[\"421107\",\"浠水县\"],[\"421108\",\"蕲春县\"],[\"421109\",\"黄梅县\"],[\"421110\",\"麻城市\"]]],[\"4212\",\"咸宁市\",[[\"421201\",\"咸安区\"],[\"421202\",\"嘉鱼县\"],[\"421203\",\"通城县\"],[\"421204\",\"崇阳县\"],[\"421205\",\"通山县\"],[\"421206\",\"赤壁市\"]]],[\"4213\",\"随州市\",[[\"421301\",\"曾都区\"],[\"421302\",\"随县\"],[\"421303\",\"广水市\"]]],[\"4228\",\"恩施土家族苗族自治州\",[[\"422801\",\"恩施市\"],[\"422802\",\"利川市\"],[\"422803\",\"建始县\"],[\"422804\",\"巴东县\"],[\"422805\",\"宣恩县\"],[\"422806\",\"咸丰县\"],[\"422807\",\"来凤县\"],[\"422808\",\"鹤峰县\"]]],[\"4229\",\"天门市\"],[\"4230\",\"仙桃市\"],[\"4231\",\"潜江市\"],[\"4232\",\"神农架林区\"]]],[\"4300\",\"湖南省\",[[\"4301\",\"长沙市\",[[\"430101\",\"芙蓉区\"],[\"430102\",\"天心区\"],[\"430103\",\"岳麓区\"],[\"430104\",\"开福区\"],[\"430105\",\"雨花区\"],[\"430106\",\"高新区\"],[\"430107\",\"望城区\"],[\"430108\",\"长沙县\"],[\"430109\",\"宁乡市\"],[\"430110\",\"浏阳市\"]]],[\"4302\",\"株洲市\",[[\"430201\",\"荷塘区\"],[\"430202\",\"芦淞区\"],[\"430203\",\"石峰区\"],[\"430204\",\"天元区\"],[\"430205\",\"渌口区\"],[\"430206\",\"攸县\"],[\"430207\",\"茶陵县\"],[\"430208\",\"炎陵县\"],[\"430209\",\"醴陵市\"]]],[\"4303\",\"湘潭市\",[[\"430301\",\"雨湖区\"],[\"430302\",\"岳塘区\"],[\"430303\",\"湘潭县\"],[\"430304\",\"湘乡市\"],[\"430305\",\"韶山市\"]]],[\"4304\",\"衡阳市\",[[\"430401\",\"珠晖区\"],[\"430402\",\"雁峰区\"],[\"430403\",\"石鼓区\"],[\"430404\",\"蒸湘区\"],[\"430405\",\"南岳区\"],[\"430406\",\"衡阳县\"],[\"430407\",\"衡南县\"],[\"430408\",\"衡山县\"],[\"430409\",\"衡东县\"],[\"430410\",\"祁东县\"],[\"430411\",\"耒阳市\"],[\"430412\",\"常宁市\"]]],[\"4305\",\"邵阳市\",[[\"430501\",\"双清区\"],[\"430502\",\"大祥区\"],[\"430503\",\"北塔区\"],[\"430504\",\"邵东市\"],[\"430505\",\"新邵县\"],[\"430506\",\"邵阳县\"],[\"430507\",\"隆回县\"],[\"430508\",\"洞口县\"],[\"430509\",\"绥宁县\"],[\"430510\",\"新宁县\"],[\"430511\",\"城步苗族自治县\"],[\"430512\",\"武冈市\"]]],[\"4306\",\"岳阳市\",[[\"430601\",\"岳阳楼区\"],[\"430602\",\"云溪区\"],[\"430603\",\"君山区\"],[\"430604\",\"岳阳县\"],[\"430605\",\"华容县\"],[\"430606\",\"湘阴县\"],[\"430607\",\"平江县\"],[\"430608\",\"汨罗市\"],[\"430609\",\"临湘市\"]]],[\"4307\",\"常德市\",[[\"430701\",\"武陵区\"],[\"430702\",\"鼎城区\"],[\"430703\",\"安乡县\"],[\"430704\",\"汉寿县\"],[\"430705\",\"澧县\"],[\"430706\",\"临澧县\"],[\"430707\",\"桃源县\"],[\"430708\",\"石门县\"],[\"430709\",\"津市市\"]]],[\"4308\",\"张家界市\",[[\"430801\",\"永定区\"],[\"430802\",\"武陵源区\"],[\"430803\",\"慈利县\"],[\"430804\",\"桑植县\"]]],[\"4309\",\"益阳市\",[[\"430901\",\"资阳区\"],[\"430902\",\"赫山区\"],[\"430903\",\"南县\"],[\"430904\",\"桃江县\"],[\"430905\",\"安化县\"],[\"430906\",\"沅江市\"]]],[\"4310\",\"郴州市\",[[\"431001\",\"北湖区\"],[\"431002\",\"苏仙区\"],[\"431003\",\"桂阳县\"],[\"431004\",\"宜章县\"],[\"431005\",\"永兴县\"],[\"431006\",\"嘉禾县\"],[\"431007\",\"临武县\"],[\"431008\",\"汝城县\"],[\"431009\",\"桂东县\"],[\"431010\",\"安仁县\"],[\"431011\",\"资兴市\"]]],[\"4311\",\"永州市\",[[\"431101\",\"零陵区\"],[\"431102\",\"冷水滩区\"],[\"431103\",\"祁阳市\"],[\"431104\",\"东安县\"],[\"431105\",\"双牌县\"],[\"431106\",\"道县\"],[\"431107\",\"江永县\"],[\"431108\",\"宁远县\"],[\"431109\",\"蓝山县\"],[\"431110\",\"新田县\"],[\"431111\",\"江华瑶族自治县\"]]],[\"4312\",\"怀化市\",[[\"431201\",\"鹤城区\"],[\"431202\",\"中方县\"],[\"431203\",\"沅陵县\"],[\"431204\",\"辰溪县\"],[\"431205\",\"溆浦县\"],[\"431206\",\"会同县\"],[\"431207\",\"麻阳苗族自治县\"],[\"431208\",\"新晃侗族自治县\"],[\"431209\",\"芷江侗族自治县\"],[\"431210\",\"靖州苗族侗族自治县\"],[\"431211\",\"通道侗族自治县\"],[\"431212\",\"洪江市\"]]],[\"4313\",\"娄底市\",[[\"431301\",\"娄星区\"],[\"431302\",\"双峰县\"],[\"431303\",\"新化县\"],[\"431304\",\"冷水江市\"],[\"431305\",\"涟源市\"]]],[\"4331\",\"湘西土家族苗族自治州\",[[\"433101\",\"吉首市\"],[\"433102\",\"泸溪县\"],[\"433103\",\"凤凰县\"],[\"433104\",\"花垣县\"],[\"433105\",\"保靖县\"],[\"433106\",\"古丈县\"],[\"433107\",\"永顺县\"],[\"433108\",\"龙山县\"]]]]],[\"4400\",\"广东省\",[[\"4401\",\"广州市\",[[\"4456\",\"南沙开发区\"],[\"440101\",\"越秀区\"],[\"440102\",\"海珠区\"],[\"440103\",\"荔湾区\"],[\"440104\",\"天河区\"],[\"440105\",\"白云区\"],[\"440106\",\"黄埔区\"],[\"440107\",\"番禺区\"],[\"440108\",\"花都区\"],[\"440110\",\"南沙区\"],[\"440111\",\"增城区\"],[\"440112\",\"从化区\"]]],[\"4402\",\"韶关市\",[[\"440201\",\"武江区\"],[\"440202\",\"浈江区\"],[\"440203\",\"曲江区\"],[\"440204\",\"始兴县\"],[\"440205\",\"仁化县\"],[\"440206\",\"翁源县\"],[\"440207\",\"乳源瑶族自治县\"],[\"440208\",\"新丰县\"],[\"440209\",\"乐昌市\"],[\"440210\",\"南雄市\"]]],[\"4403\",\"深圳市\",[[\"440301\",\"福田区\"],[\"440302\",\"罗湖区\"],[\"440303\",\"南山区\"],[\"440304\",\"盐田区\"],[\"440305\",\"宝安区\"],[\"440306\",\"龙岗区\"],[\"440307\",\"坪山区\"],[\"440308\",\"光明区\"],[\"440309\",\"龙华区\"],[\"440310\",\"大鹏新区\"]]],[\"4404\",\"珠海市\",[[\"440401\",\"香洲区\"],[\"440402\",\"斗门区\"],[\"440403\",\"金湾区\"]]],[\"4405\",\"汕头市\",[[\"440501\",\"龙湖区\"],[\"440502\",\"金平区\"],[\"440503\",\"濠江区\"],[\"440504\",\"潮阳区\"],[\"440505\",\"潮南区\"],[\"440506\",\"澄海区\"],[\"440507\",\"南澳县\"]]],[\"4406\",\"佛山市\",[[\"440601\",\"禅城区\"],[\"440602\",\"三水区\"],[\"440603\",\"高明区\"],[\"440604\",\"南海区\"],[\"440605\",\"顺德区\"]]],[\"4407\",\"江门市\",[[\"440701\",\"台山市\"],[\"440702\",\"开平市\"],[\"440703\",\"鹤山市\"],[\"440704\",\"蓬江区\"],[\"440705\",\"江海区\"],[\"440706\",\"新会区\"],[\"440707\",\"恩平市\"]]],[\"4408\",\"湛江市\",[[\"440801\",\"赤坎区\"],[\"440802\",\"霞山区\"],[\"440803\",\"坡头区\"],[\"440804\",\"麻章区\"],[\"440805\",\"遂溪县\"],[\"440806\",\"徐闻县\"],[\"440807\",\"廉江市\"],[\"440808\",\"雷州市\"],[\"440809\",\"吴川市\"]]],[\"4409\",\"茂名市\",[[\"440901\",\"茂南区\"],[\"440903\",\"电白区\"],[\"440904\",\"高州市\"],[\"440905\",\"化州市\"],[\"440906\",\"信宜市\"]]],[\"4412\",\"肇庆市\",[[\"441201\",\"端州区\"],[\"441202\",\"鼎湖区\"],[\"441203\",\"广宁县\"],[\"441204\",\"怀集县\"],[\"441205\",\"封开县\"],[\"441206\",\"德庆县\"],[\"441207\",\"高要区\"],[\"441208\",\"四会市\"]]],[\"4413\",\"惠州市\",[[\"441301\",\"惠城区\"],[\"441302\",\"惠阳区\"],[\"441303\",\"博罗县\"],[\"441304\",\"惠东县\"],[\"441305\",\"龙门县\"]]],[\"4414\",\"梅州市\",[[\"441401\",\"梅江区\"],[\"441402\",\"梅县区\"],[\"441403\",\"大埔县\"],[\"441404\",\"丰顺县\"],[\"441405\",\"五华县\"],[\"441406\",\"平远县\"],[\"441407\",\"蕉岭县\"],[\"441408\",\"兴宁市\"]]],[\"4415\",\"汕尾市\",[[\"441501\",\"城区\"],[\"441502\",\"海丰县\"],[\"441503\",\"陆河县\"],[\"441504\",\"陆丰市\"]]],[\"4416\",\"河源市\",[[\"441601\",\"龙川县\"],[\"441602\",\"源城区\"],[\"441603\",\"紫金县\"],[\"441604\",\"连平县\"],[\"441605\",\"和平县\"],[\"441606\",\"东源县\"]]],[\"4417\",\"阳江市\",[[\"441701\",\"江城区\"],[\"441702\",\"阳西县\"],[\"441703\",\"阳东区\"],[\"441704\",\"阳春市\"]]],[\"4418\",\"清远市\",[[\"441801\",\"清城区\"],[\"441802\",\"佛冈县\"],[\"441803\",\"阳山县\"],[\"441804\",\"连山壮族瑶族自治县\"],[\"441805\",\"连南瑶族自治县\"],[\"441806\",\"清新区\"],[\"441807\",\"英德市\"],[\"441808\",\"连州市\"]]],[\"4419\",\"东莞市\",[[\"441901\",\"莞城街道\"],[\"441902\",\"南城街道\"],[\"441903\",\"东城街道\"],[\"441904\",\"万江街道\"],[\"441905\",\"石碣镇\"],[\"441906\",\"石龙镇\"],[\"441907\",\"茶山镇\"],[\"441908\",\"石排镇\"],[\"441909\",\"企石镇\"],[\"441910\",\"横沥镇\"],[\"441911\",\"桥头镇\"],[\"441912\",\"谢岗镇\"],[\"441913\",\"东坑镇\"],[\"441914\",\"常平镇\"],[\"441915\",\"寮步镇\"],[\"441916\",\"大朗镇\"],[\"441917\",\"麻涌镇\"],[\"441918\",\"中堂镇\"],[\"441919\",\"高埗镇\"],[\"441920\",\"樟木头镇\"],[\"441921\",\"大岭山镇\"],[\"441922\",\"望牛墩镇\"],[\"441923\",\"黄江镇\"],[\"441924\",\"洪梅镇\"],[\"441925\",\"清溪镇\"],[\"441926\",\"沙田镇\"],[\"441927\",\"道滘镇\"],[\"441928\",\"塘厦镇\"],[\"441929\",\"虎门镇\"],[\"441930\",\"厚街镇\"],[\"441931\",\"凤岗镇\"],[\"441932\",\"长安镇\"],[\"441933\",\"松山湖\"]]],[\"4420\",\"中山市\",[[\"442001\",\"石岐街道\"],[\"442002\",\"东区街道\"],[\"442003\",\"西区街道\"],[\"442004\",\"南区街道\"],[\"442005\",\"五桂山街道\"],[\"442006\",\"火炬开发区街道\"],[\"442007\",\"民众街道\"],[\"442008\",\"南朗街道\"],[\"442009\",\"黄圃镇\"],[\"442010\",\"南头镇\"],[\"442011\",\"东凤镇\"],[\"442012\",\"阜沙镇\"],[\"442013\",\"小榄镇\"],[\"442014\",\"古镇镇\"],[\"442015\",\"横栏镇\"],[\"442016\",\"三角镇\"],[\"442017\",\"港口镇\"],[\"442018\",\"大涌镇\"],[\"442019\",\"沙溪镇\"],[\"442020\",\"三乡镇\"],[\"442021\",\"板芙镇\"],[\"442022\",\"神湾镇\"],[\"442023\",\"坦洲镇\"],[\"442024\",\"中山火炬高技术产业开发区\"],[\"442025\",\"翠亨新区\"]]],[\"4451\",\"潮州市\",[[\"445101\",\"湘桥区\"],[\"445102\",\"潮安区\"],[\"445103\",\"饶平县\"]]],[\"4452\",\"揭阳市\",[[\"445201\",\"普宁市\"],[\"445202\",\"榕城区\"],[\"445203\",\"揭东区\"],[\"445204\",\"揭西县\"],[\"445205\",\"惠来县\"]]],[\"4453\",\"云浮市\",[[\"445301\",\"云城区\"],[\"445302\",\"新兴县\"],[\"445303\",\"郁南县\"],[\"445304\",\"云安区\"],[\"445305\",\"罗定市\"]]],[\"4499\",\"横琴粤澳深度合作区\"]]],[\"4500\",\"广西壮族自治区\",[[\"4501\",\"南宁市\",[[\"450101\",\"兴宁区\"],[\"450102\",\"青秀区\"],[\"450103\",\"江南区\"],[\"450104\",\"西乡塘区\"],[\"450105\",\"良庆区\"],[\"450106\",\"邕宁区\"],[\"450107\",\"武鸣区\"],[\"450108\",\"隆安县\"],[\"450109\",\"马山县\"],[\"450110\",\"上林县\"],[\"450111\",\"宾阳县\"],[\"450112\",\"横州市\"]]],[\"4502\",\"柳州市\",[[\"450201\",\"城中区\"],[\"450202\",\"鱼峰区\"],[\"450203\",\"柳南区\"],[\"450204\",\"柳北区\"],[\"450205\",\"柳江区\"],[\"450206\",\"柳城县\"],[\"450207\",\"鹿寨县\"],[\"450208\",\"融安县\"],[\"450209\",\"融水苗族自治县\"],[\"450210\",\"三江侗族自治县\"]]],[\"4503\",\"桂林市\",[[\"450301\",\"秀峰区\"],[\"450302\",\"叠彩区\"],[\"450303\",\"象山区\"],[\"450304\",\"七星区\"],[\"450305\",\"雁山区\"],[\"450306\",\"阳朔县\"],[\"450307\",\"临桂区\"],[\"450308\",\"灵川县\"],[\"450309\",\"全州县\"],[\"450310\",\"兴安县\"],[\"450311\",\"永福县\"],[\"450312\",\"灌阳县\"],[\"450313\",\"龙胜各族自治县\"],[\"450314\",\"资源县\"],[\"450315\",\"平乐县\"],[\"450316\",\"荔浦市\"],[\"450317\",\"恭城瑶族自治县\"]]],[\"4504\",\"梧州市\",[[\"450401\",\"万秀区\"],[\"450403\",\"长洲区\"],[\"450404\",\"苍梧县\"],[\"450405\",\"藤县\"],[\"450406\",\"蒙山县\"],[\"450407\",\"岑溪市\"],[\"450408\",\"龙圩区\"]]],[\"4505\",\"北海市\",[[\"450501\",\"海城区\"],[\"450502\",\"银海区\"],[\"450503\",\"铁山港区\"],[\"450504\",\"合浦县\"]]],[\"4506\",\"防城港市\",[[\"450601\",\"港口区\"],[\"450602\",\"防城区\"],[\"450603\",\"上思县\"],[\"450604\",\"东兴市\"]]],[\"4507\",\"钦州市\",[[\"450701\",\"钦南区\"],[\"450702\",\"钦北区\"],[\"450703\",\"灵山县\"],[\"450704\",\"浦北县\"]]],[\"4508\",\"贵港市\",[[\"450801\",\"港北区\"],[\"450802\",\"港南区\"],[\"450803\",\"覃塘区\"],[\"450804\",\"平南县\"],[\"450805\",\"桂平市\"]]],[\"4509\",\"玉林市\",[[\"450901\",\"玉州区\"],[\"450902\",\"容县\"],[\"450903\",\"陆川县\"],[\"450904\",\"博白县\"],[\"450905\",\"兴业县\"],[\"450906\",\"北流市\"],[\"450907\",\"福绵区\"]]],[\"4510\",\"百色市\",[[\"451001\",\"右江区\"],[\"451002\",\"田阳区\"],[\"451003\",\"田东县\"],[\"451004\",\"平果市\"],[\"451005\",\"德保县\"],[\"451006\",\"靖西市\"],[\"451007\",\"那坡县\"],[\"451008\",\"凌云县\"],[\"451009\",\"乐业县\"],[\"451010\",\"田林县\"],[\"451011\",\"西林县\"],[\"451012\",\"隆林各族自治县\"]]],[\"4511\",\"贺州市\",[[\"451101\",\"八步区\"],[\"451102\",\"昭平县\"],[\"451103\",\"钟山县\"],[\"451104\",\"富川瑶族自治县\"],[\"451105\",\"平桂区\"]]],[\"4512\",\"河池市\",[[\"451201\",\"金城江区\"],[\"451202\",\"南丹县\"],[\"451203\",\"天峨县\"],[\"451204\",\"凤山县\"],[\"451205\",\"东兰县\"],[\"451206\",\"罗城仫佬族自治县\"],[\"451207\",\"环江毛南族自治县\"],[\"451208\",\"巴马瑶族自治县\"],[\"451209\",\"都安瑶族自治县\"],[\"451210\",\"大化瑶族自治县\"],[\"451211\",\"宜州区\"]]],[\"4513\",\"来宾市\",[[\"451301\",\"兴宾区\"],[\"451302\",\"忻城县\"],[\"451303\",\"象州县\"],[\"451304\",\"武宣县\"],[\"451305\",\"金秀瑶族自治县\"],[\"451306\",\"合山市\"]]],[\"4514\",\"崇左市\",[[\"451401\",\"江州区\"],[\"451402\",\"扶绥县\"],[\"451403\",\"宁明县\"],[\"451404\",\"龙州县\"],[\"451405\",\"大新县\"],[\"451406\",\"天等县\"],[\"451407\",\"凭祥市\"]]]]],[\"4600\",\"海南省\",[[\"4601\",\"海口市\",[[\"460101\",\"秀英区\"],[\"460102\",\"龙华区\"],[\"460103\",\"琼山区\"],[\"460104\",\"美兰区\"]]],[\"4602\",\"三亚市\",[[\"460202\",\"海棠区\"],[\"460203\",\"吉阳区\"],[\"460204\",\"天涯区\"],[\"460205\",\"崖州区\"]]],[\"4603\",\"洋浦经济开发区\"],[\"4604\",\"琼海市\"],[\"4605\",\"儋州市\"],[\"4607\",\"五指山市\"],[\"4608\",\"文昌市\"],[\"4609\",\"万宁市\"],[\"4610\",\"东方市\"],[\"4611\",\"定安县\"],[\"4612\",\"屯昌县\"],[\"4613\",\"澄迈县\"],[\"4614\",\"临高县\"],[\"4615\",\"琼中黎族苗族自治县\"],[\"4616\",\"保亭黎族苗族自治县\"],[\"4617\",\"白沙黎族自治县\"],[\"4618\",\"乐东黎族自治县\"],[\"4619\",\"陵水黎族自治县\"],[\"4620\",\"昌江黎族自治县\"],[\"4621\",\"三沙市\",[[\"460301\",\"西沙区\"],[\"460302\",\"南沙区\"]]]]],[\"5000\",\"重庆市\",[[\"5001\",\"渝中区\"],[\"5002\",\"江北区\"],[\"5003\",\"南岸区\"],[\"5004\",\"沙坪坝区\"],[\"5005\",\"九龙坡区\"],[\"5006\",\"大渡口区\"],[\"5007\",\"渝北区\"],[\"5008\",\"巴南区\"],[\"5009\",\"北碚区\"],[\"5010\",\"万州区\"],[\"5011\",\"黔江区\"],[\"5012\",\"永川区\"],[\"5013\",\"涪陵区\"],[\"5014\",\"长寿区\"],[\"5015\",\"江津区\"],[\"5016\",\"合川区\"],[\"5019\",\"南川区\"],[\"5020\",\"荣昌区\"],[\"5021\",\"大足区\"],[\"5022\",\"璧山区\"],[\"5023\",\"铜梁区\"],[\"5024\",\"潼南区\"],[\"5025\",\"綦江区\"],[\"5026\",\"忠县\"],[\"5027\",\"开州区\"],[\"5028\",\"云阳县\"],[\"5029\",\"梁平区\"],[\"5030\",\"垫江县\"],[\"5031\",\"丰都县\"],[\"5032\",\"奉节县\"],[\"5033\",\"巫山县\"],[\"5034\",\"巫溪县\"],[\"5035\",\"城口县\"],[\"5036\",\"武隆区\"],[\"5042\",\"石柱土家族自治县\"],[\"5043\",\"秀山土家族苗族自治县\"],[\"5044\",\"酉阳土家族苗族自治县\"],[\"5045\",\"彭水苗族土家族自治县\"]]],[\"5100\",\"四川省\",[[\"5101\",\"成都市\",[[\"5137\",\"简阳市\"],[\"510101\",\"青羊区\"],[\"510102\",\"锦江区\"],[\"510103\",\"金牛区\"],[\"510104\",\"武侯区\"],[\"510105\",\"成华区\"],[\"510106\",\"龙泉驿区\"],[\"510107\",\"青白江区\"],[\"510108\",\"新都区\"],[\"510109\",\"温江区\"],[\"510110\",\"双流区\"],[\"510111\",\"郫都区\"],[\"510112\",\"金堂县\"],[\"510113\",\"大邑县\"],[\"510114\",\"蒲江县\"],[\"510115\",\"新津区\"],[\"510116\",\"邛崃市\"],[\"510117\",\"崇州市\"],[\"510118\",\"彭州市\"],[\"510119\",\"都江堰市\"],[\"510120\",\"高新区\"],[\"510121\",\"天府新区\"]]],[\"5103\",\"自贡市\",[[\"510301\",\"自流井区\"],[\"510302\",\"贡井区\"],[\"510303\",\"大安区\"],[\"510304\",\"沿滩区\"],[\"510305\",\"荣县\"],[\"510306\",\"富顺县\"]]],[\"5104\",\"攀枝花市\",[[\"510401\",\"东区\"],[\"510402\",\"西区\"],[\"510403\",\"仁和区\"],[\"510404\",\"米易县\"],[\"510405\",\"盐边县\"]]],[\"5105\",\"泸州市\",[[\"510501\",\"江阳区\"],[\"510502\",\"纳溪区\"],[\"510503\",\"龙马潭区\"],[\"510504\",\"泸县\"],[\"510505\",\"合江县\"],[\"510506\",\"叙永县\"],[\"510507\",\"古蔺县\"]]],[\"5106\",\"德阳市\",[[\"510601\",\"旌阳区\"],[\"510602\",\"中江县\"],[\"510603\",\"罗江区\"],[\"510604\",\"广汉市\"],[\"510605\",\"什邡市\",[[\"51060501\",\"马祖镇\"]]],[\"510606\",\"绵竹市\"]]],[\"5107\",\"绵阳市\",[[\"510701\",\"涪城区\"],[\"510702\",\"游仙区\"],[\"510703\",\"三台县\"],[\"510704\",\"盐亭县\"],[\"510705\",\"安州区\"],[\"510706\",\"梓潼县\"],[\"510707\",\"北川羌族自治县\"],[\"510708\",\"平武县\"],[\"510709\",\"江油市\"]]],[\"5108\",\"广元市\",[[\"510801\",\"利州区\"],[\"510802\",\"昭化区\"],[\"510803\",\"朝天区\"],[\"510804\",\"旺苍县\"],[\"510805\",\"青川县\"],[\"510806\",\"剑阁县\"],[\"510807\",\"苍溪县\"]]],[\"5109\",\"遂宁市\",[[\"510901\",\"船山区\"],[\"510902\",\"安居区\"],[\"510903\",\"蓬溪县\"],[\"510904\",\"射洪市\"],[\"510905\",\"大英县\"]]],[\"5110\",\"内江市\",[[\"511001\",\"市中区\"],[\"511002\",\"东兴区\"],[\"511003\",\"威远县\"],[\"511004\",\"资中县\"],[\"511005\",\"隆昌市\"]]],[\"5111\",\"乐山市\",[[\"5135\",\"峨眉山市\"],[\"511101\",\"市中区\"],[\"511102\",\"沙湾区\"],[\"511103\",\"五通桥区\"],[\"511104\",\"金口河区\"],[\"511105\",\"犍为县\"],[\"511106\",\"井研县\"],[\"511107\",\"夹江县\"],[\"511108\",\"沐川县\"],[\"511109\",\"峨边彝族自治县\"],[\"511110\",\"马边彝族自治县\"]]],[\"5113\",\"南充市\",[[\"511301\",\"顺庆区\"],[\"511302\",\"高坪区\"],[\"511303\",\"嘉陵区\"],[\"511304\",\"南部县\"],[\"511305\",\"营山县\"],[\"511306\",\"蓬安县\"],[\"511307\",\"仪陇县\"],[\"511308\",\"西充县\"],[\"511309\",\"阆中市\"]]],[\"5114\",\"眉山市\",[[\"511401\",\"东坡区\"],[\"511402\",\"仁寿县\"],[\"511403\",\"彭山区\"],[\"511404\",\"洪雅县\"],[\"511405\",\"丹棱县\"],[\"511406\",\"青神县\"]]],[\"5115\",\"宜宾市\",[[\"511501\",\"翠屏区\"],[\"511502\",\"叙州区\"],[\"511503\",\"南溪区\"],[\"511504\",\"江安县\"],[\"511505\",\"长宁县\"],[\"511506\",\"高县\"],[\"511507\",\"珙县\"],[\"511508\",\"筠连县\"],[\"511509\",\"兴文县\"],[\"511510\",\"屏山县\"]]],[\"5116\",\"广安市\",[[\"511601\",\"广安区\"],[\"511602\",\"岳池县\"],[\"511603\",\"武胜县\"],[\"511604\",\"邻水县\"],[\"511605\",\"华蓥市\"],[\"511606\",\"前锋区\"]]],[\"5117\",\"达州市\",[[\"511701\",\"通川区\"],[\"511702\",\"达川区\"],[\"511703\",\"宣汉县\"],[\"511704\",\"开江县\"],[\"511705\",\"大竹县\"],[\"511706\",\"渠县\"],[\"511707\",\"万源市\"]]],[\"5118\",\"雅安市\",[[\"511801\",\"雨城区\"],[\"511802\",\"名山区\"],[\"511803\",\"荥经县\"],[\"511804\",\"汉源县\"],[\"511805\",\"石棉县\"],[\"511806\",\"天全县\"],[\"511807\",\"芦山县\"],[\"511808\",\"宝兴县\"]]],[\"5119\",\"巴中市\",[[\"511901\",\"巴州区\"],[\"511902\",\"通江县\"],[\"511903\",\"南江县\"],[\"511904\",\"平昌县\"],[\"511905\",\"恩阳区\"]]],[\"5120\",\"资阳市\",[[\"512001\",\"雁江区\"],[\"512002\",\"安岳县\"],[\"512003\",\"乐至县\"]]],[\"5132\",\"阿坝藏族羌族自治州\",[[\"513201\",\"汶川县\"],[\"513202\",\"理县\"],[\"513203\",\"茂县\"],[\"513204\",\"松潘县\"],[\"513205\",\"九寨沟县\"],[\"513206\",\"金川县\"],[\"513207\",\"小金县\"],[\"513208\",\"黑水县\"],[\"513209\",\"马尔康市\"],[\"513210\",\"壤塘县\"],[\"513211\",\"阿坝县\"],[\"513212\",\"若尔盖县\"],[\"513213\",\"红原县\"]]],[\"5133\",\"甘孜藏族自治州\",[[\"513301\",\"康定市\"],[\"513302\",\"泸定县\"],[\"513303\",\"丹巴县\"],[\"513304\",\"九龙县\"],[\"513305\",\"雅江县\"],[\"513306\",\"道孚县\"],[\"513307\",\"炉霍县\"],[\"513308\",\"甘孜县\"],[\"513309\",\"新龙县\"],[\"513310\",\"德格县\"],[\"513311\",\"白玉县\"],[\"513312\",\"石渠县\"],[\"513313\",\"色达县\"],[\"513314\",\"理塘县\"],[\"513315\",\"巴塘县\"],[\"513316\",\"乡城县\"],[\"513317\",\"稻城县\"],[\"513318\",\"得荣县\"]]],[\"5134\",\"凉山彝族自治州\",[[\"513401\",\"西昌市\"],[\"513402\",\"木里藏族自治县\"],[\"513403\",\"盐源县\"],[\"513404\",\"德昌县\"],[\"513405\",\"会理市\"],[\"513406\",\"会东县\"],[\"513407\",\"宁南县\"],[\"513408\",\"普格县\"],[\"513409\",\"布拖县\"],[\"513410\",\"金阳县\"],[\"513411\",\"昭觉县\"],[\"513412\",\"喜德县\"],[\"513413\",\"冕宁县\"],[\"513414\",\"越西县\"],[\"513415\",\"甘洛县\"],[\"513416\",\"美姑县\"],[\"513417\",\"雷波县\"]]]]],[\"5200\",\"贵州省\",[[\"5201\",\"贵阳市\",[[\"520101\",\"云岩区\"],[\"520102\",\"南明区\"],[\"520103\",\"花溪区\"],[\"520104\",\"观山湖区\"],[\"520105\",\"乌当区\"],[\"520106\",\"清镇市\"],[\"520107\",\"修文县\"],[\"520108\",\"息烽县\"],[\"520109\",\"开阳县\"],[\"520110\",\"白云区\"]]],[\"5202\",\"六盘水市\",[[\"520201\",\"钟山区\"],[\"520202\",\"六枝特区\"],[\"520203\",\"水城区\"],[\"520204\",\"盘州市\"]]],[\"5203\",\"遵义市\",[[\"520301\",\"红花岗区\"],[\"520302\",\"汇川区\"],[\"520303\",\"播州区\"],[\"520304\",\"桐梓县\"],[\"520305\",\"绥阳县\"],[\"520306\",\"正安县\"],[\"520307\",\"道真仡佬族苗族自治县\"],[\"520308\",\"务川仡佬族苗族自治县\"],[\"520309\",\"凤冈县\"],[\"520310\",\"湄潭县\"],[\"520311\",\"余庆县\"],[\"520312\",\"习水县\"],[\"520313\",\"赤水市\"],[\"520314\",\"仁怀市\",[[\"52031401\",\"茅台镇\"]]]]],[\"5204\",\"安顺市\",[[\"520401\",\"西秀区\"],[\"520402\",\"平坝区\"],[\"520403\",\"普定县\"],[\"520404\",\"镇宁布依族苗族自治县\"],[\"520405\",\"关岭布依族苗族自治县\"],[\"520406\",\"紫云苗族布依族自治县\"]]],[\"5222\",\"铜仁市\",[[\"522202\",\"江口县\"],[\"522203\",\"玉屏侗族自治县\"],[\"522204\",\"石阡县\"],[\"522205\",\"思南县\"],[\"522206\",\"印江土家族苗族自治县\"],[\"522207\",\"德江县\"],[\"522208\",\"沿河土家族自治县\"],[\"522209\",\"松桃苗族自治县\"],[\"522210\",\"万山区\"],[\"522211\",\"碧江区\"]]],[\"5223\",\"黔西南布依族苗族自治州\",[[\"522301\",\"兴义市\"],[\"522302\",\"兴仁市\"],[\"522303\",\"普安县\"],[\"522304\",\"晴隆县\"],[\"522305\",\"贞丰县\"],[\"522306\",\"望谟县\"],[\"522307\",\"册亨县\"],[\"522308\",\"安龙县\"]]],[\"5224\",\"毕节市\",[[\"522402\",\"大方县\"],[\"522403\",\"黔西市\"],[\"522404\",\"金沙县\"],[\"522405\",\"织金县\"],[\"522406\",\"纳雍县\"],[\"522407\",\"威宁彝族回族苗族自治县\"],[\"522408\",\"赫章县\"],[\"522409\",\"七星关区\"]]],[\"5226\",\"黔东南苗族侗族自治州\",[[\"522601\",\"凯里市\"],[\"522602\",\"黄平县\"],[\"522603\",\"施秉县\"],[\"522604\",\"三穗县\"],[\"522605\",\"镇远县\"],[\"522606\",\"岑巩县\"],[\"522607\",\"天柱县\"],[\"522608\",\"锦屏县\"],[\"522609\",\"剑河县\"],[\"522610\",\"台江县\"],[\"522611\",\"黎平县\"],[\"522612\",\"榕江县\"],[\"522613\",\"从江县\"],[\"522614\",\"雷山县\"],[\"522615\",\"麻江县\"],[\"522616\",\"丹寨县\"]]],[\"5227\",\"黔南布依族苗族自治州\",[[\"522701\",\"都匀市\"],[\"522702\",\"福泉市\"],[\"522703\",\"荔波县\"],[\"522704\",\"贵定县\"],[\"522705\",\"瓮安县\"],[\"522706\",\"独山县\"],[\"522707\",\"平塘县\"],[\"522708\",\"罗甸县\"],[\"522709\",\"长顺县\"],[\"522710\",\"龙里县\"],[\"522711\",\"惠水县\"],[\"522712\",\"三都水族自治县\"]]]]],[\"5300\",\"云南省\",[[\"5301\",\"昆明市\",[[\"530101\",\"五华区\"],[\"530102\",\"盘龙区\"],[\"530103\",\"官渡区\"],[\"530104\",\"西山区\"],[\"530105\",\"东川区\"],[\"530106\",\"呈贡区\"],[\"530107\",\"晋宁区\"],[\"530108\",\"富民县\"],[\"530109\",\"宜良县\"],[\"530110\",\"石林彝族自治县\"],[\"530111\",\"嵩明县\"],[\"530112\",\"禄劝彝族苗族自治县\"],[\"530113\",\"寻甸回族彝族自治县\"],[\"530114\",\"安宁市\"]]],[\"5303\",\"曲靖市\",[[\"530301\",\"麒麟区\"],[\"530302\",\"马龙区\"],[\"530303\",\"陆良县\"],[\"530304\",\"师宗县\"],[\"530305\",\"罗平县\"],[\"530306\",\"富源县\"],[\"530307\",\"会泽县\"],[\"530308\",\"沾益区\"],[\"530309\",\"宣威市\"]]],[\"5304\",\"玉溪市\",[[\"530401\",\"红塔区\"],[\"530402\",\"江川区\"],[\"530403\",\"澄江市\"],[\"530404\",\"通海县\"],[\"530405\",\"华宁县\"],[\"530406\",\"易门县\"],[\"530407\",\"峨山彝族自治县\"],[\"530408\",\"新平彝族傣族自治县\"],[\"530409\",\"元江哈尼族彝族傣族自治县\"]]],[\"5305\",\"保山市\",[[\"530501\",\"隆阳区\"],[\"530502\",\"施甸县\"],[\"530503\",\"腾冲市\"],[\"530504\",\"龙陵县\"],[\"530505\",\"昌宁县\"]]],[\"5306\",\"昭通市\",[[\"530601\",\"昭阳区\"],[\"530602\",\"鲁甸县\"],[\"530603\",\"巧家县\"],[\"530604\",\"盐津县\"],[\"530605\",\"大关县\"],[\"530606\",\"永善县\"],[\"530607\",\"绥江县\"],[\"530608\",\"镇雄县\"],[\"530609\",\"彝良县\"],[\"530610\",\"威信县\"],[\"530611\",\"水富市\"]]],[\"5307\",\"丽江市\",[[\"530701\",\"古城区\"],[\"530702\",\"玉龙纳西族自治县\"],[\"530703\",\"永胜县\"],[\"530704\",\"华坪县\"],[\"530705\",\"宁蒗彝族自治县\"]]],[\"5308\",\"普洱市\",[[\"530801\",\"思茅区\"],[\"530802\",\"宁洱哈尼族彝族自治县\"],[\"530803\",\"墨江哈尼族自治县\"],[\"530804\",\"景东彝族自治县\"],[\"530805\",\"景谷傣族彝族自治县\"],[\"530806\",\"镇沅彝族哈尼族拉祜族自治县\"],[\"530807\",\"江城哈尼族彝族自治县\"],[\"530808\",\"孟连傣族拉祜族佤族自治县\"],[\"530809\",\"澜沧拉祜族自治县\"],[\"530810\",\"西盟佤族自治县\"]]],[\"5309\",\"临沧市\",[[\"530901\",\"临翔区\"],[\"530902\",\"凤庆县\"],[\"530903\",\"云县\"],[\"530904\",\"永德县\"],[\"530905\",\"镇康县\"],[\"530906\",\"双江拉祜族佤族布朗族傣族自治县\"],[\"530907\",\"耿马傣族佤族自治县\"],[\"530908\",\"沧源佤族自治县\"]]],[\"5323\",\"楚雄彝族自治州\",[[\"532301\",\"楚雄市\"],[\"532302\",\"双柏县\"],[\"532303\",\"牟定县\"],[\"532304\",\"南华县\"],[\"532305\",\"姚安县\"],[\"532306\",\"大姚县\"],[\"532307\",\"永仁县\"],[\"532308\",\"元谋县\"],[\"532309\",\"武定县\"],[\"532310\",\"禄丰市\"]]],[\"5325\",\"红河哈尼族彝族自治州\",[[\"532501\",\"个旧市\"],[\"532502\",\"开远市\"],[\"532503\",\"蒙自市\"],[\"532504\",\"屏边苗族自治县\"],[\"532505\",\"建水县\"],[\"532506\",\"石屏县\"],[\"532507\",\"弥勒市\"],[\"532508\",\"泸西县\"],[\"532509\",\"元阳县\"],[\"532510\",\"红河县\"],[\"532511\",\"金平苗族瑶族傣族自治县\"],[\"532512\",\"绿春县\"],[\"532513\",\"河口瑶族自治县\"]]],[\"5326\",\"文山壮族苗族自治州\",[[\"532601\",\"文山市\"],[\"532602\",\"砚山县\"],[\"532603\",\"西畴县\"],[\"532604\",\"麻栗坡县\"],[\"532605\",\"马关县\"],[\"532606\",\"丘北县\"],[\"532607\",\"广南县\"],[\"532608\",\"富宁县\"]]],[\"5328\",\"西双版纳傣族自治州\",[[\"532801\",\"景洪市\"],[\"532802\",\"勐海县\"],[\"532803\",\"勐腊县\"]]],[\"5329\",\"大理白族自治州\",[[\"532901\",\"大理市\"],[\"532902\",\"漾濞彝族自治县\"],[\"532903\",\"祥云县\"],[\"532904\",\"宾川县\"],[\"532905\",\"弥渡县\"],[\"532906\",\"南涧彝族自治县\"],[\"532907\",\"巍山彝族回族自治县\"],[\"532908\",\"永平县\"],[\"532909\",\"云龙县\"],[\"532910\",\"洱源县\"],[\"532911\",\"剑川县\"],[\"532912\",\"鹤庆县\"]]],[\"5331\",\"德宏傣族景颇族自治州\",[[\"533101\",\"瑞丽市\"],[\"533103\",\"梁河县\"],[\"533104\",\"盈江县\"],[\"533105\",\"陇川县\"],[\"533106\",\"芒市\"]]],[\"5333\",\"怒江傈僳族自治州\",[[\"533301\",\"泸水市\"],[\"533302\",\"福贡县\"],[\"533303\",\"贡山独龙族怒族自治县\"],[\"533304\",\"兰坪白族普米族自治县\"]]],[\"5334\",\"迪庆藏族自治州\",[[\"533401\",\"香格里拉市\"],[\"533402\",\"德钦县\"],[\"533403\",\"维西傈僳族自治县\"]]]]],[\"5400\",\"西藏自治区\",[[\"5401\",\"拉萨市\",[[\"540101\",\"城关区\"],[\"540102\",\"林周县\"],[\"540103\",\"当雄县\"],[\"540104\",\"尼木县\"],[\"540105\",\"曲水县\"],[\"540106\",\"堆龙德庆区\"],[\"540107\",\"达孜区\"],[\"540108\",\"墨竹工卡县\"]]],[\"5421\",\"昌都市\",[[\"542101\",\"卡若区\"],[\"542102\",\"江达县\"],[\"542103\",\"贡觉县\"],[\"542104\",\"类乌齐县\"],[\"542105\",\"丁青县\"],[\"542106\",\"察雅县\"],[\"542107\",\"八宿县\"],[\"542108\",\"左贡县\"],[\"542109\",\"芒康县\"],[\"542110\",\"洛隆县\"],[\"542111\",\"边坝县\"]]],[\"5422\",\"山南市\",[[\"542201\",\"乃东区\"],[\"542202\",\"扎囊县\"],[\"542203\",\"贡嘎县\"],[\"542204\",\"桑日县\"],[\"542205\",\"琼结县\"],[\"542206\",\"曲松县\"],[\"542207\",\"措美县\"],[\"542208\",\"洛扎县\"],[\"542209\",\"加查县\"],[\"542210\",\"隆子县\"],[\"542211\",\"错那县\"],[\"542212\",\"浪卡子县\"]]],[\"5423\",\"日喀则市\",[[\"542301\",\"桑珠孜区\"],[\"542302\",\"南木林县\"],[\"542303\",\"江孜县\"],[\"542304\",\"定日县\"],[\"542305\",\"萨迦县\"],[\"542306\",\"拉孜县\"],[\"542307\",\"昂仁县\"],[\"542308\",\"谢通门县\"],[\"542309\",\"白朗县\"],[\"542310\",\"仁布县\"],[\"542311\",\"康马县\"],[\"542312\",\"定结县\"],[\"542313\",\"仲巴县\"],[\"542314\",\"亚东县\"],[\"542315\",\"吉隆县\"],[\"542316\",\"聂拉木县\"],[\"542317\",\"萨嘎县\"],[\"542318\",\"岗巴县\"]]],[\"5424\",\"那曲市\",[[\"542401\",\"色尼区\"],[\"542402\",\"嘉黎县\"],[\"542403\",\"比如县\"],[\"542404\",\"聂荣县\"],[\"542405\",\"安多县\"],[\"542406\",\"申扎县\"],[\"542407\",\"索县\"],[\"542408\",\"班戈县\"],[\"542409\",\"巴青县\"],[\"542410\",\"尼玛县\"],[\"542411\",\"双湖县\"]]],[\"5425\",\"阿里地区\",[[\"542501\",\"普兰县\"],[\"542502\",\"札达县\"],[\"542503\",\"噶尔县\"],[\"542504\",\"日土县\"],[\"542505\",\"革吉县\"],[\"542506\",\"改则县\"],[\"542507\",\"措勤县\"]]],[\"5426\",\"林芝市\",[[\"542601\",\"巴宜区\"],[\"542602\",\"工布江达县\"],[\"542603\",\"米林县\"],[\"542604\",\"墨脱县\"],[\"542605\",\"波密县\"],[\"542606\",\"察隅县\"],[\"542607\",\"朗县\"]]]]],[\"6100\",\"陕西省\",[[\"6101\",\"西安市\",[[\"610101\",\"新城区\"],[\"610102\",\"碑林区\"],[\"610103\",\"莲湖区\"],[\"610104\",\"雁塔区\"],[\"610105\",\"未央区\"],[\"610106\",\"灞桥区\"],[\"610107\",\"长安区\"],[\"610108\",\"阎良区\"],[\"610109\",\"临潼区\"],[\"610110\",\"蓝田县\"],[\"610111\",\"周至县\"],[\"610112\",\"鄠邑区\"],[\"610113\",\"高陵区\"],[\"610114\",\"沣渭新区\"],[\"610115\",\"曲江新区\"],[\"610116\",\"浐灞生态区\"],[\"610117\",\"阎良国家航空高新技术产业基地\"],[\"610118\",\"西安国家民用航天产业基地\"],[\"610119\",\"国际港务区\"],[\"610120\",\"高新区\"],[\"610121\",\"经济技术开发区\"]]],[\"6102\",\"铜川市\",[[\"610201\",\"王益区\"],[\"610202\",\"印台区\"],[\"610203\",\"耀州区\"],[\"610204\",\"宜君县\"]]],[\"6103\",\"宝鸡市\",[[\"610301\",\"渭滨区\"],[\"610302\",\"金台区\"],[\"610303\",\"陈仓区\"],[\"610304\",\"凤翔区\"],[\"610305\",\"岐山县\"],[\"610306\",\"扶风县\"],[\"610307\",\"眉县\"],[\"610308\",\"陇县\"],[\"610309\",\"千阳县\"],[\"610310\",\"麟游县\"],[\"610311\",\"凤县\"],[\"610312\",\"太白县\"]]],[\"6104\",\"咸阳市\",[[\"610401\",\"兴平市\"],[\"610402\",\"秦都区\"],[\"610403\",\"渭城区\"],[\"610404\",\"三原县\"],[\"610405\",\"泾阳县\"],[\"610406\",\"乾县\"],[\"610407\",\"礼泉县\"],[\"610408\",\"永寿县\"],[\"610409\",\"彬州市\"],[\"610410\",\"长武县\"],[\"610411\",\"旬邑县\"],[\"610412\",\"淳化县\"],[\"610413\",\"武功县\"],[\"610414\",\"杨陵区\"]]],[\"6105\",\"渭南市\",[[\"610501\",\"临渭区\"],[\"610502\",\"华州区\"],[\"610503\",\"潼关县\"],[\"610504\",\"大荔县\"],[\"610505\",\"合阳县\"],[\"610506\",\"澄城县\"],[\"610507\",\"蒲城县\"],[\"610508\",\"白水县\"],[\"610509\",\"富平县\"],[\"610510\",\"韩城市\"],[\"610511\",\"华阴市\"]]],[\"6106\",\"延安市\",[[\"610601\",\"宝塔区\"],[\"610602\",\"延长县\"],[\"610603\",\"延川县\"],[\"610604\",\"子长市\"],[\"610605\",\"安塞区\"],[\"610606\",\"志丹县\"],[\"610607\",\"吴起县\"],[\"610608\",\"甘泉县\"],[\"610609\",\"富县\"],[\"610610\",\"洛川县\"],[\"610611\",\"宜川县\"],[\"610612\",\"黄龙县\"],[\"610613\",\"黄陵县\"]]],[\"6107\",\"汉中市\",[[\"610701\",\"汉台区\"],[\"610702\",\"南郑区\"],[\"610703\",\"城固县\"],[\"610704\",\"洋县\"],[\"610705\",\"西乡县\"],[\"610706\",\"勉县\"],[\"610707\",\"宁强县\"],[\"610708\",\"略阳县\"],[\"610709\",\"镇巴县\"],[\"610710\",\"留坝县\"],[\"610711\",\"佛坪县\"]]],[\"6108\",\"榆林市\",[[\"610801\",\"榆阳区\"],[\"610802\",\"神木市\"],[\"610803\",\"府谷县\"],[\"610804\",\"横山区\"],[\"610805\",\"靖边县\"],[\"610806\",\"定边县\"],[\"610807\",\"绥德县\"],[\"610808\",\"米脂县\"],[\"610809\",\"佳县\"],[\"610810\",\"吴堡县\"],[\"610811\",\"清涧县\"],[\"610812\",\"子洲县\"]]],[\"6109\",\"安康市\",[[\"610901\",\"汉滨区\"],[\"610902\",\"汉阴县\"],[\"610903\",\"石泉县\"],[\"610904\",\"宁陕县\"],[\"610905\",\"紫阳县\"],[\"610906\",\"岚皋县\"],[\"610907\",\"平利县\"],[\"610908\",\"镇坪县\"],[\"610909\",\"旬阳市\"],[\"610910\",\"白河县\"]]],[\"6110\",\"商洛市\",[[\"611001\",\"商州区\"],[\"611002\",\"洛南县\"],[\"611003\",\"丹凤县\"],[\"611004\",\"商南县\"],[\"611005\",\"山阳县\"],[\"611006\",\"镇安县\"],[\"611007\",\"柞水县\"]]],[\"6112\",\"西咸新区\"]]],[\"6200\",\"甘肃省\",[[\"6201\",\"兰州市\",[[\"620101\",\"城关区\"],[\"620102\",\"七里河区\"],[\"620103\",\"西固区\"],[\"620104\",\"安宁区\"],[\"620105\",\"红古区\"],[\"620106\",\"永登县\"],[\"620107\",\"皋兰县\"],[\"620108\",\"榆中县\"]]],[\"6202\",\"嘉峪关市\"],[\"6203\",\"金昌市\",[[\"620301\",\"金川区\"],[\"620302\",\"永昌县\"]]],[\"6204\",\"白银市\",[[\"620401\",\"白银区\"],[\"620402\",\"平川区\"],[\"620403\",\"靖远县\"],[\"620404\",\"会宁县\"],[\"620405\",\"景泰县\"]]],[\"6205\",\"天水市\",[[\"620501\",\"秦州区\"],[\"620502\",\"麦积区\"],[\"620503\",\"清水县\"],[\"620504\",\"秦安县\"],[\"620505\",\"甘谷县\"],[\"620506\",\"武山县\"],[\"620507\",\"张家川回族自治县\"]]],[\"6206\",\"武威市\",[[\"620601\",\"凉州区\"],[\"620602\",\"民勤县\"],[\"620603\",\"古浪县\"],[\"620604\",\"天祝藏族自治县\"]]],[\"6207\",\"张掖市\",[[\"620701\",\"甘州区\"],[\"620702\",\"肃南裕固族自治县\"],[\"620703\",\"民乐县\"],[\"620704\",\"临泽县\"],[\"620705\",\"高台县\"],[\"620706\",\"山丹县\"]]],[\"6208\",\"平凉市\",[[\"620801\",\"崆峒区\"],[\"620802\",\"泾川县\"],[\"620803\",\"灵台县\"],[\"620804\",\"崇信县\"],[\"620805\",\"华亭市\"],[\"620806\",\"庄浪县\"],[\"620807\",\"静宁县\"]]],[\"6209\",\"酒泉市\",[[\"620901\",\"肃州区\"],[\"620902\",\"金塔县\"],[\"620903\",\"瓜州县\"],[\"620904\",\"肃北蒙古族自治县\"],[\"620905\",\"阿克塞哈萨克族自治县\"],[\"620906\",\"玉门市\"],[\"620907\",\"敦煌市\"]]],[\"6210\",\"庆阳市\",[[\"621001\",\"西峰区\"],[\"621002\",\"庆城县\"],[\"621003\",\"环县\"],[\"621004\",\"华池县\"],[\"621005\",\"合水县\"],[\"621006\",\"正宁县\"],[\"621007\",\"宁县\"],[\"621008\",\"镇原县\"]]],[\"6211\",\"定西市\",[[\"621101\",\"安定区\"],[\"621102\",\"通渭县\"],[\"621103\",\"陇西县\"],[\"621104\",\"渭源县\"],[\"621105\",\"临洮县\"],[\"621106\",\"漳县\"],[\"621107\",\"岷县\"]]],[\"6212\",\"陇南市\",[[\"621201\",\"武都区\"],[\"621202\",\"成县\"],[\"621203\",\"文县\"],[\"621204\",\"宕昌县\"],[\"621205\",\"康县\"],[\"621206\",\"西和县\"],[\"621207\",\"礼县\"],[\"621208\",\"徽县\"],[\"621209\",\"两当县\"]]],[\"6229\",\"临夏回族自治州\",[[\"622901\",\"临夏市\"],[\"622902\",\"临夏县\"],[\"622903\",\"康乐县\"],[\"622904\",\"永靖县\"],[\"622905\",\"广河县\"],[\"622906\",\"和政县\"],[\"622907\",\"东乡族自治县\"],[\"622908\",\"积石山保安族东乡族撒拉族自治县\"]]],[\"6230\",\"甘南藏族自治州\",[[\"623001\",\"合作市\"],[\"623002\",\"临潭县\"],[\"623003\",\"卓尼县\"],[\"623004\",\"舟曲县\"],[\"623005\",\"迭部县\"],[\"623006\",\"玛曲县\"],[\"623007\",\"碌曲县\"],[\"623008\",\"夏河县\"]]]]],[\"6300\",\"青海省\",[[\"6301\",\"西宁市\",[[\"630101\",\"城东区\"],[\"630102\",\"城中区\"],[\"630103\",\"城西区\"],[\"630104\",\"城北区\"],[\"630105\",\"大通回族土族自治县\"],[\"630106\",\"湟中区\"],[\"630107\",\"湟源县\"]]],[\"6321\",\"海东市\",[[\"632101\",\"平安区\"],[\"632102\",\"民和回族土族自治县\"],[\"632103\",\"乐都区\"],[\"632104\",\"互助土族自治县\"],[\"632105\",\"化隆回族自治县\"],[\"632106\",\"循化撒拉族自治县\"]]],[\"6322\",\"海北藏族自治州\",[[\"632201\",\"门源回族自治县\"],[\"632202\",\"祁连县\"],[\"632203\",\"海晏县\"],[\"632204\",\"刚察县\"]]],[\"6323\",\"黄南藏族自治州\",[[\"632301\",\"同仁市\"],[\"632302\",\"尖扎县\"],[\"632303\",\"泽库县\"],[\"632304\",\"河南蒙古族自治县\"]]],[\"6325\",\"海南藏族自治州\",[[\"632501\",\"共和县\"],[\"632502\",\"同德县\"],[\"632503\",\"贵德县\"],[\"632504\",\"兴海县\"],[\"632505\",\"贵南县\"]]],[\"6326\",\"果洛藏族自治州\",[[\"632601\",\"玛沁县\"],[\"632602\",\"班玛县\"],[\"632603\",\"甘德县\"],[\"632604\",\"达日县\"],[\"632605\",\"久治县\"],[\"632606\",\"玛多县\"]]],[\"6327\",\"玉树藏族自治州\",[[\"632701\",\"玉树市\"],[\"632702\",\"杂多县\"],[\"632703\",\"称多县\"],[\"632704\",\"治多县\"],[\"632705\",\"囊谦县\"],[\"632706\",\"曲麻莱县\"]]],[\"6328\",\"海西蒙古族藏族自治州\",[[\"6331\",\"格尔木市\"],[\"632802\",\"德令哈市\"],[\"632803\",\"乌兰县\"],[\"632828\",\"茫崖市\",[[\"63280301\",\"花土沟镇\"]]],[\"632804\",\"都兰县\"],[\"632805\",\"天峻县\"],[\"632825\",\"海西蒙古族藏族自治州直辖\"]]]]],[\"6400\",\"宁夏回族自治区\",[[\"6401\",\"银川市\",[[\"640101\",\"兴庆区\"],[\"640102\",\"西夏区\"],[\"640103\",\"金凤区\"],[\"640104\",\"永宁县\"],[\"640105\",\"贺兰县\"],[\"640106\",\"灵武市\"]]],[\"6402\",\"石嘴山市\",[[\"640201\",\"大武口区\"],[\"640202\",\"惠农区\"],[\"640203\",\"平罗县\"]]],[\"6403\",\"吴忠市\",[[\"640301\",\"利通区\"],[\"640302\",\"红寺堡区\"],[\"640303\",\"盐池县\"],[\"640304\",\"同心县\"],[\"640305\",\"青铜峡市\"]]],[\"6404\",\"固原市\",[[\"640401\",\"原州区\"],[\"640402\",\"西吉县\"],[\"640403\",\"隆德县\"],[\"640404\",\"泾源县\"],[\"640405\",\"彭阳县\"]]],[\"6405\",\"中卫市\",[[\"640501\",\"沙坡头区\"],[\"640502\",\"中宁县\"],[\"640503\",\"海原县\"]]]]],[\"6500\",\"新疆维吾尔自治区\",[[\"6501\",\"乌鲁木齐市\",[[\"650101\",\"天山区\"],[\"650102\",\"沙依巴克区\"],[\"650103\",\"新市区\"],[\"650104\",\"水磨沟区\"],[\"650105\",\"头屯河区\"],[\"650106\",\"达坂城区\"],[\"650107\",\"米东区\"],[\"650108\",\"乌鲁木齐县\"]]],[\"6502\",\"克拉玛依市\",[[\"650201\",\"独山子区\"],[\"650202\",\"克拉玛依区\"],[\"650203\",\"白碱滩区\"],[\"650204\",\"乌尔禾区\"]]],[\"6521\",\"吐鲁番市\",[[\"652102\",\"鄯善县\"],[\"652103\",\"托克逊县\"],[\"652104\",\"高昌区\"]]],[\"6522\",\"哈密市\",[[\"652202\",\"巴里坤哈萨克自治县\"],[\"652203\",\"伊吾县\"],[\"652204\",\"伊州区\"]]],[\"6523\",\"昌吉回族自治州\",[[\"652301\",\"昌吉市\"],[\"652302\",\"阜康市\"],[\"652303\",\"呼图壁县\"],[\"652304\",\"玛纳斯县\"],[\"652305\",\"奇台县\"],[\"652306\",\"吉木萨尔县\"],[\"652307\",\"木垒哈萨克自治县\"]]],[\"6527\",\"博尔塔拉蒙古自治州\",[[\"652701\",\"博乐市\"],[\"652702\",\"精河县\"],[\"652703\",\"温泉县\"],[\"652704\",\"阿拉山口市\"]]],[\"6528\",\"巴音郭楞蒙古自治州\",[[\"652801\",\"库尔勒市\"],[\"652802\",\"轮台县\"],[\"652803\",\"尉犁县\"],[\"652804\",\"若羌县\"],[\"652805\",\"且末县\"],[\"652806\",\"焉耆回族自治县\"],[\"652807\",\"和静县\"],[\"652808\",\"和硕县\"],[\"652809\",\"博湖县\"]]],[\"6529\",\"阿克苏地区\",[[\"652901\",\"阿克苏市\"],[\"652902\",\"温宿县\"],[\"652903\",\"库车市\"],[\"652904\",\"沙雅县\"],[\"652905\",\"新和县\"],[\"652906\",\"拜城县\"],[\"652907\",\"乌什县\"],[\"652908\",\"阿瓦提县\"],[\"652909\",\"柯坪县\"]]],[\"6530\",\"克孜勒苏柯尔克孜自治州\",[[\"653001\",\"阿图什市\"],[\"653002\",\"阿克陶县\"],[\"653003\",\"阿合奇县\"],[\"653004\",\"乌恰县\"]]],[\"6531\",\"喀什地区\",[[\"653101\",\"喀什市\"],[\"653102\",\"疏附县\"],[\"653103\",\"疏勒县\"],[\"653104\",\"英吉沙县\"],[\"653105\",\"泽普县\"],[\"653106\",\"莎车县\"],[\"653107\",\"叶城县\"],[\"653108\",\"麦盖提县\"],[\"653109\",\"岳普湖县\"],[\"653110\",\"伽师县\"],[\"653111\",\"巴楚县\"],[\"653112\",\"塔什库尔干塔吉克自治县\"]]],[\"6532\",\"和田地区\",[[\"653201\",\"和田市\"],[\"653202\",\"和田县\"],[\"653203\",\"墨玉县\"],[\"653204\",\"皮山县\"],[\"653205\",\"洛浦县\"],[\"653206\",\"策勒县\"],[\"653207\",\"于田县\"],[\"653208\",\"民丰县\"]]],[\"6540\",\"伊犁哈萨克自治州\",[[\"654001\",\"奎屯市\"],[\"654003\",\"伊宁市\"],[\"654004\",\"伊宁县\"],[\"654005\",\"察布查尔锡伯自治县\"],[\"654006\",\"霍城县\"],[\"654007\",\"巩留县\"],[\"654008\",\"新源县\"],[\"654009\",\"昭苏县\"],[\"654010\",\"特克斯县\"],[\"654011\",\"尼勒克县\"],[\"654012\",\"霍尔果斯市\"]]],[\"6542\",\"塔城地区\",[[\"654002\",\"乌苏市\"],[\"654201\",\"塔城市\"],[\"654202\",\"额敏县\"],[\"654203\",\"沙湾市\"],[\"654204\",\"托里县\"],[\"654205\",\"裕民县\"],[\"654206\",\"和布克赛尔蒙古自治县\"]]],[\"6543\",\"阿勒泰地区\",[[\"654301\",\"阿勒泰市\"],[\"654302\",\"布尔津县\"],[\"654303\",\"富蕴县\"],[\"654304\",\"福海县\"],[\"654305\",\"哈巴河县\"],[\"654306\",\"青河县\"],[\"654307\",\"吉木乃县\"]]],[\"6544\",\"石河子市\"],[\"6545\",\"阿拉尔市\"],[\"6546\",\"图木舒克市\"],[\"6547\",\"五家渠市\"],[\"6548\",\"北屯市\"],[\"6552\",\"铁门关市\"],[\"659007\",\"双河市\"],[\"659008\",\"可克达拉市\"],[\"659009\",\"昆玉市\"],[\"659010\",\"胡杨河市\"],[\"659011\",\"新星市\"]]],[\"7100\",\"台湾省\",[[\"7101\",\"台北市\"],[\"7102\",\"高雄市\"],[\"7103\",\"基隆市\"],[\"7104\",\"台中市\"],[\"7105\",\"台南市\"],[\"7106\",\"新竹市\"],[\"7107\",\"嘉义市\"],[\"7108\",\"新北市\"],[\"7109\",\"宜兰县\"],[\"7110\",\"桃园市\"],[\"7111\",\"新竹县\"],[\"7112\",\"苗栗县\"],[\"7114\",\"彰化县\"],[\"7115\",\"南投县\"],[\"7116\",\"云林县\"],[\"7117\",\"嘉义县\"],[\"7120\",\"屏东县\"],[\"7121\",\"台东县\"],[\"7122\",\"花莲县\"],[\"7123\",\"澎湖县\"]]],[\"8100\",\"香港特别行政区\",[[\"8101\",\"中西区\"],[\"8102\",\"东区\"],[\"8103\",\"九龙城区\"],[\"8104\",\"观塘区\"],[\"8105\",\"南区\"],[\"8106\",\"深水埗区\"],[\"8107\",\"黄大仙区\"],[\"8108\",\"湾仔区\"],[\"8109\",\"油尖旺区\"],[\"8110\",\"离岛区\"],[\"8111\",\"葵青区\"],[\"8112\",\"北区\"],[\"8113\",\"西贡区\"],[\"8114\",\"沙田区\"],[\"8115\",\"屯门区\"],[\"8116\",\"大埔区\"],[\"8117\",\"荃湾区\"],[\"8118\",\"元朗区\"]]],[\"8200\",\"澳门特别行政区\",[[\"820002\",\"花王堂区\"],[\"820006\",\"嘉模堂区\"],[\"820007\",\"路凼填海区\"],[\"820008\",\"圣方济各堂区\"],[\"8204\",\"望德堂区\"],[\"8201\",\"花地玛堂区\"],[\"8205\",\"风顺堂区\"],[\"8203\",\"大堂区\"]]],[\"9000\",\"其他\"]]"); + + try { + JSONArray dataArray = JSONArray.parseArray(data.toString()); + for(int i=0;i datas = new ArrayList(); + for(int i=0;i paramList = new ArrayList<>(100); + paramList.add(key); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Mapresult = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size()>0){ + String id = recordList.get(0).get("id").toString(); + if(StringUtils.isEmpty(id)){ + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + List mainData = new ArrayList<>(); + mainData.add(new EBDataReqDetailDto("1151696575727755269", key)); + mainData.add(new EBDataReqDetailDto("1151696575727755270", value)); + ebDataReqDto.setMainDatas(mainData); + datas.add(ebDataReqDto); + if(datas.size() >500){ + break; + } + } + }else{ + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + List mainData = new ArrayList<>(); + mainData.add(new EBDataReqDetailDto("1151696575727755269", key)); + mainData.add(new EBDataReqDetailDto("1151696575727755270", value)); + ebDataReqDto.setMainDatas(mainData); + datas.add(ebDataReqDto); + if(datas.size() >500){ + break; + } + } + } + + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader("1151696537014329345", Constants.SysUserId, Constants.TENANT_KEY)); + + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + ebDataChangeReqDto.setDatas(datas); + + String appId = "1151627723025408001"; + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.saveFormData(ebDataChangeReqDto); + boolean status = ebDataChangeResult.getStatus(); + log.error("status:"+status); + + String message = ebDataChangeResult.getMessage(); + log.error("message:"+message); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenCityDataAction"); + actionMap.put("status",status); + return WeaResult.success(actionMap); + } + + public static void splitArrayNoNormal1(String itemStr,JSONArray totalArray){ + if(itemStr.contains("[[")){ + String shengfen1 = "["+itemStr.substring(1,itemStr.indexOf("[[")-1).replace(",",":")+"]"; + splitArray2Normal(shengfen1,totalArray); + String itemSt1 = "["+itemStr.substring(itemStr.indexOf("[[")+1,itemStr.length()-1); + JSONArray itemArray = JSONArray.parseArray(itemSt1); + for(int j=0;j> execute(Map params) { + log.error("EsbRequestSubmitAction start"); +// String beisenUserId = (String) params.get("beisenuserid"); + Long userId = 0L; + if(params.containsKey("userid")){ + String userIdStr = String.valueOf(params.get("userid")); + log.error("userIdStr:{}",userIdStr); + if(StringUtils.isNotBlank(userIdStr)){ + userId = Long.valueOf(userIdStr); + } + } + + String lastWorkDate = (String) params.get("lastworkdate"); + String blackAddReason = (String) params.get("blackaddreason"); + String blackStaffDesc = (String) params.get("blackstaffdesc"); + String name = (String) params.get("name"); + String staffemail = (String) params.get("staffemail"); + + log.error("userId:{}",userId); + log.error("lastWorkDate:{}",lastWorkDate); + log.error("blackAddReason:{}",blackAddReason); + log.error("blackStaffDesc:{}",blackStaffDesc); + log.error("name:{}",name); + log.error("staffemail:{}",staffemail); + int beisenUserId = -1; + String jobNum = ""; + if(userId.longValue() >0){ + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(userId); + jobNum = simpleEmployee.getJobNum(); + } + + log.error("jobNum:{}",jobNum); + if(StringUtils.isNotBlank(jobNum)){ + + String beisenUser = beisenQueryUseridUtil.queryBeisenUserIdByJobNum(jobNum); + if(StringUtils.isNotBlank(beisenUser)){ + beisenUserId = Integer.valueOf(beisenUser); + } +// BeisenStaffDto beisenStaffDto = beisenStaffInfoByStaffCodeUtil.getBeisenStaffInfoByStaffCode(jobNum); + } + log.error("beisenUserId:{}",beisenUserId); + +// String tokenUrl = "https://openapi.italent.cn/token"; +// String beishenHost = "https://openapi.italent.cn"; +// String createBlackListUrl = "/TenantBaseExternal/api/v5/BlackList/Create"; +// String app_key = "0F0F2B3F6356464EB59FB651E8DAACBA"; +// String app_secret = "AF4A2BFC6BB741FD9D80B7F56DA07F08F703AC14B40C453E8DA5BCABAF43A003"; + + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + String objectId = ""; + if(StringUtils.isNotBlank(token)){ + if(beisenUserId > 0){ + objectId = blackList2BeiSenUtil.createBlackList4ResignUser(token,String.valueOf(beisenUserId),lastWorkDate,blackAddReason,blackStaffDesc); + }else{ + objectId = blackList2BeiSenUtil.createBlackList4NonSystem(token,name,staffemail,blackAddReason,blackStaffDesc); + } + } + + log.error("objectId:{}",objectId); + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenCreateBlackListAction"); + actionMap.put("objectId",objectId); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenDeleteBlackListAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenDeleteBlackListAction.java new file mode 100644 index 0000000..e20be45 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenDeleteBlackListAction.java @@ -0,0 +1,67 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.util.BlackList2BeiSenUtil; +import com.weaver.seconddev.chapanda.beisen.util.Token2BeiSenUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2BeisenDeleteBlackListAction") +public class Esb2BeisenDeleteBlackListAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenDeleteBlackListAction.class); + + @Autowired + BlackList2BeiSenUtil blackList2BeiSenUtil; + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2BeisenDeleteBlackListAction start"); + String objectIds = (String) params.get("objectIds"); + log.error("objectIds:{}",objectIds); + + String msg = ""; + String token = token2BeiSenUtil.getToken(); + if(StringUtils.isNotBlank(token)){ + List userIds = Arrays.asList(objectIds.split(",")); + msg = blackList2BeiSenUtil.batchDeleteBlackList(token,userIds); + } + + String failDatas = ""; + int failCount = -1 ; + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyData = JSONObject.parseObject(msg); + if(bodyData.containsKey("code")){ + String dataCode = bodyData.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = bodyData.getJSONObject("data"); + if(dataObject.containsKey("failCount")){ + failCount = dataObject.getInteger("failCount"); + failDatas = dataObject.getString("failDatas"); + + } + } + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenDeleteBlackListAction"); + actionMap.put("failCount",failCount); + actionMap.put("failDatas",failDatas); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementAction.java new file mode 100644 index 0000000..22056f9 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementAction.java @@ -0,0 +1,234 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.cache.HrmDepartmentComInfo; +import com.weaver.common.hrm.manage.HrmComInfoCacheHandler; +import com.weaver.common.hrm.remote.department.HrmRemoteDepartmentService; +import com.weaver.common.hrm.service.HrmCommonDepartmentService; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmDepartmentDao; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenDepartmentDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDto; +import com.weaver.seconddev.chapanda.beisen.util.*; +import com.weaver.teams.domain.department.SimpleDepartment; +import com.weaver.workflow.list.api.rest.publicapi.WflRequestListRest; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.weaver.teams.domain.user.SimpleEmployee; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2BeisenJobRequirementAction") +public class Esb2BeisenJobRequirementAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenJobRequirementAction.class); + + @Autowired + JobRequirement2BeisenUtil jobRequirement2BeisenUtil; + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Autowired + DatabaseUtils databaseUtils; + + @Autowired + BeisenStaffInfoByStaffCodeUtil beisenStaffInfoByStaffCodeUtil ; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + private HrmDepartmentDao hrmDepartmentDao; + + @Autowired + BeisenQueryUseridUtil beisenQueryUseridUtil; + + @Autowired + BeisenQueryDeptIdUtil beisenQueryDeptIdUtil; + @Override + public WeaResult> execute(Map params) { + log.error("Esb2BeisenJobRequirementAction start"); + + int requirementStatus = converInteger(params,"requirementStatus"); + String form_data_id = (String) params.get("form_data_id"); + int requirementType = converInteger(params,"requirementType"); + + String requestname = (String) params.get("requestname"); + String createDate = (String) params.get("createDate"); + + int requirementCount = converInteger(params,"requirementCount") ; + String arivalTime = (String) params.get("arivalTime"); + + int salaryType = converInteger(params,"salaryType"); + int category = converInteger(params,"category"); + String educationInfo = (String) params.get("educationInfo"); + String workExperience = (String) params.get("workExperience"); + int kind = converInteger(params,"kind"); + boolean isSecrecy = false; + String isSecrecyStr = (String) params.get("isSecrecy"); + if("1".equals(isSecrecyStr)){ + isSecrecy = true; + } + + String originalId = String.valueOf(params.get("originalId")); + + String nlyq = String.valueOf(params.get("nlyq")); + + log.error("requirementStatus:" + requirementStatus); + log.error("originalId:" + originalId); + log.error("requirementType:" + requirementType); + log.error("requestname:" + requestname); + log.error("createDate:" + createDate); + log.error("requirementCount:" + requirementCount); + log.error("arivalTime:" + arivalTime); + log.error("salaryType:" + salaryType); + log.error("category:" + category); + log.error("educationInfo:" + educationInfo); + log.error("workExperience:" + workExperience); + log.error("kind:" + kind); + log.error("isSecrecy:" + isSecrecy); + log.error("form_data_id:" + form_data_id); + log.error("nlyq:" + nlyq); + + String createBy = String.valueOf(params.get("createBy")); + String dutyUserId = String.valueOf(params.get("dutyUserId")); + log.error("createBy:" + createBy); + log.error("dutyUserId:" + dutyUserId); + + + + String zpgw = String.valueOf(params.get("zpgw")); + String zwmc = String.valueOf(params.get("zwmc")); +// String createByEmail = hrmDepartmentDao.queryEmailByEmployeeId(dutyUserId); +// log.error("createByEmail:" + createByEmail); +// String dutyUserEmail = hrmDepartmentDao.queryEmailByEmployeeId(dutyUserId); +// log.error("dutyUserEmail:" + dutyUserEmail); + + String originalCode = ""; + if(StringUtils.isNotBlank(originalId)){ + originalCode = hrmDepartmentDao.getDepartmentCodeById(originalId); + } + log.error("originalCode:" + originalCode); + + String createByEmail = ""; + int beisenCreateUserId = -1; + if(StringUtils.isNotBlank(createBy)){ + String jobnum = ""; + SimpleEmployee createByEmployee = hrmCommonUtil.getSimpleEmployee(Long.valueOf(createBy)); + if(createByEmployee !=null && createByEmployee.getId() > 0){ + jobnum = createByEmployee.getJobNum(); + createByEmail = createByEmployee.getEmail(); + } + log.error("jobnum:" + jobnum); + if(StringUtils.isNotBlank(jobnum)){ + String userid = beisenQueryUseridUtil.queryBeisenUserIdByJobNum(jobnum); + if(StringUtils.isNotBlank(userid)){ + beisenCreateUserId = Integer.valueOf(userid); + } + log.error("beisenCreateUserId:" + beisenCreateUserId); + } + } + log.error("createByEmail:" + createByEmail); + + + String dutyUserEmail = ""; + int beisenDutyUserId = -1; + if(StringUtils.isNotBlank(dutyUserId)){ + String jobnum = ""; + SimpleEmployee dutyEmployee = hrmCommonUtil.getSimpleEmployee(Long.valueOf(dutyUserId)); + if(dutyEmployee !=null && dutyEmployee.getId() > 0){ + jobnum = dutyEmployee.getJobNum(); + dutyUserEmail = dutyEmployee.getEmail(); + } + log.error("jobnum:" + jobnum); + if(StringUtils.isNotBlank(jobnum)){ + String userid = beisenQueryUseridUtil.queryBeisenUserIdByJobNum(jobnum); + if(StringUtils.isNotBlank(userid)){ + beisenDutyUserId = Integer.valueOf(userid); + } + log.error("beisenDutyUserId:" + beisenDutyUserId); + } + } + log.error("dutyUserEmail:" + dutyUserEmail); + + int orgId = -1; + if(StringUtils.isNotBlank(originalCode)){ +// BeisenDepartmentDto beisenDepartmentDto = beisenDeptInfoByOriginalIdUtil.getBeisenDeptDataByOriginalId(originalId); +// log.error("beisenDepartmentDto:{}",beisenDepartmentDto.toString()); + String deptid = beisenQueryDeptIdUtil.queryBeisenDeptIdByCode(originalCode); + if(StringUtils.isNotBlank(deptid)){ + orgId = Integer.valueOf(deptid); + } +// orgId = beisenDepartmentDto.getOrgId(); + } + + String xqmc = (String) params.get("xqmc"); + String gzzz = String.valueOf(params.get("gzzz")); + String rzzg = String.valueOf(params.get("rzzg ")); + String zxssyf = String.valueOf(params.get("zxssyf")); + String jjcd = String.valueOf(params.get("jjcd")); + + log.error("orgId:" + orgId); + String dataId = jobRequirement2BeisenUtil.sendJobRequirement(requirementStatus,requirementType, + requestname,beisenCreateUserId, + createDate,requirementCount, + arivalTime, + createByEmail, + dutyUserEmail, + orgId, + salaryType, + category, + educationInfo, + workExperience, + kind, + isSecrecy, + originalCode,nlyq,zpgw,zwmc,beisenDutyUserId,xqmc,gzzz,rzzg,zxssyf,jjcd); + + log.error("dataId:" + dataId); +// if(StringUtils.isNotBlank(dataId)){ +// String sourceType = ""; +// String groupId = ""; +// +// String dataSql =" update uf_zpxqgl set bszxid = ? " + +// " where form_data_id = ?\n" + +// " and tenant_key=? \n" + +// " and delete_type=0 \n" ; +// +// log.error("dataSql:" + dataSql); +// List paramList = new ArrayList<>(100); +// +// paramList.add(form_data_id); +// paramList.add(Constants.TENANT_KEY); +// List sqlParamList = databaseUtils.querySqlParamEntity(paramList); +// result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); +// } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenJobRequirementAction"); + actionMap.put("dataId",dataId); + + return WeaResult.success(actionMap); + } + + + public int converInteger(Map params,String key){ + int value = -1; + try{ + String requirementStatusStr = (String) params.get(key); + value = Integer.valueOf(requirementStatusStr); + }catch (Exception e){ + log.error("key:{},e:{}",key,e.getMessage()); + } + return value; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementCreateAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementCreateAction.java new file mode 100644 index 0000000..7dcd54a --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementCreateAction.java @@ -0,0 +1,237 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.dao.HrmDepartmentDao; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenDepartmentDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDto; +import com.weaver.seconddev.chapanda.beisen.util.*; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/*** + * @author: shil + * @date: 2025/8/7 + * @description: 招聘需求创建 + */ +@Service("Esb2BeisenJobRequirementCreateAction") +public class Esb2BeisenJobRequirementCreateAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenJobRequirementCreateAction.class); + + @Autowired + JobRequirement2BeisenUtil jobRequirement2BeisenUtil; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + private HrmDepartmentDao hrmDepartmentDao; + + @Autowired + BeisenQueryUseridUtil beisenQueryUseridUtil; + + @Autowired + BeisenQueryDeptIdUtil beisenQueryDeptIdUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2BeisenJobRequirementAction start"); + + int requirementStatus = converInteger(params,"requirementStatus"); + String form_data_id = (String) params.get("form_data_id"); + int requirementType = converInteger(params,"requirementType"); + + String requestname = (String) params.get("requestname"); + String createDate = (String) params.get("createDate"); + String xqmc = (String) params.get("xqmc"); + + int requirementCount = converInteger(params,"requirementCount") ; + String arivalTime = (String) params.get("arivalTime"); + + int salaryType = converInteger(params,"salaryType"); + int category = converInteger(params,"category"); + String educationInfo = (String) params.get("educationInfo"); + String workExperience = (String) params.get("workExperience"); + int kind = converInteger(params,"kind"); + boolean isSecrecy = false; + String isSecrecyStr = (String) params.get("isSecrecy"); + if("1".equals(isSecrecyStr)){ + isSecrecy = true; + } + + String originalId = String.valueOf(params.get("originalId")); + + String nlyq = String.valueOf(params.get("nlyq")); + + + String zpgw = String.valueOf(params.get("zpgw")); + String zwmc = String.valueOf(params.get("zwmc")); + String zxssyf = String.valueOf(params.get("zxssyf")); + String jjcd = String.valueOf(params.get("jjcd")); + + log.error("requirementStatus:" + requirementStatus); + log.error("originalId:" + originalId); + log.error("requirementType:" + requirementType); + log.error("requestname:" + requestname); + log.error("createDate:" + createDate); + log.error("requirementCount:" + requirementCount); + log.error("arivalTime:" + arivalTime); + log.error("salaryType:" + salaryType); + log.error("category:" + category); + log.error("educationInfo:" + educationInfo); + log.error("workExperience:" + workExperience); + log.error("kind:" + kind); + log.error("isSecrecy:" + isSecrecy); + log.error("form_data_id:{}" , form_data_id); + log.error("nlyq:{}" , nlyq); + log.error("zpgw:{}" , zpgw); + + String createBy = String.valueOf(params.get("createBy")); + String dutyUserId = String.valueOf(params.get("dutyUserId")); + log.error("createBy:" + createBy); + log.error("dutyUserId:" + dutyUserId); + + String createByEmail = ""; + int beisenCreateUserId = -1; + if(StringUtils.isNotBlank(createBy)){ + String jobnum = ""; + SimpleEmployee createByEmployee = hrmCommonUtil.getSimpleEmployee(Long.valueOf(createBy)); + if(createByEmployee !=null && createByEmployee.getId() > 0){ + jobnum = createByEmployee.getJobNum(); + createByEmail = createByEmployee.getEmail(); + } + log.error("jobnum:" + jobnum); + if(StringUtils.isNotBlank(jobnum)){ + String userid = beisenQueryUseridUtil.queryBeisenUserIdByJobNum(jobnum); + if(StringUtils.isNotBlank(userid)){ + beisenCreateUserId = Integer.valueOf(userid); + } + log.error("beisenCreateUserId:" + beisenCreateUserId); + } + } + log.error("createByEmail:" + createByEmail); + + String dutyUserEmail = ""; + int beisenDutyUserId = -1; + if(StringUtils.isNotBlank(dutyUserId)){ + String jobnum = ""; + SimpleEmployee dutyEmployee = hrmCommonUtil.getSimpleEmployee(Long.valueOf(dutyUserId)); + if(dutyEmployee !=null && dutyEmployee.getId() > 0){ + jobnum = dutyEmployee.getJobNum(); + dutyUserEmail = dutyEmployee.getEmail(); + } + log.error("jobnum:" + jobnum); + if(StringUtils.isNotBlank(jobnum)){ + String userid = beisenQueryUseridUtil.queryBeisenUserIdByJobNum(jobnum); + if(StringUtils.isNotBlank(userid)){ + beisenDutyUserId = Integer.valueOf(userid); + } + log.error("beisenDutyUserId:" + beisenDutyUserId); + } + } + log.error("dutyUserEmail:" + dutyUserEmail); + +// String createByEmail = hrmDepartmentDao.queryEmailByEmployeeId(dutyUserId); +// log.error("createByEmail:" + createByEmail); +// String dutyUserEmail = hrmDepartmentDao.queryEmailByEmployeeId(dutyUserId); +// log.error("dutyUserEmail:" + dutyUserEmail); + + String originalCode = ""; + if(StringUtils.isNotBlank(originalId)){ + originalCode = hrmDepartmentDao.getDepartmentCodeById(originalId); + } + log.error("originalCode:" + originalCode); + + int orgId = -1; + if(StringUtils.isNotBlank(originalCode)){ +// BeisenDepartmentDto beisenDepartmentDto = beisenDeptInfoByOriginalIdUtil.getBeisenDeptDataByOriginalId(originalId); +// log.error("beisenDepartmentDto:{}",beisenDepartmentDto.toString()); + String deptid = beisenQueryDeptIdUtil.queryBeisenDeptIdByCode(originalCode); + if(StringUtils.isNotBlank(deptid)){ + orgId = Integer.valueOf(deptid); + } +// orgId = beisenDepartmentDto.getOrgId(); + } + + String gzzz = String.valueOf(params.get("gzzz")); + String rzzg = String.valueOf(params.get("rzzg")); + log.error("rzzg:" + rzzg); + log.error("orgId:" + orgId); + + String dataId = jobRequirement2BeisenUtil.sendJobRequirement(requirementStatus,requirementType, + requestname,beisenCreateUserId, + createDate,requirementCount, + arivalTime, + createByEmail, + dutyUserEmail, + orgId, + salaryType, + category, + educationInfo, + workExperience, + kind, + isSecrecy, + originalCode, + nlyq, + zpgw, + zwmc, + beisenDutyUserId, + xqmc, + gzzz, + rzzg,zxssyf,jjcd + ); + + + log.error("dataId:" + dataId); +// if(StringUtils.isNotBlank(dataId)){ +// String sourceType = ""; +// String groupId = ""; +// +// String dataSql =" update uf_zpxqgl set bszxid = ? " + +// " where form_data_id = ?\n" + +// " and tenant_key=? \n" + +// " and delete_type=0 \n" ; +// +// log.error("dataSql:" + dataSql); +// List paramList = new ArrayList<>(100); +// +// paramList.add(form_data_id); +// paramList.add(Constants.TENANT_KEY); +// List sqlParamList = databaseUtils.querySqlParamEntity(paramList); +// result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); +// } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","创建招聘需求成功"); + actionMap.put("dataId",dataId); + actionMap.put("form_data_id",form_data_id); + return WeaResult.success(actionMap); + } + + + /*** + * 转换为int + * @param params + * @param key + * @return + */ + public int converInteger(Map params,String key){ + int value = -1; + try{ + String requirementStatusStr = (String) params.get(key); + value = Integer.valueOf(requirementStatusStr); + }catch (Exception e){ + log.error("key:{},e:{}",key,e.getMessage()); + } + return value; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementUnRelateAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementUnRelateAction.java new file mode 100644 index 0000000..f21f757 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenJobRequirementUnRelateAction.java @@ -0,0 +1,51 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.util.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2BeisenJobRequirementUnRelateAction") +public class Esb2BeisenJobRequirementUnRelateAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenJobRequirementUnRelateAction.class); + + @Autowired + Esb2BeisenUnRelateRequestUtil esb2BeisenUnRelateRequestUtil; + + @Override + public WeaResult> execute(Map params) { + + String form_data_id = String.valueOf(params.get("form_data_id")); + String requirementId = String.valueOf(params.get("requirementId")); + + if(StringUtils.isBlank(requirementId)){ + return WeaResult.fail(500,"招聘需求信息获取为空"); + } + + log.error("requirementId:" + requirementId); + String code = esb2BeisenUnRelateRequestUtil.unRelateJobRequirement(requirementId); + log.error("code:" + code); + if(StringUtils.isBlank(code)){ + return WeaResult.fail(500,"取消招聘需求失败"); + } + + if(!"200".equals(code)){ + return WeaResult.fail(500,"取消招聘需求失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","取消招聘需求成功"); + actionMap.put("datacode",code); + actionMap.put("form_data_id",form_data_id); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenOfferCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenOfferCronJob.java new file mode 100644 index 0000000..55d5dfc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenOfferCronJob.java @@ -0,0 +1,73 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.util.Offer2BeiSenUtil; +import com.weaver.seconddev.chapanda.beisen.util.Token2BeiSenUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; + +/*** + * 废弃,由雪峰重写了 + */ +@Service("Esb2BeisenOfferCronJob") +public class Esb2BeisenOfferCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenOfferCronJob.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Autowired + Offer2BeiSenUtil offer2BeiSenUtil; + + @Override + public WeaResult> execute(Map params) { + + log.error("EsbTrainingCronJobAction start"); + +// String beishenHost = "https://openapi.italent.cn"; +// String offerUrl = "/TenantBaseExternal/api/v5/Offer/GetByTimeWindow"; + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + + JSONArray offerArray = new JSONArray(); +// LocalDate today = LocalDate.now(); +// LocalDate yesterday = today.minusDays(1); +// String startDate = yesterday.toString(); +// String startTime = sdf.format(new Date()); +// String endDate = today.toString(); +// String endTime = sdf.format(new Date()); + + String startDate = String.valueOf(params.get("startDate")); + String startTime = String.valueOf(params.get("startTime")); + String endDate = String.valueOf(params.get("endDate")); + String endTime = String.valueOf(params.get("endTime")); + + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + + if(StringUtils.isNotBlank(token)){ + offerArray = offer2BeiSenUtil.queryOfferByDateTime(token,startDate, startTime, endDate, endTime); + } + + log.error("offerArray:{}",offerArray.toJSONString()); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenOfferCronJob"); + actionMap.put("offer",offerArray); + return WeaResult.success(actionMap); + } + + public static void main(String[] args) { + + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJob.java new file mode 100644 index 0000000..48f100b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJob.java @@ -0,0 +1,171 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.util.Performance2BeiSenUtil; +import com.weaver.seconddev.chapanda.beisen.util.Token2BeiSenUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2BeisenPerformanceCronJob") +public class Esb2BeisenPerformanceCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenPerformanceCronJob.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Autowired + Performance2BeiSenUtil performance2BeiSenUtil; + @Override + public WeaResult> execute(Map params) { + + log.error("Esb2BeisenPerformanceCronJob start"); + +// String tokenUrl = "https://openapi.italent.cn/token"; +// String beishenHost = "https://openapi.italent.cn"; +// +// String app_key = "0F0F2B3F6356464EB59FB651E8DAACBA"; +// String app_secret = "AF4A2BFC6BB741FD9D80B7F56DA07F08F703AC14B40C453E8DA5BCABAF43A003"; + +// int page = 0; +// int capacity = 2; +// int year = 2024; +// int period = 8; + + String page = String.valueOf(params.get("page")) ; + String capacity = String.valueOf(params.get("capacity")); + String year = String.valueOf(params.get("year")); + String period = String.valueOf(params.get("period")); + +// String activityManagerUrl = "/PerformanceCloudOpen/api/v5/ActivityManager/GetOrgActivityManagers"; +// String assessmentItemUrl = "/PerformanceCloudOpen/api/v5/AssessmentItem/GetAssessmentItemCount"; +// String assessmentUrl = "/PerformanceCloudOpen/api/v5/Assessment/GetAssessmentsByIds"; + + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + JSONArray assessmentArray = new JSONArray(); + JSONArray activityManagerArray = new JSONArray(); + if(StringUtils.isNotBlank(token)){ + activityManagerArray = queryActivityManager(token,page,capacity,year,period); + log.error("activityManagerArray:{}",activityManagerArray.toJSONString()); + queryAssessmentItem(activityManagerArray,token,page,capacity); + assessmentArray = queryAssessment(activityManagerArray,token); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2BeisenPerformanceCronJob"); + actionMap.put("assessmentArray",assessmentArray); + actionMap.put("activityManagerArray",activityManagerArray); + return WeaResult.success(actionMap); + } + + + public JSONArray queryActivityManager(String token,String page,String capacity,String year,String period){ + int activityTotal = 0; + JSONArray activityManagerArray = new JSONArray(); + JSONArray performanceArray = new JSONArray(); + String bodyData = performance2BeiSenUtil.getActivityManagerCount(token,page,capacity,year,period); + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getString("code"); + if("200".equals(code)){ + JSONObject dataObject = bodyJson.getJSONObject("data"); + if(dataObject.containsKey("paging")){ + JSONObject pagingJson = dataObject.getJSONObject("paging"); + activityTotal = pagingJson.getInteger("total"); + } + if(dataObject.containsKey("items")){ + performanceArray = dataObject.getJSONArray("items"); + } + } + } + + } + + if(activityTotal <= Integer.valueOf(capacity)){ + activityManagerArray = performanceArray; + }else{ + activityManagerArray.addAll(performanceArray); + int pageCount = (int)Math.floor(activityTotal / Integer.valueOf(capacity)); + for(int i = 1; i < pageCount; i++){ + JSONArray itemArray = performance2BeiSenUtil.queryActivityManager(token,String.valueOf(i),capacity,year,period); + activityManagerArray.addAll(itemArray); + } + } + return activityManagerArray; + } + + public void queryAssessmentItem(JSONArray activityManagerArray,String token,String page,String capacity){ + + for(int i = 0; i < activityManagerArray.size(); i++){ + int itemTotal = 0; + JSONArray itemsArray = new JSONArray(); + JSONArray assessmentItemArray = new JSONArray(); + String activityManagerId = activityManagerArray.getJSONObject(i).getString("id"); + log.error("activityManagerId:{}",activityManagerId); + + if(StringUtils.isNotBlank(activityManagerId)){ + String bodyData = performance2BeiSenUtil.getAssessmentItemCount(token,page,capacity,activityManagerId); + log.error("bodyData:{}",bodyData); + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getString("code"); + if("200".equals(code)){ + JSONObject dataObject = bodyJson.getJSONObject("data"); + if(dataObject.containsKey("paging")){ + JSONObject pagingJson = dataObject.getJSONObject("paging"); + itemTotal = pagingJson.getInteger("total"); + } + if(dataObject.containsKey("items")){ + itemsArray = dataObject.getJSONArray("items"); + } + } + } + } + } + log.error("itemTotal:{}",itemTotal); + if(itemTotal <= Integer.valueOf(capacity)){ + assessmentItemArray = itemsArray; + }else{ + assessmentItemArray.addAll(itemsArray); + int pageCount = (int)Math.floor(itemTotal / Integer.valueOf(capacity)); + for(int k = 1; k < pageCount; k++){ + log.error("K:{}",k); + JSONArray itemArray = performance2BeiSenUtil.queryAssessmentItem(token,String.valueOf(k),capacity,activityManagerId); + log.error("itemArray:{}",itemArray.size()); + assessmentItemArray.addAll(itemArray); + } + } + log.error("JSONArray:{}",JSONArray.toJSONString(assessmentItemArray)); + } + } + + /*** + * + * @param activityManagerArray + * @param token + */ + public JSONArray queryAssessment(JSONArray activityManagerArray,String token){ + JSONArray assessmentArray = new JSONArray(); + for(int i = 0; i < activityManagerArray.size(); i++) { + String activityManagerId = activityManagerArray.getJSONObject(i).getString("id"); + log.error("activityManagerId:{}",activityManagerId); + if (StringUtils.isNotBlank(activityManagerId)) { + JSONArray itemsArray = performance2BeiSenUtil.queryAssessment(token,activityManagerId); + assessmentArray.addAll(itemsArray); + } + } + return assessmentArray; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJobNew.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJobNew.java new file mode 100644 index 0000000..09c1951 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPerformanceCronJobNew.java @@ -0,0 +1,427 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmFormFieldDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmDepartmentDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmPerformanceDao; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeiSenAssessmentUtil; +import com.weaver.seconddev.chapanda.beisen.util.Token2BeiSenUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service("Esb2BeisenPerformanceCronJobNew") +public class Esb2BeisenPerformanceCronJobNew implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenPerformanceCronJobNew.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Autowired + Esb2BeiSenAssessmentUtil esb2BeiSenAssessmentUtil; + + @Autowired + HrmFormFieldDao hrmFormFieldDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + HrmDepartmentDao hrmDepartmentDao; + + @Autowired + HrmPerformanceDao hrmPerformanceDao; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2BeisenPerformanceCronJobNew start"); + int capacity = Integer.valueOf(String.valueOf(params.get("capacity"))); + String modifiedAfter = String.valueOf(params.get("modifiedAfter")); + String modifiedBefore = String.valueOf(params.get("modifiedBefore")); + + int page = 1; + if(params.containsKey("page")){ + page = Integer.valueOf(String.valueOf(params.get("page"))); + } + + List ebList = new ArrayList(); + +// String activityManagerUrl = "/PerformanceCloudOpen/api/v5/ActivityManager/GetOrgActivityManagers"; +// String assessmentItemUrl = "/PerformanceCloudOpen/api/v5/AssessmentItem/GetAssessmentItemCount"; +// String assessmentUrl = "/PerformanceCloudOpen/api/v5/Assessment/GetAssessmentsByIds"; + List fieldList = new ArrayList(); + fieldList.add("khnf"); + fieldList.add("khzq"); + fieldList.add("gh"); + fieldList.add("mc"); + fieldList.add("yx"); + fieldList.add("bm"); + fieldList.add("jxxbmmc"); + fieldList.add("jxhdmc"); + fieldList.add("zzdf"); + fieldList.add("jxxs"); + fieldList.add("bkhr"); + fieldList.add("khzqlx"); + fieldList.add("ppdj"); + fieldList.add("jxhdid"); + + fieldList.add("rzrq"); + fieldList.add("lzrq"); + fieldList.add("zzrq"); + fieldList.add("ryzt"); + fieldList.add("gs"); + fieldList.add("bm1"); + fieldList.add("bm2"); + fieldList.add("bm3"); + fieldList.add("bm4"); + fieldList.add("gzdd"); + + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + JSONArray assessmentArray = getAssessmentArray(token,page, capacity, modifiedAfter, modifiedBefore); + log.error("assessmentArray:"+assessmentArray.size()); +// if(StringUtils.isNotBlank(token)){ +// int total = 0; +// JSONArray itemArray = new JSONArray(); +// String bodyData = esb2BeiSenAssessmentUtil.getAssessmentsByFilters(token, page, capacity, modifiedAfter, modifiedBefore); +// if(StringUtils.isNotBlank(bodyData)){ +// JSONObject bodyJson = JSONObject.parseObject(bodyData); +// if(bodyJson.containsKey("code")){ +// JSONObject dataObject = bodyJson.getJSONObject("data"); +// if(dataObject.containsKey("paging")){ +// JSONObject pagingJson = dataObject.getJSONObject("paging"); +// total = pagingJson.getInteger("total"); +// } +// if(dataObject.containsKey("items")){ +// itemArray = dataObject.getJSONArray("items"); +// } +// } +// } +// +// log.error("itemArray:"+itemArray.size()); +// +// if(total <= capacity){ +// assessmentArray.addAll(itemArray) ; +// }else{ +// assessmentArray.addAll(itemArray); +// int pageCount = (int)Math.floor(total/(capacity*1.0)); +// log.error("pageCount:"+pageCount); +// for(int i = 1; i < pageCount; i++){ +// int page2 = i+1; +// JSONArray itemArray2 = esb2BeiSenAssessmentUtil.queryAssessmentsByPage(token,page2,capacity,modifiedAfter, modifiedBefore); +// assessmentArray.add(itemArray2); +// } +// } +// } + + int effectiveTotal = 0; + int failTotal = 0; + + if(assessmentArray.size() > 0){ + JSONArray dataArray = convertAssessmentList(assessmentArray); + log.error("dataArray:"+dataArray.size()); + + Map fieldMap = hrmFormFieldDao.queryFromTableField(Constants.assessmentFormTable,fieldList); + + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + for(int i=0;i mainData = new ArrayList(); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n mainData = new ArrayList(); + for(int n=0;n recordMap = hrmFormFieldDao.queryTableFormId(Constants.assessmentFormTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertDbForm(addDatas,formId,appId); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(updateDatas,formId,appId); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + } + } + } + + for(String ebId:ebList){ + + String rylb = ""; + String bm1 = ""; + if("2".equals(rylb)){ + + }else if("".equals(bm1)){ + + } + } + log.error("ebList:{}", JSON.toJSONString(ebList)); + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + actionMap.put("total",assessmentArray.size()); + actionMap.put("effectiveTotal",effectiveTotal); + actionMap.put("failTotal",failTotal); + actionMap.put("ebTotal",ebList.size()); + return WeaResult.success(actionMap); + } + + /*** + * + * @param token + * @param page + * @param capacity + * @param modifiedAfter + * @param modifiedBefore + * @return + */ + public JSONArray getAssessmentArray(String token,int page, int capacity, String modifiedAfter, String modifiedBefore) { + JSONArray assessmentArray = new JSONArray(); + if (StringUtils.isNotBlank(token)) { + int total = 0; + JSONArray itemArray = new JSONArray(); + String bodyData = esb2BeiSenAssessmentUtil.getAssessmentsByFilters(token, page, capacity, modifiedAfter, modifiedBefore); + if (StringUtils.isNotBlank(bodyData)) { + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if (bodyJson.containsKey("code")) { + JSONObject dataObject = bodyJson.getJSONObject("data"); + if (dataObject.containsKey("paging")) { + JSONObject pagingJson = dataObject.getJSONObject("paging"); + total = pagingJson.getInteger("total"); + } + if (dataObject.containsKey("items")) { + itemArray = dataObject.getJSONArray("items"); + } + } + } + + log.error("itemArray:" + itemArray.size()); + + if (total <= capacity) { + assessmentArray.addAll(itemArray); + } else { + assessmentArray.addAll(itemArray); + int pageCount = (int) Math.floor(total / (capacity * 1.0)); + log.error("pageCount:" + pageCount); + for (int i = 1; i < pageCount; i++) { + int page2 = i + 1; + JSONArray itemArray2 = esb2BeiSenAssessmentUtil.queryAssessmentsByPage(token, page2, capacity, modifiedAfter, modifiedBefore); + assessmentArray.addAll(itemArray2); + } + } + } + return assessmentArray; + } + + /*** + * + * @param assessmentArray + * @return + */ + public JSONArray convertAssessmentList(JSONArray assessmentArray) { + + JSONArray dataArray = new JSONArray(); + Map departmentMap = hrmDepartmentDao.queryDepartmentData(); + Map employeeMap = hrmDepartmentDao.queryEmployeeData(); + log.error("departmentMap:"+departmentMap.size()); + log.error("employeeMap:"+employeeMap.size()); + + + for(int i=0;i otherMap = hrmPerformanceDao.queryEmployeeAssessmentOtherInfo(employeeid); + Iterator> iterator = otherMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + String emKey = entry.getKey(); + String emValue = entry.getValue().toString(); + log.error("emKey:{}",emKey); + log.error("emValue:{}",emValue); + dataJson.put(emKey,emValue); + } + } + } + } + } + + if("StaffDep".equals(name)){ + dataJson.put("jxxbmmc",text); + if(StringUtils.isNotBlank(value)){ + if(departmentMap.containsKey(value)){ + String departmentid = String.valueOf(departmentMap.get(value)); + dataJson.put("bm",departmentid); + } + } + } + + if("FinalScore".equals(name)){ + dataJson.put("zzdf",value); + } + + if("TotalScoreRuleIdLookup".equals(name)){ + dataJson.put("ppdj",text); + } + + } + dataArray.add(dataJson); + log.error("dataJson:{}",dataJson.toJSONString()); + } + return dataArray; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionFullCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionFullCronJob.java new file mode 100644 index 0000000..6f403cb --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionFullCronJob.java @@ -0,0 +1,284 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmFormFieldDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmBeisenPositionDao; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeiSenPositionUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service("Esb2BeisenPositionFullCronJob") +public class Esb2BeisenPositionFullCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenPositionFullCronJob.class); + + @Autowired + Esb2BeiSenPositionUtil esb2BeiSenPositionUtil; + + @Autowired + HrmFormFieldDao hrmFormFieldDao; + + @Autowired + HrmBeisenPositionDao hrmBeisenPositionDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + @Override + public WeaResult> execute(Map params) { + + log.error("Esb2BeisenPositionFullCronJob"); + List ebList = new ArrayList(); + + JSONArray positionArray = new JSONArray(); + + String startDate = String.valueOf(params.get("startDate")); + String endDate = String.valueOf(params.get("endDate")); + int capacity = 100; + int total = 0; + String scrollId = ""; + JSONArray firstArray = new JSONArray(); + String msg = esb2BeiSenPositionUtil.queryPositionByDate(startDate, endDate,capacity); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("total")){ + total = msgJson.getInteger("total"); + } + if(msgJson.containsKey("data")){ + firstArray = msgJson.getJSONArray("data"); + } + + if(msgJson.containsKey("scrollId")){ + scrollId = msgJson.getString("scrollId"); + } + } + + log.error("total:{}",total); + log.error("firstArray:{}",firstArray.size()); + log.error("scrollId:{}",scrollId); + + if(total <= capacity){ + positionArray = firstArray; + }else{ + if(firstArray.size() > 0){ + positionArray.addAll(firstArray); + } + int pageCount = (int)Math.floor(total / capacity*1.0); + log.error("pageCount:{}",pageCount); + int count = 0; + while(StringUtils.isNotBlank(scrollId) && !"null".equals(scrollId)){ + String positionData = esb2BeiSenPositionUtil.queryPositionByscrollId(startDate, endDate,scrollId,capacity); + if(StringUtils.isNotBlank(positionData)){ + JSONObject msgJson = JSONObject.parseObject(positionData); + + if(msgJson.containsKey("data")){ + JSONArray itemArray = msgJson.getJSONArray("data"); + log.error("itemArray:{}",itemArray.size()); + if(itemArray.size() > 0){ + positionArray.addAll(itemArray); + }else{ + scrollId = ""; + } + } + + if(msgJson.containsKey("scrollId")){ + scrollId = msgJson.getString("scrollId"); + }else{ + scrollId = ""; + } + }else{ + scrollId = ""; + } + + log.error("scrollId:{}",scrollId); + log.error("count:{}",count); + + count++; + if(count > (pageCount+5)){ + break; + } + } + } + log.error("positionArray:{}",positionArray.size()); + + List fieldList = new ArrayList(); + fieldList.add("bs_gwid"); + fieldList.add("bs_gwmc"); + fieldList.add("bs_gwbm"); + + if(positionArray.size() > 0){ + updateHrmPosition(positionArray); + doSavePositionData(positionArray); + } + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + return WeaResult.success(actionMap); + } + + + public JSONArray convertPositionList(JSONArray positionArray){ + JSONArray dataArray = new JSONArray(); + + for(int i=0;i doSavePositionData(JSONArray positionArray){ + List ebList = new ArrayList(); + + List fieldList = new ArrayList(); + fieldList.add("bs_gwid"); + fieldList.add("bs_gwmc"); + fieldList.add("bs_gwbm"); + + if(positionArray.size() > 0){ + JSONArray dataArray = convertPositionList(positionArray); + log.error("dataArray:"+dataArray.size()); + Map fieldMap = hrmFormFieldDao.queryFromTableField(Constants.beisenPostionTable,fieldList); + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + for(int i=0;i mainData = new ArrayList(); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n mainData = new ArrayList(); + for(int n=0;n recordMap = hrmFormFieldDao.queryTableFormId(Constants.beisenPostionTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertDbForm(addDatas,formId,appId); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(updateDatas,formId,appId); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + } + } + } + return ebList; + } + + + public Map updateHrmPosition(JSONArray positionArray){ + Map resultMap = new HashMap(); + int failCount = 0; + int successCount = 0; + int total = positionArray.size() ; + if(positionArray.size() > 0){ + for(int i=0;i result = hrmBeisenPositionDao.updateHrmPositionByBensen(code,objectId,oIdOrganization); + if (result.containsKey("code")) { + code = String.valueOf(result.get("code")); + log.error("code:" + code); + if ("200".equals(code)) { + successCount++; + }else{ + failCount++; + } + } + } + } + } + + resultMap.put("failCount",String.valueOf(failCount)); + resultMap.put("successCount",String.valueOf(successCount)); + resultMap.put("total",String.valueOf(total)); + return resultMap; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionTimeCronJob.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionTimeCronJob.java new file mode 100644 index 0000000..b713594 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/esb/Esb2BeisenPositionTimeCronJob.java @@ -0,0 +1,277 @@ +package com.weaver.seconddev.chapanda.beisen.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmFormFieldDao; +import com.weaver.seconddev.chapanda.beisen.dao.HrmBeisenPositionDao; +import com.weaver.seconddev.chapanda.beisen.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.beisen.util.Esb2BeiSenPositionUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2BeisenPositionTimeCronJob") +public class Esb2BeisenPositionTimeCronJob implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2BeisenPositionTimeCronJob.class); + + @Autowired + Esb2BeiSenPositionUtil esb2BeiSenPositionUtil; + + @Autowired + HrmFormFieldDao hrmFormFieldDao; + + @Autowired + HrmBeisenPositionDao hrmBeisenPositionDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + @Override + public WeaResult> execute(Map params) { + JSONArray positionArray = new JSONArray(); + List ebList = new ArrayList(); + + // 获取当前日期 + LocalDate today = LocalDate.now(); + // 获取当前日期的前一周 + LocalDate lastWeek = today.minusWeeks(1); + + String startDate = lastWeek.toString(); + String endDate = today.toString(); + + log.error("startDate:{}",startDate); + log.error("endDate:{}",endDate); + + int capacity = 100; + int total = 0; + String scrollId = ""; + JSONArray firstArray = new JSONArray(); + String msg = esb2BeiSenPositionUtil.queryPositionByDate(startDate, endDate,capacity); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("total")){ + total = msgJson.getInteger("total"); + } + if(msgJson.containsKey("data")){ + firstArray = msgJson.getJSONArray("data"); + } + + if(msgJson.containsKey("scrollId")){ + scrollId = msgJson.getString("scrollId"); + } + } + + if(total <= capacity){ + positionArray = firstArray; + }else{ + if(firstArray.size() > 0){ + positionArray.addAll(firstArray); + } + int pageCount = (int)Math.floor(total / capacity*1.0); + int count = 0; + while(StringUtils.isNotBlank(scrollId) && !"null".equals(scrollId)){ + String positionData = esb2BeiSenPositionUtil.queryPositionByscrollId(startDate, endDate,scrollId,capacity); + if(StringUtils.isNotBlank(positionData)){ + JSONObject msgJson = JSONObject.parseObject(positionData); + + if(msgJson.containsKey("data")){ + JSONArray itemArray = msgJson.getJSONArray("data"); + if(itemArray.size() > 0){ + positionArray.add(itemArray); + } + } + if(msgJson.containsKey("scrollId")){ + scrollId = msgJson.getString("scrollId"); + }else{ + scrollId = ""; + } + }else{ + scrollId = ""; + } + count++; + if(count > (pageCount+5)){ + break; + } + } + } + log.error("positionArray:{}",positionArray.size()); + + if(positionArray.size() > 0){ + updateHrmPosition(positionArray); + doSavePositionData(positionArray); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + actionMap.put("total",ebList.size()); + return WeaResult.success(actionMap); + } + + + public JSONArray convertPositionList(JSONArray positionArray){ + JSONArray dataArray = new JSONArray(); + for(int i=0;i doSavePositionData(JSONArray positionArray){ + List ebList = new ArrayList(); + + List fieldList = new ArrayList(); + fieldList.add("bs_gwid"); + fieldList.add("bs_gwmc"); + fieldList.add("bs_gwbm"); + + if(positionArray.size() > 0){ + JSONArray dataArray = convertPositionList(positionArray); + log.error("dataArray:"+dataArray.size()); + Map fieldMap = hrmFormFieldDao.queryFromTableField(Constants.beisenPostionTable,fieldList); + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + for(int i=0;i mainData = new ArrayList(); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n mainData = new ArrayList(); + for(int n=0;n recordMap = hrmFormFieldDao.queryTableFormId(Constants.beisenPostionTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertDbForm(addDatas,formId,appId); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(updateDatas,formId,appId); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + } + } + } + return ebList; + } + + + public Map updateHrmPosition(JSONArray positionArray){ + Map resultMap = new HashMap(); + int failCount = 0; + int successCount = 0; + int total = positionArray.size() ; + if(positionArray.size() > 0){ + for(int i=0;i result = hrmBeisenPositionDao.updateHrmPositionByBensen(code,objectId,oIdOrganization); + if (result.containsKey("code")) { + code = String.valueOf(result.get("code")); + log.error("code:" + code); + if ("200".equals(code)) { + successCount++; + }else{ + failCount++; + } + } + } + } + } + + resultMap.put("failCount",String.valueOf(failCount)); + resultMap.put("successCount",String.valueOf(successCount)); + resultMap.put("total",String.valueOf(total)); + return resultMap; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/module/BeisenTokenModuleKey.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/module/BeisenTokenModuleKey.java new file mode 100644 index 0000000..b6da7fc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/module/BeisenTokenModuleKey.java @@ -0,0 +1,14 @@ +package com.weaver.seconddev.chapanda.beisen.module; + +/** + * 缓存moduleKey + * + * @author wangj + * @version 1.00版本 + * @Date 2025-6-3 + */ + +public class BeisenTokenModuleKey { + //datacenter + public final static String BENSENTOKEN_DATACENTER = "BENSENTOKEN_DATACENTER"; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/ConversionResignService.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/ConversionResignService.java new file mode 100644 index 0000000..6db9160 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/ConversionResignService.java @@ -0,0 +1,13 @@ +package com.weaver.seconddev.chapanda.beisen.service; + +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public interface ConversionResignService { + + Map resignConversion(Map paraMap); + + Map resignConversion2(Map paraMap); +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/impl/ConversionResignServiceImpl.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/impl/ConversionResignServiceImpl.java new file mode 100644 index 0000000..93fe6f9 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/service/impl/ConversionResignServiceImpl.java @@ -0,0 +1,172 @@ +package com.weaver.seconddev.chapanda.beisen.service.impl; + +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.weaver.seconddev.chapanda.beisen.dao.ConversionResignDao; +import com.weaver.seconddev.chapanda.beisen.service.ConversionResignService; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.Map; + + +/*** + * author:shil + */ +@Service +public class ConversionResignServiceImpl implements ConversionResignService { + + private final static Logger log = LoggerFactory.getLogger(ConversionResignServiceImpl.class); + + @Autowired + private ConversionResignDao conversionResignDao; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + /** + * + * @param paraMap + * @return + */ + @Override + public Map resignConversion(Map paraMap) { + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String conversionDay = ""; + + + Map dataMap = new HashMap(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Long employeeId = Long.valueOf(String.valueOf(paraMap.get("employeeId"))); + String lzrq = (String) paraMap.get("lzrq"); + log.error("employeeId:"+employeeId); + log.error("lzrq:{}",lzrq); + + String hiredate = ""; + if(employeeId > 0){ + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + hiredate = sdf.format(simpleEmployee.getHiredate()); + } + log.error("hiredate:{}",hiredate); + + + dataMap.put("employeeid",employeeId); + dataMap.put("lzrq",lzrq); + dataMap.put("rzrq",hiredate); + + if(StringUtils.isNotBlank(lzrq) && StringUtils.isNotBlank(hiredate)){ + String rznf = hiredate.substring(0,4); + String lznf = lzrq.substring(0,4); + + log.error("rznf:"+rznf); + log.error("lznf:"+lznf); + + if(StringUtils.isNotBlank(rznf) && StringUtils.isNotBlank(lznf) ){ + double annualBase = conversionResignDao.queryEmployeeAnnualLeave(String.valueOf(employeeId),lznf); + + log.error("annualBase:"+annualBase); + + dataMap.put("annualBase",annualBase+""); + if(rznf.equals(lznf)){ + LocalDate rzDate = LocalDate.parse(hiredate, formatter); + LocalDate lzDate = LocalDate.parse(lzrq, formatter); + long workDays = ChronoUnit.DAYS.between(lzDate, rzDate); + dataMap.put("workdays",workDays+""); + if(annualBase !=0){ + conversionDay = new BigDecimal(Double.toString((workDays/365.0)*annualBase)).setScale(2, RoundingMode.HALF_UP).toString(); + } + }else{ + LocalDate rzDate = LocalDate.parse(lznf+"-01-01", formatter); + LocalDate lzDate = LocalDate.parse(lzrq, formatter); + long workDays = ChronoUnit.DAYS.between(lzDate, rzDate); + dataMap.put("workdays",workDays+""); + if(annualBase !=0){ + conversionDay = new BigDecimal(Double.toString((workDays/365.0)*annualBase)).setScale(2, RoundingMode.HALF_UP).toString(); + } + } + } + } + dataMap.put("days",conversionDay); + return dataMap; + } + + /*** + * + * @param paraMap + * @return + */ + @Override + public Map resignConversion2(Map paraMap) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String conversionDay = ""; + + + Map dataMap = new HashMap(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Long employeeId = Long.valueOf(String.valueOf(paraMap.get("employeeId"))); + String lzrq = (String) paraMap.get("lzrq"); + log.error("employeeId:"+employeeId); + log.error("lzrq:"+lzrq); + + String hiredate = ""; + if(employeeId > 0){ + hiredate = conversionResignDao.queryEmployeeById(String.valueOf(employeeId)); + } + if(StringUtils.isNotBlank(hiredate)){ + hiredate = hiredate.substring(0,10); + } + log.error("hiredate:"+hiredate); + + dataMap.put("employeeid",employeeId); + dataMap.put("lzrq",lzrq); + dataMap.put("rzrq",hiredate); + + if(StringUtils.isNotBlank(lzrq) && StringUtils.isNotBlank(hiredate)){ + + String rznf = hiredate.substring(0,4); + String lznf = lzrq.substring(0,4); + + log.error("rznf:"+rznf); + log.error("lznf:"+lznf); + + if(StringUtils.isNotBlank(rznf) && StringUtils.isNotBlank(lznf) ){ + double annualBase = conversionResignDao.queryEmployeeAnnualLeave(String.valueOf(employeeId),lznf); + + log.error("annualBase:"+annualBase); + + dataMap.put("annualBase",annualBase+""); + if(rznf.equals(lznf)){ + LocalDate rzDate = LocalDate.parse(hiredate, formatter); + LocalDate lzDate = LocalDate.parse(lzrq, formatter); + long workDays = ChronoUnit.DAYS.between(rzDate,lzDate); + dataMap.put("workdays",workDays+""); + if(annualBase !=0){ + conversionDay = new BigDecimal(Double.toString((workDays/365.0)*annualBase)).setScale(2, RoundingMode.HALF_UP).toString(); + } + }else{ + LocalDate rzDate = LocalDate.parse(lznf+"-01-01", formatter); + LocalDate lzDate = LocalDate.parse(lzrq, formatter); + long workDays = ChronoUnit.DAYS.between(rzDate,lzDate); + dataMap.put("workdays",workDays+""); + if(annualBase !=0){ + conversionDay = new BigDecimal(Double.toString((workDays/365.0)*annualBase)).setScale(2, RoundingMode.HALF_UP).toString(); + } + } + } + } + dataMap.put("days",conversionDay); + return dataMap; + + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDepartmentInfoByOriginalIdUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDepartmentInfoByOriginalIdUtil.java new file mode 100644 index 0000000..74b7f53 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDepartmentInfoByOriginalIdUtil.java @@ -0,0 +1,183 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDepartmentDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffPositionDto; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class BeisenDepartmentInfoByOriginalIdUtil { + private final static Logger log = LoggerFactory.getLogger(BeisenDepartmentInfoByOriginalIdUtil.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + public BeisenStaffDto getBeisenDeptDataByOriginalId(String staffcode){ + BeisenStaffDto beisenStaffDto = new BeisenStaffDto(); + if(StringUtils.isEmpty(staffcode)){ + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + if(StringUtils.isNotBlank(token)){ + String bodyData = queryUserInfoByStaffCode(token,staffcode); + + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getString("code"); + if("200".equals(code)){ + JSONArray itemsArray = bodyJson.getJSONArray("items"); + JSONObject itemObject = itemsArray.getJSONObject(0); + + if(itemObject.containsKey("staffDto")){ + JSONObject staffDto = itemObject.getJSONObject("staffDto"); + beisenStaffDto.setDepartmentId(staffDto.getString("departmentId")); + beisenStaffDto.setDepartmentName(staffDto.getString("departmentName")); + String employedDate = staffDto.getString("employedDate"); + + if(!"null".equals(employedDate) && employedDate !=null ){ + if(employedDate.contains("T")){ + employedDate = employedDate.substring(0,employedDate.indexOf("T")); + } + } + + beisenStaffDto.setEmployedDate(employedDate); + + beisenStaffDto.setJobCode(staffDto.getString("jobCode")); + beisenStaffDto.setPositionName(staffDto.getString("positionName")); + beisenStaffDto.setLineManagerId(staffDto.getString("lineManagerId")); + beisenStaffDto.setStaffCode(staffDto.getString("staffCode")); + beisenStaffDto.setStaffStatus(staffDto.getString("staffStatus")); + beisenStaffDto.setIsDelete(staffDto.getString("isDelete")); + String useridStr = staffDto.getString("userId"); + int userid = -1 ; + if(StringUtils.isNotBlank(useridStr)){ + try{ + userid = Integer.valueOf(useridStr); + }catch (Exception e){ + + } + } + beisenStaffDto.setUserId(userid); + + beisenStaffDto.setTenantId(staffDto.getString("tenantId")); + beisenStaffDto.setEmail(staffDto.getString("email")); + beisenStaffDto.setUserType(staffDto.getString("userType")); + beisenStaffDto.setUserStatus(staffDto.getString("userStatus")); + beisenStaffDto.setOrigin(staffDto.getString("origin")); + beisenStaffDto.setOriginalId(staffDto.getString("originalId")); + beisenStaffDto.setName(staffDto.getString("name")); + beisenStaffDto.setEnglishName(staffDto.getString("englishName")); + beisenStaffDto.setSex(staffDto.getString("sex")); + String birthday = staffDto.getString("birthday"); + + if(!"null".equals(birthday) && birthday !=null ){ + if(birthday.contains("T")){ + birthday = birthday.substring(0,birthday.indexOf("T")); + } + } + + + beisenStaffDto.setBirthday(birthday); + beisenStaffDto.setMobile(staffDto.getString("mobile")); + beisenStaffDto.setIdCardType(staffDto.getString("idCardType")); + + String graduateDate = staffDto.getString("graduateDate"); + if(!"null".equals(graduateDate) && graduateDate !=null ){ + if(graduateDate.contains("T")){ + graduateDate = graduateDate.substring(0,graduateDate.indexOf("T")); + } + } + + + beisenStaffDto.setGraduateDate(graduateDate); + + beisenStaffDto.setNativePlace(staffDto.getString("nativePlace")); + String beganWorkDate = staffDto.getString("beganWorkDate"); + if(!"null".equals(beganWorkDate) && beganWorkDate !=null ){ + if(beganWorkDate.contains("T")){ + beganWorkDate = beganWorkDate.substring(0,beganWorkDate.indexOf("T")); + } + } + + beisenStaffDto.setBeganWorkDate(beganWorkDate); + beisenStaffDto.setGraduateFrom(staffDto.getString("graduateFrom")); + beisenStaffDto.setMajor(staffDto.getString("major")); + beisenStaffDto.setPositionCategory(staffDto.getString("positionCategory")); + } + + BeisenStaffDepartmentDto beisenStaffDepartmentDto = new BeisenStaffDepartmentDto(); + if(itemObject.containsKey("departmentDto")){ + JSONObject departmentDto = itemObject.getJSONObject("departmentDto"); + beisenStaffDepartmentDto.setId(departmentDto.getString("id")); + beisenStaffDepartmentDto.setName(departmentDto.getString("name")); + beisenStaffDepartmentDto.setCode(departmentDto.getString("code")); + beisenStaffDepartmentDto.setAbbreviation(departmentDto.getString("abbreviation")); + beisenStaffDepartmentDto.setParentId(departmentDto.getString("parentId")); + beisenStaffDepartmentDto.setLevel(departmentDto.getString("level")); + beisenStaffDepartmentDto.setStatus(departmentDto.getString("status")); + beisenStaffDepartmentDto.setIsDelete(departmentDto.getString("isDelete")); + beisenStaffDepartmentDto.setOriginalId(departmentDto.getString("originalId")); + } + beisenStaffDto.setBeisenStaffDepartmentDto(beisenStaffDepartmentDto); + + BeisenStaffPositionDto beisenStaffPositionDto = new BeisenStaffPositionDto(); + if(itemObject.containsKey("positionDto")){ + JSONObject positionDto = itemObject.getJSONObject("positionDto"); + + beisenStaffPositionDto.setId(positionDto.getString("id")); + beisenStaffPositionDto.setName(positionDto.getString("name")); + beisenStaffPositionDto.setCode(positionDto.getString("code")); + beisenStaffPositionDto.setStatus(positionDto.getString("status")); + beisenStaffPositionDto.setIsDelete(positionDto.getString("isDelete")); + } + beisenStaffDto.setBeisenStaffPositionDto(beisenStaffPositionDto); + + } + } + } + } + } + return beisenStaffDto; + } + + + public String queryUserInfoByStaffCode(String token,String staffcode){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.userInfoUrl+"?staffCode="+staffcode) + .method("GET", null) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + if(code == 200) { + bodyData = response.body().string(); + }else{ + log.error("msg:"+response.body().string()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + return bodyData; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDeptInfoByOriginalIdUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDeptInfoByOriginalIdUtil.java new file mode 100644 index 0000000..99c6b46 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenDeptInfoByOriginalIdUtil.java @@ -0,0 +1,103 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenDepartmentDto; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class BeisenDeptInfoByOriginalIdUtil { + private final static Logger log = LoggerFactory.getLogger(BeisenDeptInfoByOriginalIdUtil.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + public BeisenDepartmentDto getBeisenDeptDataByOriginalId(String originalId){ + BeisenDepartmentDto beisenDepartmentDto = new BeisenDepartmentDto(); + if(StringUtils.isNotEmpty(originalId)){ + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + if(StringUtils.isNotBlank(token)){ + String bodyData = queryDeptDataByOriginalId(token,originalId); + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getString("code"); + log.error("code:{}",code); + if("200".equals(code)){ + if(bodyJson.containsKey("items")){ + String items = bodyJson.getString("items"); + if(!"[]".equals(items)){ + JSONArray itemsArray = bodyJson.getJSONArray("items"); + if(itemsArray.size() > 0){ + JSONObject itemObject = itemsArray.getJSONObject(0); + log.error("itemsArray:{}",itemsArray.size()); + log.error("itemObject:{}",itemObject.toJSONString()); + + log.error("orgId:{}",itemObject.getString("orgId")); + int orgId = -1; + String orgIdStr = itemObject.getString("orgId"); + if(StringUtils.isNotBlank(orgIdStr)){ + orgId = Integer.valueOf(orgIdStr); + } + beisenDepartmentDto.setOrgId(orgId); + + beisenDepartmentDto.setName(itemObject.getString("name")); + beisenDepartmentDto.setCode(itemObject.getString("code")); + + beisenDepartmentDto.setAbbreviation(itemObject.getString("abbreviation")); + beisenDepartmentDto.setParentOriginalId(itemObject.getString("parentOriginalId")); + beisenDepartmentDto.setOriginalId(itemObject.getString("originalId")); + beisenDepartmentDto.setOrderId(itemObject.getString("orderId")); + beisenDepartmentDto.setStatus(itemObject.getString("status")); + beisenDepartmentDto.setIsDelete(itemObject.getString("isDelete")); + } + } + } + } + } + } + } + } + return beisenDepartmentDto; + } + + + public String queryDeptDataByOriginalId(String token,String originalId){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.deppartmentUrl+"?originalId="+originalId) + .method("GET", null) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + + if(code == 200) { + bodyData = response.body().string(); + } + log.error("bodyData:{}",bodyData); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return bodyData; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryDeptIdUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryDeptIdUtil.java new file mode 100644 index 0000000..ed0b20d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryDeptIdUtil.java @@ -0,0 +1,85 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class BeisenQueryDeptIdUtil { + private final static Logger log = LoggerFactory.getLogger(BeisenQueryDeptIdUtil.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + public String queryBeisenDeptIdByCode(String code){ + String deptid = ""; + if(StringUtils.isNotEmpty(code)) { + String token = token2BeiSenUtil.getToken(); + if (StringUtils.isNotBlank(token)) { + deptid = queryDeptIdByCode(token, code); + } + } + return deptid; + } + + /*** + * + * @param token + * @param deptcode + * @return + */ + private String queryDeptIdByCode(String token,String deptcode){ + String deptid = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create(mediaType, "{\"codes\":[\""+deptcode+"\"]}"); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.queryDeptIdByCodeUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + if(code == 200) { + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyJson = JSONObject.parseObject(msg); + if(bodyJson.containsKey("data")){ + JSONArray dataArray = bodyJson.getJSONArray("data"); + if(dataArray.size() > 0){ + JSONObject itemJson = dataArray.getJSONObject(0); + if(itemJson.containsKey("oId")){ + deptid = itemJson.getString("oId"); + } + } + } + } + } + } catch (IOException e) { + log.error("e:{}",e); + } + log.error("deptid:{}",deptid); + return deptid; + } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryUseridUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryUseridUtil.java new file mode 100644 index 0000000..6252b12 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenQueryUseridUtil.java @@ -0,0 +1,135 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class BeisenQueryUseridUtil { + private final static Logger log = LoggerFactory.getLogger(BeisenQueryUseridUtil.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + public String queryBeisenUserIdByEmail(String email){ + String userid = ""; + if(StringUtils.isNotEmpty(email)) { + String token = token2BeiSenUtil.getToken(); + if (StringUtils.isNotBlank(token)) { + userid = queryUserIdByEmail(token, email); + } + } + return userid; + } + + + public String queryBeisenUserIdByJobNum(String jobNum){ + String userid = ""; + if(StringUtils.isNotEmpty(jobNum)) { + String token = token2BeiSenUtil.getToken(); + if (StringUtils.isNotBlank(token)) { + userid = queryUserIdByJobNum(token, jobNum); + } + } + return userid; + } + + /*** + * + * @param token + * @param email + * @return + */ + private String queryUserIdByEmail(String token,String email){ + String userid = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject dataJson = new JSONObject(); + dataJson.put("email",email); + RequestBody body = RequestBody.create(mediaType, dataJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.queryUserIdByEmailUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + if(code == 200) { + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyJson = JSONObject.parseObject(msg); + if(bodyJson.containsKey("data")){ + userid = bodyJson.getString("data"); + } + } + } + } catch (IOException e) { + log.error("e:{}",e); + } + log.error("userid:{}",userid); + return userid; + } + + /*** + * + * @param token + * @param jobNum + * @return + */ + private String queryUserIdByJobNum(String token,String jobNum){ + String userid = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, "{\n \"jobNumbers\":[\""+jobNum+"\"]\n}"); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.queryUserIdByCodeUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + String msg = response.body().string(); + if(code == 200) { + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyJson = JSONObject.parseObject(msg); + if(bodyJson.containsKey("data")){ + JSONArray dataArray = bodyJson.getJSONArray("data"); + if(dataArray.size() > 0){ + JSONObject itemJson = dataArray.getJSONObject(0); + if(itemJson.containsKey("userId")){ + userid = itemJson.getString("userId"); + } + } + } + } + } + } catch (IOException e) { + log.error("e:{}",e); + } + log.error("userid:{}",userid); + return userid; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenStaffInfoByStaffCodeUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenStaffInfoByStaffCodeUtil.java new file mode 100644 index 0000000..eda2264 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BeisenStaffInfoByStaffCodeUtil.java @@ -0,0 +1,193 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDepartmentDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffPositionDto; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class BeisenStaffInfoByStaffCodeUtil { + private final static Logger log = LoggerFactory.getLogger(BeisenStaffInfoByStaffCodeUtil.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + public BeisenStaffDto getBeisenStaffInfoByStaffCode(String staffcode){ + BeisenStaffDto beisenStaffDto = new BeisenStaffDto(); + if(StringUtils.isNotEmpty(staffcode)){ + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + if(StringUtils.isNotBlank(token)){ + String bodyData = queryUserInfoByStaffCode(token,staffcode); + log.error("bodyData:{}",bodyData); + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = JSONObject.parseObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getString("code"); + log.error("code:{}",code); + if("200".equals(code)){ + String items = bodyJson.getString("items"); + if(!"[]".equals(items)){ + JSONArray itemsArray = bodyJson.getJSONArray("items"); + log.error("itemsArray:{}",itemsArray.size()); + if(itemsArray.size() > 0){ + + JSONObject itemObject = itemsArray.getJSONObject(0); + log.error("itemObject:{}",itemObject.size()); + + if(itemObject.containsKey("staffDto")){ + JSONObject staffDto = itemObject.getJSONObject("staffDto"); + log.error("staffDto:{}",staffDto.size()); + beisenStaffDto.setDepartmentId(staffDto.getString("departmentId")); + beisenStaffDto.setDepartmentName(staffDto.getString("departmentName")); + String employedDate = staffDto.getString("employedDate"); + log.error("employedDate:{}",employedDate); + if(!"null".equals(employedDate) && employedDate !=null ){ + if(employedDate.contains("T")){ + employedDate = employedDate.substring(0,employedDate.indexOf("T")); + } + } + + log.error("employedDate:{}",employedDate); + + beisenStaffDto.setEmployedDate(employedDate); + + beisenStaffDto.setJobCode(staffDto.getString("jobCode")); + beisenStaffDto.setPositionName(staffDto.getString("positionName")); + beisenStaffDto.setLineManagerId(staffDto.getString("lineManagerId")); + beisenStaffDto.setStaffCode(staffDto.getString("staffCode")); + beisenStaffDto.setStaffStatus(staffDto.getString("staffStatus")); + beisenStaffDto.setIsDelete(staffDto.getString("isDelete")); + String useridStr = staffDto.getString("userId"); + int userid = -1 ; + if(StringUtils.isNotBlank(useridStr)){ + try{ + userid = Integer.valueOf(useridStr); + }catch (Exception e){ + + } + } + beisenStaffDto.setUserId(userid); + + beisenStaffDto.setTenantId(staffDto.getString("tenantId")); + beisenStaffDto.setEmail(staffDto.getString("email")); + beisenStaffDto.setUserType(staffDto.getString("userType")); + beisenStaffDto.setUserStatus(staffDto.getString("userStatus")); + beisenStaffDto.setOrigin(staffDto.getString("origin")); + beisenStaffDto.setOriginalId(staffDto.getString("originalId")); + beisenStaffDto.setName(staffDto.getString("name")); + beisenStaffDto.setEnglishName(staffDto.getString("englishName")); + beisenStaffDto.setSex(staffDto.getString("sex")); + String birthday = staffDto.getString("birthday"); + + if(!"null".equals(birthday) && birthday !=null ){ + if(birthday.contains("T")){ + birthday = birthday.substring(0,birthday.indexOf("T")); + } + } + + beisenStaffDto.setBirthday(birthday); + beisenStaffDto.setMobile(staffDto.getString("mobile")); + beisenStaffDto.setIdCardType(staffDto.getString("idCardType")); + + String graduateDate = staffDto.getString("graduateDate"); + + if(!"null".equals(graduateDate) && graduateDate !=null ){ + if(graduateDate.contains("T")){ + graduateDate = graduateDate.substring(0,graduateDate.indexOf("T")); + } + } + + + log.error("graduateDate:{}",graduateDate); + beisenStaffDto.setGraduateDate(graduateDate); + + beisenStaffDto.setNativePlace(staffDto.getString("nativePlace")); + String beganWorkDate = staffDto.getString("beganWorkDate"); + + if(!"null".equals(beganWorkDate) && beganWorkDate !=null ){ + if(beganWorkDate.contains("T")){ + beganWorkDate = beganWorkDate.substring(0,beganWorkDate.indexOf("T")); + } + } + + log.error("graduateDate:{}",graduateDate); + beisenStaffDto.setBeganWorkDate(beganWorkDate); + beisenStaffDto.setGraduateFrom(staffDto.getString("graduateFrom")); + beisenStaffDto.setMajor(staffDto.getString("major")); + beisenStaffDto.setPositionCategory(staffDto.getString("positionCategory")); + } + + BeisenStaffDepartmentDto beisenStaffDepartmentDto = new BeisenStaffDepartmentDto(); + if(itemObject.containsKey("departmentDto")){ + JSONObject departmentDto = itemObject.getJSONObject("departmentDto"); + beisenStaffDepartmentDto.setId(departmentDto.getString("id")); + beisenStaffDepartmentDto.setName(departmentDto.getString("name")); + beisenStaffDepartmentDto.setCode(departmentDto.getString("code")); + beisenStaffDepartmentDto.setAbbreviation(departmentDto.getString("abbreviation")); + beisenStaffDepartmentDto.setParentId(departmentDto.getString("parentId")); + beisenStaffDepartmentDto.setLevel(departmentDto.getString("level")); + beisenStaffDepartmentDto.setStatus(departmentDto.getString("status")); + beisenStaffDepartmentDto.setIsDelete(departmentDto.getString("isDelete")); + beisenStaffDepartmentDto.setOriginalId(departmentDto.getString("originalId")); + } + beisenStaffDto.setBeisenStaffDepartmentDto(beisenStaffDepartmentDto); + + BeisenStaffPositionDto beisenStaffPositionDto = new BeisenStaffPositionDto(); + if(itemObject.containsKey("positionDto")){ + JSONObject positionDto = itemObject.getJSONObject("positionDto"); + + beisenStaffPositionDto.setId(positionDto.getString("id")); + beisenStaffPositionDto.setName(positionDto.getString("name")); + beisenStaffPositionDto.setCode(positionDto.getString("code")); + beisenStaffPositionDto.setStatus(positionDto.getString("status")); + beisenStaffPositionDto.setIsDelete(positionDto.getString("isDelete")); + } + beisenStaffDto.setBeisenStaffPositionDto(beisenStaffPositionDto); + } + } + } + } + } + } + } + return beisenStaffDto; + } + + + public String queryUserInfoByStaffCode(String token,String staffcode){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.userInfoUrl+"?staffCode="+staffcode) + .method("GET", null) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + if(code == 200) { + bodyData = response.body().string(); + } + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return bodyData; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BlackList2BeiSenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BlackList2BeiSenUtil.java new file mode 100644 index 0000000..cfa6bb6 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/BlackList2BeiSenUtil.java @@ -0,0 +1,206 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.List; + + +@Component +public class BlackList2BeiSenUtil { + private final static Logger log = LoggerFactory.getLogger(BlackList2BeiSenUtil.class); + + /*** + * + * @param token + * @return + */ + public String createBlackList4NonSystem(String token,String name,String staffEmail,String blackAddReason,String blackStaffDesc){ + + log.error("createBlackList4NonSystem"); + String objectId = ""; + + // 选项名称 选项编码 启用状态 + //重大违纪 1 启用 + //诚信问题 2 启用 + //稳定性差 3 启用 + //辞职 4 启用 + //其他 5 启用 + JSONObject bodyJson = new JSONObject(); + JSONObject dataJson = new JSONObject(); + dataJson.put("name",name); + dataJson.put("staffEmail",staffEmail); + dataJson.put("blackAddReason",blackAddReason); + dataJson.put("blackStaffDesc",blackStaffDesc); + +// dataJson.put("name","王芳"); +// dataJson.put("staffEmail","798989044@qq.com"); +// dataJson.put("blackAddReason","3"); +// dataJson.put("blackStaffDesc","做事不认真"); + + bodyJson.put("data",dataJson); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + // https://openapi.italent.cn/TenantBaseExternal/api/v5/BlackList/Create + // "{\n \"data\": {\n \"name\": \"测试王芳\",\n \"staffEmail\": \"798989044@qq.com\",\n \"blackAddReason\":\"3\",\n \"blackStaffDesc\":\"做事不认真\"\n }\n}" + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+ Constants.createBlackListUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("msg:{}",msg); + log.error("code:{}",code); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyData = JSONObject.parseObject(msg); + if(bodyData.containsKey("code")){ + String dataCode = bodyData.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = bodyData.getJSONObject("data"); + if(dataObject.containsKey("objectId")){ + objectId = dataObject.getString("objectId"); + } + } + } + } + }else{ + log.error("msg:"+msg); + } + + log.error("objectId:{}",objectId); + + } catch (IOException e) { + throw new RuntimeException(e); + } + return objectId; + } + + + public String createBlackList4ResignUser(String token,String userID,String lastWorkDate,String blackAddReason,String blackStaffDesc){ + log.error("createBlackList4ResignUser"); + String objectId = ""; + + // 选项名称 选项编码 启用状态 + //重大违纪 1 启用 + //诚信问题 2 启用 + //稳定性差 3 启用 + //辞职 4 启用 + //其他 5 启用 + + JSONObject bodyJson = new JSONObject(); + JSONObject dataJson = new JSONObject(); + dataJson.put("userID",userID); + dataJson.put("blackListSource","1"); + dataJson.put("lastWorkDate",lastWorkDate); + dataJson.put("blackAddReason",blackAddReason); + dataJson.put("blackStaffDesc",blackStaffDesc); + +// dataJson.put("userID","王芳"); +// dataJson.put("blackListSource","1"); +// dataJson.put("lastWorkDate","2025-05-30"); +// dataJson.put("blackAddReason","3"); +// dataJson.put("blackStaffDesc","做事不认真"); + + bodyJson.put("data",dataJson); + // https://openapi.italent.cn/TenantBaseExternal/api/v5/BlackList/Create + // "{\n \"data\": {\n \"name\": \"测试王芳\",\n \"staffEmail\": \"798989044@qq.com\",\n \"blackAddReason\":\"3\",\n \"blackStaffDesc\":\"做事不认真\"\n }\n}" + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.createBlackListUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + System.out.println("code:"+code); + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject bodyData = JSONObject.parseObject(msg); + if(bodyData.containsKey("code")){ + String dataCode = bodyData.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = bodyData.getJSONObject("data"); + if(dataObject.containsKey("objectId")){ + objectId = dataObject.getString("objectId"); + } + } + } + } + }else{ + log.error("msg:"+msg); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + return objectId; + } + + /*** + * 批量删除黑名单 + * @param token + * @param idList + * @return + */ + public String batchDeleteBlackList(String token,List idList){ + + String msg = ""; + JSONObject bodyJson = new JSONObject(); + bodyJson.put("Ids",idList); + + // https://openapi.italent.cn/TenantBaseExternal/api/v5/BlackList/BatchDelete + // "{\n \"Ids\": [\n \"0441166f-468e-425f-9163-4a9d922169e3\"\n ]\n}" + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.deleteBlackListUrl) + .method("DELETE", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + if(code == 200 ){ + msg = response.body().string(); + } + log.error("msg:"+msg); + } catch (IOException e) { + throw new RuntimeException(e); + } + return msg; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/CommonUtils.java new file mode 100644 index 0000000..fcb4edb --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/DatabaseUtils.java new file mode 100644 index 0000000..67e1128 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderOperateUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderOperateUtils.java new file mode 100644 index 0000000..0a889e5 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderOperateUtils.java @@ -0,0 +1,132 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.dmp.constant.Constants; +import com.weaver.seconddev.chapanda.dmp.dao.FormFieldDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class EbuilderOperateUtils { + + private final static Logger log = LoggerFactory.getLogger(EbuilderOperateUtils.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + @RpcReference(group = "ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + + public EBDataChangeResult bacthInsertDbForm(List datas,String formId,String appId) { + + log.error("bacthInsertDbForm"); + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n datas,String formId,String appId) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + if (StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)) { + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + /** + * 直接通过id更新数据, 即update table set a = '11' where id = 1 + */ + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + ebDataReqOperation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + // 数据没有找到的时候是否新增数据 + EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); + ebDataReqOperationInfo.setNeedAdd(true); + ebDataReqOperation.setMainData(ebDataReqOperationInfo); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + ebDataChangeReqDto.setDatas(datas); + ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + } + return ebDataChangeResult; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderUtils.java new file mode 100644 index 0000000..271c88f --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/EbuilderUtils.java @@ -0,0 +1,108 @@ +package com.weaver.seconddev.chapanda.beisen.util; + + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import org.springframework.stereotype.Component; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class EbuilderUtils { + + @RpcReference(group="ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + public EBDataChangeResult bacthInsertDbForm(String referrer_id,int points,String talent_id) { + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader("1120080325150089217", Constants.SysUserId, Constants.TENANT_KEY)); + + List datas = new ArrayList(); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + // 主表数据参数 + List mainData1 = new ArrayList(); + // 单行文本 + mainData1.add(new EBDataReqDetailDto("1120080376580644871", referrer_id)); + mainData1.add(new EBDataReqDetailDto("1120080376580644872", String.valueOf(points))); + ebDataReqDto.setMainDatas(mainData1); + + // 明细数据参数 + Map>> detailDatas = new HashMap<>(); + // 多条明细数据 + List> subFormDatas = new ArrayList<>(); + // 单明细数据不同字段值 - 明细数据1 + List subFormRowData1 = new ArrayList<>(); + subFormRowData1.add(new EBDataReqDetailDto("1120167723322155008", talent_id,false)); + subFormRowData1.add(new EBDataReqDetailDto("1120080728843460609", String.valueOf(points),false)); + subFormDatas.add(subFormRowData1); + detailDatas.put(1120080376580644874L, subFormDatas); + ebDataReqDto.setDetailDatas(detailDatas); + + datas.add(ebDataReqDto); + ebDataChangeReqDto.setDatas(datas); + EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.saveFormData(ebDataChangeReqDto); + + + return ebDataChangeResult; + } + + + public EBDataChangeResult bacthAppendEbDetail(String rcid,int points,String mainid) { + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + ebDataChangeReqDto.setHeader(new EBDataReqHeader("1120080325150089217", Constants.SysUserId, Constants.TENANT_KEY)); + + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 数据组装 + List datas = new ArrayList<>(); + // 第一个数据项 + EBDataReqDto ebDataReqDto1 = new EBDataReqDto(); + List mainDatas1 = new ArrayList<>(); + // 主表数据组装 + mainDatas1.add(new EBDataReqDetailDto("id", mainid, false)); + ebDataReqDto1.setMainDatas(mainDatas1); + + /****************** 设置明细操作方式 - 不做覆盖 需要追加 ******************/ + Map detailDatas = new HashMap<>(); + EBDataReqOperationInfo detailOperation = new EBDataReqOperationInfo(); + detailOperation.setCover(false); + detailOperation.setNeedAdd(true); + detailDatas.put(1120080376580644874L, detailOperation); + ebDataReqOperation.setDetailDatas(detailDatas); + + // 明细行数据组装 + Map>> detailDatas1 = new HashMap<>(); + List> detailDataList1 = new ArrayList<>(); + List detailData1 = new ArrayList(); + // 第一个明细表 第一条数据 + detailData1.add(new EBDataReqDetailDto("1120167723322155008", rcid, false)); + detailData1.add(new EBDataReqDetailDto("1120080728843460609", String.valueOf(points), false)); + detailDataList1.add(detailData1); + detailDatas1.put(1120080376580644874L, detailDataList1); + ebDataReqDto1.setDetailDatas(detailDatas1); + datas.add(ebDataReqDto1); + + ebDataChangeReqDto.setOperation(ebDataReqOperation); + + // 设置数据 + ebDataChangeReqDto.setDatas(datas); + EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + + return ebDataChangeResult; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenAssessment360Util.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenAssessment360Util.java new file mode 100644 index 0000000..109a7af --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Esb2BeiSenAssessment360Util.java @@ -0,0 +1,171 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.dao.HrmAssessment360Dao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2BeiSenAssessment360Util { + private final static Logger log = LoggerFactory.getLogger(Esb2BeiSenAssessment360Util.class); + + @Autowired + Token2BeiSenUtil token2BeiSenUtil ; + + @Autowired + HrmAssessment360Dao hrmAssessment360Dao; + + /*** + * + * @return + */ + public JSONArray queryAssessment360Data(){ + JSONArray assessmentArray = new JSONArray(); + + List> emailList = hrmAssessment360Dao.queryEmployeeEmail(); + for(int i=0;i emailMap = emailList.get(i); + String email = emailMap.get("email").toString(); + if(StringUtils.isNotBlank(email)){ + JSONArray dataArray = convertAssessmentData(email); + assessmentArray.addAll(dataArray); + } + } + return assessmentArray; + } + + + public JSONArray convertAssessmentData(String email){ + JSONArray assessmentArray = new JSONArray(); + if(StringUtils.isNotBlank(email)){ + String token = token2BeiSenUtil.getToken(); + log.error("token:{}",token); + if(StringUtils.isNotBlank(token)){ + JSONObject bodyJson = new JSONObject(); + bodyJson.put("email",email); + log.error("bodyJson:{}",bodyJson.toJSONString()); + String msg = doHttpPost(token,bodyJson.toJSONString()); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + + String personnelStaffCode = ""; + String personnelMail = ""; + String personnelName = ""; + if(dataJson.containsKey("personInfo")){ + JSONObject personInfoJson = dataJson.getJSONObject("personInfo"); + if(personInfoJson.containsKey("personnelName")){ + personnelName = personInfoJson.getString("personnelName"); + } + if(personInfoJson.containsKey("personnelMail")){ + personnelMail = personInfoJson.getString("personnelMail"); + } + if(personInfoJson.containsKey("personnelStaffCode")){ + personnelStaffCode = personInfoJson.getString("personnelStaffCode"); + } + } + + log.error("personnelStaffCode:{}",personnelStaffCode); + log.error("personnelMail:{}",personnelMail); + + if(dataJson.containsKey("activityList")){ + JSONArray activityListArray = dataJson.getJSONArray("activityList"); + for (int i = 0; i < activityListArray.size(); i++) { + JSONObject activityJson = activityListArray.getJSONObject(i); + String activityID = ""; + if(activityJson.containsKey("activityID")){ + activityID = activityJson.getString("activityID"); + } + String activityName = ""; + if(activityJson.containsKey("activityName")){ + activityName = activityJson.getString("activityName"); + } + String createTime = ""; + if(activityJson.containsKey("createTime")){ + createTime = activityJson.getString("createTime"); + } + JSONArray questionnaireInfoList = new JSONArray(); + if(activityJson.containsKey("questionnaireInfoList")){ + questionnaireInfoList = activityJson.getJSONArray("questionnaireInfoList"); + } + + log.error("activityID:{}",personnelMail); + log.error("createTime:{}",createTime); + log.error("questionnaireInfoList:{}",questionnaireInfoList.size()); + + for(int n=0;n -1){ + bodyJson.put("requirementStatus",requirementStatus); + } + + /*** + * 需求类型 + * 1 新增 + * 2 顶替 + * 3 储备 + */ + if(requirementType > -1){ + bodyJson.put("requirementType",requirementType); + } + + + bodyJson.put("name",xqmc); + log.error("beisenCreateBy:{}",beisenCreateBy); + if(beisenCreateBy > -1){ + bodyJson.put("createBy",beisenCreateBy); + } + + if(!createDate.contains("T")){ + createDate = createDate+"T00:00:00"; + } + bodyJson.put("createDate",createDate); + + if(!arivalTime.contains("T")){ + arivalTime = arivalTime+"T00:00:00"; + } + bodyJson.put("arivalTime",arivalTime); + + bodyJson.put("dutyUserEmail",dutyUserEmail); + bodyJson.put("createByEmail",createByEmail); + + if(beisenDepartmentId > -1){ + bodyJson.put("departmentId",beisenDepartmentId); + }else{ + if(StringUtils.isNotBlank(originalCode)){ + bodyJson.put("orgCode",originalCode); + } + } + + /** + * 需求人数 + */ + if(requirementCount > -1){ + bodyJson.put("requirementCount",requirementCount); + } + +// if(salaryType >-1){ +// bodyJson.put("salaryType",salaryType); +// } + +// bodyJson.put("PositionIdCoreHR","d948d6ce-70cc-4265-975c-fea732759676"); + + /*** + * 招聘类别 + * 1 社会招聘 + * 2 校园招聘 + * 3 实习生招聘 + */ + + if(category > -1){ + bodyJson.put("category",category); + } + + + /*** + * 学历要求 + * 9 小学 + * 8 初中 + * 3 高中 + * 4 中技(中专/技校/职高) + * 5 大专 + * 1 本科 + * 2 硕士研究生 + * 6 MBA + * 7 博士研究生 + * 10 大专及以上 + * 11 本科及以上 + * 12 不限 + */ + bodyJson.put("educationInfo",educationInfo); + /*** + * 工作经验 + * 在读学生 + * 应届毕业生 + * 99 在读学生 + * 98 应届毕业生 + * 1 1年 + * 2 2年 + * 3 3年 + * 4 4年 + * 5 5年 + * 6 6年 + * 7 7年 + * 8 8年 + * 9 9年 + * 10 10年及以上 + */ + bodyJson.put("workExperience",workExperience); + + /*** + * 工作性质 + * 1 全职 + * 2 兼职 + * 3 实习 + * 4 其他 + */ + + if(kind > -1){ + bodyJson.put("kind",kind); + } + if(StringUtils.isNotBlank(nlyq)){ + JSONObject customProperties = new JSONObject(); + customProperties.put(Constants.nyyqzdm,nlyq); + customProperties.put(Constants.zwzd,zwmc); + + customProperties.put(Constants.zpssyfzd,zxssyf); + customProperties.put(Constants.jjcdzdm,jjcd); + + bodyJson.put("customProperties",customProperties); + } + log.error("beisenDutyUserId:{}",beisenDutyUserId); + if(beisenDutyUserId>-1){ + bodyJson.put("dutyUser",beisenDutyUserId); + } + + if(StringUtils.isNotBlank(gzzz)){ + bodyJson.put("jobDescription",gzzz); + } + + if(StringUtils.isNotBlank(rzzg)){ + bodyJson.put("qualification",rzzg); + } + + + + bodyJson.put("isSecrecy",isSecrecy); + log.error("bodyJson:{}",bodyJson.toJSONString()); + data = doHttpPost(token,bodyJson.toJSONString()); + } + return data; + } + + public String doHttpPost(String token,String bodyJson){ + String data = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.jobRequirementUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String bodyData = response.body().string(); + log.error("code:{}",code); + log.error("bodyData:{}",bodyData); + if(code == 200){ + if(StringUtils.isNotBlank(bodyData)){ + JSONObject dataJson = JSONObject.parseObject(bodyData); + if(dataJson.containsKey("code")){ + String dataCode = dataJson.getString("code"); + if("200".equals(dataCode)){ + data = dataJson.getString("data"); + } + } + } + } + } catch (IOException e) { + log.error("e:{}",e); + } + return data; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Offer2BeiSenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Offer2BeiSenUtil.java new file mode 100644 index 0000000..5352474 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Offer2BeiSenUtil.java @@ -0,0 +1,144 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.io.IOException; + + +@Component +public class Offer2BeiSenUtil { + private final static Logger log = LoggerFactory.getLogger(Offer2BeiSenUtil.class); + + /*** + * + * @param token + * @param startDate + * @param startTime + * @param endDate + * @param endTime + * @return + */ + public JSONArray queryOfferByDateTime(String token,String startDate, String startTime, String endDate, String endTime){ + + // https://openapi.italent.cn/TenantBaseExternal/api/v5/Offer/GetByTimeWindow +// "{\n \"startTime\": \"2025-06-01T00:00:00\", \n \"stopTime\": \"2025-06-21T00:00:00\",\n \"timeWindowQueryType\": 1\n}" + JSONArray offerArray = new JSONArray(); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("startTime",startDate+"T"+startTime); + bodyJson.put("stopTime",endDate+"T"+endTime); + bodyJson.put("timeWindowQueryType","1"); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+ Constants.offerUrl) + .method("POST", body) + .addHeader("Content-Type", "application/json") + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("200".equals(dataCode)){ + JSONArray dataArray = returnJson.getJSONArray("data"); + offerArray.addAll(dataArray); + String scrollId = returnJson.getString("scrollId"); + if(StringUtils.isNotBlank(scrollId)){ + queryOfferByscrollId(token, startDate, startTime, endDate, endTime,offerArray); + } + } + } + } + + }else{ + log.error("msg:{}",msg); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + return offerArray; + } + + /*** + * + * @param token + * @param startDate + * @param startTime + * @param endDate + * @param endTime + * @param offerArray + */ + public void queryOfferByscrollId(String token, String startDate, String startTime, String endDate, String endTime,JSONArray offerArray){ + + // https://openapi.italent.cn/TenantBaseExternal/api/v5/Offer/GetByTimeWindow +// "{\n \"startTime\": \"2025-06-01T00:00:00\", \n \"stopTime\": \"2025-06-21T00:00:00\",\n \"timeWindowQueryType\": 1\n}" + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("startTime",startDate+"T"+startTime); + bodyJson.put("stopTime",endDate+"T"+endTime); + bodyJson.put("timeWindowQueryType","1"); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.offerUrl) + .method("POST", body) + .addHeader("Content-Type", "application/json") + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("code:{}",code); + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("200".equals(dataCode)){ + JSONArray dataArray = returnJson.getJSONArray("data"); + offerArray.addAll(dataArray); + String scrollId = returnJson.getString("scrollId"); + if(StringUtils.isNotBlank(scrollId)){ + queryOfferByscrollId(token, startDate, startTime, endDate, endTime,dataArray); + } + } + } + } + }else{ + log.error("msg:{}",msg); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Performance2BeiSenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Performance2BeiSenUtil.java new file mode 100644 index 0000000..51e0d42 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Performance2BeiSenUtil.java @@ -0,0 +1,309 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import java.io.IOException; + + +@Component +public class Performance2BeiSenUtil { + private final static Logger log = LoggerFactory.getLogger(Performance2BeiSenUtil.class); + + /*** + * + * @param token + * @param page + * @param capacity + * @param year + * @param period + */ + public String getActivityManagerCount(String token,String page,String capacity,String year,String period){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("text/plain"); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("page",page); + bodyJson.put("capacity",capacity); + bodyJson.put("year",year); + bodyJson.put("period",period); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + // "{\n \"page\": 0,\n \"capacity\": 10,\n \"year\": 2024,\n \"period\": 8\n}" + // "https://openapi.italent.cn/PerformanceCloudOpen/api/v5/ActivityManager/GetActivityManagers" + + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.activityManagerUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "text/plain") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + if(code == 200){ + bodyData = response.body().string(); + }else{ + String msg = response.body().string(); + log.error("msg:{}",msg); + } + + log.error("bodyData:{}",bodyData); + } catch (IOException e) { + log.error("e:{}",e.getMessage()); + throw new RuntimeException(e); + } + return bodyData ; + } + + + public JSONArray queryActivityManager(String token,String page,String capacity,String year,String period){ + JSONArray performanceArray = new JSONArray(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("text/plain"); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("page",page); + bodyJson.put("capacity",capacity); + bodyJson.put("year",year); + bodyJson.put("period",period); + log.error("bodyJson:{}",bodyJson.toJSONString()); + // "{\n \"page\": 0,\n \"capacity\": 10,\n \"year\": 2024,\n \"period\": 8\n}" + // "https://openapi.italent.cn/PerformanceCloudOpen/api/v5/ActivityManager/GetActivityManagers" + + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.activityManagerUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "text/plain") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = returnJson.getJSONObject("data"); + if(dataObject.containsKey("items")){ + JSONArray itemsArray = dataObject.getJSONArray("items"); + performanceArray.addAll(itemsArray); + } + } + } + } + }else{ + log.error("msg:{}",msg); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return performanceArray; + } + + + public String getAssessmentItemCount(String token,String page,String capacity,String activityManagerId){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("page",page); + bodyJson.put("capacity",capacity); + bodyJson.put("activityManagerId",activityManagerId); + JSONObject sortJson = new JSONObject(); + sortJson.put("Name",-1); + bodyJson.put("sort",sortJson); + log.error("bodyJson:{}",bodyJson.toJSONString()); + // "{\n \"page\": 0,\n \"capacity\": 10,\n \"sort\": {\n \"Name\": -1\n },\n \"activityManagerId\": \"62822578-2bba-4980-9826-00689705c58d\"\n \n}" + // "https://openapi.italent.cn/PerformanceCloudOpen/api/v5/AssessmentItem/GetAssessmentItems" + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.assessmentItemUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + if(code == 200){ + bodyData = response.body().string(); + }else{ + String msg = response.body().string(); + log.error("msg:{}",msg); + } + } catch (IOException e) { + log.error("e:{}",e.getMessage()); + throw new RuntimeException(e); + } + + return bodyData; + } + + public JSONArray queryAssessmentItem(String token,String page,String capacity,String activityManagerId){ + JSONArray assessmentItemArray = new JSONArray(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("page",page); + bodyJson.put("capacity",capacity); + bodyJson.put("activityManagerId",activityManagerId); + JSONObject sortJson = new JSONObject(); + sortJson.put("Name",-1); + bodyJson.put("sort",sortJson); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.assessmentItemUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + + log.error("code:{}",code); + log.error("msg:{}",msg); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = returnJson.getJSONObject("data"); + if(dataObject.containsKey("items")){ + JSONArray itemsArray = dataObject.getJSONArray("items"); + assessmentItemArray.addAll(itemsArray); + } + } + } + } + }else{ + log.error("msg:{}",msg); + } + } catch (IOException e) { + log.error("e:{}",e.getMessage()); + throw new RuntimeException(e); + } + return assessmentItemArray; + } + + + +// public String getAssessmentCount(String token,String activityManagerId){ +// String bodyData = ""; +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json"); +// JSONObject bodyJson = new JSONObject(); +// String[] columns = new String[]{"_id","Name","ModifiedTime","ActivityManagerId"}; +// bodyJson.put("columns",columns); +// String[] assessmentIds = new String[]{activityManagerId}; +// bodyJson.put("assessmentIds",assessmentIds); +// +// // "{\n \"columns\":[\n \"_id\",\n \"Name\",\n \"ModifiedTime\",\n \"ActivityManagerId\"\n ],\n \"assessmentIds\" : [\"2e0c22bc-7295-4993-961b-822053f70563\"]\n}" +// // "https://openapi.italent.cn/PerformanceCloudOpen/api/v5/Assessment/GetAssessmentsByIds" +// +// RequestBody body = RequestBody.create(mediaType,bodyJson.toJSONString()); +// Request request = new Request.Builder() +// .url(Constants.beishenHost+Constants.assessmentUrl) +// .method("POST", body) +// .addHeader("Authorization", "Bearer "+token) +// .addHeader("Content-Type", "application/json") +// .build(); +// try { +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// log.error("code:{}",code); +// if(code == 200){ +// bodyData = response.body().string(); +// }else{ +// String msg = response.body().string(); +// log.error("msg:"+msg); +// } +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return bodyData; +// } + + public JSONArray queryAssessment(String token,String activityManagerId){ + JSONArray assessmentArray = new JSONArray(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject bodyJson = new JSONObject(); + String[] columns = new String[]{"_id","Name","ModifiedTime","ActivityManagerId"}; + bodyJson.put("columns",columns); + String[] assessmentIds = new String[]{activityManagerId}; + bodyJson.put("assessmentIds",assessmentIds); + + log.error("bodyJson:{}",bodyJson.toJSONString()); + + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.beishenHost+Constants.assessmentItemUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + + log.error("code:{}",code); + log.error("msg:{}",msg); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("200".equals(dataCode)){ + JSONObject dataObject = returnJson.getJSONObject("data"); + if(dataObject.containsKey("items")){ + JSONArray itemsArray = dataObject.getJSONArray("items"); + assessmentArray.addAll(itemsArray); + } + } + } + } + }else{ + log.error("msg:"+msg); + } + } catch (IOException e) { + log.error("e:{}",e.getMessage()); + throw new RuntimeException(e); + } + return assessmentArray; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Token2BeiSenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Token2BeiSenUtil.java new file mode 100644 index 0000000..39cfc42 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/beisen/util/Token2BeiSenUtil.java @@ -0,0 +1,242 @@ +package com.weaver.seconddev.chapanda.beisen.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.cache.base.BaseCache; +import com.weaver.seconddev.chapanda.beisen.cache.BeisenTokenCacheKey; +import com.weaver.seconddev.chapanda.beisen.constant.Constants; +import com.weaver.seconddev.chapanda.beisen.module.BeisenTokenModuleKey; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; + + + +@Component +public class Token2BeiSenUtil { + private final static Logger log = LoggerFactory.getLogger(Token2BeiSenUtil.class); + + @Autowired + private BaseCache baseCache; + + public int earlySecond = 120; + + /*** + * 获取token + */ + public String getToken(){ + + String token = (String) baseCache.get(BeisenTokenModuleKey.BENSENTOKEN_DATACENTER, BeisenTokenCacheKey.BEISEN_TOKEN); + log.error("token:{}",token); + try{ + if (StringUtils.isBlank(token)) { + JSONObject returnJson = getAccessToken(); + log.error("returnJson:{}",returnJson.toJSONString()); + + if(returnJson.containsKey("access_token")){ + token = returnJson.getString("access_token"); + String expire = returnJson.getString("expires_in"); + log.error("token22:{}",token); + log.error("expire22:{}",expire); + if(StringUtils.isNotBlank(expire)){ + int expire2 = earlySecond; + try { + if(StringUtils.isNotBlank(expire)){ + expire2 = Integer.valueOf(expire); + } + }catch (Exception e){ + log.error("e3:{}",e); + } + log.error("expire23:{}",expire2); + if(expire2 > 0){ + log.error("expire3:{}",expire2); + baseCache.set(BeisenTokenModuleKey.BENSENTOKEN_DATACENTER, BeisenTokenCacheKey.BEISEN_TOKEN, token, expire2-earlySecond); + } + } + } + } + }catch (Exception e){ + log.error("e2:{}",e); + } + + log.error("token4:{}",token); + + return token; + } + + /*** + * http方式请求获取token + * @return + */ + public JSONObject getAccessToken(){ + JSONObject accessTokenJson = new JSONObject(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("app_key", Constants.app_key); + bodyJson.put("app_secret",Constants.app_secret); + bodyJson.put("grant_type","client_credentials"); + + log.error("bodyJson:{}",bodyJson); + //"https://openapi.italent.cn/token" + // "{\n \"grant_type\":\"client_credentials\",\n \"app_key\":\"0F0F2B3F6356464EB59FB651E8DAACBA\",\n \"app_secret\":\"AF4A2BFC6BB741FD9D80B7F56DA07F08F703AC14B40C453E8DA5BCABAF43A003\"\n}" + + RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.tokenUrl) + .method("POST", body) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + accessTokenJson = JSONObject.parseObject(msg); + } + }else{ + log.error("msg:"+msg); + } + } catch (IOException e) { + log.error("IOException:{}",e); + } + return accessTokenJson; + } + + /*** + * + * @param token + * @param beishenHost + * @param offerUrl + * @param startDate + * @param startTime + * @param endDate + * @param endTime + * @return + */ +// public JSONArray queryOfferByDateTime(String token, String beishenHost, String offerUrl, String startDate, String startTime, String endDate, String endTime){ +// +// // https://openapi.italent.cn/TenantBaseExternal/api/v5/Offer/GetByTimeWindow +//// "{\n \"startTime\": \"2025-06-01T00:00:00\", \n \"stopTime\": \"2025-06-21T00:00:00\",\n \"timeWindowQueryType\": 1\n}" +// JSONArray offerArray = new JSONArray(); +// JSONObject bodyJson = new JSONObject(); +// bodyJson.put("startTime",startDate+"T"+startTime); +// bodyJson.put("stopTime",endDate+"T"+endTime); +// bodyJson.put("timeWindowQueryType","1"); +// +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json"); +// RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); +// try { +// Request request = new Request.Builder() +// .url(beishenHost+offerUrl) +// .method("POST", body) +// .addHeader("Content-Type", "application/json") +// .addHeader("Authorization", "Bearer "+token) +// .build(); +// Response response = client.newCall(request).execute(); +// +// int code = response.code(); +// String msg = response.body().string(); +// System.out.println("code:"+code); +// if(code == 200){ +// if(StringUtils.isNotBlank(msg)){ +// JSONObject returnJson = JSONObject.parseObject(msg); +// if(returnJson.containsKey("code")){ +// String dataCode = returnJson.getString("code"); +// if("200".equals(dataCode)){ +// JSONArray dataArray = returnJson.getJSONArray("data"); +// offerArray.addAll(dataArray); +// String scrollId = returnJson.getString("scrollId"); +// if(StringUtils.isNotBlank(scrollId)){ +// queryOfferByscrollId(token,beishenHost, offerUrl, startDate, startTime, endDate, endTime,offerArray); +// } +// } +// } +// } +// +// }else{ +// log.error("msg:"+msg); +// } +// +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return offerArray; +// } + +// /*** +// * +// * @param token +// * @param beishenHost +// * @param offerUrl +// * @param startDate +// * @param startTime +// * @param endDate +// * @param endTime +// * @param offerArray +// */ +// public void queryOfferByscrollId(String token, String beishenHost, String offerUrl, String startDate, String startTime, String endDate, String endTime,JSONArray offerArray){ +// +// // https://openapi.italent.cn/TenantBaseExternal/api/v5/Offer/GetByTimeWindow +//// "{\n \"startTime\": \"2025-06-01T00:00:00\", \n \"stopTime\": \"2025-06-21T00:00:00\",\n \"timeWindowQueryType\": 1\n}" +// +// JSONObject bodyJson = new JSONObject(); +// bodyJson.put("startTime",startDate+"T"+startTime); +// bodyJson.put("stopTime",endDate+"T"+endTime); +// bodyJson.put("timeWindowQueryType","1"); +// +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json"); +// RequestBody body = RequestBody.create(mediaType, bodyJson.toJSONString()); +// try { +// Request request = new Request.Builder() +// .url(beishenHost+offerUrl) +// .method("POST", body) +// .addHeader("Content-Type", "application/json") +// .addHeader("Authorization", "Bearer "+token) +// .build(); +// Response response = client.newCall(request).execute(); +// +// int code = response.code(); +// String msg = response.body().string(); +// log.error("code:{}",code); +// if(code == 200){ +// if(StringUtils.isNotBlank(msg)){ +// JSONObject returnJson = JSONObject.parseObject(msg); +// if(returnJson.containsKey("code")){ +// String dataCode = returnJson.getString("code"); +// if("200".equals(dataCode)){ +// JSONArray dataArray = returnJson.getJSONArray("data"); +// offerArray.addAll(dataArray); +// String scrollId = returnJson.getString("scrollId"); +// if(StringUtils.isNotBlank(scrollId)){ +// queryOfferByscrollId(token,beishenHost, offerUrl, startDate, startTime, endDate, endTime,dataArray); +// } +// } +// } +// } +// }else{ +// log.error("msg:"+msg); +// } +// +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/constant/Constants.java new file mode 100644 index 0000000..74930f0 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/constant/Constants.java @@ -0,0 +1,8 @@ +package com.weaver.seconddev.chapanda.cost.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + + public static String HrmHost = "https://hrtest.chabaidao.com"; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/ConvertStaffCodeController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/ConvertStaffCodeController.java new file mode 100644 index 0000000..4ee84e8 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/ConvertStaffCodeController.java @@ -0,0 +1,38 @@ +package com.weaver.seconddev.chapanda.cost.controller; + + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.chapanda.cost.util.CommonUtils; +import com.weaver.seconddev.chapanda.cost.service.ConvertStaffCodeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/sapi/secondev/cbd/hrm") +public class ConvertStaffCodeController { + + private final Logger log = LoggerFactory.getLogger(ConvertStaffCodeController.class); + + @Autowired + ConvertStaffCodeService convertStaffCodeService; + + @Autowired + CommonUtils CommonUtils; + + @WeaPermission(publicPermission = true) + @PostMapping("/convStaffCode") + public WeaResult convStaffCode(@RequestBody Map params){ + Map recordMap = convertStaffCodeService.convStaffCode(params); + return WeaResult.success(recordMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/Request2CostControlController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/Request2CostControlController.java new file mode 100644 index 0000000..2a65e92 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/Request2CostControlController.java @@ -0,0 +1,106 @@ +package com.weaver.seconddev.chapanda.cost.controller; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.chapanda.cost.service.ConvertStaffCodeService; +import com.weaver.seconddev.chapanda.cost.service.Request2CostControlService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/sapi/secondev/cbd/workflow") +public class Request2CostControlController { + + private final Logger log = LoggerFactory.getLogger(Request2CostControlController.class); + + @Autowired + Request2CostControlService request2CostControlService; + + @Autowired + ConvertStaffCodeService convertStaffCodeService; + @WeaPermission(publicPermission = true) + @PostMapping("/queryRequestByWorkflowType") + public WeaResult queryRequestByWorkflowType(@RequestBody Map params) { + log.error("queryRequestByWorkflowType"); + +// int pageNo2 = 1; +// int pgeSize2 = 100; +// boolean noIsNumber = false; +// if(params.containsKey("pageNo")){ +// String page_no = String.valueOf(params.get("pageNo")); +// if(StringUtils.isNotBlank(page_no)){ +// try { +// pageNo2 = Integer.getInteger(page_no); +// log.error("pageNo:{}",pageNo2); +// noIsNumber = true; +// } catch (NumberFormatException e) { +// noIsNumber = false; +// } +// } +// } +// +// boolean sizeIsNumber = false; +// if(params.containsKey("pageSize")){ +// String page_size = String.valueOf(params.get("pageSize")); +// if(StringUtils.isNotBlank(page_size)){ +// try { +// pgeSize2 = Integer.getInteger(page_size); +// log.error("pgeSize2:{}",pgeSize2); +// sizeIsNumber = true; +// } catch (NumberFormatException e) { +// sizeIsNumber = false; +// } +// } +// } +// + int page_no = 1; + boolean pageIsNumber = false; + if(params.containsKey("page")){ + String page = String.valueOf(params.get("page")); + log.error("page:{}",page); + if(StringUtils.isNotBlank(page)){ + try { + page_no = Integer.valueOf(page); + log.error("page_no:{}",page_no); + pageIsNumber = true; + } catch (NumberFormatException e) { + log.error("e:{}",e); + pageIsNumber = false; + } + } + } + log.error("pageIsNumber:{}",pageIsNumber); + log.error("page_no:{}",page_no); +// +// log.error("sizeIsNumber:{}",sizeIsNumber); +// log.error("noIsNumber:{}",noIsNumber); +// log.error("pageNo2:{}",pageNo2); +// log.error("pgeSize2:{}",pgeSize2); + + int pageSize = 100; + Map dataMap = new HashMap(); + String staffcode = String.valueOf(params.get("staffCode")); + if(StringUtils.isNotBlank(staffcode)){ + String workflowId = String.valueOf(params.get("workflowId")); + if(StringUtils.isNotBlank(workflowId)){ + Long workflowid = Long.valueOf(workflowId); + Long employeeId = convertStaffCodeService.convEmployeeIdByCode(staffcode); + if(employeeId > 0){ + dataMap = request2CostControlService.queryRequestByWorkflowType(params,workflowid,page_no,pageSize,employeeId); + }else{ + return WeaResult.fail("工号转换,未获取到员工id"); + } + }else{ + return WeaResult.fail("流程ID获取为空"); + } + }else{ + return WeaResult.fail("员工工会stffcode为空"); + } + return WeaResult.success(dataMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/RequestInfoController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/RequestInfoController.java new file mode 100644 index 0000000..b0b90b2 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/controller/RequestInfoController.java @@ -0,0 +1,107 @@ +package com.weaver.seconddev.chapanda.cost.controller; + +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.chapanda.cost.service.ConvertStaffCodeService; +import com.weaver.seconddev.chapanda.cost.service.Request2CostControlService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/secondev/cbd/workflownew") +public class RequestInfoController { + + private final Logger log = LoggerFactory.getLogger(RequestInfoController.class); + + @Autowired + Request2CostControlService request2CostControlService; + + @Autowired + ConvertStaffCodeService convertStaffCodeService; + @WeaPermission(publicPermission = true) + @GetMapping("/queryRequestByWorkflowType") + public WeaResult queryRequestByWorkflowType(@RequestBody Map params) { + log.error("queryRequestByWorkflowType2"); + +// int pageNo2 = 1; +// int pgeSize2 = 100; +// boolean noIsNumber = false; +// if(params.containsKey("pageNo")){ +// String page_no = String.valueOf(params.get("pageNo")); +// if(StringUtils.isNotBlank(page_no)){ +// try { +// pageNo2 = Integer.getInteger(page_no); +// log.error("pageNo:{}",pageNo2); +// noIsNumber = true; +// } catch (NumberFormatException e) { +// noIsNumber = false; +// } +// } +// } +// +// boolean sizeIsNumber = false; +// if(params.containsKey("pageSize")){ +// String page_size = String.valueOf(params.get("pageSize")); +// if(StringUtils.isNotBlank(page_size)){ +// try { +// pgeSize2 = Integer.getInteger(page_size); +// log.error("pgeSize2:{}",pgeSize2); +// sizeIsNumber = true; +// } catch (NumberFormatException e) { +// sizeIsNumber = false; +// } +// } +// } +// + int page_no = 1; + boolean pageIsNumber = false; + if(params.containsKey("page")){ + String page = String.valueOf(params.get("page")); + log.error("page:{}",page); + if(StringUtils.isNotBlank(page)){ + try { + page_no = Integer.valueOf(page); + log.error("page_no:{}",page_no); + pageIsNumber = true; + } catch (NumberFormatException e) { + log.error("e:{}",e); + pageIsNumber = false; + } + } + } + log.error("pageIsNumber2:{}",pageIsNumber); + log.error("page_no2:{}",page_no); +// +// log.error("sizeIsNumber:{}",sizeIsNumber); +// log.error("noIsNumber:{}",noIsNumber); +// log.error("pageNo2:{}",pageNo2); +// log.error("pgeSize2:{}",pgeSize2); + + int pageSize = 100; + Map dataMap = new HashMap(); + String staffcode = String.valueOf(params.get("staffCode")); + if(StringUtils.isNotBlank(staffcode)){ + String workflowId = String.valueOf(params.get("workflowId")); + if(StringUtils.isNotBlank(workflowId)){ + Long workflowid = Long.valueOf(workflowId); + Long employeeId = convertStaffCodeService.convEmployeeIdByCode(staffcode); + if(employeeId > 0){ + dataMap = request2CostControlService.queryRequestByWorkflowType(params,workflowid,page_no,pageSize,employeeId); + }else{ + return WeaResult.fail("工号转换,未获取到员工id"); + } + }else{ + return WeaResult.fail("流程ID获取为空"); + } + }else{ + return WeaResult.fail("员工工会stffcode为空"); + } + return WeaResult.success(dataMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/dao/ConvertStaffCodeDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/dao/ConvertStaffCodeDao.java new file mode 100644 index 0000000..faba74c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/dao/ConvertStaffCodeDao.java @@ -0,0 +1,98 @@ +package com.weaver.seconddev.chapanda.cost.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.cost.constant.Constants; +import com.weaver.seconddev.chapanda.cost.util.DatabaseUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class ConvertStaffCodeDao { + + private final static Logger log = LoggerFactory.getLogger(ConvertStaffCodeDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public Map queryEmployeeById(String staffcode){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map recordMap = new HashMap(); + try{ + if(StringUtils.isNotBlank(staffcode)){ + String dataSql =" select id,username " + + " from eteams.employee " + + " where job_num = ? \n" + + " and delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(staffcode); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + }else{ + recordMap.put("id",""); + recordMap.put("username",""); + } + }else{ + recordMap.put("id",""); + recordMap.put("username",""); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return recordMap; + } + + public Long queryEmployeeByCode(String staffcode){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Long employeeId = 0L; + try{ + if(StringUtils.isNotBlank(staffcode)){ + String dataSql =" select id,username " + + " from eteams.employee " + + " where job_num = ? \n" + + " and delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(staffcode); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(!recordList.isEmpty()){ + employeeId = Long.valueOf(String.valueOf(recordList.get(0).get("id"))); + } + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return employeeId; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/ConvertStaffCodeService.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/ConvertStaffCodeService.java new file mode 100644 index 0000000..8ce960f --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/ConvertStaffCodeService.java @@ -0,0 +1,11 @@ +package com.weaver.seconddev.chapanda.cost.service; + +import org.springframework.stereotype.Component; +import java.util.Map; + +@Component +public interface ConvertStaffCodeService { + Map convStaffCode(Map paraMap); + + Long convEmployeeIdByCode(String staffcode); +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/Request2CostControlService.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/Request2CostControlService.java new file mode 100644 index 0000000..7be412c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/Request2CostControlService.java @@ -0,0 +1,12 @@ +package com.weaver.seconddev.chapanda.cost.service; + +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface Request2CostControlService { + Map queryRequestByWorkflowType(Map params,Long workflowid,int pageNo,int pageSize,Long employeeId); + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/ConvertStaffCodeServiceImpl.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/ConvertStaffCodeServiceImpl.java new file mode 100644 index 0000000..7ac9070 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/ConvertStaffCodeServiceImpl.java @@ -0,0 +1,45 @@ +package com.weaver.seconddev.chapanda.cost.service.impl; + +import com.weaver.seconddev.chapanda.cost.dao.ConvertStaffCodeDao; +import com.weaver.seconddev.chapanda.cost.service.ConvertStaffCodeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Map; + +/*** + * author:shil + */ +@Service +public class ConvertStaffCodeServiceImpl implements ConvertStaffCodeService { + + private final static Logger log = LoggerFactory.getLogger(ConvertStaffCodeServiceImpl.class); + + @Autowired + private ConvertStaffCodeDao convertStaffCodeDao; + + /** + * + * @param paraMap + * @return + */ + @Override + public Map convStaffCode(Map paraMap) { + String staffcode = String.valueOf(paraMap.get("staffcode")); + log.error("staffcode:{}",staffcode); + Map dataMap = convertStaffCodeDao.queryEmployeeById(staffcode); + return dataMap; + } + + + @Override + public Long convEmployeeIdByCode(String staffcode) { + log.error("staffcode:{}",staffcode); + Long employeeId = convertStaffCodeDao.queryEmployeeByCode(staffcode); + log.error("employeeId:{}",employeeId); + return employeeId; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/Request2CostControlServiceImpl.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/Request2CostControlServiceImpl.java new file mode 100644 index 0000000..6916043 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/service/impl/Request2CostControlServiceImpl.java @@ -0,0 +1,126 @@ +package com.weaver.seconddev.chapanda.cost.service.impl; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.cost.service.Request2CostControlService; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.workflow.common.constant.list.listdimension.RequestListInitDimensionTabEnum; +import com.weaver.workflow.common.entity.list.api.RequestListConditionApiEntity; +import com.weaver.workflow.common.entity.list.api.publicapi.RequestCountInfoPAEntity; +import com.weaver.workflow.common.entity.list.api.publicapi.RequestListInfoPAEntity; +import com.weaver.workflow.list.api.rest.publicapi.WflRequestListRest; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/*** + * author:shil + */ +@Service +public class Request2CostControlServiceImpl implements Request2CostControlService { + + private final static Logger log = LoggerFactory.getLogger(Request2CostControlServiceImpl.class); + + @RpcReference(group = "workflow") + WflRequestListRest wflRequestListRest; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + /** + * + * @return + */ + @Override + public Map queryRequestByWorkflowType(Map params,Long workflowid,int pageNo,int pageSize,Long employeeId) { + Map dataMap = new HashMap(); + log.error("queryRequestByWorkflowType"); + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + + log.error("simpleEmployee:{}",simpleEmployee.getId()); + + List> requestList = new ArrayList>(); + + Long total = 0L; + try{ + RequestListConditionApiEntity conditionEntity = new RequestListConditionApiEntity(); + + List workflowIdList = new ArrayList(); + workflowIdList.add(workflowid); + conditionEntity.setWorkflowIdList(workflowIdList); + + String requestName = String.valueOf(params.get("requestName")); + String requestmark = String.valueOf(params.get("requestRemark")); +// String staffCode = String.valueOf(params.get("staffCode")); + + log.error("requestName:{}",requestName); + log.error("requestmark:{}",requestmark); +// log.error("staffCode:{}",staffCode); + + conditionEntity.setCreater(employeeId); + + if(!"null".equals(requestName) && StringUtils.isNotBlank(requestName)){ + conditionEntity.setRequestname(requestName); + } + if(!"null".equals(requestmark) && StringUtils.isNotBlank(requestmark)){ + conditionEntity.setRequestmark(requestmark); + } + + WeaResult requestCountInfo = wflRequestListRest.getRequestCountByTabId(simpleEmployee, RequestListInitDimensionTabEnum.DONE_FINISH.getTabid(),conditionEntity); + int countCode = requestCountInfo.getCode(); + log.error("countCode:{}",countCode); + if(countCode == 200){ + total = requestCountInfo.getData().getCount(); + } + log.error("total:{}",total); + dataMap.put("total",total); + + WeaResult> requestInfoList = wflRequestListRest.getRequestListByTabId(simpleEmployee, RequestListInitDimensionTabEnum.DONE_FINISH.getTabid(), pageNo, pageSize, conditionEntity); + int code = requestInfoList.getCode(); + log.error("code:{}",code); + if(code == 200){ + List requestListInfo = requestInfoList.getData(); + log.error("requestListInfo:{}",requestListInfo.size()); + + for(int i=0;i requestMap = new HashMap(); + requestMap.put("requestName",request_Name); + requestMap.put("requestremark",request_remark); + requestMap.put("requestcode",requestcode); + requestMap.put("appUrl",appUrl); + requestMap.put("createTime",createTime); + requestMap.put("creatorName",creatorName); + requestMap.put("pcUrl",pcUrl); + requestList.add(requestMap); + } + } + dataMap.put("data",requestList); + }catch (Exception e){ + log.error("e:{}",e.getMessage()); + } + return dataMap; + } + +} + diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/CommonUtils.java new file mode 100644 index 0000000..2a239fa --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.cost.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/DatabaseUtils.java new file mode 100644 index 0000000..1461ab4 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/cost/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.cost.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/constant/Constants.java new file mode 100644 index 0000000..a553005 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/constant/Constants.java @@ -0,0 +1,14 @@ +package com.weaver.seconddev.chapanda.dmp.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; + + public static String dmpHost = "http://internaldataservice-uat.shuxinyc.com"; + + public static String gmvUrl = "/api/internal-data-service/hr/shop/gmv"; + + public static String token = "xYXL37XoV7xlOnNSdJW44iat"; + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/dao/FormFieldDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/dao/FormFieldDao.java new file mode 100644 index 0000000..cd93add --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/dao/FormFieldDao.java @@ -0,0 +1,195 @@ +package com.weaver.seconddev.chapanda.dmp.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.dmp.constant.Constants; +import com.weaver.seconddev.chapanda.dmp.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class FormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(FormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + /*** + * + * @return + */ + public Map queryDepartmentList(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + + String dataSql =" select code,id from eteams.department and tenant_key=? and delete_type=0" ; + log.error("queryDepartmentList--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryDepartmentList:"+recordList.size()); + for(Map recordMap : recordList ) { + String code = String.valueOf(recordMap.get("code")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(code,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryDepartmentList:{} ", e); + } + return dataMap; + } + + + public String getGmvIdByCode(String code,String formTable,String dataKey){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + String dataId = ""; + try{ + + String dataSql =" select id from "+formTable+" and tenant_key=? and delete_type=0 and "+dataKey+"=?" ; + log.error("dataSql:{}", dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + paramList.add(code); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryDepartmentList:"+recordList.size()); + if(recordList.size()>0){ + dataId = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryDepartmentList:{} ", e); + } + return dataId; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/esb/Esb2DmpGetGmvCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/esb/Esb2DmpGetGmvCron.java new file mode 100644 index 0000000..1d446ca --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/esb/Esb2DmpGetGmvCron.java @@ -0,0 +1,48 @@ +package com.weaver.seconddev.chapanda.dmp.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.dmp.util.Esb2DmpGetGmvUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2DmpGetGmvCron") +public class Esb2DmpGetGmvCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2DmpGetGmvCron.class); + @Autowired + Esb2DmpGetGmvUtil esb2DmpGetGmvUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2DmpGetGmvCron start"); + String type = String.valueOf(params.get("type")); + String startDate = ""; + String endDate = ""; + String year = String.valueOf(params.get("year")); + if("1".equals(type)){ + startDate = year+"-01-01"; + endDate = year+"-12-31"; + }else{ + startDate = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).toString(); + endDate = LocalDate.now().toString(); + } + List ebList = esb2DmpGetGmvUtil.queryGmvList(startDate,endDate); + log.error("ebList:{}",ebList.size()); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2DmpGetGmvCron"); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/CommonUtils.java new file mode 100644 index 0000000..b90b8ce --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.dmp.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/DatabaseUtils.java new file mode 100644 index 0000000..98672c7 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/DatabaseUtils.java @@ -0,0 +1,367 @@ +package com.weaver.seconddev.chapanda.dmp.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import com.weaver.seconddev.chapanda.beisen.util.CommonUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/EbuilderOperateUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/EbuilderOperateUtils.java new file mode 100644 index 0000000..224e853 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/EbuilderOperateUtils.java @@ -0,0 +1,133 @@ +package com.weaver.seconddev.chapanda.dmp.util; + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.dmp.constant.Constants; +import com.weaver.seconddev.chapanda.dmp.dao.FormFieldDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public class EbuilderOperateUtils { + + private final static Logger log = LoggerFactory.getLogger(EbuilderOperateUtils.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + @RpcReference(group = "ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + + public EBDataChangeResult bacthInsertDbForm(List datas,String formId,String appId) { + + log.error("bacthInsertDbForm"); + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n datas,String formId,String appId) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + if (StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)) { + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + /** + * 直接通过id更新数据, 即update table set a = '11' where id = 1 + */ + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + ebDataReqOperation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + // 数据没有找到的时候是否新增数据 + EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); + ebDataReqOperationInfo.setNeedAdd(true); + ebDataReqOperation.setMainData(ebDataReqOperationInfo); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + ebDataChangeReqDto.setDatas(datas); + ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + } + return ebDataChangeResult; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/Esb2DmpGetGmvUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/Esb2DmpGetGmvUtil.java new file mode 100644 index 0000000..736c408 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/dmp/util/Esb2DmpGetGmvUtil.java @@ -0,0 +1,206 @@ +package com.weaver.seconddev.chapanda.dmp.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.seconddev.chapanda.dmp.constant.Constants; +import com.weaver.seconddev.chapanda.dmp.dao.FormFieldDao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2DmpGetGmvUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2DmpGetGmvUtil.class); + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + FormFieldDao formFieldDao; + + + /** + * + * @return + */ + public List queryGmvList(String startDate,String endDate){ + + List ebList = new ArrayList(); + + List> addList = new ArrayList>(); + List> updateList = new ArrayList>(); + String formTable = "uf_zymdgmv"; + List fieldList = new ArrayList(); + fieldList.add("mdbm"); + fieldList.add("mdmc"); + fieldList.add("gmv"); + fieldList.add("sjsj"); + fieldList.add("hrmdid"); + try { + Map deptMap = formFieldDao.queryDepartmentList(); + String msg = doHttpPost(startDate,endDate); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + String dataCode = msgJson.getString("code"); + if("200".equals(dataCode)){ + JSONArray dataArray = msgJson.getJSONArray("data"); + for(int i = 0; i < dataArray.size(); i++){ + JSONObject dataJson = dataArray.getJSONObject(i); + String mdbm = dataJson.getString("orgCode"); + String mdmc = dataJson.getString("orgCodeName"); + String gmv = dataJson.getString("gmv"); + String sjsj = dataJson.getString("reportDate"); + String hrmdid = ""; + Map gmvMap = new HashMap(); + gmvMap.put("mdbm",mdbm); + if(StringUtils.isNotBlank(mdbm)){ + if(deptMap.containsKey(mdbm)){ + hrmdid = String.valueOf(deptMap.get(mdbm)); + } + } + gmvMap.put("hrmdid",hrmdid); + if(StringUtils.isNotBlank(gmv)){ + if(!"null".equals(gmv) && gmv !=null){ + gmvMap.put("gmv",gmv); + }else{ + gmvMap.put("gmv",""); + } + }else{ + gmvMap.put("gmv",""); + } + gmvMap.put("mdmc",mdmc); + gmvMap.put("sjsj",sjsj); + + String dataId = formFieldDao.getGmvIdByCode(mdbm,formTable,"mdbm"); + if(StringUtils.isNotBlank(dataId)){ + gmvMap.put("id",dataId); + updateList.add(gmvMap); + }else{ + addList.add(gmvMap); + } + } + } + } + + Map recordMap= formFieldDao.queryTableFormId(formTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + + if(!addList.isEmpty()){ + + List datas = new ArrayList(); + + Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); + for(int i=0;i dataMap = addList.get(i); + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + List mainData = new ArrayList(); + for(int n=0;n datas = new ArrayList(); + Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); + for(int i=0;i dataMap = addList.get(i); + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + List mainData = new ArrayList(); + String id = dataMap.get("id").toString(); + mainData.add(new EBDataReqDetailDto("id", id)); + for(int n=0;n queryPreviewUrl(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map dataMap = new HashMap(); + String templateId = request.getParameter("templateId"); + Map paraMap = CommonUtils.requestToMap(request); + + if(StringUtils.isNotBlank(templateId)){ + dataMap = sealTemplateService.queryPreviewUrl(templateId,paraMap); + }else{ + return WeaResult.fail(500,"模板ID为空"); + } + return WeaResult.success(dataMap); + } + + + @WeaPermission(publicPermission = true) + @GetMapping("/queryTemplateField") + public WeaResult queryTemplateField(HttpServletRequest request, HttpServletResponse response) throws IOException { + List> dataList = new ArrayList>(); + String templateId = request.getParameter("templateId"); + Map paraMap = CommonUtils.requestToMap(request); + + if(StringUtils.isNotBlank(templateId)){ + dataList = sealTemplateService.queryTemplateField(templateId,paraMap); + }else{ + return WeaResult.fail(500,"模板ID为空"); + } + return WeaResult.success(dataList); + } + + /** + * 测试接口 + * @param request + * @param response + * @return + * @throws IOException + */ + @WeaPermission(publicPermission = true) + @GetMapping("/test") + public WeaResult test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/controller/SignFlowsCallBackController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/controller/SignFlowsCallBackController.java new file mode 100644 index 0000000..b197237 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/controller/SignFlowsCallBackController.java @@ -0,0 +1,109 @@ +package com.weaver.seconddev.chapanda.esign.controller; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.authority.annotation.WeaPermission; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.chapanda.esign.entity.CallbackUrlBean; +import com.weaver.seconddev.chapanda.esign.entity.FinishDocUrlBean; +import com.weaver.seconddev.chapanda.esign.service.SignFlowsCallBackService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/papi/secondev/cbd/signflow") +public class SignFlowsCallBackController { + + private final Logger log = LoggerFactory.getLogger(SignFlowsCallBackController.class); + + + @Autowired + SignFlowsCallBackService signFlowsCallBackService; + + /*** + * 回调接口 + * @return + * @throws IOException + */ + @WeaPermission(publicPermission = true) + @PostMapping("/doCallBack") + public JSONObject doCallBack(@RequestBody CallbackUrlBean callbackUrlBean) throws IOException { + + String action = callbackUrlBean.getAction(); + log.error("action:{}",action); + String flowId = String.valueOf(callbackUrlBean.getFlowId()); + log.error("flowId:{}",flowId); + String flowType = callbackUrlBean.getFlowType(); + log.error("flowType:{}",flowType); + int status = callbackUrlBean.getStatus(); + log.error("status:{}",status); + String createTime = callbackUrlBean.getCreateTime(); + log.error("createTime:{}",createTime); + String endTime = callbackUrlBean.getEndTime(); + log.error("endTime:{}",endTime); + + List finishDocUrlBeans = callbackUrlBean.getFinishDocUrlBeans(); + for (int i = 0; i < finishDocUrlBeans.size(); i++) { + FinishDocUrlBean finishDocUrlBean = finishDocUrlBeans.get(i); + String docFileKey = finishDocUrlBean.getDocFileKey(); + log.error("docFileKey:{}",docFileKey); + String downloadDocUrl = finishDocUrlBean.getDownloadDocUrl(); + log.error("downloadDocUrl:{}",downloadDocUrl); + String finishFileKey = finishDocUrlBean.getFinishFileKey(); + log.error("finishFileKey:{}",finishFileKey); + } + + if("SIGN_FLOW_FINISH".equals(action)){ + log.error("action22:{}",action); + if("Common".equals(flowType)){ + log.error("flowType22:{}",flowType); + if(status == 2){ + log.error("status22:{}",status); + if(StringUtils.isNotEmpty(flowId)){ + log.error("flowId22:{}",flowId); + if(finishDocUrlBeans.size()>0){ + FinishDocUrlBean finishDocUrlBean = finishDocUrlBeans.get(0); + String docFileKey = finishDocUrlBean.getDocFileKey(); + String downloadDocUrl = finishDocUrlBean.getDownloadDocUrl(); + String finishFileKey = finishDocUrlBean.getFinishFileKey(); + log.error("downloadDocUrl:{}",downloadDocUrl); + log.error("finishFileKey:{}",finishFileKey); + if(StringUtils.isNotBlank(downloadDocUrl)){ + signFlowsCallBackService.creatDocFile(flowId,downloadDocUrl,finishFileKey); + } + } + } + } + } + } + JSONObject dataJson = new JSONObject(); + dataJson.put("errCode","0"); + dataJson.put("msg","成功"); + + return dataJson; + } + + /** + * 测试接口 + * @param request + * @param response + * @return + * @throws IOException + */ + @WeaPermission(publicPermission = true) + @GetMapping("/test") + public WeaResult test(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map recordMap = new HashMap(); + recordMap.put("test","test"); + return WeaResult.success(recordMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/FormFieldDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/FormFieldDao.java new file mode 100644 index 0000000..6023e32 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/FormFieldDao.java @@ -0,0 +1,329 @@ +package com.weaver.seconddev.chapanda.esign.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class FormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(FormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")).toLowerCase(); + String id = String.valueOf(recordMap.get("id")).toLowerCase(); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + /*** + * + * @return + */ + public Map queryDepartmentList(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + + String dataSql =" select code,id from eteams.department and tenant_key=? and delete_type=0" ; + log.error("queryDepartmentList--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryDepartmentList:"+recordList.size()); + for(Map recordMap : recordList ) { + String code = String.valueOf(recordMap.get("code")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(code,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryDepartmentList:{} ", e); + } + return dataMap; + } + + public String queryEmailByEmployeeId(String employeeId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String gryx = ""; + try{ + + String dataSql =" select k.gryx from eteams.employee t\n" + + " inner join eteams.ft_1152026012537184302 k on k.id = t.formdata\n" + + " where t.id=? " + + " and t.tenant_key=? \n" + + " and t.delete_type=0" + + " and k.tenant_key=? \n" + + " and k.delete_type=0"; + + log.error("queryEmailByEmployeeId--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryEmailByEmployeeId:"+recordList.size()); + if(recordList.size() > 0){ + gryx = String.valueOf(recordList.get(0).get("gryx")); + } + }catch (Exception e){ + log.error("queryEmailByEmployeeId:e:" + e); + } + return gryx; + } + + + public Map queryDepartmentData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + String dataSql =" select code,id from eteams.department where status = 1 " + + " and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String code = String.valueOf(recordMap.get("code")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(code,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } + + + public Map queryEmployeeData(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + + try{ + String dataSql =" select job_num,id from eteams.employee where tenant_key=? and delete_type = 0" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String job_num = String.valueOf(recordMap.get("job_num")); + String id = String.valueOf(recordMap.get("id")); + dataMap.put(job_num,id); + } + }catch (Exception e){ + log.error("e:" + e); + } + return dataMap; + } + + + public Long queryTableFormIdByEb(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Long form_id = 0L; + + try{ + String dataSql =" select form_id from form_table where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + Map recordMap = recordList.get(0); + form_id = Long.valueOf(String.valueOf(recordMap.get("form_id"))); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return form_id; + } + + + public Map queryDetailTableField(String mainTable,String detailTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in(select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id in(select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? )\n"+ + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(mainTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(detailTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryDetailTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealTemplateDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealTemplateDao.java new file mode 100644 index 0000000..aa533b5 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealTemplateDao.java @@ -0,0 +1,135 @@ +package com.weaver.seconddev.chapanda.esign.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class SealTemplateDao { + + private final static Logger log = LoggerFactory.getLogger(SealTemplateDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @return + */ + public String queryTemplateDataByTemplateId(String templateId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select id from "+Constants.templateTable+" where mbid=? and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(templateId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + if(recordList.get(0).containsKey("id")){ + dataid = String.valueOf(recordList.get(0).get("id")); + } + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return dataid; + } + + + + public List> queryTemplateFieldByTemplateId(String templateId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select k.zdm ,k.zdlx ,k.zdlx_obj ,k.zdz ,k.zdmc \n" + + " from uf_dzqmbgl t\n" + + " inner join uf_dzqmbgl_zdb k on k.form_data_id = t.form_data_id \n" + + " where t.mbid=? and t.tenant_key=? and t.delete_type=0 and k.tenant_key=? and k.delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(templateId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}", recordList.size()); + + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return recordList; + } + + + /*** + * + * @return + */ + public String queryValueByConfig(String dataSql){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + + Map result = databaseUtils.execute(sourceType, groupId, dataSql); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + Map recordMap = recordList.get(0); + dataid = String.valueOf(recordMap.values().stream().findFirst().orElse(null)); + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return dataid; + } + + + public List> queryTemplateFieldByType(String templateId,String type){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select k.zdm ,k.zdlx ,k.zdlx_obj ,k.zdz ,k.zdmc,k.zdz as rc \n" + + " from uf_dzqmbgl t\n" + + " inner join uf_dzqmbgl_zdb k on k.form_data_id = t.form_data_id \n" + + " where t.mbid=? and t.tenant_key=? and k.zdlx in("+type+") " + + " and t.delete_type=0 and k.tenant_key=? and k.delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(templateId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}", recordList.size()); + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return recordList; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealsManageDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealsManageDao.java new file mode 100644 index 0000000..172db99 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SealsManageDao.java @@ -0,0 +1,80 @@ +package com.weaver.seconddev.chapanda.esign.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class SealsManageDao { + + private final static Logger log = LoggerFactory.getLogger(SealsManageDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @return + */ + public List> queryLegalEntityList(){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select bh,mc from uf_legal_entity where tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return recordList; + } + + + /*** + * + * @param sealid + * @return + */ + public String querySealsDataBySealId(String sealid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select id from " + Constants.sealTable+ + " where sealid = ? and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(sealid); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + dataid = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return dataid; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SignFlowCallBackDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SignFlowCallBackDao.java new file mode 100644 index 0000000..fb98fa0 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/dao/SignFlowCallBackDao.java @@ -0,0 +1,95 @@ +package com.weaver.seconddev.chapanda.esign.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class SignFlowCallBackDao { + + private final static Logger log = LoggerFactory.getLogger(SignFlowCallBackDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @return + */ + public Map queryFlowInfo(String flowId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + String dataSql =" select form_data_id,glhtlylc from uf_jcl_rshtgl where qslcid =? and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(flowId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + dataMap = recordList.get(0); + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return dataMap; + } + + + public String queryRequestName(String requestid){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + String requestname = ""; + try{ + String dataSql =" select requestname from wfc_requestbase wr where requestid =? and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(requestid); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + requestname = String.valueOf(recordList.get(0).get("requestname")); + } + }catch (Exception e){ + log.error("getDepartmentCodeById:e:" + e); + } + return requestname; + } + + + public void updateFormTableInfo(String form_data_id,Long fileid,String finishFileKey){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + try{ + String dataSql =" update uf_jcl_rshtgl set wjid='"+finishFileKey+"',fj_6pgb='"+String.valueOf(fileid)+"' where form_data_id ='"+form_data_id+"' and tenant_key='"+Constants.TENANT_KEY+"' \n" + + " and delete_type=0" ; + + log.error("dataSql:{}" , dataSql); + Map result = databaseUtils.executeUpdate(sourceType, groupId, dataSql); + for (Map.Entry entry : result.entrySet()) { + log.error(entry.getKey() + ": " + String.valueOf(entry.getValue())); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/AccountInfoBean.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/AccountInfoBean.java new file mode 100644 index 0000000..da735ad --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/AccountInfoBean.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.chapanda.esign.entity; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName AccountInfoBean + * @Author shil + * @Date 2025/8/13 14:43 + * @Description TODO + */ + +public class AccountInfoBean { + String accountId; + String accountUid; + String organizeNo; + String authOrgId; + String authOrgName; + String name; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallBackBean.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallBackBean.java new file mode 100644 index 0000000..aecec85 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallBackBean.java @@ -0,0 +1,39 @@ +package com.weaver.seconddev.chapanda.esign.entity; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName CallBackDto + * @Author shil + * @Date 2025/8/13 10:13 + * @Description TODO + */ + +public class CallBackBean { + CallbackUrlBean callbackUrlBean; + String url; + + public CallbackUrlBean getCallbackUrlBean() { + return callbackUrlBean; + } + + public void setCallbackUrlBean(CallbackUrlBean callbackUrlBean) { + this.callbackUrlBean = callbackUrlBean; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String toString() { + return "CallBackBean{" + + "callbackUrlBean=" + callbackUrlBean + + ", url='" + url + '\'' + + '}'; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallbackUrlBean.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallbackUrlBean.java new file mode 100644 index 0000000..439c818 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/CallbackUrlBean.java @@ -0,0 +1,102 @@ +package com.weaver.seconddev.chapanda.esign.entity; + +import java.util.List; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName CallBackDto + * @Author shil + * @Date 2025/8/13 10:13 + * @Description TODO + */ + +public class CallbackUrlBean { + String action; + String createTime; + String endTime; + List finishDocUrlBeans; + int flowId; + String flowType; + String resultDescription; + int status; + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public List getFinishDocUrlBeans() { + return finishDocUrlBeans; + } + + public void setFinishDocUrlBeans(List finishDocUrlBeans) { + this.finishDocUrlBeans = finishDocUrlBeans; + } + + public int getFlowId() { + return flowId; + } + + public void setFlowId(int flowId) { + this.flowId = flowId; + } + + public String getFlowType() { + return flowType; + } + + public void setFlowType(String flowType) { + this.flowType = flowType; + } + + public String getResultDescription() { + return resultDescription; + } + + public void setResultDescription(String resultDescription) { + this.resultDescription = resultDescription; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + + @Override + public String toString() { + return "CallbackUrlBean{" + + "action='" + action + '\'' + + ", createTime='" + createTime + '\'' + + ", endTime='" + endTime + '\'' + + ", finishDocUrlBeans=" + finishDocUrlBeans + + ", flowId=" + flowId + + ", flowType='" + flowType + '\'' + + ", resultDescription='" + resultDescription + '\'' + + ", status=" + status + + '}'; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/FinishDocUrlBean.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/FinishDocUrlBean.java new file mode 100644 index 0000000..1188faf --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/FinishDocUrlBean.java @@ -0,0 +1,49 @@ +package com.weaver.seconddev.chapanda.esign.entity; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName finishDocUrlBeans + * @Author shil + * @Date 2025/8/13 10:13 + * @Description TODO + */ + +public class FinishDocUrlBean { + String docFileKey; + String downloadDocUrl; + String finishFileKey; + + public String getDocFileKey() { + return docFileKey; + } + + public void setDocFileKey(String docFileKey) { + this.docFileKey = docFileKey; + } + + public String getDownloadDocUrl() { + return downloadDocUrl; + } + + public void setDownloadDocUrl(String downloadDocUrl) { + this.downloadDocUrl = downloadDocUrl; + } + + public String getFinishFileKey() { + return finishFileKey; + } + + public void setFinishFileKey(String finishFileKey) { + this.finishFileKey = finishFileKey; + } + + @Override + public String toString() { + return "FinishDocUrlBean{" + + "docFileKey='" + docFileKey + '\'' + + ", downloadDocUrl='" + downloadDocUrl + '\'' + + ", finishFileKey='" + finishFileKey + '\'' + + '}'; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/OkHttpDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/OkHttpDto.java new file mode 100644 index 0000000..26558dd --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/entity/OkHttpDto.java @@ -0,0 +1,65 @@ +package com.weaver.seconddev.chapanda.esign.entity; + +import com.alibaba.fastjson.JSONObject; +import org.springframework.stereotype.Component; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName OkHttpDto + * @Author shil + * @Date 2025/8/12 15:37 + * @Description TODO + */ + +@Component +public class OkHttpDto { + + int responseCode; + String responseBody; + + int dataCode; + String dataMsg; + + JSONObject dataJson; + + public int getResponseCode() { + return responseCode; + } + + public void setResponseCode(int responseCode) { + this.responseCode = responseCode; + } + + public String getResponseBody() { + return responseBody; + } + + public void setResponseBody(String responseBody) { + this.responseBody = responseBody; + } + + public int getDataCode() { + return dataCode; + } + + public void setDataCode(int dataCode) { + this.dataCode = dataCode; + } + + public String getDataMsg() { + return dataMsg; + } + + public void setDataMsg(String dataMsg) { + this.dataMsg = dataMsg; + } + + public JSONObject getDataJson() { + return dataJson; + } + + public void setDataJson(JSONObject dataJson) { + this.dataJson = dataJson; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4OrganizeAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4OrganizeAction.java new file mode 100644 index 0000000..995f41c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4OrganizeAction.java @@ -0,0 +1,131 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignApplyRequest4OrgainzeUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignCreateRequest4OrganizeAction") +public class Esb2EsignCreateRequest4OrganizeAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignCreateRequest4OrganizeAction.class); + @Autowired + Esb2EsignApplyRequest4OrgainzeUtil esb2EsignApplyRequest4OrgainzeUtil; + +// @Autowired +// private Esb2EsignPreviewUrlUtil esb2EsignPreviewUrlUtil; + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String requestname = String.valueOf(params.get("requestname")); + String sealId = String.valueOf(params.get("sealId")); + String docFilekey = String.valueOf(params.get("docFilekey")); + String docName = String.valueOf(params.get("docName")); + String creditCode = String.valueOf(params.get("creditCode")); + String qsrJobNum = String.valueOf(params.get("qsrJobNum")); + String templateId = String.valueOf(params.get("templateId")); + log.error("requestid:{}",requestid); + log.error("requestname:{}",requestname); + log.error("sealId:{}",sealId); + log.error("docFilekey:{}",docFilekey); + log.error("docName:{}",docName); + log.error("creditCode:{}",creditCode); + log.error("qsrJobNum:{}",qsrJobNum); + log.error("templateId:{}",templateId); + + if(StringUtils.isBlank(templateId)){ + return WeaResult.fail(500,"参数模板ID为空"); + } + + if(StringUtils.isBlank(creditCode)){ + return WeaResult.fail(500,"参数统一社会信用代码为空"); + } + + if(StringUtils.isBlank(docFilekey)){ + return WeaResult.fail(500,"参数签署文件为空"); + } + + if(StringUtils.isBlank(sealId)){ + return WeaResult.fail(500,"参数签署文件印章为空"); + } + + if(StringUtils.isBlank(qsrJobNum)){ + return WeaResult.fail(500,"参数签署人工号为空"); + } + + String signFlowId = ""; + String signUrls = ""; + String accountIds = ""; + String uniqueIds = ""; + String fileKeys = ""; + + if(StringUtils.isNotBlank(templateId)){ +// JSONObject dataJson = esb2EsignApplyRequest4OrgainzeUtil.applyRequest(requestid,requestname,templateId,sealId,docFilekey,docName,creditCode,qsrJobNum); + OkHttpDto okHttpDto = esb2EsignApplyRequest4OrgainzeUtil.applyRequest(requestid,requestname,templateId,sealId,docFilekey,docName,creditCode,qsrJobNum); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + log.error("dataJson:{}",dataJson.toJSONString()); + signFlowId = dataJson.getString("signFlowId"); + signUrls = dataJson.getString("signUrls"); + accountIds = dataJson.getString("accountIds"); + uniqueIds = dataJson.getString("uniqueIds"); + fileKeys = dataJson.getString("fileKeys"); + }else{ + return WeaResult.fail(500,"创建签署流程异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署流程接口异常,"+okHttpDto.getDataMsg()); + } + log.error("signFlowId:{}",signFlowId); + log.error("signUrls:{}",signUrls); + log.error("accountIds:{}",accountIds); + log.error("uniqueIds:{}",uniqueIds); + log.error("fileKeys:{}",fileKeys); + } + + if(StringUtils.isBlank(fileKeys)){ + return WeaResult.fail(500,"获取签署文件失败"); + } + +// String preViewUrl = ""; +// if(StringUtils.isNotBlank(fileKeys)){ +//// preViewUrl = esb2EsignPreviewUrlUtil.queryPreviewUrl(fileKeys); +// OkHttpDto preOkHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(fileKeys); +// if(preOkHttpDto.getResponseCode() == 200){ +// if(preOkHttpDto.getDataCode() == 0){ +// JSONObject preJson = preOkHttpDto.getDataJson(); +// if(preJson.containsKey("preViewUrl")){ +// preViewUrl = preJson.getString("preViewUrl"); +// } +// }else{ +// return WeaResult.fail(500,"获取预览地址异常,"+preOkHttpDto.getDataMsg()); +// } +// }else{ +// return WeaResult.fail(500,"文件预览地址接口异常,"+preOkHttpDto.getDataMsg()); +// } +// } +// log.error("preViewUrl:{}",preViewUrl); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("signFlowId",signFlowId); + actionMap.put("accountIds",accountIds); + actionMap.put("signUrls",signUrls); + actionMap.put("uniqueIds",uniqueIds); + actionMap.put("fileKeys",fileKeys); +// actionMap.put("preViewUrl",preViewUrl); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4PartiesAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4PartiesAction.java new file mode 100644 index 0000000..ad77a39 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequest4PartiesAction.java @@ -0,0 +1,132 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignApplyRequestUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignPreviewUrlUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignCreateRequest4PartiesAction") +public class Esb2EsignCreateRequest4PartiesAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignCreateRequest4PartiesAction.class); + + @Autowired + Esb2EsignApplyRequestUtil esb2EsignApplyRequestUtil; + + @Autowired + private Esb2EsignPreviewUrlUtil esb2EsignPreviewUrlUtil; + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String requestname = String.valueOf(params.get("requestname")); + String sealId = String.valueOf(params.get("sealId")); + String docFilekey = String.valueOf(params.get("docFilekey")); + String docName = String.valueOf(params.get("docName")); + String creditCode = String.valueOf(params.get("creditCode")); + + String employeeMobile = String.valueOf(params.get("employeeMobile")); + String qsrJobNum = String.valueOf(params.get("qsrJobNum")); + String templateId = String.valueOf(params.get("templateId")); + + if(StringUtils.isBlank(templateId)){ + return WeaResult.fail(500,"参数模板ID为空"); + } + + if(StringUtils.isBlank(creditCode)){ + return WeaResult.fail(500,"参数统一社会信用代码为空"); + } + + if(StringUtils.isBlank(docFilekey)){ + return WeaResult.fail(500,"参数签署文件为空"); + } + + if(StringUtils.isBlank(sealId)){ + return WeaResult.fail(500,"参数签署文件印章为空"); + } + + if(StringUtils.isBlank(qsrJobNum)){ + return WeaResult.fail(500,"参数签署人工号为空"); + } + + log.error("requestid:{}",requestid); + log.error("requestname:{}",requestname); + log.error("sealId:{}",sealId); + log.error("docFilekey:{}",docFilekey); + log.error("docName:{}",docName); + log.error("creditCode:{}",creditCode); + log.error("employeeMobile:{}",employeeMobile); + log.error("qsrJobNum:{}",qsrJobNum); + + String signFlowId = ""; + String signUrls = ""; + String accountIds = ""; + String uniqueIds = ""; + String fileKeys = ""; + + if(StringUtils.isNotBlank(templateId)){ + OkHttpDto okHttpDto = esb2EsignApplyRequestUtil.applyRequest(requestid,requestname,employeeMobile,templateId,sealId,docFilekey,docName,creditCode,qsrJobNum); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + signFlowId = dataJson.getString("signFlowId"); + signUrls = dataJson.getString("signUrls"); + accountIds = dataJson.getString("accountIds"); + uniqueIds = dataJson.getString("uniqueIds"); + fileKeys = dataJson.getString("fileKeys"); + }else{ + return WeaResult.fail(500,"创建签署流程异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署流程接口异常,"+okHttpDto.getDataMsg()); + } + + log.error("signFlowId:{}",signFlowId); + log.error("signUrls:{}",signUrls); + log.error("accountIds:{}",accountIds); + log.error("uniqueIds:{}",uniqueIds); + log.error("fileKeys:{}",fileKeys); + } + + if(StringUtils.isBlank(fileKeys)){ + return WeaResult.fail(500,"获取签署文件失败"); + } + + String preViewUrl = ""; + if(StringUtils.isNotBlank(fileKeys)){ + OkHttpDto preOkHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(fileKeys); + if(preOkHttpDto.getResponseCode() == 200){ + if(preOkHttpDto.getDataCode() == 0){ + JSONObject preJson = preOkHttpDto.getDataJson(); + if(preJson.containsKey("preViewUrl")){ + preViewUrl = preJson.getString("preViewUrl"); + } + }else{ + return WeaResult.fail(500,"获取签署文件预览地址异常,"+preOkHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署文件预览地址接口异常,"+preOkHttpDto.getDataMsg()); + } + } + log.error("preViewUrl:{}",preViewUrl); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("signFlowId",signFlowId); + actionMap.put("accountIds",accountIds); + actionMap.put("signUrls",signUrls); + actionMap.put("uniqueIds",uniqueIds); + actionMap.put("fileKeys",fileKeys); + actionMap.put("preViewUrl",preViewUrl); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequestAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequestAction.java new file mode 100644 index 0000000..895bf78 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateRequestAction.java @@ -0,0 +1,89 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignApplyRequestUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignCreateRequestAction") +public class Esb2EsignCreateRequestAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignCreateRequestAction.class); + + @Autowired + Esb2EsignApplyRequestUtil esb2EsignApplyRequestUtil; + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String requestname = String.valueOf(params.get("requestname")); + String sealId = String.valueOf(params.get("sealId")); + String docFilekey = String.valueOf(params.get("docFilekey")); + String docName = String.valueOf(params.get("docName")); + String creditCode = String.valueOf(params.get("creditCode")); + + String employeeMobile = String.valueOf(params.get("employeeMobile")); + String qsrJobNum = String.valueOf(params.get("qsrJobNum")); + + log.error("requestid:{}",requestid); + log.error("requestname:{}",requestname); + log.error("sealId:{}",sealId); + log.error("docFilekey:{}",docFilekey); + log.error("docName:{}",docName); + log.error("creditCode:{}",creditCode); + log.error("employeeMobile:{}",employeeMobile); + log.error("qsrJobNum:{}",qsrJobNum); + + String signFlowId = ""; + String signUrls = ""; + String accountIds = ""; + String uniqueIds = ""; + String fileKeys = ""; + String templateId = String.valueOf(params.get("templateId")); + if(StringUtils.isNotBlank(templateId)){ + OkHttpDto okHttpDto = esb2EsignApplyRequestUtil.applyRequest(requestid,requestname,employeeMobile,templateId,sealId,docFilekey,docName,creditCode,qsrJobNum); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + signFlowId = dataJson.getString("signFlowId"); + signUrls = dataJson.getString("signUrls"); + accountIds = dataJson.getString("accountIds"); + uniqueIds = dataJson.getString("uniqueIds"); + fileKeys = dataJson.getString("fileKeys"); + }else{ + return WeaResult.fail(500,"创建签署流程异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署流程接口异常,"+okHttpDto.getDataMsg()); + } + + log.error("signFlowId:{}",signFlowId); + log.error("signUrls:{}",signUrls); + log.error("accountIds:{}",accountIds); + log.error("uniqueIds:{}",uniqueIds); + log.error("fileKeys:{}",fileKeys); + } + + if(StringUtils.isBlank(fileKeys)){ + return WeaResult.fail(500,"用印申请失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("signFlowId",signFlowId); + actionMap.put("accountIds",accountIds); + actionMap.put("signUrls",signUrls); + actionMap.put("uniqueIds",uniqueIds); + actionMap.put("fileKeys",fileKeys); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateUserAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateUserAction.java new file mode 100644 index 0000000..e339cd9 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignCreateUserAction.java @@ -0,0 +1,71 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignCreateUserUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignCreateUserAction") +public class Esb2EsignCreateUserAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignCreateUserAction.class); + + @Autowired + Esb2EsignCreateUserUtil esb2EsignCreateUserUtil; + + @Override + public WeaResult> execute(Map params) { + + String mobile = String.valueOf(params.get("mobile")); + String name = String.valueOf(params.get("name")); + + log.error("mobile:{}",mobile); + log.error("name:{}",name); + + if(StringUtils.isBlank(mobile)){ + return WeaResult.fail(500,"入参手机号为空"); + } + if(StringUtils.isBlank(name)){ + return WeaResult.fail(500,"入参姓名为空"); + } + + String esignAccountId = ""; + String uniqueId = ""; + if(StringUtils.isNotBlank(mobile) && StringUtils.isNotBlank(name)){ + OkHttpDto okHttpDto = esb2EsignCreateUserUtil.createUser(name,mobile); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + if(dataJson.containsKey("esignAccountId")){ + esignAccountId = dataJson.getString("esignAccountId"); + } + if(dataJson.containsKey("uniqueId")){ + uniqueId = dataJson.getString("uniqueId"); + } + }else{ + return WeaResult.fail(500,"E签宝用户创建异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"E签宝用户创建接口异常,"+okHttpDto.getDataMsg()); + } + } + + if(StringUtils.isBlank(esignAccountId)){ + return WeaResult.fail(500,"e签宝创建用户失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("esignAccountId",esignAccountId); + actionMap.put("mobile",mobile); + actionMap.put("uniqueId",uniqueId); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadAction.java new file mode 100644 index 0000000..3db79cc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadAction.java @@ -0,0 +1,153 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignDownlUrlUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignFileUploadUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignPreviewUrlUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignFileUploadAction") +public class Esb2EsignFileUploadAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignFileUploadAction.class); + + @Autowired + Esb2EsignDownlUrlUtil esb2EsignDownlUrlUtil; + + @Autowired + Esb2EsignFileUploadUtil esb2EsignFileUploadUtil; + + @Autowired + private Esb2EsignPreviewUrlUtil esb2EsignPreviewUrlUtil; + + @Override + public WeaResult> execute(Map params) { + + String signFlowId = String.valueOf(params.get("signFlowId")); + String fileName = String.valueOf(params.get("fileName")); + String folderid = String.valueOf(params.get("folderid")); + log.error("signFlowId:{}",signFlowId); + if(StringUtils.isBlank(signFlowId)){ + return WeaResult.fail(500,"入参申请流程为空"); + } + + if(StringUtils.isBlank(fileName)){ + return WeaResult.fail(500,"入参文件名称为空"); + } + + if(StringUtils.isBlank(folderid)){ + return WeaResult.fail(500,"入参附件目录为空"); + } + + Long longSignFlowId = convertStringToLong(folderid); + if(longSignFlowId == 0L){ + return WeaResult.fail(500,"入参附件目录转换失败"); + } + + String downloadDocUrl = ""; + String docName = ""; + String docFileKey = ""; + String signDocId = ""; + OkHttpDto okHttpDto = esb2EsignDownlUrlUtil.queryDownlUrl(signFlowId); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + log.error("dataJson:{}",dataJson.toJSONString()); + if(dataJson.containsKey("downloadDocUrl")){ + downloadDocUrl = dataJson.getString("downloadDocUrl"); + } + + if(dataJson.containsKey("docName")){ + docName = dataJson.getString("docName"); + } + + if(dataJson.containsKey("downloadDocUrl")){ + docFileKey = dataJson.getString("docFileKey"); + } + + if(dataJson.containsKey("downloadDocUrl")){ + signDocId = dataJson.getString("docId"); + } + }else{ + return WeaResult.fail(500,"签署文件获取异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署文件获取接口异常,"+okHttpDto.getDataMsg()); + } + + log.error("downloadDocUrl:{}",downloadDocUrl); + if(StringUtils.isBlank(downloadDocUrl)){ + return WeaResult.fail(500,"获取文件下载地址失败"); + } + + Long docId = 0L; + Long fileid = 0L; + if(StringUtils.isNotBlank(downloadDocUrl)){ + FileObj fileObj = esb2EsignFileUploadUtil.uploadFile(downloadDocUrl,fileName,longSignFlowId); + log.error("fileObj:{}",fileObj.toString()); + docId = fileObj.getDocId(); + fileid = fileObj.getId(); + } + log.error("docId:{}",docId); + log.error("fileid:{}",fileid); + + if(fileid <= 0){ + return WeaResult.fail(500,"创建文档失败"); + } + + if(StringUtils.isBlank(docFileKey)){ + return WeaResult.fail(500,"获取签署文件失败"); + } + + String preViewUrl = ""; + if(StringUtils.isNotBlank(docFileKey)){ + OkHttpDto preOkHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(docFileKey); + if(preOkHttpDto.getResponseCode() == 200){ + if(preOkHttpDto.getDataCode() == 0){ + JSONObject preJson = preOkHttpDto.getDataJson(); + if(preJson.containsKey("preViewUrl")){ + preViewUrl = preJson.getString("preViewUrl"); + } + }else{ + return WeaResult.fail(500,"获取签署文件预览地址异常,"+preOkHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署文件预览地址接口异常,"+preOkHttpDto.getDataMsg()); + } + } + log.error("preViewUrl:{}",preViewUrl); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("docId",docId); + actionMap.put("fileid",fileid); + actionMap.put("downloadDocUrl",downloadDocUrl); + actionMap.put("docName",docName); + actionMap.put("docFileKey",docFileKey); + actionMap.put("signDocId",signDocId); + actionMap.put("preViewUrl",preViewUrl); + + return WeaResult.success(actionMap); + } + + + public long convertStringToLong(String str) { + try { + return Long.parseLong(str); + } catch (NumberFormatException e) { + return 0; + } + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadForOrganizeAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadForOrganizeAction.java new file mode 100644 index 0000000..0a6b0a3 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignFileUploadForOrganizeAction.java @@ -0,0 +1,159 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignDownlUrlUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignFileUploadUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignPreviewUrlUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignFileUploadForOrganizeAction") +public class Esb2EsignFileUploadForOrganizeAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignFileUploadForOrganizeAction.class); + + @Autowired + Esb2EsignDownlUrlUtil esb2EsignDownlUrlUtil; + + @Autowired + Esb2EsignFileUploadUtil esb2EsignFileUploadUtil; + + @Autowired + private Esb2EsignPreviewUrlUtil esb2EsignPreviewUrlUtil; + + @Override + public WeaResult> execute(Map params) { + + String signFlowId = String.valueOf(params.get("signFlowId")); + String fileName = String.valueOf(params.get("fileName")); + String folderid = String.valueOf(params.get("folderid")); + log.error("signFlowId:{}",signFlowId); + if(StringUtils.isBlank(signFlowId)){ + return WeaResult.fail(500,"入参申请流程为空"); + } + + if(StringUtils.isBlank(fileName)){ + return WeaResult.fail(500,"入参文件名称为空"); + } + + if(StringUtils.isBlank(folderid)){ + return WeaResult.fail(500,"入参附件目录为空"); + } + + Long longSignFlowId = convertStringToLong(folderid); + if(longSignFlowId == 0L){ + return WeaResult.fail(500,"入参附件目录转换失败"); + } + + String downloadDocUrl = ""; + String docName = ""; + String docFileKey = ""; + String signDocId = ""; + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + OkHttpDto okHttpDto = esb2EsignDownlUrlUtil.queryDownlUrl(signFlowId); + if(okHttpDto.getResponseCode() == 200){ + if(okHttpDto.getDataCode() == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + log.error("dataJson:{}",dataJson.toJSONString()); + if(dataJson.containsKey("downloadDocUrl")){ + downloadDocUrl = dataJson.getString("downloadDocUrl"); + } + + if(dataJson.containsKey("docName")){ + docName = dataJson.getString("docName"); + } + + if(dataJson.containsKey("downloadDocUrl")){ + docFileKey = dataJson.getString("docFileKey"); + } + + if(dataJson.containsKey("downloadDocUrl")){ + signDocId = dataJson.getString("docId"); + } + }else{ + return WeaResult.fail(500,"签署文件获取异常,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署文件获取接口异常,"+okHttpDto.getDataMsg()); + } + + log.error("downloadDocUrl:{}",downloadDocUrl); + if(StringUtils.isBlank(downloadDocUrl)){ + return WeaResult.fail(500,"获取文件下载地址失败"); + } + + Long docId = 0L; + Long fileid = 0L; + if(StringUtils.isNotBlank(downloadDocUrl)){ + FileObj fileObj = esb2EsignFileUploadUtil.uploadFile(downloadDocUrl,fileName,longSignFlowId); + log.error("fileObj:{}",fileObj.toString()); + docId = fileObj.getDocId(); + fileid = fileObj.getId(); + } + log.error("docId:{}",docId); + log.error("fileid:{}",fileid); + + if(fileid <= 0){ + return WeaResult.fail(500,"创建文档失败"); + } + + if(StringUtils.isBlank(docFileKey)){ + return WeaResult.fail(500,"获取签署文件失败"); + } + + String preViewUrl = ""; + if(StringUtils.isNotBlank(docFileKey)){ + OkHttpDto preOkHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(docFileKey); + if(preOkHttpDto.getResponseCode() == 200){ + if(preOkHttpDto.getDataCode() == 0){ + JSONObject preJson = preOkHttpDto.getDataJson(); + if(preJson.containsKey("preViewUrl")){ + preViewUrl = preJson.getString("preViewUrl"); + } + }else{ + return WeaResult.fail(500,"获取签署文件预览地址异常,"+preOkHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"签署文件预览地址接口异常,"+preOkHttpDto.getDataMsg()); + } + } + log.error("preViewUrl:{}",preViewUrl); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("docId",docId); + actionMap.put("fileid",fileid); + actionMap.put("downloadDocUrl",downloadDocUrl); + actionMap.put("docName",docName); + actionMap.put("docFileKey",docFileKey); + actionMap.put("signDocId",signDocId); + actionMap.put("preViewUrl",preViewUrl); + + return WeaResult.success(actionMap); + } + + + public long convertStringToLong(String str) { + try { + return Long.parseLong(str); + } catch (NumberFormatException e) { + return 0; + } + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQueryPreviewUrlAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQueryPreviewUrlAction.java new file mode 100644 index 0000000..bb446eb --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQueryPreviewUrlAction.java @@ -0,0 +1,82 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignBuildTemplatDoceUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +@Service("Esb2EsignQueryPreviewUrlAction") +public class Esb2EsignQueryPreviewUrlAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignQueryPreviewUrlAction.class); + + @Autowired + Esb2EsignBuildTemplatDoceUtil esb2EsignBuildTemplatDoceUtil; + + @Override + public WeaResult> execute(Map params) { + + Iterator> it = params.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + log.error("Key:{},Value:{}",entry.getKey(), entry.getValue()); + } + + String preViewUrl = ""; + String fileKey = ""; + String templateId = String.valueOf(params.get("templateId")); + String form_data_id = String.valueOf(params.get("form_data_id")); + if(StringUtils.isNotBlank(templateId)){ + OkHttpDto templateOkHttpDto = esb2EsignBuildTemplatDoceUtil.queryTemplateFileKey(templateId,params); + if(templateOkHttpDto.getResponseCode() == 200){ + if(templateOkHttpDto.getDataCode() == 0 ){ + JSONObject dataJson = templateOkHttpDto.getDataJson(); + if(dataJson.containsKey("fileKey")){ + fileKey = dataJson.getString("fileKey"); + } + log.error("fileKey:{}",fileKey); + if(StringUtils.isNotBlank(fileKey)){ + OkHttpDto preOkHttpDto = esb2EsignBuildTemplatDoceUtil.queryPreviewUrl(fileKey); + if(preOkHttpDto.getResponseCode() == 200){ + if(preOkHttpDto.getDataCode() == 0){ + JSONObject preJson = preOkHttpDto.getDataJson(); + log.error("preJson:{}",preJson.toJSONString()); + if(preJson.containsKey("preViewUrl")){ + preViewUrl = preJson.getString("preViewUrl"); + } + }else{ + return WeaResult.fail(500,"获取预览地址异常,"+preOkHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"文件预览地址接口异常,"+preOkHttpDto.getDataMsg()); + } + } + }else{ + return WeaResult.fail(500,"模板生成文件异常,"+templateOkHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"调用模板生产文件接口址异常,"+templateOkHttpDto.getDataMsg()); + } + +// dataMap = sealTemplateService.queryPreviewUrl(templateId,params); +// String fileKey = String.valueOf(dataMap.get("filekey")); +// String preViewUrl = String.valueOf(dataMap.get("previewurl")); + } + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("filekey",fileKey); + actionMap.put("previewurl",preViewUrl); + actionMap.put("form_data_id",form_data_id); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQuerySealsAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQuerySealsAction.java new file mode 100644 index 0000000..cab296d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignQuerySealsAction.java @@ -0,0 +1,116 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignQuerySealsAction") +public class Esb2EsignQuerySealsAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignQuerySealsAction.class); + + @Autowired + Esb2EsignUtil esb2EsignUtil; + @Override + public WeaResult> execute(Map params) { + log.error("Esb2EsignQuerySealsAction start"); + + String pageIndex = String.valueOf(params.get("pageIndex")); + String pageSize = String.valueOf(params.get("pageSize")); + String organizeNo = String.valueOf(params.get("organizeNo")); + // pageIndex=1&pageSize=10&organizeNo=91510115MA62QJQJ4N + log.error("pageIndex:"+pageIndex); + log.error("pageSize:"+pageSize); + log.error("organizeNo:"+organizeNo); + + String querySealsUrl = Constants.querySealsUrl+"?pageIndex="+pageIndex+"&pageSize="+pageSize+"&organizeNo="+organizeNo; + log.error("querySealsUrl:{}",querySealsUrl); + + String msg = queryEsignSealTemplate(querySealsUrl,organizeNo); + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg",msg); + + return WeaResult.success(actionMap); + } + + public String queryEsignSealTemplate(String querySealsUrl,String organizeNo){ + +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +// String xTimevaleProjectId = "1001003"; +// String eSignHost = "http://110.185.172.132:8086"; + + String bodyData = ""; + String xTimevaleSignature = esb2EsignUtil.encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = esb2EsignUtil.doGetEsignQuerySeals(xTimevaleSignature,querySealsUrl); + log.error("msg:"+msg); + return msg; + } + + +// public String doHttpPost(String eSignHost,String eSignUrl,String bodyData,String xTimevaleSignature,String xTimevaleProjectId){ +// String msg = ""; +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("text/plain"); +// System.out.println(eSignHost+eSignUrl); +// try { +// Request request = new Request.Builder() +// .url(eSignHost+eSignUrl) +// .method("GET", null) +// .addHeader("x-timevale-project-id", xTimevaleProjectId) +// .addHeader("x-timevale-signature", xTimevaleSignature) +// .addHeader("Content-Type", "application/json") +// .build(); +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// if(code == 200){ +// msg = response.body().string(); +// } +// log.error("msg:"+msg); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return msg; +// } + + public static void main(String[] args) { + Esb2EsignQuerySealsAction esb2EsignQuerySealsAction = new Esb2EsignQuerySealsAction(); + String pageIndex = "1"; + String pageSize = "10"; + String organizeNo = "91510115MA62QJQJ4N"; + + String querySealsUrl = Constants.querySealsUrl+"?pageIndex="+pageIndex+"&pageSize="+pageSize+"&organizeNo="+organizeNo; + esb2EsignQuerySealsAction.queryEsignSealTemplate(querySealsUrl,organizeNo); + } + + +// public String encryptionHmacSHA256(String secretKey,String bodyData){ +// String encryptionData = ""; +//// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +// // 要签名的数据 +//// JSONObject dataObject = new JSONObject(); +//// dataObject.put("templateId","JMHT-ZXSJ"); +//// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; +// try { +// // 初始化Mac对象 +// Mac sha256Hmac = Mac.getInstance("HmacSHA256"); +// SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); +// sha256Hmac.init(secretKeySpec); +// byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); +// encryptionData = Hex.encodeHexString(result); +// } catch (NoSuchAlgorithmException e) { +// throw new RuntimeException(e); +// }catch (InvalidKeyException e) { +// throw new RuntimeException(e); +// } +// return encryptionData; +// } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignReminderRequestAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignReminderRequestAction.java new file mode 100644 index 0000000..9edd6e1 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignReminderRequestAction.java @@ -0,0 +1,64 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignReminderRequestUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignReminderRequestAction") +public class Esb2EsignReminderRequestAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignReminderRequestAction.class); + + @Autowired + Esb2EsignReminderRequestUtil esb2EsignReminderRequestUtil; + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String form_data_id = String.valueOf(params.get("form_data_id")); + String flowId = String.valueOf(params.get("flowId")); + + log.error("flowId:{}",flowId); + log.error("requestid:{}",requestid); + + if(StringUtils.isBlank(flowId)){ + return WeaResult.fail(500,"入参参数flowId为空"); + } + + int errCode = 0; + if(StringUtils.isNotBlank(flowId)){ + OkHttpDto okHttpDto = esb2EsignReminderRequestUtil.reminderRequest(flowId); + + if(okHttpDto.getResponseCode() == 200){ + errCode = okHttpDto.getDataCode(); + if(errCode != 0){ + return WeaResult.fail(500,"流程催办失败,"+okHttpDto.getDataMsg()); + } + }else{ + return WeaResult.fail(500,"流程催办接口异常,"+okHttpDto.getDataMsg()); + } + } + +// if(!"0".equals(errCode)){ +// return WeaResult.fail(500,"流程催办失败"); +// } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("requestid",requestid); + actionMap.put("form_data_id",form_data_id); + actionMap.put("flowId",flowId); + actionMap.put("errCode",errCode); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSealsTemplateAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSealsTemplateAction.java new file mode 100644 index 0000000..9ae6e6d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSealsTemplateAction.java @@ -0,0 +1,108 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2EsignSealsTemplateAction") +public class Esb2EsignSealsTemplateAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignSealsTemplateAction.class); + + @Autowired + Esb2EsignUtil esb2EsignUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2EsignSealsTemplateAction start"); + + String templateId = (String) params.get("templateId"); + log.error("templateId:"+templateId); + String msg = queryEsignSeals(templateId); + log.error("msg:"+msg); + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg",msg); + + return WeaResult.success(actionMap); + } + + public String queryEsignSeals(String templateId){ + JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); + dataObject.put("templateId",templateId); +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +// String xTimevaleProjectId = "1001003"; +// String eSignHost = "http://110.185.172.132:8086"; +// String eSignSealsUrl = "/esignpro/rest/template/api/getTemplateInfo"; + + String bodyData = dataObject.toJSONString(); + log.error("bodyData:"+bodyData); + String xTimevaleSignature = esb2EsignUtil.encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = esb2EsignUtil.doPostEsignSealsTemplate(bodyData,xTimevaleSignature); + log.error("msg:"+msg); + return msg; + } + + +// public String doHttpPost(String eSignHost,String eSignUrl,String bodyData,String xTimevaleSignature,String xTimevaleProjectId){ +// String msg = ""; +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json"); +// RequestBody body = RequestBody.create(mediaType, bodyData); +// try { +// Request request = new Request.Builder() +// .url(eSignHost+eSignUrl) +// .method("POST", body) +// .addHeader("x-timevale-project-id", xTimevaleProjectId) +// .addHeader("x-timevale-signature", xTimevaleSignature) +// .addHeader("Content-Type", "application/json") +// .build(); +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// if(code == 200){ +// msg = response.body().string(); +// } +// log.error("msg:"+msg); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return msg; +// } + + public static void main(String[] args) { + Esb2EsignSealsTemplateAction esb2EsignQuerySealsAction = new Esb2EsignSealsTemplateAction(); + esb2EsignQuerySealsAction.queryEsignSeals("JMHT-ZXSJ"); + } + + +// public String encryptionHmacSHA256(String secretKey,String bodyData){ +// String encryptionData = ""; +//// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +// // 要签名的数据 +//// JSONObject dataObject = new JSONObject(); +//// dataObject.put("templateId","JMHT-ZXSJ"); +//// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; +// try { +// // 初始化Mac对象 +// Mac sha256Hmac = Mac.getInstance("HmacSHA256"); +// SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); +// sha256Hmac.init(secretKeySpec); +// byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); +// encryptionData = Hex.encodeHexString(result); +// } catch (NoSuchAlgorithmException e) { +// throw new RuntimeException(e); +// }catch (InvalidKeyException e) { +// throw new RuntimeException(e); +// } +// return encryptionData; +// } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncSealsCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncSealsCron.java new file mode 100644 index 0000000..242139c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncSealsCron.java @@ -0,0 +1,305 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.dao.FormFieldDao; +import com.weaver.seconddev.chapanda.esign.dao.SealsManageDao; +import com.weaver.seconddev.chapanda.esign.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignSyncSealsUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/*** + * 同步印章数据 + */ +@Service("Esb2EsignSyncSealsCron") +public class Esb2EsignSyncSealsCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignSyncSealsCron.class); + + @Autowired + SealsManageDao sealsManageDao; + + @Autowired + Esb2EsignSyncSealsUtil esb2EsignSyncSealsUtil; + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Override + public WeaResult> execute(Map params) { + + List ebList = new ArrayList(); + + JSONArray sealsArray = new JSONArray(); + List> organizeList = sealsManageDao.queryLegalEntityList(); + log.error("organizeList:{}",organizeList.size()); + for(int i=0;i fieldList = new ArrayList(); + fieldList.add("yzzl"); + fieldList.add("sealid"); + fieldList.add("orgno"); + fieldList.add("sealname"); + fieldList.add("sealstatus"); + fieldList.add("sealtype"); + fieldList.add("sealno"); + + log.error("sealsArray:{}",sealsArray.size()); + log.error("sealsArray:{}",sealsArray.toJSONString()); + try{ + if(sealsArray.size() > 0){ + + Map fieldMap = formFieldDao.queryFromTableField(Constants.sealTable,fieldList); + + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + log.error("fieldMap2:{}",fieldMap.size()); + for(int i=0;i mainData = new ArrayList(); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n mainData = new ArrayList(); + for(int n=0;n recordMap = formFieldDao.queryTableFormId(Constants.sealTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertEbForm(addDatas,formId,appId); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(updateDatas,formId,appId); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + + } + } + } + }catch (Exception e){ + log.error("e:{}",e); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("total",sealsArray.size()); + actionMap.put("effectiveTotal",effectiveTotal); + actionMap.put("failTotal",failTotal); + actionMap.put("ebTotal",ebList.size()); + + return WeaResult.success(actionMap); + } + + + /*** + * 获取印章数据 + * @param organizeNo + * @return + */ + public JSONArray querySealData(String organizeNo){ + + JSONArray sealsArray = new JSONArray(); + + int pageSize = 30; + int total = 0; + JSONArray itemArray = new JSONArray(); + if(StringUtils.isNotBlank(organizeNo)){ + int pageIndex = 1; + String querySealsUrl = Constants.querySealsUrl+"?pageIndex="+pageIndex+"&pageSize="+pageSize+"&organizeNo="+organizeNo; + log.error("querySealsUrl:{}",querySealsUrl); + String msg = esb2EsignSyncSealsUtil.queryEsignSealTemplate(querySealsUrl); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("total")){ + total = dataJson.getInteger("total"); + } + } + } + } + itemArray = esb2EsignSyncSealsUtil.querySealsArray(msg,organizeNo); + } + } + + if (total <= pageSize) { + sealsArray = itemArray; + } else { + sealsArray.addAll(itemArray); + int pageCount = (int) Math.floor(total / (pageSize * 1.0)); + log.error("pageCount:" + pageCount); + for (int i = 1; i < pageCount; i++) { + int pageIndex = i + 1; + + String querySealsUrl = Constants.querySealsUrl+"?pageIndex="+pageIndex+"&pageSize="+pageSize+"&organizeNo="+organizeNo; + log.error("querySealsUrl:{}",querySealsUrl); + String msg = esb2EsignSyncSealsUtil.queryEsignSealTemplate(querySealsUrl); + JSONArray itemArray2 = esb2EsignSyncSealsUtil.querySealsArray(msg,organizeNo); + sealsArray.addAll(itemArray2); + } + } + return sealsArray; + } + +// public String queryEsignSealTemplate(String querySealsUrl,String organizeNo){ +// +//// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +//// String xTimevaleProjectId = "1001003"; +//// String eSignHost = "http://110.185.172.132:8086"; +// +// String bodyData = ""; +// String xTimevaleSignature = esb2EsignUtil.encryptionHmacSHA256(bodyData); +// log.error("xTimevaleSignature:"+xTimevaleSignature); +// String msg = esb2EsignUtil.doGetEsignQuerySeals(xTimevaleSignature,querySealsUrl); +// log.error("msg:"+msg); +// return msg; +// } + + +// public String doHttpPost(String eSignHost,String eSignUrl,String bodyData,String xTimevaleSignature,String xTimevaleProjectId){ +// String msg = ""; +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("text/plain"); +// System.out.println(eSignHost+eSignUrl); +// try { +// Request request = new Request.Builder() +// .url(eSignHost+eSignUrl) +// .method("GET", null) +// .addHeader("x-timevale-project-id", xTimevaleProjectId) +// .addHeader("x-timevale-signature", xTimevaleSignature) +// .addHeader("Content-Type", "application/json") +// .build(); +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// if(code == 200){ +// msg = response.body().string(); +// } +// log.error("msg:"+msg); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// return msg; +// } + +// public static void main(String[] args) { +// Esb2EsignSyncSealsCron esb2EsignQuerySealsAction = new Esb2EsignSyncSealsCron(); +// String pageIndex = "1"; +// String pageSize = "10"; +// String organizeNo = "91510115MA62QJQJ4N"; +// +// String querySealsUrl = Constants.querySealsUrl+"?pageIndex="+pageIndex+"&pageSize="+pageSize+"&organizeNo="+organizeNo; +// esb2EsignQuerySealsAction.queryEsignSealTemplate(querySealsUrl,organizeNo); +// } + + +// public String encryptionHmacSHA256(String secretKey,String bodyData){ +// String encryptionData = ""; +//// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; +// // 要签名的数据 +//// JSONObject dataObject = new JSONObject(); +//// dataObject.put("templateId","JMHT-ZXSJ"); +//// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; +// try { +// // 初始化Mac对象 +// Mac sha256Hmac = Mac.getInstance("HmacSHA256"); +// SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); +// sha256Hmac.init(secretKeySpec); +// byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); +// encryptionData = Hex.encodeHexString(result); +// } catch (NoSuchAlgorithmException e) { +// throw new RuntimeException(e); +// }catch (InvalidKeyException e) { +// throw new RuntimeException(e); +// } +// return encryptionData; +// } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncTemplateCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncTemplateCron.java new file mode 100644 index 0000000..9fdb07f --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/esb/Esb2EsignSyncTemplateCron.java @@ -0,0 +1,294 @@ +package com.weaver.seconddev.chapanda.esign.esb; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.dao.FormFieldDao; +import com.weaver.seconddev.chapanda.esign.dao.SealTemplateDao; +import com.weaver.seconddev.chapanda.esign.util.EbuilderOperateUtils; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignSealTemplateUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignTemplateFormUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 同步电子印章模板数据, 含有明细表字段 + */ +@Service("Esb2EsignSyncTemplateCron") +public class Esb2EsignSyncTemplateCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignSyncTemplateCron.class); + + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + Esb2EsignSealTemplateUtil esb2EsignSealTemplateUtil; + + @Autowired + SealTemplateDao sealTemplateDao; + + @Autowired + Esb2EsignTemplateFormUtil esb2EsignTemplateFormUtil; + + @Override + public WeaResult> execute(Map params) { + + List ebList = new ArrayList(); + + JSONArray templateArray = queryTemplateData(); + + int effectiveTotal = 0; + int failTotal = 0; + + log.error("templateArray:{}",templateArray.size()); + if(templateArray.size() > 0){ + + List addDatas = new ArrayList(); + + for(int i=0;i mainData = appendMainData(dataJson); + if(mainData.size() > 0){ + ebDataReqDto.setMainDatas(mainData); + Map>> detailDatas = appendDetailData(mbid); + ebDataReqDto.setDetailDatas(detailDatas); + addDatas.add(ebDataReqDto); + } + } +// +// if(StringUtils.isNotBlank(ufId)){ +// log.error("修改"); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// mainData.add(new EBDataReqDetailDto("id", ufId)); +// for(int n=0;n mainData = new ArrayList(); +// for(int n=0;n recordMap = formFieldDao.queryTableFormId(Constants.templateTable); + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + if(addDatas.size() > 0){ + + for(int i=0;i 0){ +// +// EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(updateDatas,formId,appId); +// boolean isTrue = updateEbDataChangeResult.getStatus(); +// log.error("isTrue2:{}",isTrue); +// log.error("message2:{}",updateEbDataChangeResult.getMessage()); +// if(isTrue){ +// ebList.addAll(updateEbDataChangeResult.getDataIds()); +// } +// } + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); +// actionMap.put("total",sealsArray.size()); + actionMap.put("effectiveTotal",effectiveTotal); + actionMap.put("failTotal",failTotal); + actionMap.put("ebTotal",ebList.size()); + + return WeaResult.success(actionMap); + } + + + /*** + * + * @return + */ + public JSONArray queryTemplateData(){ + + JSONArray templateArray = new JSONArray(); + + int pageSize = 30; + int totalCount = 0; + JSONArray itemArray = new JSONArray(); + int pageIndex = 1; + String msg = esb2EsignSealTemplateUtil.queryTemplateData(pageIndex,pageSize); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("totalCount")){ + totalCount = dataJson.getInteger("totalCount"); + } + } + } + } + itemArray = esb2EsignSealTemplateUtil.queryTemplateArray(msg); + } + + log.error("itemArray:" + itemArray.size()); + + if (totalCount <= pageSize) { + templateArray.addAll(itemArray); + } else { + templateArray.addAll(itemArray); + int pageCount = (int) Math.floor(totalCount / (pageSize * 1.0)); + log.error("pageCount:" + pageCount); + for (int i = 1; i < pageCount; i++) { + int pageIndex2 = i + 1; + String msg2 = esb2EsignSealTemplateUtil.queryTemplateData(pageIndex2,pageSize); + JSONArray itemArray2 = esb2EsignSealTemplateUtil.queryTemplateArray(msg2); + templateArray.addAll(itemArray2); + } + } + + log.error("templateArray:" + templateArray.size()); + return templateArray; + } + + + + /** + * + * @param mbid + * @return + */ + public Map>> appendDetailData(String mbid){ + Map>> detailDatas = new HashMap>>(); + List detailList = new ArrayList(); + detailList.add("zdm"); + detailList.add("zdmc"); + + long subformId = formFieldDao.queryTableFormIdByEb(Constants.templateTableZdb); + log.error("subformId:{}",subformId); + Map detailFieldMap = formFieldDao.queryDetailTableField(Constants.templateTable,Constants.templateTableZdb, detailList); + log.error("detailFieldMap:{}",detailFieldMap.size()); + JSONArray formArray = esb2EsignTemplateFormUtil.queryTemplateFormData(mbid); + // 明细数据参数 + log.error("formArray:{}",formArray.size()); + + List> subFormDatas = new ArrayList>(); + for(int i=0;i subFormRowData = new ArrayList<>(); + for(int n=0;n appendMainData(JSONObject dataJson){ + + List mainData = new ArrayList(); + List fieldList = new ArrayList(); + fieldList.add("mbid"); + fieldList.add("mbmc"); + fieldList.add("sfqy"); + + Map fieldMap = formFieldDao.queryFromTableField(Constants.templateTable,fieldList); + log.error("fieldMap:{}",fieldMap.size()); + log.error("sfqy:{}",String.valueOf(fieldMap.get("sfqy"))); + + mainData.add(new EBDataReqDetailDto(String.valueOf(fieldMap.get("sfqy")), "1")); + + for(int n=0;n queryPreviewUrl(String templateId,Map paraMap); + List> queryTemplateField(String templateId, Map paraMap); + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/SignFlowsCallBackService.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/SignFlowsCallBackService.java new file mode 100644 index 0000000..ed9b22e --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/SignFlowsCallBackService.java @@ -0,0 +1,10 @@ +package com.weaver.seconddev.chapanda.esign.service; + +import org.springframework.stereotype.Component; + +@Component +public interface SignFlowsCallBackService { + + void creatDocFile(String flowId,String downloadDocUrl,String finishFileKey); + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SealTemplateServiceImpl.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SealTemplateServiceImpl.java new file mode 100644 index 0000000..5b3b911 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SealTemplateServiceImpl.java @@ -0,0 +1,391 @@ +package com.weaver.seconddev.chapanda.esign.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.dao.SealTemplateDao; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.esign.service.SealTemplateService; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignBuildTemplatDoceUtil; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignPreviewUrlUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/*** + * author:shil + */ +@Service +public class SealTemplateServiceImpl implements SealTemplateService { + + private final static Logger log = LoggerFactory.getLogger(SealTemplateServiceImpl.class); + + @Autowired + private Esb2EsignPreviewUrlUtil esb2EsignPreviewUrlUtil; + + @Autowired + private Esb2EsignBuildTemplatDoceUtil esb2EsignBuildTemplatDoceUtil; + + @Autowired + SealTemplateDao sealTemplateDao; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + /*** + * 查询预览地址 + * @param templateId + * @param paraMap + * @return + */ + @Override + public Map queryPreviewUrl(String templateId,Map paraMap) { + Map dataMap = new HashMap(); + List> templateFieldList = sealTemplateDao.queryTemplateFieldByTemplateId(templateId); + log.error("templateFieldList:{}",templateFieldList.size()); + String employee_id = String.valueOf(paraMap.get("employee_id")); + Long employeeId = 0L; + if(StringUtils.isNotBlank(employee_id)){ + employeeId = Long.valueOf(employee_id); + } + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + log.error("simpleEmployee:{}",simpleEmployee.getUsername()); + JSONObject bodyJson = new JSONObject(); + String fileKey = ""; + String preViewUrl = ""; + try{ + JSONArray formArray = new JSONArray(); + for(int i=0;i templateField = templateFieldList.get(i); + String zdm = String.valueOf(templateField.get("zdm")); + String zdlx = String.valueOf(templateField.get("zdlx")); + String zdz = String.valueOf(templateField.get("zdz")); + log.error("zdm:{}",zdm); + log.error("zdlx:{}",zdlx); + log.error("zdz:{}",zdz); + JSONObject formJson = converFieldValue(paraMap,simpleEmployee,zdlx,zdz,zdm); + formArray.add(formJson); + } + + + bodyJson.put("templateFormValues",formArray); + bodyJson.put("templateId",templateId); + log.error("bodyJson:{}",bodyJson.toJSONString()); + if(formArray.size()>0){ + fileKey = getTemplateFileKey(bodyJson.toJSONString()); + } + log.error("fileKey:{}",fileKey); + + if(StringUtils.isNotBlank(fileKey)){ + OkHttpDto okHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(fileKey); + int responseCode = okHttpDto.getResponseCode(); + if(responseCode == 200){ + int dataCode = okHttpDto.getDataCode(); + if(dataCode == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + preViewUrl = dataJson.getString("preViewUrl"); + } + } + } + log.error("preViewUrl:{}",preViewUrl); + + }catch (Exception e){ + log.error("e:{}",e); + } + + dataMap.put("bodyData",bodyJson.toJSONString()); + dataMap.put("filekey",fileKey); + dataMap.put("previewurl",preViewUrl); + + return dataMap; + } + + + /*** + * 转换规则 + * @param paraMap + * @param simpleEmployee + * @param zdz + * @param zdm + */ + public JSONObject converFieldValue(Map paraMap,SimpleEmployee simpleEmployee,String zdlx,String zdz,String zdm){ + log.error("converFieldValue:zdlx:{}",zdlx); + + JSONObject bodyJson = new JSONObject(); + // 固定值 + String value = ""; + if("1".equals(zdlx)){ + value = zdz ; + }else if("2".equals(zdlx)){ //从入参获取 + log.error("containsKey:{}",paraMap.containsKey(zdz)); + if(paraMap.containsKey(zdz)){ + value = String.valueOf(paraMap.get(zdz)); + } + log.error("value:{}",value); + }else if("3".equals(zdlx)){ //sql语句获取 + if(StringUtils.isNotBlank(zdm)){ + Iterator> it = paraMap.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + log.error("Key:{},Value:{}",entry.getKey(), entry.getValue()); + String paramKey = entry.getKey(); + String paramValue = entry.getValue().toString(); + if(zdz.contains("{?"+paramKey+"}")){ + zdz = zdz.replace("{?"+paramKey+"}",paramValue); + } + } + log.error("zdz:{}",zdz); + value = sealTemplateDao.queryValueByConfig(zdz); + log.error("value:{}",value); + } + }else if("4".equals(zdlx)){ //当前登录人ID + Long employeeId = simpleEmployee.getEmployeeId(); + value = String.valueOf(employeeId); + }else if("5".equals(zdlx)){ //当前登录人姓名 + String username = simpleEmployee.getUsername(); + value = username; + }else if("6".equals(zdlx)){ //当前登录人部门ID + Long departmentId = simpleEmployee.getDepartmentId(); + value = String.valueOf(departmentId); + }else if("7".equals(zdlx)){ //当前登录人部门名称 + String departmentName = simpleEmployee.getDepartment().getName(); + value = departmentName; + }else if("8".equals(zdlx)){ //当前日期 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + value = sdf.format(new Date()); + }else if("9".equals(zdlx)){ //当前时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + value = sdf.format(new Date()); + }else if("10".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getYear()); + }else if("11".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getMonthValue()); + if(localDate.getMonthValue() <10){ + value = "0"+value; + } + }else if("12".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getDayOfMonth()); + if(localDate.getMonthValue() <10){ + value = "0"+value; + } + } + + bodyJson.put("formId",zdm); + bodyJson.put("formValue",value); + return bodyJson; + } + + + /*** + * + * @param templateId + * @param paraMap + * @return + */ + @Override + public List> queryTemplateField(String templateId, Map paraMap) { + String types = String.valueOf(paraMap.get("type")); + List> fieldList = new ArrayList>(); + String[] typeArr = types.split(","); + for(int i=0;i> dataList = sealTemplateDao.queryTemplateFieldByType(templateId,typeArr[i]); + if("3".equals(typeArr[i])){ + fieldList.addAll(convertSql2Param(dataList)); + }else{ + fieldList.addAll(convertParam2Param(dataList)); + } + } + return fieldList; + } + + + public List> convertSql2Param(List> dataList){ + List> paramList = new ArrayList>(); + List parameters = new ArrayList<>(); + for(int i=0;i paramMap = new HashMap(); + paramMap.put("field",key); + paramList.add(paramMap); + } + + return paramList; + } + + + public List> convertParam2Param(List> dataList){ + List> paramList = new ArrayList>(); + List parameters = new ArrayList<>(); + for(int i=0;i paramMap = new HashMap(); + paramMap.put("field",key); + paramList.add(paramMap); + } + return paramList; + } + + public static void main(String[] args) { + String data = "select mc from uf_legal_entity where id = '{?frgs}' and name = '{?test}' "; + + // 使用正则表达式按{?截取,}为结束 + Pattern pattern = Pattern.compile("\\{\\?([^}]+)\\}"); + Matcher matcher = pattern.matcher(data); + + List parameters = new ArrayList<>(); + while (matcher.find()) { + parameters.add(matcher.group(1)); // 提取{?和}之间的内容 + } + + } + + public String getTemplateFileKey(String bodyData){ + String fileKey = ""; + String xTimevaleSignature = encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:{}",xTimevaleSignature); + OkHttpDto okHttpDto = doPostHttp(xTimevaleSignature,bodyData); + int responseCode = okHttpDto.getResponseCode(); + if(responseCode == 200){ + int dataCode = okHttpDto.getDataCode(); + if(dataCode == 0){ + JSONObject dataJson = okHttpDto.getDataJson(); + fileKey = dataJson.getString("fileKey"); + } + } +// if(StringUtils.isNotBlank(msg)){ +// JSONObject bodyJson = JSONObject.parseObject(msg); +// if(bodyJson.containsKey("errCode")){ +// String errCode = bodyJson.getString("errCode"); +// if("0".equals(errCode)){ +// JSONObject dataJson = bodyJson.getJSONObject("data"); +// if(dataJson.containsKey("fileKey")){ +// fileKey = dataJson.getString("fileKey"); +// } +// } +// } +// } + log.error("fileKey:{}",fileKey); + return fileKey; + } + + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + public void convertData(String reposponseBody,OkHttpDto okHttpDto){ + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if(bodyJson.containsKey("errCode")){ + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}",errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if(bodyJson.containsKey("msg")){ + msg = bodyJson.getString("msg"); + log.error("msg:{}",msg); + } + okHttpDto.setDataMsg(msg); + + if(errCode == 0){ + JSONObject responseDataJson = new JSONObject(); + if(bodyJson.containsKey("data")){ + String data = bodyJson.getString("data"); + if(StringUtils.isNotBlank(data)){ + JSONObject dataJson = bodyJson.getJSONObject("data"); + if(dataJson.containsKey("fileKey")){ + String fileKey = dataJson.getString("fileKey"); + responseDataJson.put("fileKey",fileKey); + } + } + } + okHttpDto.setDataJson(responseDataJson); + } + } + + + public OkHttpDto doPostHttp(String xTimevaleSignature,String bodyData){ + + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + // "{\n\t\"templateFormValues\": [\n\t\t{\n\t\t\t\"formId\": 186,\n\t\t\t\"formValue\": \"50\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 185,\n\t\t\t\"formValue\": \"壹万元\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 184,\n\t\t\t\"formValue\": \"10000\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 183,\n\t\t\t\"formValue\": \"茶百道测试\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 182,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 181,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 135,\n\t\t\t\"formValue\": \"01\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 134,\n\t\t\t\"formValue\": \"06\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 132,\n\t\t\t\"formValue\": \"2025\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 131,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 130,\n\t\t\t\"formValue\": \"成都嘉煜中1楼\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 129,\n\t\t\t\"formValue\": \"成都嘉煜中心店\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 128,\n\t\t\t\"formValue\": \"成都嘉煜中1楼\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 127,\n\t\t\t\"formValue\": \"320328198803201515\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 126,\n\t\t\t\"formValue\": \"01\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 125,\n\t\t\t\"formValue\": \"06\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 124,\n\t\t\t\"formValue\": \"2025\"\n\t\t}\n\t],\n\t\"templateId\": \"JMHT-ZXSJ\"\n\t\n}" + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.templateDocUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SignFlowsCallBackServiceImpl.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SignFlowsCallBackServiceImpl.java new file mode 100644 index 0000000..28343a8 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/service/impl/SignFlowsCallBackServiceImpl.java @@ -0,0 +1,68 @@ +package com.weaver.seconddev.chapanda.esign.service.impl; + +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.seconddev.chapanda.esign.dao.SignFlowCallBackDao; +import com.weaver.seconddev.chapanda.esign.service.SignFlowsCallBackService; +import com.weaver.seconddev.chapanda.esign.util.Esb2EsignFileUploadUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.*; +import com.weaver.seconddev.chapanda.esign.constant.Constants; + +/*** + * author:shil + */ +@Service +public class SignFlowsCallBackServiceImpl implements SignFlowsCallBackService { + + private final static Logger log = LoggerFactory.getLogger(SignFlowsCallBackServiceImpl.class); + + @Autowired + SignFlowCallBackDao signFlowCallBackDao; + + @Autowired + Esb2EsignFileUploadUtil esb2EsignFileUploadUtil; + + /** + * + * @param flowId + * @param downloadDocUrl + * @param finishFileKey + * @return + */ + @Override + public void creatDocFile(String flowId,String downloadDocUrl,String finishFileKey) { + log.error("flowId33:{}",flowId); + Long longSignFlowId = Constants.callbacFolderId; + log.error("longSignFlowId:{}",longSignFlowId); + Map flowInfoMap = signFlowCallBackDao.queryFlowInfo(flowId); + + String form_data_id = String.valueOf(flowInfoMap.get("form_data_id")); + String glhtlylc = String.valueOf(flowInfoMap.get("glhtlylc")); + log.error("form_data_id:{}",form_data_id); + log.error("glhtlylc:{}",glhtlylc); + + String requestname = ""; + if(StringUtils.isNotBlank(glhtlylc)){ + requestname = signFlowCallBackDao.queryRequestName(glhtlylc); + } + log.error("requestname:{}",requestname); + + if(StringUtils.isNotBlank(requestname)){ + Long docId = 0L; + Long fileid = 0L; + if(StringUtils.isNotBlank(downloadDocUrl)){ + FileObj fileObj = esb2EsignFileUploadUtil.uploadFile(downloadDocUrl,requestname,longSignFlowId); + log.error("fileObj:{}",fileObj.toString()); + docId = fileObj.getDocId(); + fileid = fileObj.getId(); + if(fileid > 0){ + signFlowCallBackDao.updateFormTableInfo(form_data_id,fileid,finishFileKey); + } + } + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/CommonUtils.java new file mode 100644 index 0000000..d3458df --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/DatabaseUtils.java new file mode 100644 index 0000000..3356782 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/EbuilderOperateUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/EbuilderOperateUtils.java new file mode 100644 index 0000000..f84ccf3 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/EbuilderOperateUtils.java @@ -0,0 +1,201 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.dao.FormFieldDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class EbuilderOperateUtils { + + private final static Logger log = LoggerFactory.getLogger(EbuilderOperateUtils.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + @RpcReference(group = "ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + + public EBDataChangeResult bacthInsertEbForm(List datas,String formId,String appId) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n datas,String formId,String appId) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + if (StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)) { + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + /** + * 直接通过id更新数据, 即update table set a = '11' where id = 1 + */ + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + ebDataReqOperation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + // 数据没有找到的时候是否新增数据 + EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); + ebDataReqOperationInfo.setNeedAdd(true); + ebDataReqOperation.setMainData(ebDataReqOperationInfo); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + ebDataChangeReqDto.setDatas(datas); + ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + } + return ebDataChangeResult; + } + + + public EBDataChangeResult bacthInsertEbDetailForm(List datas,String formId,String appId) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n paraMap) { + Map dataMap = new HashMap(); + + List> templateFieldList = sealTemplateDao.queryTemplateFieldByTemplateId(templateId); + log.error("templateFieldList:{}",templateFieldList.size()); + String employee_id = String.valueOf(paraMap.get("employee_id")); + Long employeeId = 0L; + if(StringUtils.isNotBlank(employee_id)){ + employeeId = Long.valueOf(employee_id); + } + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + log.error("simpleEmployee:{}",simpleEmployee.getUsername()); + JSONObject bodyJson = new JSONObject(); + + JSONArray formArray = new JSONArray(); + for(int i=0;i templateField = templateFieldList.get(i); + String zdm = String.valueOf(templateField.get("zdm")); + String zdlx = String.valueOf(templateField.get("zdlx")); + String zdz = String.valueOf(templateField.get("zdz")); + log.error("zdm:{}",zdm); + log.error("zdlx:{}",zdlx); + log.error("zdz:{}",zdz); + JSONObject formJson = converFieldValue(paraMap,simpleEmployee,zdlx,zdz,zdm); + formArray.add(formJson); + } + bodyJson.put("templateFormValues",formArray); + bodyJson.put("templateId",templateId); + log.error("bodyJson:{}",bodyJson.toJSONString()); + + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:{}",xTimevaleSignature); + OkHttpDto okHttpDto = doPostHttp(xTimevaleSignature,bodyJson.toJSONString()); + +// dataMap.put("bodyData",bodyJson.toJSONString()); +// dataMap.put("filekey",fileKey); +// dataMap.put("previewurl",preViewUrl); + + return okHttpDto; + } + + public OkHttpDto queryPreviewUrl(String fileKey) { + + OkHttpDto okHttpDto = new OkHttpDto(); + if(StringUtils.isNotBlank(fileKey)){ + okHttpDto = esb2EsignPreviewUrlUtil.queryPreviewUrl(fileKey); + } + +// log.error("preViewUrl:{}",preViewUrl); +// dataMap.put("bodyData",bodyJson.toJSONString()); +// dataMap.put("filekey",fileKey); +// dataMap.put("previewurl",preViewUrl); + + return okHttpDto; + } + +// public OkHttpDto getTemplateFileKey(String bodyData){ +// JSONArray formArray = new JSONArray(); +// for(int i=0;i templateField = templateFieldList.get(i); +// String zdm = String.valueOf(templateField.get("zdm")); +// String zdlx = String.valueOf(templateField.get("zdlx")); +// String zdz = String.valueOf(templateField.get("zdz")); +// +// log.error("zdm:{}",zdm); +// log.error("zdlx:{}",zdlx); +// log.error("zdz:{}",zdz); +// +// JSONObject formJson = converFieldValue(paraMap,simpleEmployee,zdlx,zdz,zdm); +// +// formArray.add(formJson); +// } +// bodyJson.put("templateFormValues",formArray); +// bodyJson.put("templateId",templateId); +// log.error("bodyJson:{}",bodyJson.toJSONString()); +// +// String xTimevaleSignature = encryptionHmacSHA256(bodyData); +// log.error("xTimevaleSignature:{}",xTimevaleSignature); +// OkHttpDto okHttpDto = doPostHttp(xTimevaleSignature,bodyData); +//// log.error("msg:{}",msg); +//// if(StringUtils.isNotBlank(msg)){ +//// JSONObject bodyJson = JSONObject.parseObject(msg); +//// if(bodyJson.containsKey("errCode")){ +//// String errCode = bodyJson.getString("errCode"); +//// if("0".equals(errCode)){ +//// JSONObject dataJson = bodyJson.getJSONObject("data"); +//// if(dataJson.containsKey("fileKey")){ +//// fileKey = dataJson.getString("fileKey"); +//// } +//// } +//// } +//// } +//// log.error("fileKey:{}",fileKey); +// return okHttpDto; +// } + + /*** + * + * @param xTimevaleSignature + * @return + */ + public OkHttpDto doPostHttp(String xTimevaleSignature,String bodyData){ + + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + // "{\n\t\"templateFormValues\": [\n\t\t{\n\t\t\t\"formId\": 186,\n\t\t\t\"formValue\": \"50\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 185,\n\t\t\t\"formValue\": \"壹万元\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 184,\n\t\t\t\"formValue\": \"10000\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 183,\n\t\t\t\"formValue\": \"茶百道测试\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 182,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 181,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 135,\n\t\t\t\"formValue\": \"01\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 134,\n\t\t\t\"formValue\": \"06\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 132,\n\t\t\t\"formValue\": \"2025\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 131,\n\t\t\t\"formValue\": \"HT-001\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 130,\n\t\t\t\"formValue\": \"成都嘉煜中1楼\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 129,\n\t\t\t\"formValue\": \"成都嘉煜中心店\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 128,\n\t\t\t\"formValue\": \"成都嘉煜中1楼\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 127,\n\t\t\t\"formValue\": \"320328198803201515\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 126,\n\t\t\t\"formValue\": \"01\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 125,\n\t\t\t\"formValue\": \"06\"\n\t\t},\n\t\t{\n\t\t\t\"formId\": 124,\n\t\t\t\"formValue\": \"2025\"\n\t\t}\n\t],\n\t\"templateId\": \"JMHT-ZXSJ\"\n\t\n}" + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.templateDocUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + public void convertData(String reposponseBody,OkHttpDto okHttpDto){ + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if(bodyJson.containsKey("errCode")){ + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}",errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if(bodyJson.containsKey("msg")){ + msg = bodyJson.getString("msg"); + log.error("msg:{}",msg); + } + okHttpDto.setDataMsg(msg); + + if(errCode == 0){ + JSONObject responseDataJson = new JSONObject(); + if(bodyJson.containsKey("data")){ + String data = bodyJson.getString("data"); + if(StringUtils.isNotBlank(data)){ + JSONObject dataJson = bodyJson.getJSONObject("data"); + if(dataJson.containsKey("fileKey")){ + String fileKey = dataJson.getString("fileKey"); + responseDataJson.put("fileKey",fileKey); + } + } + } + okHttpDto.setDataJson(responseDataJson); + } + } + + + /*** + * 转换规则 + * @param paraMap + * @param simpleEmployee + * @param zdz + * @param zdm + */ + public JSONObject converFieldValue(Map paraMap, SimpleEmployee simpleEmployee, String zdlx, String zdz, String zdm){ + log.error("converFieldValue:zdlx:{}",zdlx); + + JSONObject bodyJson = new JSONObject(); + // 固定值 + String value = ""; + if("1".equals(zdlx)){ + value = zdz ; + }else if("2".equals(zdlx)){ //从入参获取 + log.error("containsKey:{}",paraMap.containsKey(zdz)); + if(paraMap.containsKey(zdz)){ + value = String.valueOf(paraMap.get(zdz)); + } + log.error("value:{}",value); + }else if("3".equals(zdlx)){ //sql语句获取 + if(StringUtils.isNotBlank(zdm)){ + Iterator> it = paraMap.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + log.error("Key:{},Value:{}",entry.getKey(), entry.getValue()); + String paramKey = entry.getKey(); + String paramValue = entry.getValue().toString(); + if(zdz.contains("{?"+paramKey+"}")){ + zdz = zdz.replace("{?"+paramKey+"}",paramValue); + } + } + log.error("zdz:{}",zdz); + value = sealTemplateDao.queryValueByConfig(zdz); + log.error("value:{}",value); + } + }else if("4".equals(zdlx)){ //当前登录人ID + Long employeeId = simpleEmployee.getEmployeeId(); + value = String.valueOf(employeeId); + }else if("5".equals(zdlx)){ //当前登录人姓名 + String username = simpleEmployee.getUsername(); + value = username; + }else if("6".equals(zdlx)){ //当前登录人部门ID + Long departmentId = simpleEmployee.getDepartmentId(); + value = String.valueOf(departmentId); + }else if("7".equals(zdlx)){ //当前登录人部门名称 + String departmentName = simpleEmployee.getDepartment().getName(); + value = departmentName; + }else if("8".equals(zdlx)){ //当前日期 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + value = sdf.format(new Date()); + }else if("9".equals(zdlx)){ //当前时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + value = sdf.format(new Date()); + }else if("10".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getYear()); + }else if("11".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getMonthValue()); + if(localDate.getMonthValue() <10){ + value = "0"+value; + } + }else if("12".equals(zdlx)){ //当前时间 + LocalDate localDate = LocalDate.now(); + value = String.valueOf(localDate.getDayOfMonth()); + if(localDate.getMonthValue() <10){ + value = "0"+value; + } + } + + bodyJson.put("formId",zdm); + bodyJson.put("formValue",value); + return bodyJson; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignCreateUserUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignCreateUserUtil.java new file mode 100644 index 0000000..b7a4b7a --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignCreateUserUtil.java @@ -0,0 +1,146 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; + +@Component +public class Esb2EsignCreateUserUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignCreateUserUtil.class); + + /** + * 创建用户 + * @param name + * @param mobile + * @return + */ + public OkHttpDto createUser(String name,String mobile){ + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("contactsMobile",mobile); + bodyJson.put("name",name); + bodyJson.put("loginMobile",mobile); + bodyJson.put("uniqueId",mobile); + + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:"+xTimevaleSignature); + OkHttpDto okHttpDto = doHttpPost(xTimevaleSignature,bodyJson.toJSONString()); + return okHttpDto; + } + + + /** + * + * @param xTimevaleSignature + * @param bodyData + * @return + */ + public OkHttpDto doHttpPost(String xTimevaleSignature,String bodyData){ + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.externalpersonUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + + + public void convertData(String reposponseBody,OkHttpDto okHttpDto){ + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if(bodyJson.containsKey("errCode")){ + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}",errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if(bodyJson.containsKey("msg")){ + msg = bodyJson.getString("msg"); + log.error("msg:{}",msg); + } + okHttpDto.setDataMsg(msg); + log.error("errCode:{}",errCode); + if(errCode == 0){ + JSONObject responseDataJson = new JSONObject(); + if(bodyJson.containsKey("data")){ + String data = bodyJson.getString("data"); + log.error("data:{}",data); + if(StringUtils.isNotBlank(data)){ + JSONObject dataJson = bodyJson.getJSONObject("data"); + log.error("dataJson:{}",dataJson.toJSONString()); + + String accountId = dataJson.getString("accountId"); + String esignAccountId = dataJson.getString("esignAccountId"); + String uniqueId = dataJson.getString("uniqueId"); + + log.error("accountId:{}",accountId); + log.error("esignAccountId:{}",esignAccountId); + log.error("uniqueId:{}",errCode); + + responseDataJson.put("accountId",accountId); + responseDataJson.put("esignAccountId",esignAccountId); + responseDataJson.put("uniqueId",uniqueId); + } + } + okHttpDto.setDataJson(responseDataJson); + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignDownlUrlUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignDownlUrlUtil.java new file mode 100644 index 0000000..ea3c724 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignDownlUrlUtil.java @@ -0,0 +1,191 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + + +@Component +public class Esb2EsignDownlUrlUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignDownlUrlUtil.class); + + public OkHttpDto queryDownlUrl(String signFlowId){ +// String downloadUrl = ""; + String bodyData = ""; + String xTimevaleSignature = encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:"+xTimevaleSignature); + OkHttpDto okHttpDto = doHttpPost(xTimevaleSignature,signFlowId); +// if(StringUtils.isNotBlank(msg)){ +// downloadUrl = convertData(msg); +// } + return okHttpDto; + } + + /** + * + * @param xTimevaleSignature + * @param signFlowId + * @return + */ + private OkHttpDto doHttpPost(String xTimevaleSignature,String signFlowId){ + + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + // $8d83de01-eac1-4057-8857-a052d8a7fa18$2199386656 + try { + log.error("fileUrl:{}",Constants.eSignHost+Constants.getSignFlowDocUrls+"?signFlowId="+signFlowId); + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.getSignFlowDocUrls+"?signFlowId="+signFlowId+"&intranetFlag=N") + .method("GET", null) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + + /*** + * + * @param bodyData + * @return + */ + private String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + +// public JSONArray appendSignersParty(String employeeMobile,String templateId,String sealId,String docFilekey,String creditCode,String qsrJobNum){ +// JSONArray signers = new JSONArray(); +// JSONObject detailJson = esb2EsignTemplateSealPostionUtil.getTemplateFormData(templateId,sealId,docFilekey); +// JSONObject partyA = detailJson.getJSONObject("partyA"); +// JSONObject partyB = detailJson.getJSONObject("partyB"); +// JSONObject partyBJson = new JSONObject(); +// partyBJson.put("authorizationOrganizeNo",""); +// partyBJson.put("uniqueId",employeeMobile); +// partyBJson.put("accountType",Constants.partyBaccountType); +// partyBJson.put("autoSign",Constants.autoSign); +// partyBJson.put("signDocDetails",partyB); +// partyBJson.put("signOrder","1"); +// +// JSONObject partyAJson = new JSONObject(); +// partyAJson.put("authorizationOrganizeNo",creditCode); +// partyAJson.put("uniqueId",qsrJobNum); +// partyAJson.put("accountType",Constants.partyAaccountType); +// partyAJson.put("autoSign",Constants.autoSign); +// partyAJson.put("signDocDetails",partyA); +// partyAJson.put("signOrder","2"); +// +// signers.add(partyBJson); +// signers.add(partyAJson); +// return signers; +// } + + + private void convertData(String reposponseBody,OkHttpDto okHttpDto){ + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if(bodyJson.containsKey("errCode")){ + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}",errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if(bodyJson.containsKey("msg")){ + msg = bodyJson.getString("msg"); + log.error("msg:{}",msg); + } + okHttpDto.setDataMsg(msg); + if(errCode == 0){ + JSONObject responseDataJson = new JSONObject(); + if(bodyJson.containsKey("data")){ + JSONObject dataJson = bodyJson.getJSONObject("data"); + + if(dataJson.containsKey("status")){ + String status = dataJson.getString("status"); + if("2".equals(status)){ + if(dataJson.containsKey("signDocUrlList")){ + String signDocUrlListStr = dataJson.getString("signDocUrlList"); + if(!"[]".equals(signDocUrlListStr)){ + JSONArray signDocUrlList = dataJson.getJSONArray("signDocUrlList"); + if(signDocUrlList.size() > 0){ + JSONObject signDocUrlJson = signDocUrlList.getJSONObject(0); + String downloadDocUrl = ""; + if(signDocUrlJson.containsKey("downloadDocUrl")){ + downloadDocUrl = signDocUrlJson.getString("downloadDocUrl"); + } + + String docFileKey = ""; + if(signDocUrlJson.containsKey("docFileKey")){ + docFileKey = signDocUrlJson.getString("docFileKey"); + } + + String docName = ""; + if(signDocUrlJson.containsKey("docName")){ + docName = signDocUrlJson.getString("docName"); + } + + String docId = ""; + if(signDocUrlJson.containsKey("docId")){ + docId = signDocUrlJson.getString("docId"); + } + + responseDataJson.put("downloadDocUrl",downloadDocUrl); + responseDataJson.put("docFileKey",docFileKey); + responseDataJson.put("docName",docName); + responseDataJson.put("docId",docId); + } + } + } + }else{ + okHttpDto.setDataCode(500); + okHttpDto.setDataMsg("未签署完成"); + } + } + } + okHttpDto.setDataJson(responseDataJson); + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignFileUploadUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignFileUploadUtil.java new file mode 100644 index 0000000..8b635b0 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignFileUploadUtil.java @@ -0,0 +1,118 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.eteams.file.client.param.RemoteUploadParam; +import com.weaver.file.ud.api.FileUploadService; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; +import java.io.InputStream; + +@Component +public class Esb2EsignFileUploadUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignFileUploadUtil.class); + + @Autowired + private FileUploadService fileUploadService; + + /** + * + * @return + */ + public FileObj uploadFile(String downloadUrl,String fileName,Long folderid){ + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + FileObj fileObj = new FileObj(); + log.error("downloadUrl:{}",downloadUrl); + try { + + Request request = new Request.Builder() + .url(downloadUrl) + .method("GET", null) + .build(); + Response response = client.newCall(request).execute(); + log.error("code:{}",response.code()); + log.error("isSuccessful:{}",response.isSuccessful()); + if(response.code() == 200){ + fileObj = createDocInfo(response,fileName,folderid); + } + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return fileObj; + } + + public FileObj createDocInfo(Response response,String fileName,Long folderid){ + FileObj fileObj = new FileObj(); + if(response.isSuccessful()){ + try { + long fileSize = response.body().contentLength(); + byte[] fileByte = response.body().bytes(); + log.error("fileByte:{}",fileByte.length); + if(fileByte.length > 0){ + + String filename = fileName+".pdf"; + String lastModified = String.valueOf(System.currentTimeMillis()); + RemoteUploadParam remoteUploadParam = new RemoteUploadParam(filename, lastModified, "document"); + remoteUploadParam.setFolderId(folderid); + remoteUploadParam.setCreateDoc(true); + remoteUploadParam.setSize(fileSize); + log.error("LongSysUserId:{}",Constants.LongSysUserId); + fileObj = fileUploadService.uploadLocalFile(fileByte,Constants.LongSysUserId,"application/octet-stream",remoteUploadParam); + log.error("fileObj:{}",fileObj.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("e:{}",e); + } + } + return fileObj; + } + + + public FileObj createDocInfo2(Response response){ + FileObj fileObj = new FileObj(); + if(response.isSuccessful()){ + InputStream inputStream = null; + try { + inputStream = response.body().byteStream(); + long fileSize = response.body().contentLength(); + + byte[] fileByte = response.body().bytes(); + log.error("fileByte:{}",fileByte.length); + + String filename = "测试合同11.pdf"; + String lastModified = String.valueOf(System.currentTimeMillis()); + RemoteUploadParam remoteUploadParam = new RemoteUploadParam(filename, lastModified, "document"); + remoteUploadParam.setFolderId(Constants.htwjFolderId); + remoteUploadParam.setCreateDoc(true); + remoteUploadParam.setSize(fileSize); + + log.error("LongSysUserId:{}",Constants.LongSysUserId); + fileObj = fileUploadService.uploadLocalFile(fileByte,Constants.LongSysUserId,"application/octet-stream",remoteUploadParam); + + log.error("fileObj:{}",fileObj.toString()); + + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + log.error("e:{}",e); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return fileObj; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignPreviewUrlUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignPreviewUrlUtil.java new file mode 100644 index 0000000..375206c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignPreviewUrlUtil.java @@ -0,0 +1,132 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class Esb2EsignPreviewUrlUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignPreviewUrlUtil.class); + + public OkHttpDto queryPreviewUrl(String fileKey){ + String bodyData = ""; + String xTimevaleSignature = encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:"+xTimevaleSignature); + OkHttpDto okHttpDto = doHttpGet(xTimevaleSignature,fileKey); + +// if(StringUtils.isNotBlank(msg)){ +// JSONObject bodyJson = JSONObject.parseObject(msg); +// if(bodyJson.containsKey("errCode")){ +// String errCode = bodyJson.getString("errCode"); +// if("0".equals(errCode)){ +// JSONObject dataJson = bodyJson.getJSONObject("data"); +// if(dataJson.containsKey("url")){ +// url = dataJson.getString("url"); +// } +// } +// } +// } +// log.error("msg:"+msg); + return okHttpDto; + } + + /*** + * + * @param xTimevaleSignature + * @return + */ + public OkHttpDto doHttpGet(String xTimevaleSignature,String fileKey){ + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.previewUrl+"?fileKey="+fileKey) + .method("GET", null) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + public void convertData(String reposponseBody,OkHttpDto okHttpDto){ + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if(bodyJson.containsKey("errCode")){ + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}",errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if(bodyJson.containsKey("msg")){ + msg = bodyJson.getString("msg"); + log.error("msg:{}",msg); + } + okHttpDto.setDataMsg(msg); + if(errCode ==0){ + JSONObject responseDataJson = new JSONObject(); + if(bodyJson.containsKey("data")){ + String data = bodyJson.getString("data"); + log.error("data:{}",data); + if(StringUtils.isNotBlank(data)){ + JSONObject dataJson = bodyJson.getJSONObject("data"); + if(dataJson.containsKey("url")){ + String preViewUrl = dataJson.getString("url"); + log.error("preViewUrl:{}",preViewUrl); + responseDataJson.put("preViewUrl",preViewUrl); + } + } + } + okHttpDto.setDataJson(responseDataJson); + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignReminderRequestUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignReminderRequestUtil.java new file mode 100644 index 0000000..23bafa9 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignReminderRequestUtil.java @@ -0,0 +1,116 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import com.weaver.seconddev.chapanda.esign.entity.OkHttpDto; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; + +@Component +public class Esb2EsignReminderRequestUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignReminderRequestUtil.class); + + public OkHttpDto reminderRequest(String flowId){ + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("flowId",flowId); + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:"+xTimevaleSignature); + OkHttpDto okHttpDto = doHttpPost(xTimevaleSignature,bodyJson.toJSONString()); + + return okHttpDto; + } + + + /** + * + * @param xTimevaleSignature + * @param bodyData + * @return + */ + public OkHttpDto doHttpPost(String xTimevaleSignature,String bodyData){ + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.reminderRequestUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + log.error("code:{}",code); + log.error("msg:{}",msg); + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return okHttpDto; + } + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + public void convertData(String reposponseBody, OkHttpDto okHttpDto) { + JSONObject bodyJson = JSONObject.parseObject(reposponseBody); + int errCode = -100; + if (bodyJson.containsKey("errCode")) { + errCode = bodyJson.getInteger("errCode"); + log.error("errCode:{}", errCode); + } + okHttpDto.setDataCode(errCode); + String msg = ""; + if (bodyJson.containsKey("msg")) { + msg = bodyJson.getString("msg"); + log.error("msg:{}", msg); + } + okHttpDto.setDataMsg(msg); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSealTemplateUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSealTemplateUtil.java new file mode 100644 index 0000000..713f3a4 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSealTemplateUtil.java @@ -0,0 +1,131 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class Esb2EsignSealTemplateUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignSealTemplateUtil.class); + + public String queryTemplateData(int pageIndex,int pageSize){ + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("pageIndex", pageIndex); + bodyJson.put("pageSize", pageSize); + + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = doPostHttp(xTimevaleSignature,bodyJson.toJSONString()); + log.error("msg:"+msg); + return msg; + } + + public JSONArray queryTemplateArray(String msg){ + JSONArray ebArray = new JSONArray(); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("templateInfos")){ + JSONArray templateArray = dataJson.getJSONArray("templateInfos"); + for (int i = 0; i < templateArray.size(); i++) { + JSONObject templateJson = templateArray.getJSONObject(i); + String templateId = templateJson.getString("templateId"); + String templateName = templateJson.getString("templateName"); + JSONObject ebJson = new JSONObject(); + ebJson.put("mbid",templateId); + ebJson.put("mbmc",templateName); + ebArray.add(ebJson); + } + } + } + } + } + } + return ebArray; + } + + /*** + * + * @param xTimevaleSignature + * @return + */ + public String doPostHttp(String xTimevaleSignature,String bodyData){ + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + +// "{\n\n\t\"pageIndex\": 1,\n\t\"pageSize\": 30\n}" + + RequestBody body = RequestBody.create(mediaType,bodyData); + + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.queryTemplateUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + bodyData = response.body().string(); + log.error("code:{}",code); + log.error("bodyData:{}",bodyData); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return bodyData; + } + + + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSyncSealsUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSyncSealsUtil.java new file mode 100644 index 0000000..88faa19 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignSyncSealsUtil.java @@ -0,0 +1,168 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class Esb2EsignSyncSealsUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignSyncSealsUtil.class); + + public String queryEsignSealTemplate(String querySealsUrl){ + String bodyData = ""; + String xTimevaleSignature = encryptionHmacSHA256(bodyData); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = doGetEsignQuerySeals(xTimevaleSignature,querySealsUrl); + log.error("msg:"+msg); + return msg; + } + + public JSONArray querySealsArray(String msg,String organizeNo){ + JSONArray ebArray = new JSONArray(); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("seals")){ + JSONArray sealsArray = dataJson.getJSONArray("seals"); + for (int i = 0; i < sealsArray.size(); i++) { + JSONObject sealJson = sealsArray.getJSONObject(i); + String sealType = sealJson.getString("sealType"); + String status = sealJson.getString("status"); + String sealid = sealJson.getString("sealId"); + String alias = sealJson.getString("alias"); + + log.error("sealType:{}",sealType); + if("1".equals(sealType) || "3".equals(sealType)){ + + JSONObject ebJson = new JSONObject(); + ebJson.put("yzzl","0"); + ebJson.put("sealid",sealid); + ebJson.put("orgno",organizeNo); + ebJson.put("sealname",alias); + ebJson.put("sealstatus",status); + ebJson.put("sealtype",sealType); + ebJson.put("sealno",sealid); + + ebArray.add(ebJson); + } + } + } + } + } + } + } + return ebArray; + } + + /*** + * + * @param xTimevaleSignature + * @return + */ + public String doGetEsignQuerySeals(String xTimevaleSignature,String querySealsUrl){ + String bodyData = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+querySealsUrl) + .method("GET", null) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + bodyData = response.body().string(); + log.error("code:{}",code); + log.error("bodyData:{}",bodyData); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return bodyData; + } + + /** + * + * @param bodyData + * @param xTimevaleSignature + * @return + */ + public String doPostEsignSealsTemplate(String bodyData,String xTimevaleSignature){ + String msg = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.queryTemplateUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:"+code); + if(code == 200){ + msg = response.body().string(); + } + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return msg; + } + + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignTemplateFormUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignTemplateFormUtil.java new file mode 100644 index 0000000..be2c538 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignTemplateFormUtil.java @@ -0,0 +1,132 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class Esb2EsignTemplateFormUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignTemplateFormUtil.class); + + public JSONArray queryTemplateFormData(String templateId){ + + JSONArray formArray = new JSONArray(); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("templateId", templateId); + + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = doPostHttp(xTimevaleSignature,bodyJson.toJSONString()); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("template")){ + + JSONObject templateJson = dataJson.getJSONObject("template"); + if(templateJson.containsKey("templateForms")){ + JSONArray templateFormArray = templateJson.getJSONArray("templateForms"); + for(int i=0;i 0){ + signPo.put("signDateInfos",signDateInfos); + } + signPo.put("signIdentity","PERSON"); + signPo.put("sealType","0"); + signPo.put("signType",2); + + signPos.add(signPo); + } + partyB.put("signPos",signPos); + partyB.put("docFilekey",docFilekey); + } + } + } + } + } + } + } + } + } + + JSONArray signDocPartyA = new JSONArray(); + signDocPartyA.add(partyA); + JSONArray signDocPartyB = new JSONArray(); + signDocPartyB.add(partyB); + + detailJson.put("partyA",signDocPartyA); + detailJson.put("partyB",signDocPartyB); + return detailJson; + } + + + /*** + * + * @param xTimevaleSignature + * @return + */ + public String doPostHttp(String xTimevaleSignature,String bodyData){ + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + + RequestBody body = RequestBody.create(mediaType,bodyData); + + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.getTemplateInfoUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + bodyData = response.body().string(); + log.error("code:{}",code); + log.error("bodyData:{}",bodyData); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return bodyData; + } + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + + public JSONObject getTemplateFormData4Orgainze(String templateId,String sealId,String docFilekey){ + + JSONObject detailJson = new JSONObject(); + + JSONObject partyA = new JSONObject(); + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("templateId", templateId); + + String xTimevaleSignature = encryptionHmacSHA256(bodyJson.toJSONString()); + log.error("xTimevaleSignature:"+xTimevaleSignature); + String msg = doPostHttp(xTimevaleSignature,bodyJson.toJSONString()); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("errCode")){ + String errCode = msgJson.getString("errCode"); + if("0".equals(errCode)){ + if(msgJson.containsKey("data")){ + JSONObject dataJson = msgJson.getJSONObject("data"); + if(dataJson.containsKey("template")){ + JSONObject templateJson = dataJson.getJSONObject("template"); + if(templateJson.containsKey("templateFlows")){ + JSONArray templateFlows = templateJson.getJSONArray("templateFlows"); + log.error("templateFlows:{}",templateFlows); + for(int i=0;i0){ + signPo.put("signDateInfos",signDateInfos); + } + + signPo.put("sealId",sealId); + signPo.put("signIdentity","ORGANIZE"); + signPo.put("signType",1); + signPos.add(signPo); + } + + partyA.put("signPos",signPos); + log.error("docFilekey:{}",docFilekey); + partyA.put("docFilekey",docFilekey); + } + } + } + } + } + } + } + } + } + + JSONArray signDocPartyA = new JSONArray(); + signDocPartyA.add(partyA); + detailJson.put("partyA",signDocPartyA); + return detailJson; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignUtil.java new file mode 100644 index 0000000..b91d376 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/esign/util/Esb2EsignUtil.java @@ -0,0 +1,116 @@ +package com.weaver.seconddev.chapanda.esign.util; + +import com.weaver.seconddev.chapanda.esign.constant.Constants; +import okhttp3.*; +import org.apache.commons.codec.binary.Hex; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class Esb2EsignUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2EsignUtil.class); + + /*** + * + * @param xTimevaleSignature + * @return + */ + public String doGetEsignQuerySeals(String xTimevaleSignature,String querySealsUrl){ + String msg = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+querySealsUrl) + .method("GET", null) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:"+code); + if(code == 200){ + msg = response.body().string(); + log.error("msg:"+msg); + } + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return msg; + } + + /** + * + * @param bodyData + * @param xTimevaleSignature + * @return + */ + public String doPostEsignSealsTemplate(String bodyData,String xTimevaleSignature){ + String msg = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.eSignHost+Constants.queryTemplateUrl) + .method("POST", body) + .addHeader("x-timevale-project-id", Constants.xTimevaleProjectId) + .addHeader("x-timevale-signature", xTimevaleSignature) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:"+code); + if(code == 200){ + msg = response.body().string(); + } + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e.getMessage()); + throw new RuntimeException(e); + } + return msg; + } + + + /*** + * + * @param bodyData + * @return + */ + public String encryptionHmacSHA256(String bodyData){ + String encryptionData = ""; +// String secretKey = "7f067a08f5c675137e6e72aa298e2c07"; + // 要签名的数据 +// JSONObject dataObject = new JSONObject(); +// dataObject.put("templateId","JMHT-ZXSJ"); +// String data = "{\"templateId\":\"JMHT-ZXSJ\"}" ; + try { + // 初始化Mac对象 + Mac sha256Hmac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(Constants.secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256Hmac.init(secretKeySpec); + byte[] result = sha256Hmac.doFinal(bodyData.getBytes(StandardCharsets.UTF_8)); + encryptionData = Hex.encodeHexString(result); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + }catch (InvalidKeyException e) { + throw new RuntimeException(e); + } + return encryptionData; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/cache/FeishuTokenCacheKey.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/cache/FeishuTokenCacheKey.java new file mode 100644 index 0000000..bad6388 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/cache/FeishuTokenCacheKey.java @@ -0,0 +1,29 @@ +package com.weaver.seconddev.chapanda.feishu.cache; + +import com.weaver.common.cache.base.BaseCache; +import com.weaver.common.cache.base.ModuleCacheInterface; +import com.weaver.common.cache.base.exception.IllegalCacheAccessException; +import com.weaver.seconddev.chapanda.feishu.module.FeishuTokenModuleKey; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 集成缓存类 + * + * @author wangj + * @version 1.00版本 + * @Date 2025-6-3 + */ +@Component +public class FeishuTokenCacheKey implements ModuleCacheInterface { + + @Autowired + private BaseCache baseCache; + + public final static String FEISHU_TOKEN = "FEISHU_TOKEN"; + + @Override + public void register() throws IllegalCacheAccessException, IllegalAccessException { + baseCache.register(FeishuTokenModuleKey.FENSHUTOKEN_DATACENTER, this.getClass()); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/constant/Constants.java new file mode 100644 index 0000000..1b5db18 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/constant/Constants.java @@ -0,0 +1,73 @@ +package com.weaver.seconddev.chapanda.feishu.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; + + public static String feishuHost = "https://open.feishu.cn"; + + public static String tokenUrl = "/open-apis/auth/v3/tenant_access_token/internal"; + public static String messageUrl = "/open-apis/im/v1/messages?receive_id_type=open_id"; + public static String app_id = "cli_a8d0ee6b667dd00e"; + public static String app_secret = "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"; + + public static String imageUrl = "/open-apis/im/v1/images"; + + public static String profileUrl = "/open-apis/contact/v3/users/"; + + public static String approvalCode = "5DB33242-4B8B-4D72-A64E-DF030E9D94EA"; + + public static String browser = "BROWSER"; + + public static boolean excludeStatistics = false ; + + + public static String primaryUrl = "/open-apis/calendar/v4/calendars/primary?user_id_type=open_id"; + + + public static String calendarEventsUrl ="/open-apis/calendar/v4/calendars/%s/events?idempotency_key=%s&user_id_type=open_id"; + + public static String calendarAttendeesUrl = "/open-apis/calendar/v4/calendars/%s/events/%s/attendees?user_id_type=open_id"; + + + public static int color = -1 ; + + public static boolean need_notification = true; + + public static String visibility = "default"; + + public static String attendee_ability = "none"; + + public static String free_busy_status = "busy"; + + public static int minutes = 60; + + public static String openIdUrl = "/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id"; + + + public static String workflowApproveUrl = "/open-apis/approval/v4/external_instances" ; + + public static String HrmHost = "https://hrtest.chabaidao.com"; + + public static String updateMode = "UPDATE"; + + public static String createTimeoffUrl = "/open-apis/calendar/v4/timeoff_events?user_id_type=open_id"; + + public static String timeZone = "Asia/Shanghai"; + + public static String deleteTimeoffUrl = "/open-apis/calendar/v4/timeoff_events/"; + + public static String cancelCalendarUrl = "/open-apis/calendar/v4/calendars/%s/events/%s"; + + public static boolean cancelNeedNotification = false; + + public static String updateCalendarUrl ="/open-apis/calendar/v4/calendars/%s/events/%s?user_id_type=open_id"; + + public static String sendBotUrl = "/open-apis/approval/v1/message/send"; + + public static String botTemplateId = "1008"; + + public static String updateBotUrl = "/open-apis/approval/v1/message/update"; + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/controller/QueryFeishuCardDataController.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/controller/QueryFeishuCardDataController.java new file mode 100644 index 0000000..4f8d263 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/controller/QueryFeishuCardDataController.java @@ -0,0 +1,155 @@ +package com.weaver.seconddev.chapanda.feishu.controller; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.authority.annotation.WeaPermission; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.Iterator; +import java.util.Map; + +@RestController +@RequestMapping("/papi/secondev/cbd/feishucard") +public class QueryFeishuCardDataController { + + private final Logger log = LoggerFactory.getLogger(QueryFeishuCardDataController.class); + @WeaPermission(publicPermission = true) + @PostMapping("/queryCardData") + public JSONObject queryCardData(@RequestBody Map params) { + + Iterator> iterator = params.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + log.error("Key: " + entry.getKey() + ", Value: " + entry.getValue()); + } +// String challenge = ""; +// if(params.containsKey("challenge")){ +// challenge = params.get("challenge").toString(); +// } +// String token = ""; +// if(params.containsKey("token")){ +// token = params.get("token").toString(); +// } +// String type = ""; +// if(params.containsKey("type")){ +// type = params.get("type").toString(); +// } + +// dataMap.put("challenge",challenge); +// dataMap.put("token",token); +// dataMap.put("type",type); +// returnJson.put("challenge",challenge); + + // AAqzTJll9BcFE + + boolean isTrue = false; + if(params.containsKey("event")){ + String event = params.get("event").toString(); + log.error("event:{}",event); + if(StringUtils.isNotBlank(event)){ + isTrue = convertData(event); + } + } + + JSONObject returnJson = new JSONObject(); + log.error("isTrue:{}",isTrue); + if(isTrue){ + JSONObject dataJson = new JSONObject(); + dataJson.put("template_id","AAq9MOwxqoNUF"); + JSONObject template_variable = new JSONObject(); + template_variable.put("zzrs","2000"); + template_variable.put("jdlzrs","20"); + template_variable.put("jdrzrs","30"); + template_variable.put("ycqrs","1900"); + template_variable.put("qjrs","10"); + template_variable.put("cdztrs","50"); + template_variable.put("srtx","5"); + template_variable.put("zztx","3"); + template_variable.put("zntx","1"); + dataJson.put("template_variable",template_variable); + + JSONObject cardJson = new JSONObject(); + cardJson.put("type","template"); + cardJson.put("data",dataJson); + + returnJson.put("card",cardJson); + log.error("returnJson:{}",returnJson.toJSONString()); + }else{ + JSONObject dataJson = new JSONObject(); + dataJson.put("template_id","AAqzTJll9BcFE"); + JSONObject template_variable = new JSONObject(); + dataJson.put("template_variable",template_variable); + JSONObject cardJson = new JSONObject(); + cardJson.put("type","template"); + cardJson.put("data",dataJson); + returnJson.put("card",cardJson); + log.error("returnJson:{}",returnJson.toJSONString()); + } + + return returnJson; + } + + + public boolean convertData(String data){ + boolean isTrue = false; + if(data.contains("observer") && data.contains("owner")){ + int oberIndex = data.indexOf("observer"); //100 + int ownerIndex = data.indexOf("owner"); //10 + + log.error("oberIndex:{}",oberIndex); + log.error("ownerIndex:{}",ownerIndex); + + String ownerOpenId = ""; + String oberOpenId = ""; + if(oberIndex <= ownerIndex){ + String ownerData = data.substring(ownerIndex,data.length()); + String oberData = data.substring(oberIndex,ownerIndex); + log.error("ownerData:{}"+ownerData); + log.error("oberData:{}"+oberData); + if(ownerData.contains("open_id")){ + ownerData = ownerData.substring(ownerData.indexOf("open_id")+8); + if(ownerData.contains(",")){ + ownerOpenId = ownerData.substring(0,ownerData.indexOf(",")); + } + } + + if(oberData.contains("open_id")){ + oberData = oberData.substring(oberData.indexOf("open_id")+8); + System.out.println("oberData:"+oberData); + if(oberData.contains(",")){ + oberOpenId = oberData.substring(0,oberData.indexOf(",")); + } + } + }else{ + String oberData = data.substring(oberIndex,data.length()); + String ownerData = data.substring(ownerIndex,oberIndex); + log.error("ownerData:{}"+ownerData); + log.error("oberData:{}"+oberData); + + if(ownerData.contains("open_id")){ + ownerData = ownerData.substring(ownerData.indexOf("open_id")+8); + if(ownerData.contains(",")){ + ownerOpenId = ownerData.substring(0,ownerData.indexOf(",")); + } + } + + if(oberData.contains("open_id")){ + oberData = oberData.substring(oberData.indexOf("open_id")+8); + if(oberData.contains(",")){ + oberOpenId = oberData.substring(0,oberData.indexOf(",")); + } + } + } + + log.error("ownerOpenId:{}"+ownerOpenId); + log.error("oberOpenId:{}"+oberOpenId); + + if(StringUtils.isNotBlank(ownerOpenId) && StringUtils.isNotBlank(oberOpenId) && ownerOpenId.equals(oberOpenId)){ + isTrue = true; + } + } + return isTrue; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmQueryOpenIdDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmQueryOpenIdDao.java new file mode 100644 index 0000000..be87636 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmQueryOpenIdDao.java @@ -0,0 +1,58 @@ +package com.weaver.seconddev.chapanda.feishu.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.cost.constant.Constants; +import com.weaver.seconddev.chapanda.cost.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class HrmQueryOpenIdDao { + + private final static Logger log = LoggerFactory.getLogger(HrmQueryOpenIdDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public String queryHrmOpenId(String employeeId){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + String openId = ""; + try{ + String dataSql =" select u.open_id\n" + + " from eb_hrm_user u\n" + + " inner join eteams.employee e on e.mobile = u.mobile \n" + + " where e.delete_type = 0\n" + + " and u.delete_type = 0\n" + + " and e.id =? and u.tenant_key = ? and e.tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(employeeId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size() > 0){ + openId = String.valueOf(recordList.get(0).get("open_id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return openId; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmUserAvatarDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmUserAvatarDao.java new file mode 100644 index 0000000..2d6197f --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/HrmUserAvatarDao.java @@ -0,0 +1,93 @@ +package com.weaver.seconddev.chapanda.feishu.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.cost.constant.Constants; +import com.weaver.seconddev.chapanda.cost.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class HrmUserAvatarDao { + + private final static Logger log = LoggerFactory.getLogger(HrmUserAvatarDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public List> queryHrmAvatarList(){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select u.open_id,u.user_id,e.id,a.p1,a.p2,a.p3,e.mobile " + + " from eb_hrm_user u\n" + + " left join eteams.employee e on e.mobile = u.mobile \n" + + " inner join eteams.avatar a on a.id = e.avatar \n" + + " where e.delete_type = 0\n" + + " and u.delete_type = 0 and u.tenant_key = ? and e.tenant_key = ? and a.tenant_key = ? \n" + + " and a.p1 is not null " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return recordList; + } + + public List> queryHrmAvatarByDate(int days){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select a.id,e.username,u.open_id ,u.user_id,e.id,a.p1,a.p2 ,a.p3,e.mobile \n" + + " from eb_hrm_user u\n" + + " inner join eteams.employee e on e.MOBILE = u.mobile \n" + + " inner join eteams.avatar a on a.id = e.avatar \n" + + " inner join fileobj f on f.id = a.P1 \n" + + " where e.delete_type = 0\n" + + " and u.delete_type = 0\n" + + " and a.p1 is not null and u.tenant_key = ? and e.tenant_key = ? and a.tenant_key = ? \n" + + " and (\n" + + " left(f.create_time,10) in(DATE_FORMAT(CURDATE(), '%Y-%m-%d'),DATE_FORMAT(CURDATE()-1, '%Y-%m-%d'))\n" + + " or left(f.UPLOAD_TIME ,10) in(DATE_FORMAT(CURDATE(), '%Y-%m-%d'),DATE_FORMAT(CURDATE()-1, '%Y-%m-%d'))\n" + + " )" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return recordList; + } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowBotMessageDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowBotMessageDao.java new file mode 100644 index 0000000..5742dda --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowBotMessageDao.java @@ -0,0 +1,59 @@ +package com.weaver.seconddev.chapanda.feishu.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.cost.constant.Constants; +import com.weaver.seconddev.chapanda.cost.util.DatabaseUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class WorkflowBotMessageDao { + + private final static Logger log = LoggerFactory.getLogger(WorkflowBotMessageDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public String queryUserBotMessageId(String requestid,String nodeid,String operatorid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String message_id = ""; + try{ + String dataSql =" select czzid,message_id \n" + + " from uf_bot_message \n" + + " where lcid= ? and jdid = ? and czzid = ? " + + " and delete_type = 0 and tenant_key = ? " + + " order by create_time desc " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(requestid); + paramList.add(nodeid); + paramList.add(operatorid); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size() > 0){ + message_id = String.valueOf(recordList.get(0).get("message_id")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return message_id; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowDegreeLevelDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowDegreeLevelDao.java new file mode 100644 index 0000000..62e78c0 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowDegreeLevelDao.java @@ -0,0 +1,91 @@ +package com.weaver.seconddev.chapanda.feishu.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.util.DatabaseUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class WorkflowDegreeLevelDao { + + private final static Logger log = LoggerFactory.getLogger(WorkflowDegreeLevelDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public Map queryDegreeLevel(){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + Map dataMap = new HashMap(); + try{ + String dataSql =" select custom_name,code " + + " from wfp_customlevel " + + " where delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + for(int i=0;i recordMap = recordList.get(i); + String code = String.valueOf(recordMap.get("code")); + String custom_name = String.valueOf(recordMap.get("custom_name")); + dataMap.put(code,custom_name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return dataMap; + } + + public Long queryEmployeeByCode(String staffcode){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Long employeeId = 0L; + try{ + if(StringUtils.isNotBlank(staffcode)){ + String dataSql =" select id,username " + + " from eteams.employee " + + " where job_num = ? \n" + + " and delete_type = 0 \n" + + " and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(staffcode); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(!recordList.isEmpty()){ + employeeId = Long.valueOf(String.valueOf(recordList.get(0).get("id"))); + } + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return employeeId; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowTableDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowTableDao.java new file mode 100644 index 0000000..cb03900 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/dao/WorkflowTableDao.java @@ -0,0 +1,58 @@ +package com.weaver.seconddev.chapanda.feishu.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.cost.constant.Constants; +import com.weaver.seconddev.chapanda.cost.util.DatabaseUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class WorkflowTableDao { + + private final static Logger log = LoggerFactory.getLogger(WorkflowTableDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public String queryWorkflowTable(String workflowId){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + String formTable = ""; + try{ + String dataSql =" select table_name \n" + + " from form_table \n" + + " where form_id in(select relatekey from wfp_relateform where workflowid=? and delete_type = 0 and tenant_key = ? ) " + + " and delete_type = 0 and tenant_key = ? " ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(workflowId); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:"+recordList.size()); + if(recordList.size() > 0){ + formTable = String.valueOf(recordList.get(0).get("table_name")); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("e:" + e); + } + return formTable; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotCreateTodoAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotCreateTodoAction.java new file mode 100644 index 0000000..dbca565 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotCreateTodoAction.java @@ -0,0 +1,120 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuBotCreateTodoUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuBotCreateTodoAction") +public class Esb2FeishuBotCreateTodoAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotCreateTodoAction.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Autowired + Esb2FeishuBotCreateTodoUtil esb2FeishuBotCreateTodoUtil; + + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String requestName = String.valueOf(params.get("requestName")); + String mobileurl = String.valueOf(params.get("mobileurl")); + String pcurl = String.valueOf(params.get("pcurl")); + String creatorid = String.valueOf(params.get("creatorid")); + String senderid = String.valueOf(params.get("senderid")); + String operatorid = String.valueOf(params.get("operatorid")); + String requestmark = String.valueOf(params.get("requestmark")); + if("null".equals(requestmark) || requestmark == null){ + requestmark = ""; + } + String msgType = String.valueOf(params.get("msgType")); + String nodeid = String.valueOf(params.get("nodeid")); + + String message_ids = ""; + if("0".equals(msgType)){ +// String senderMobile =""; +// if(StringUtils.isNotBlank(senderid)){ +// Long sender_id = Long.valueOf(senderid); +// SimpleEmployee senderEmployee = hrmCommonUtil.getSimpleEmployee(sender_id); +// senderMobile = senderEmployee.getMobile(); +// } + +// String creatorMobile = ""; +// if(StringUtils.isNotBlank(creatorid)){ +// Long creator_id = Long.valueOf(creatorid); +// SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(creator_id); +// creatorMobile = creatorEmployee.getMobile(); +// } +// +// log.error("creatorMobile:{}",creatorMobile); + String create_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(creatorid); +// if(StringUtils.isNotBlank(creatorMobile)) { +// Map creatorMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); +// create_open_id = String.valueOf(creatorMap.get(creatorMobile)); +// } + + String send_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(senderid); +// if(StringUtils.isNotBlank(senderMobile)){ +// Map senderMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(senderMobile); +// send_open_id = String.valueOf(senderMap.get(creatorMobile)); +// } + + String operator_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(operatorid); +// if(StringUtils.isNotBlank(operatorid)){ +// Long userid = Long.valueOf(operatorid); +// log.error("userid:{}",userid); +// SimpleEmployee userEmployee = hrmCommonUtil.getSimpleEmployee(userid); +// String userMobile = userEmployee.getMobile(); +// if(StringUtils.isNotBlank(userMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(userMobile); +// operator_open_id = String.valueOf(userMap.get(userMobile)); +// } +// } + + log.error("operator_open_id:{}",operator_open_id); + log.error("create_open_id:{}",create_open_id); + if(StringUtils.isNotBlank(create_open_id)){ + if(StringUtils.isNotBlank(send_open_id)){ + + message_ids = esb2FeishuBotCreateTodoUtil.senBotTodoMessage( + requestid,requestName,requestmark, + create_open_id,send_open_id,operator_open_id, + mobileurl,pcurl + ); + + }else{ + log.error("send_open_id:{}","获取待办人员为空"); + } + }else{ + log.error("creatorMobile:{}","创建人飞书openid为空"); + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("message","成功"); + actionMap.put("data",message_ids); + + actionMap.put("messageid",message_ids); + actionMap.put("requestid",requestid); + actionMap.put("requestname",requestName); + actionMap.put("nodeid",nodeid); + actionMap.put("operatorid",operatorid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotDeleteTodoAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotDeleteTodoAction.java new file mode 100644 index 0000000..250c23c --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotDeleteTodoAction.java @@ -0,0 +1,62 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowBotMessageDao; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuBotDeleteTodoUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuBotDteleteTodoAction") +public class Esb2FeishuBotDeleteTodoAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotDeleteTodoAction.class); + + @Autowired + Esb2FeishuBotDeleteTodoUtil esb2FeishuBotDeleteTodoUtil; + + @Autowired + WorkflowBotMessageDao workflowBotMessageDao; + @Override + public WeaResult> execute(Map params) { + String requestid = String.valueOf(params.get("requestid")); + String requestName = String.valueOf(params.get("requestName")); + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + String nodeid = String.valueOf(params.get("nodeid")); + String operatorid = String.valueOf(params.get("operatorid")); + String msgType = String.valueOf(params.get("msgType")); + + + log.error("msgType:{}",msgType); + log.error("operatorid:{}",operatorid); + + String update_message_id = ""; + String message_id = ""; + if("2".equals(msgType)){ + String status = "DELETED"; + if(StringUtils.isNotBlank(operatorid)){ + message_id = workflowBotMessageDao.queryUserBotMessageId(requestid,nodeid,operatorid); + } + log.error("message_id:{}",message_id); + if(StringUtils.isNotBlank(message_id)){ + update_message_id = esb2FeishuBotDeleteTodoUtil.deleteBotTodoMessage(status,message_id); + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("message","成功"); + actionMap.put("data",update_message_id); + actionMap.put("messageid",message_id); + actionMap.put("updatemessageid",update_message_id); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotUpdateTodoAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotUpdateTodoAction.java new file mode 100644 index 0000000..03aeb2e --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuBotUpdateTodoAction.java @@ -0,0 +1,63 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowBotMessageDao; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuBotUpdateTodoUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuBotUpdateTodoAction") +public class Esb2FeishuBotUpdateTodoAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotUpdateTodoAction.class); + + @Autowired + Esb2FeishuBotUpdateTodoUtil esb2FeishuBotUpdateTodoUtil; + + @Autowired + WorkflowBotMessageDao workflowBotMessageDao; + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String requestName = String.valueOf(params.get("requestName")); + + String nodeid = String.valueOf(params.get("nodeid")); + String operatorid = String.valueOf(params.get("operatorid")); + String msgType = String.valueOf(params.get("msgType")); + + log.error("requestName:{}",requestName); + + log.error("msgType:{}",msgType); + log.error("operatorid:{}",operatorid); + + String update_message_id = ""; + String message_id = ""; + if("1".equals(msgType) || "5".equals(msgType)){ + String status = "PROCESSED"; + if(StringUtils.isNotBlank(operatorid)){ + message_id = workflowBotMessageDao.queryUserBotMessageId(requestid,nodeid,operatorid); + } + log.error("message_id:{}",message_id); + if(StringUtils.isNotBlank(message_id)){ + update_message_id = esb2FeishuBotUpdateTodoUtil.updateBotTodoMessage(status,message_id); + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("message","成功"); + actionMap.put("data",update_message_id); + actionMap.put("messageid",message_id); + actionMap.put("updatemessageid",update_message_id); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsCancelAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsCancelAction.java new file mode 100644 index 0000000..5b71b88 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsCancelAction.java @@ -0,0 +1,62 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuCalendarsCancelAction") +public class Esb2FeishuCalendarsCancelAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCalendarsCancelAction.class); + + @Autowired + Esb2FeishuCancelCalendarUtil esb2FeishuCancelCalendarUtil; + + @Override + public WeaResult> execute(Map params) { + String calendar_id = (String) params.get("calendar_id"); + String event_id = (String) params.get("event_id"); + String dataid = (String) params.get("dataid"); + String datacode = (String) params.get("datacode"); + + log.error("calendar_id:{}",calendar_id); + log.error("event_id:{}",event_id); + + if("0".equals(datacode)){ + return WeaResult.fail(500,"飞书日程已删除"); + } + + if(StringUtils.isBlank(calendar_id)){ + return WeaResult.fail(500,"获取飞书的日历信息失败"); + } + + if(StringUtils.isBlank(event_id)){ + return WeaResult.fail(500,"获取飞书的日程信息失败"); + } + + String code = ""; + if(StringUtils.isNotBlank(calendar_id) && StringUtils.isNotBlank(event_id)){ + code = esb2FeishuCancelCalendarUtil.cancelCalendarEvents(calendar_id,event_id); + } + log.error("code:{}",code); + if(!"0".equals(code)){ + return WeaResult.fail(500,"飞书日程取消失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("calendarId",calendar_id); + actionMap.put("eventId",event_id); + actionMap.put("datacode",code); + actionMap.put("dataid",dataid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsEventsAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsEventsAction.java new file mode 100644 index 0000000..237ca31 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsEventsAction.java @@ -0,0 +1,133 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.ebuilder.form.client.entity.obj.Obj; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuCalendarAttendeesUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuCalendarEventsUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuCalendarPrimaryUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuCalendarsEventsAction") +public class Esb2FeishuCalendarsEventsAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCalendarsEventsAction.class); + + @Autowired + Esb2FeishuCalendarPrimaryUtil esb2FeishuCalendarPrimaryUtil; + + @Autowired + Esb2FeishuCalendarEventsUtil esb2FeishuCalendarEventsUtil; + + @Autowired + Esb2FeishuCalendarAttendeesUtil esb2FeishuCalendarAttendeesUtil; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Override + public WeaResult> execute(Map params) { + String summary = (String) params.get("summary"); + String description = (String) params.get("description"); + String start_date = (String) params.get("start_date"); + String end_date = (String) params.get("end_date"); + String location_name = (String) params.get("location_name"); + String location_address = (String) params.get("location_address"); + String employee_id = (String) params.get("employee_id"); + String type = (String) params.get("type"); + String dataid = (String) params.get("dataid"); + + String attendee_id_ = (String) params.get("attendee_id"); + if(StringUtils.isNotBlank(attendee_id_)){ + return WeaResult.fail(500,"日程已创建,无法新建日程"); + } + + if("BusinessTrip".equals(type)){ + String start_time = ""; + if(params.containsKey("start_time")){ + start_time = String.valueOf(params.get("start_time")); + } + start_date = start_date+" "+start_time; + String end_time = ""; + if(params.containsKey("end_time")){ + end_time = (String) params.get("end_time"); + } + end_date = end_date+" "+end_time; + } + log.error("start_date:{}",start_date); + log.error("end_date:{}",end_date); + +// String mobile = ""; +// if(StringUtils.isNotBlank(employee_id)){ +// Long employeeId = Long.valueOf(employee_id); +// SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); +// mobile = simpleEmployee.getMobile(); +// } + +// if(StringUtils.isBlank(mobile)){ +// return WeaResult.fail(500,"获取手机号为空"); +// } + + String openId = esb2FeishuOpenIdUtil.queryFeishuOpenId(employee_id); +// if(StringUtils.isNotBlank(mobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(mobile); +// if(userMap.containsKey(mobile)){ +// openId = userMap.get(mobile).toString(); +// } +// } + + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"获取飞书的人员信息失败"); + } + + log.error("Esb2FeishuCalendarsEventsAction start"); + log.error("openId:{}",openId); + String attendee_id = ""; + String calendarId = esb2FeishuCalendarPrimaryUtil.queryUserCalendarPrimary(); + + if(StringUtils.isBlank(calendarId)){ + return WeaResult.fail(500,"获取飞书主日历失败"); + } + + log.error("calendarId:{}",calendarId); + String event_id = ""; + if(StringUtils.isNotBlank(calendarId)){ + event_id = esb2FeishuCalendarEventsUtil.createCalendarEvents(calendarId,summary,description,start_date,end_date,location_name,location_address); + } + log.error("event_id:{}",event_id); + if(StringUtils.isBlank(event_id)){ + return WeaResult.fail(500,"创建飞书日历失败"); + } + + if(StringUtils.isNotBlank(event_id)){ + attendee_id = esb2FeishuCalendarAttendeesUtil.sendUserCalendarEvents(openId,calendarId,event_id); + } + + if(StringUtils.isBlank(attendee_id)){ + return WeaResult.fail(500,"飞书日历增加人员失败"); + } + + log.error("attendee_id:{}",attendee_id); + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("attendeeId",attendee_id); + actionMap.put("calendarId",calendarId); + actionMap.put("event_id",event_id); + actionMap.put("openId",openId); + actionMap.put("dataid",dataid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsPrimaryAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsPrimaryAction.java new file mode 100644 index 0000000..a2dcb74 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsPrimaryAction.java @@ -0,0 +1,35 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuCalendarPrimaryUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuProfilePictureUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuCalendarsPrimaryAction") +public class Esb2FeishuCalendarsPrimaryAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCalendarsPrimaryAction.class); + + @Autowired + Esb2FeishuCalendarPrimaryUtil esb2FeishuCalendarPrimaryUtil; + + @Override + public WeaResult> execute(Map params) { + + log.error("Esb2FeishuCalendarsPrimaryAction start"); + String calendarId = esb2FeishuCalendarPrimaryUtil.queryUserCalendarPrimary(); + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2FeishuCalendarsPrimaryAction"); + actionMap.put("calendarId",calendarId); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsUpdateAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsUpdateAction.java new file mode 100644 index 0000000..b76fe4d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCalendarsUpdateAction.java @@ -0,0 +1,90 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuCalendarsUpdateAction") +public class Esb2FeishuCalendarsUpdateAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCalendarsUpdateAction.class); + + @Autowired + Esb2FeishuCalendarUpdateUtil esb2FeishuCalendarUpdateUtil; + + @Override + public WeaResult> execute(Map params) { + String summary = (String) params.get("summary"); + String description = (String) params.get("description"); + String start_date = (String) params.get("start_date"); + String end_date = (String) params.get("end_date"); + String location_name = (String) params.get("location_name"); + String location_address = (String) params.get("location_address"); + String type = (String) params.get("type"); + + String dataid = (String) params.get("dataid"); + + String openId = (String) params.get("openId"); + String calendarId = (String) params.get("calendarId"); + String eventId = (String) params.get("eventId"); + log.error("openId:{}",openId); + log.error("calendarId:{}",calendarId); + log.error("eventId:{}",eventId); + log.error("dataid:{}",dataid); + + if("BusinessTrip".equals(type)){ + String start_time = ""; + if(params.containsKey("start_time")){ + start_time = String.valueOf(params.get("start_time")); + } + start_date = start_date+" "+start_time; + String end_time = ""; + if(params.containsKey("end_time")){ + end_time = (String) params.get("end_time"); + } + end_date = end_date+" "+end_time; + } + log.error("start_date:{}",start_date); + log.error("end_date:{}",end_date); + + + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"获取飞书的人员信息失败"); + } + + if(StringUtils.isBlank(calendarId)){ + return WeaResult.fail(500,"获取飞书主日历失败"); + } + + if(StringUtils.isBlank(eventId)){ + return WeaResult.fail(500,"获取飞书日历失败"); + } + + String update_event_id = ""; + if(StringUtils.isNotBlank(calendarId) && StringUtils.isNotBlank(eventId)){ + update_event_id = esb2FeishuCalendarUpdateUtil.updateCalendarEvents(calendarId,eventId,summary,description,start_date,end_date,location_name,location_address); + } + + if(StringUtils.isBlank(update_event_id)){ + return WeaResult.fail(500,"更新飞书日历失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("calendarId",calendarId); + actionMap.put("eventId",eventId); + actionMap.put("openId",openId); + actionMap.put("dataid",dataid); + actionMap.put("update_event_id",update_event_id); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCreateCalendarsTimeoffAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCreateCalendarsTimeoffAction.java new file mode 100644 index 0000000..622ab2f --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuCreateCalendarsTimeoffAction.java @@ -0,0 +1,89 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.*; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuCreateCalendarsTimeoffAction") +public class Esb2FeishuCreateCalendarsTimeoffAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCreateCalendarsTimeoffAction.class); + + @Autowired + Esb2FeishuCreateCalendarTimeoffUtil esb2FeishuCreateCalendarTimeoffUtil; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Override + public WeaResult> execute(Map params) { + String title = (String) params.get("title"); + String description = (String) params.get("description"); + String start_date = (String) params.get("start_date"); + String end_date = (String) params.get("end_date"); + String employee_id = (String) params.get("employee_id"); + String type = (String) params.get("type"); + String timeoffEventId = (String) params.get("timeoffEventId"); + String dataid = (String) params.get("dataid"); + + if(StringUtils.isNotBlank(timeoffEventId)){ + return WeaResult.fail(500,"请假日程已创建,无法新建请假日程"); + } + + log.error("start_date:{}",start_date); + log.error("end_date:{}",end_date); + +// String mobile = ""; +// if(StringUtils.isNotBlank(employee_id)){ +// Long employeeId = Long.valueOf(employee_id); +// SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); +// mobile = simpleEmployee.getMobile(); +// } +// +// if(StringUtils.isBlank(mobile)){ +// return WeaResult.fail(500,"获取手机号为空"); +// } + + String openId = esb2FeishuOpenIdUtil.queryFeishuOpenId(employee_id); +// if(StringUtils.isNotBlank(mobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(mobile); +// if(userMap.containsKey(mobile)){ +// openId = userMap.get(mobile).toString(); +// } +// } + + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"获取飞书的人员信息失败"); + } + + String timeoff_event_id = ""; + if(StringUtils.isNotBlank(openId)){ + timeoff_event_id = esb2FeishuCreateCalendarTimeoffUtil.createCalendarTimeOff(openId,title,description,start_date,end_date,type); + } + log.error("timeoff_event_id:{}",timeoff_event_id); + + if(StringUtils.isBlank(timeoff_event_id)){ + return WeaResult.fail(500,"请假日历创建失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("timeoffEventId",timeoff_event_id); + actionMap.put("openId",openId); + actionMap.put("dataid",dataid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuDeleteCalendarsTimeoffAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuDeleteCalendarsTimeoffAction.java new file mode 100644 index 0000000..a924fd2 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuDeleteCalendarsTimeoffAction.java @@ -0,0 +1,56 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuDeleteCalendarTimeoffUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuDeleteCalendarsTimeoffAction") +public class Esb2FeishuDeleteCalendarsTimeoffAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuDeleteCalendarsTimeoffAction.class); + + @Autowired + Esb2FeishuDeleteCalendarTimeoffUtil esb2FeishuDeleteCalendarTimeoffUtil; + + @Override + public WeaResult> execute(Map params) { + String timeoff_event_id = (String) params.get("timeoff_event_id"); + String datacode = (String) params.get("datacode"); + String dataid = (String) params.get("dataid"); + + if("0".equals(datacode)){ + return WeaResult.fail(500,"请假日程已删除"); + } + + log.error("timeoff_event_id:{}",timeoff_event_id); + + if(StringUtils.isBlank(timeoff_event_id)){ + return WeaResult.fail(500,"获取请假日程为空"); + } + + String code = ""; + if(StringUtils.isNotBlank(timeoff_event_id)){ + code = esb2FeishuDeleteCalendarTimeoffUtil.deleteCalendarTimeOff(timeoff_event_id); + } + log.error("code:{}",code); + + if(!"0".equals(code)){ + return WeaResult.fail(500,"请假日历删除失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("timeoffEventId",timeoff_event_id); + actionMap.put("datacode",code); + actionMap.put("dataid",dataid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarAction.java new file mode 100644 index 0000000..0420dc7 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarAction.java @@ -0,0 +1,57 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuHrmAvatarUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuHrmAvatarAction") +public class Esb2FeishuHrmAvatarAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuHrmAvatarAction.class); + + @Autowired + Esb2FeishuHrmAvatarUtil esb2FeishuHrmAvatarUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Override + public WeaResult> execute(Map params) { + + String employeeid = String.valueOf(params.get("employeeid")); + Long avatar = Long.valueOf(String.valueOf(params.get("avatar"))); + if(StringUtils.isBlank(employeeid)){ + return WeaResult.fail(500,"获取人员信息失败"); + } + if(StringUtils.isBlank(String.valueOf(avatar))){ + return WeaResult.fail(500,"获取人员头像信息失败"); + } + String openId = esb2FeishuOpenIdUtil.queryFeishuOpenId(employeeid); + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"获取人员飞书信息失败"); + } + + Map avatarMap = esb2FeishuHrmAvatarUtil.syncHrmAvatarByEmployee(openId,avatar); + String avatarOrigin = String.valueOf(avatarMap.get("avatarOrigin")); + String avatarKey = String.valueOf(avatarMap.get("avatarKey")); + if(StringUtils.isBlank(avatarOrigin)){ + return WeaResult.fail(500,"更新飞书头像异常"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("avatarOrigin",avatarOrigin); + actionMap.put("avatarKey",avatarKey); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarDateCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarDateCron.java new file mode 100644 index 0000000..c03c201 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarDateCron.java @@ -0,0 +1,40 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmUserAvatarDao; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuProfilePictureUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2FeishuHrmAvatarDateCron") +public class Esb2FeishuHrmAvatarDateCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuHrmAvatarDateCron.class); + + @Autowired + Esb2FeishuProfilePictureUtil esb2FeishuProfilePictureUtil; + + @Autowired + HrmUserAvatarDao hrmUserAvatarDao; + + @Override + public WeaResult> execute(Map params) { + int days = 2; + List> avatarList = hrmUserAvatarDao.queryHrmAvatarByDate(days); + Map dataMap = esb2FeishuProfilePictureUtil.syncHrmAvatarByAvatarList(avatarList); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",dataMap); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarFullCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarFullCron.java new file mode 100644 index 0000000..92ccc40 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuHrmAvatarFullCron.java @@ -0,0 +1,38 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmUserAvatarDao; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuProfilePictureUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2FeishuHrmAvatarFullCron") +public class Esb2FeishuHrmAvatarFullCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuHrmAvatarFullCron.class); + + @Autowired + Esb2FeishuProfilePictureUtil esb2FeishuProfilePictureUtil; + + @Autowired + HrmUserAvatarDao hrmUserAvatarDao; + @Override + public WeaResult> execute(Map params) { + + List> avatarList = hrmUserAvatarDao.queryHrmAvatarList(); + Map dataMap = esb2FeishuProfilePictureUtil.syncHrmAvatarByAvatarList(avatarList); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",dataMap); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuProfilePictureCardAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuProfilePictureCardAction.java new file mode 100644 index 0000000..5eb065d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuProfilePictureCardAction.java @@ -0,0 +1,34 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuProfilePictureUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuProfilePictureCardAction") +public class Esb2FeishuProfilePictureCardAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuProfilePictureCardAction.class); + + @Autowired + Esb2FeishuProfilePictureUtil esb2FeishuProfilePictureUtil; + + + @Override + public WeaResult> execute(Map params) { + + Map dataMap = esb2FeishuProfilePictureUtil.syncHrmAvatarByFull(); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",dataMap); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDeleteAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDeleteAction.java new file mode 100644 index 0000000..5dcdfa8 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDeleteAction.java @@ -0,0 +1,167 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmQueryOpenIdDao; +import com.weaver.seconddev.chapanda.feishu.util.CommonUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendDeleteUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2FeishuSendDeleteAction") +public class Esb2FeishuSendDeleteAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendDeleteAction.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Autowired + Esb2FeishuSendDeleteUtil esb2FeishuSendDeleteUtil; + + @Autowired + HrmQueryOpenIdDao hrmQueryOpenIdDao; + + @Autowired + CommonUtil commonUtil; + + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String createTime = String.valueOf(params.get("createTime")); + if(StringUtils.isNotBlank(createTime)){ + if(createTime.contains("T")){ + createTime = createTime.replace("T"," "); + } + } + + String requestName = String.valueOf(params.get("requestName")); + String archivingTime = String.valueOf(params.get("archivingTime")); + if("null".equals(archivingTime) || archivingTime == null){ + archivingTime = ""; + } + String nodeId = String.valueOf(params.get("nodeId")); + String nodeName = String.valueOf(params.get("nodeName")); + String degree = String.valueOf(params.get("degree")); + + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + log.error("nodeName:{}",nodeName); + + String mobileurl = String.valueOf(params.get("mobileurl")); + String pcurl = String.valueOf(params.get("pcurl")); + String creatorid = String.valueOf(params.get("creatorid")); + + String approvestatus = String.valueOf(params.get("approvestatus")); + String operatorid = String.valueOf(params.get("operatorid")); + String requestmark = String.valueOf(params.get("requestmark")); + if("null".equals(requestmark) || requestmark == null){ + requestmark = ""; + } + + String msgType = String.valueOf(params.get("msgType")); + String recepttime = String.valueOf(params.get("recepttime")); + if(StringUtils.isNotBlank(recepttime)){ + if(recepttime.contains("T")){ + recepttime = recepttime.replace("T"," "); + } + } + + log.error("msgType:{}",msgType); + + String cid = String.valueOf(params.get("cid")); + log.error("bot:requestid:{},nodeid:{},operatorid:{},cid{},msgType:{},todo",requestid,nodeId,operatorid,cid,msgType); + + String code = ""; + + if("2".equals(msgType)){ + + String creatorname = ""; + String create_open_id = ""; + if(StringUtils.isNotBlank(creatorid)){ + Long creator_id = commonUtil.convertStringToLong(creatorid); + if(creator_id > 0L){ + SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(creator_id); + String creatorMobile = creatorEmployee.getMobile(); + log.error("creatorMobile:{}",creatorMobile); + + creatorname = creatorEmployee.getUsername(); + create_open_id = hrmQueryOpenIdDao.queryHrmOpenId(creatorid); + + if(StringUtils.isBlank(create_open_id)){ + if(StringUtils.isNotBlank(creatorMobile)) { + Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); + create_open_id = String.valueOf(userMap.get(creatorMobile)); + } + } + } + } + + log.error("creatorname:{}",creatorname); + log.error("create_open_id:{}",create_open_id); + + String operator_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(operatorid); +// if(StringUtils.isNotBlank(operatorid)){ +// Long userid = Long.valueOf(operatorid); +// SimpleEmployee userEmployee = hrmCommonUtil.getSimpleEmployee(userid); +// +// String userMobile = userEmployee.getMobile(); +// log.error("userMobile:{}",userMobile); +// log.error("操作人:{}",userEmployee.getUsername()); +// if(StringUtils.isNotBlank(userMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(userMobile); +// operator_open_id = String.valueOf(userMap.get(userMobile)); +// } +// } + + log.error("operator_open_id:{}",operator_open_id); + if(StringUtils.isNotBlank(create_open_id)){ + if(StringUtils.isNotBlank(operator_open_id)){ + String status = "DELETED"; + code = esb2FeishuSendDeleteUtil.senTodoMessage( + requestid,requestName,requestmark, + creatorname,createTime, + nodeId,nodeName, + archivingTime, + degree,mobileurl,pcurl,create_open_id,operator_open_id, + recepttime,status,cid + ); + if(!"0".equals(code)){ + log.error("todoOpenIdList:{}","创建飞书待办异常"); + } + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + }else{ + log.error("creatorMobile:{}","创建人飞书openid为空"); + } + + } + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",requestid+"_"+operatorid); + actionMap.put("status",code); + actionMap.put("requestid",requestid); + actionMap.put("nodeid",nodeId); + actionMap.put("operatorid",operatorid); + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDoneAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDoneAction.java new file mode 100644 index 0000000..063163e --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendDoneAction.java @@ -0,0 +1,164 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmQueryOpenIdDao; +import com.weaver.seconddev.chapanda.feishu.util.CommonUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendDoneUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2FeishuSendDoneAction") +public class Esb2FeishuSendDoneAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendDoneAction.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Autowired + Esb2FeishuSendDoneUtil esb2FeishuSendDoneUtil; + + @Autowired + CommonUtil commonUtil; + + @Autowired + HrmQueryOpenIdDao hrmQueryOpenIdDao; + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String createTime = String.valueOf(params.get("createTime")); + if(StringUtils.isNotBlank(createTime)){ + if(createTime.contains("T")){ + createTime = createTime.replace("T"," "); + } + } + + String requestName = String.valueOf(params.get("requestName")); + String archivingTime = String.valueOf(params.get("archivingTime")); + if("null".equals(archivingTime) || archivingTime == null){ + archivingTime = ""; + } + String nodeId = String.valueOf(params.get("nodeId")); + String nodeName = String.valueOf(params.get("nodeName")); + String degree = String.valueOf(params.get("degree")); + + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + log.error("nodeName:{}",nodeName); + + String mobileurl = String.valueOf(params.get("mobileurl")); + String pcurl = String.valueOf(params.get("pcurl")); + String creatorid = String.valueOf(params.get("creatorid")); + String approvestatus = String.valueOf(params.get("approvestatus")); + String operatorid = String.valueOf(params.get("operatorid")); + String requestmark = String.valueOf(params.get("requestmark")); + if("null".equals(requestmark) || requestmark == null){ + requestmark = ""; + } + + String sendtime = String.valueOf(params.get("sendtime")); + String msgType = String.valueOf(params.get("msgType")); + String recepttime = String.valueOf(params.get("recepttime")); + if(StringUtils.isNotBlank(recepttime)){ + if(recepttime.contains("T")){ + recepttime = recepttime.replace("T"," "); + } + } + + log.error("msgType:{}",msgType); + log.error("requestmark:{}",requestmark); + + String cid = String.valueOf(params.get("cid")); + log.error("bot:requestid:{},nodeid:{},operatorid:{},cid{},msgType:{},todo",requestid,nodeId,operatorid,cid,msgType); + + String code = ""; + if("1".equals(msgType)){ + String status = "APPROVED"; + String create_open_id = ""; + String creatorname = ""; + if(StringUtils.isNotBlank(creatorid)){ + Long creator_id = commonUtil.convertStringToLong(creatorid); + if(creator_id > 0L){ + SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(creator_id); + String creatorMobile = creatorEmployee.getMobile(); + + log.error("creatorMobile:{}",creatorMobile); + + creatorname = creatorEmployee.getUsername(); + create_open_id = hrmQueryOpenIdDao.queryHrmOpenId(creatorid); + + if(StringUtils.isBlank(create_open_id)){ + if(StringUtils.isNotBlank(creatorMobile)) { + Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); + create_open_id = String.valueOf(userMap.get(creatorMobile)); + } + } + } + } + + log.error("creatorname:{}",creatorname); + + + String operator_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(operatorid); +// if(StringUtils.isNotBlank(operatorid)){ +// Long userid = Long.valueOf(operatorid); +// SimpleEmployee userEmployee = hrmCommonUtil.getSimpleEmployee(userid); +// String userMobile = userEmployee.getMobile(); +// log.error("操作者:{}",userEmployee.getUsername()); +// log.error("userMobile:{}",userMobile); +// if(StringUtils.isNotBlank(userMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(userMobile); +// operator_open_id = String.valueOf(userMap.get(userMobile)); +// } +// } + log.error("operator_open_id:{}",operator_open_id); + + if(StringUtils.isNotBlank(create_open_id)){ + if(StringUtils.isNotBlank(operator_open_id)){ + code = esb2FeishuSendDoneUtil.senTodoMessage( + requestid,requestName,requestmark, + creatorname,createTime, + nodeId,nodeName, + archivingTime, + degree,mobileurl,pcurl,create_open_id,operator_open_id, + recepttime,status,cid + ); + if(!"0".equals(code)){ + log.error("todoOpenIdList:{}","创建飞书待办异常"); + } + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + }else{ + log.error("creatorMobile:{}","创建人飞书openid为空"); + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",requestid+"_"+operatorid); + actionMap.put("status",code); + actionMap.put("requestid",requestid); + actionMap.put("nodeid",nodeId); + actionMap.put("operatorid",operatorid); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendFinishAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendFinishAction.java new file mode 100644 index 0000000..a7d9e94 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendFinishAction.java @@ -0,0 +1,162 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmQueryOpenIdDao; +import com.weaver.seconddev.chapanda.feishu.util.CommonUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendFinishUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuSendFinishAction") +public class Esb2FeishuSendFinishAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendFinishAction.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Autowired + Esb2FeishuSendFinishUtil esb2FeishuSendFinishUtil; + + @Autowired + CommonUtil commonUtil; + + @Autowired + HrmQueryOpenIdDao hrmQueryOpenIdDao; + + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String createTime = String.valueOf(params.get("createTime")); + if(StringUtils.isNotBlank(createTime)){ + if(createTime.contains("T")){ + createTime = createTime.replace("T"," "); + } + } + + String requestName = String.valueOf(params.get("requestName")); + String archivingTime = String.valueOf(params.get("archivingTime")); + if("null".equals(archivingTime) || archivingTime == null){ + archivingTime = ""; + } + String nodeId = String.valueOf(params.get("nodeId")); + String nodeName = String.valueOf(params.get("nodeName")); + String degree = String.valueOf(params.get("degree")); + + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + log.error("nodeName:{}",nodeName); + + String mobileurl = String.valueOf(params.get("mobileurl")); + String pcurl = String.valueOf(params.get("pcurl")); + String creatorid = String.valueOf(params.get("creatorid")); + + String approvestatus = String.valueOf(params.get("approvestatus")); + String operatorid = String.valueOf(params.get("operatorid")); + String requestmark = String.valueOf(params.get("requestmark")); + if("null".equals(requestmark) || requestmark == null){ + requestmark = ""; + } + + String sendtime = String.valueOf(params.get("sendtime")); + String msgType = String.valueOf(params.get("msgType")); + String recepttime = String.valueOf(params.get("recepttime")); + if(StringUtils.isNotBlank(recepttime)){ + if(recepttime.contains("T")){ + recepttime = recepttime.replace("T"," "); + } + } + + log.error("msgType:{}",msgType); + + String cid = String.valueOf(params.get("cid")); + log.error("bot:requestid:{},nodeid:{},operatorid:{},cid{},msgType:{},fininsh",requestid,nodeId,operatorid,cid,msgType); + + String code = ""; + if("5".equals(msgType)){ + String create_open_id = ""; + String creatorname = ""; + if(StringUtils.isNotBlank(creatorid)){ + Long creator_id = Long.valueOf(creatorid); + SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(creator_id); + String creatorMobile = creatorEmployee.getMobile(); + log.error("creatorMobile:{}",creatorMobile); + creatorname = creatorEmployee.getUsername(); + create_open_id = hrmQueryOpenIdDao.queryHrmOpenId(creatorid); + if(StringUtils.isBlank(create_open_id)){ + if(StringUtils.isNotBlank(creatorMobile)) { + Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); + create_open_id = String.valueOf(userMap.get(creatorMobile)); + } + } + } + + log.error("create_open_id:{}",create_open_id); + log.error("creatorname:{}",creatorname); + +// String create_open_id = ""; +// if(StringUtils.isNotBlank(creatorMobile)) { +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); +// create_open_id = String.valueOf(userMap.get(creatorMobile)); +// } + + String operator_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(operatorid); +// if(StringUtils.isNotBlank(operatorid)){ +// Long userid = Long.valueOf(operatorid); +// SimpleEmployee userEmployee = hrmCommonUtil.getSimpleEmployee(userid); +// String userMobile = userEmployee.getMobile(); +// log.error("userMobile:{}",userMobile); +// log.error("操作人:{}",userEmployee.getUsername()); +// if(StringUtils.isNotBlank(userMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(userMobile); +// operator_open_id = String.valueOf(userMap.get(userMobile)); +// } +// } + log.error("operator_open_id:{}",operator_open_id); + if(StringUtils.isNotBlank(create_open_id)){ + if(StringUtils.isNotBlank(operator_open_id)){ + String status = "APPROVED"; + code = esb2FeishuSendFinishUtil.senTodoMessage( + requestid,requestName,requestmark, + creatorname,createTime, + nodeId,nodeName, + archivingTime, + degree,mobileurl,pcurl,create_open_id,operator_open_id, + recepttime,status,cid + ); + if(!"0".equals(code)){ + log.error("todoOpenIdList:{}","创建飞书待办异常"); + } + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + }else{ + log.error("creatorMobile:{}","创建人飞书openid为空"); + } + } + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",requestid+"_"+operatorid); + actionMap.put("status",code); + actionMap.put("requestid",requestid); + actionMap.put("nodeid",nodeId); + actionMap.put("operatorid",operatorid); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageCardAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageCardAction.java new file mode 100644 index 0000000..34c163d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageCardAction.java @@ -0,0 +1,73 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendMessageUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuSendMessageCardAction") +public class Esb2FeishuSendMessageCardAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendMessageCardAction.class); + + @Autowired + Esb2FeishuSendMessageUtil esb2FeishuSendMessageUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Override + public WeaResult> execute(Map params) { + +// String feishuHost = "https://open.feishu.cn"; +// String tokenUrl = "/open-apis/auth/v3/tenant_access_token/internal"; +// String feishuUrl = "/open-apis/im/v1/messages?receive_id_type=open_id"; +// String app_id = "cli_a8d0ee6b667dd00e"; +// String app_secret = "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"; +// String template_id = "AAqIMF4quXR02" ; +// String template_version_name = "1.0.1"; +// String receiveId = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + + String templateId = (String) params.get("templateId"); + String templateVersionName = (String) params.get("templateVersionName"); + String receiveId = (String) params.get("receiveId"); + log.error("templateId:{}",templateId); + log.error("templateVersionName:{}",templateVersionName); + log.error("receiveId:{}",receiveId); + + if(StringUtils.isBlank(templateId)){ + return WeaResult.fail(500,"templateId is null"); + } + + if(StringUtils.isBlank(templateVersionName)){ + return WeaResult.fail(500,"templateVersionName is null"); + } + + if(StringUtils.isBlank(receiveId)){ + return WeaResult.fail(500,"1. is null"); + } + + String openId = esb2FeishuOpenIdUtil.queryFeishuOpenId(receiveId); + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"openId is null"); + } + + Map dataMap = esb2FeishuSendMessageUtil.senCardMessage(templateId,templateVersionName,openId,params); + String chat_id = (String) dataMap.get("chat_id"); + String message_id = (String) dataMap.get("message_id"); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("chat_id",chat_id); + actionMap.put("message_id",message_id); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageTxtAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageTxtAction.java new file mode 100644 index 0000000..4ec63dd --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendMessageTxtAction.java @@ -0,0 +1,61 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendMessageUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2FeishuSendMessageTxtAction") +public class Esb2FeishuSendMessageTxtAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendMessageTxtAction.class); + + @Autowired + Esb2FeishuSendMessageUtil esb2FeishuSendMessageUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + @Override + public WeaResult> execute(Map params) { + log.error("Esb2FeishuSendMessageTxtAction start"); + +// String feishuHost = "https://open.feishu.cn"; +// String tokenUrl = "/open-apis/auth/v3/tenant_access_token/internal"; +// String feishuUrl = "/open-apis/im/v1/messages?receive_id_type=open_id"; +// String app_id = "cli_a8d0ee6b667dd00e"; +// String app_secret = "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"; + + String content = (String) params.get("content"); + String receiveId = (String) params.get("receiveId"); + log.error("content:{}",content); + log.error("receiveId:{}",receiveId); + + String openId = esb2FeishuOpenIdUtil.queryFeishuOpenId(receiveId); + if(StringUtils.isBlank(openId)){ + return WeaResult.fail(500,"openId is null"); + } + +// String content = "测试发送文本消息"; +// String receiveId = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + + Map dataMap = esb2FeishuSendMessageUtil.senTextMessage(content,openId); + + String chat_id = (String) dataMap.get("chat_id"); + String message_id = (String) dataMap.get("message_id"); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2FeishuSendMessageTxtAction"); + actionMap.put("chat_id",chat_id); + actionMap.put("message_id",message_id); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendTodoAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendTodoAction.java new file mode 100644 index 0000000..142ff3e --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/esb/Esb2FeishuSendTodoAction.java @@ -0,0 +1,174 @@ +package com.weaver.seconddev.chapanda.feishu.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.dao.HrmQueryOpenIdDao; +import com.weaver.seconddev.chapanda.feishu.util.CommonUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendTodoUtil; +import com.weaver.teams.domain.user.SimpleEmployee; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2FeishuSendTodoAction") +public class Esb2FeishuSendTodoAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendTodoAction.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Autowired + Esb2FeishuSendTodoUtil esb2FeishuSendTodoUtil; + + @Autowired + CommonUtil commonUtil; + + @Autowired + HrmQueryOpenIdDao hrmQueryOpenIdDao; + @Override + public WeaResult> execute(Map params) { + + String requestid = String.valueOf(params.get("requestid")); + String createTime = String.valueOf(params.get("createTime")); + if(StringUtils.isNotBlank(createTime)){ + if(createTime.contains("T")){ + createTime = createTime.replace("T"," "); + } + } + + String requestName = String.valueOf(params.get("requestName")); + String archivingTime = String.valueOf(params.get("archivingTime")); + if("null".equals(archivingTime) || archivingTime == null){ + archivingTime = ""; + } + String nodeId = String.valueOf(params.get("nodeId")); + String nodeName = String.valueOf(params.get("nodeName")); + String degree = String.valueOf(params.get("degree")); + + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + log.error("nodeName:{}",nodeName); + String operatorid = String.valueOf(params.get("operatorid")); + + String mobileurl = String.valueOf(params.get("mobileurl")); + String pcurl = String.valueOf(params.get("pcurl")); + String creatorid = String.valueOf(params.get("creatorid")); + + + String approvestatus = String.valueOf(params.get("approvestatus")); + + String requestmark = String.valueOf(params.get("requestmark")); + if("null".equals(requestmark) || requestmark == null){ + requestmark = ""; + } + + String sendtime = String.valueOf(params.get("sendtime")); + String msgType = String.valueOf(params.get("msgType")); + String recepttime = String.valueOf(params.get("recepttime")); + if(StringUtils.isNotBlank(recepttime)){ + if(recepttime.contains("T")){ + recepttime = recepttime.replace("T"," "); + } + } + + log.error("msgType:{}",msgType); + log.error("operatorid:{}",operatorid); + + + + String cid = String.valueOf(params.get("cid")); + log.error("bot:requestid:{},nodeid:{},operatorid:{},cid{},msgType:{},todo",requestid,nodeId,operatorid,cid,msgType); + + String code = ""; + if("0".equals(msgType)){ + + String creatorname = ""; + String create_open_id = ""; + if(StringUtils.isNotBlank(creatorid)){ + Long creator_id = commonUtil.convertStringToLong(creatorid); + if(creator_id > 0L){ + SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(creator_id); + String creatorMobile = creatorEmployee.getMobile(); + log.error("creatorMobile:{}",creatorMobile); + creatorname = creatorEmployee.getUsername(); + create_open_id = hrmQueryOpenIdDao.queryHrmOpenId(creatorid); + log.error("create_open_id:{}",create_open_id); + if(StringUtils.isBlank(create_open_id)){ + if(StringUtils.isNotBlank(creatorMobile)) { + Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); + create_open_id = String.valueOf(userMap.get(creatorMobile)); + } + } + } + } + + +// if(StringUtils.isNotBlank(creatorMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(creatorMobile); +// create_open_id = String.valueOf(userMap.get(creatorMobile)); +// } + log.error("create_open_id2:{}",create_open_id); + log.error("creatorname:{}",creatorname); + + String operator_open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(operatorid); +// if(StringUtils.isNotBlank(operatorid)){ +// Long userid = Long.valueOf(operatorid); +// SimpleEmployee userEmployee = hrmCommonUtil.getSimpleEmployee(userid); +// String userMobile = userEmployee.getMobile(); +// log.error("操作人:{}",userEmployee.getUsername()); +// if(StringUtils.isNotBlank(userMobile)){ +// Map userMap = esb2FeishuOpenIdUtil.queryFeishuOpenIdByMobiles(userMobile); +// operator_open_id = String.valueOf(userMap.get(userMobile)); +// } +// } + + log.error("operator_open_id:{}",operator_open_id); +// log.error("creatorMobile:{}",creatorMobile); + + + if(StringUtils.isNotBlank(create_open_id)){ + if(StringUtils.isNotBlank(operator_open_id)){ + String status = "PENDING"; + code = esb2FeishuSendTodoUtil.senTodoMessage( + requestid,requestName,requestmark, + creatorname,createTime, + nodeId,nodeName, + archivingTime, + degree,mobileurl,pcurl,create_open_id,operator_open_id, + recepttime,status,cid + ); + if(!"0".equals(code)){ + log.error("operator_open_id:{}","创建飞书待办异常"); + } + }else{ + log.error("todoOpenIdList:{}","获取待办人员为空"); + } + }else{ + log.error("creatorMobile:{}","创建人飞书openid为空"); + } + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","成功"); + actionMap.put("data",requestid+"_"+operatorid); + actionMap.put("status",code); + actionMap.put("requestid",requestid); + actionMap.put("nodeid",nodeId); + actionMap.put("operatorid",operatorid); + + return WeaResult.success(actionMap); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/module/FeishuTokenModuleKey.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/module/FeishuTokenModuleKey.java new file mode 100644 index 0000000..1031a13 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/module/FeishuTokenModuleKey.java @@ -0,0 +1,14 @@ +package com.weaver.seconddev.chapanda.feishu.module; + +/** + * 缓存moduleKey + * + * @author wangj + * @version 1.00版本 + * @Date 2025-6-3 + */ + +public class FeishuTokenModuleKey { + //datacenter + public final static String FENSHUTOKEN_DATACENTER = "FENSHUTOKEN_DATACENTER"; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtil.java new file mode 100644 index 0000000..4caa5cc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtil.java @@ -0,0 +1,26 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import org.springframework.stereotype.Component; + +/** + * packageName com.weaver.seconddev.chapanda.feishu.util + * + * @ClassName CommonUtil + * @Author shil + * @Date 2025/8/13 15:08 + * @Description TODO + */ + +@Component +public class CommonUtil { + + public Long convertStringToLong(String str) { + try { + return Long.valueOf(str); + } catch (NumberFormatException e) { + return 0L; + } + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtils.java new file mode 100644 index 0000000..5cfeace --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/DatabaseUtils.java new file mode 100644 index 0000000..55cbef2 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotCreateTodoUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotCreateTodoUtil.java new file mode 100644 index 0000000..8ec7e39 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotCreateTodoUtil.java @@ -0,0 +1,182 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.List; + + +@Component +public class Esb2FeishuBotCreateTodoUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotCreateTodoUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public String senBotTodoMessage(String requestid,String requestName,String requestmark, + String create_open_id, + String title_open_id,String receiver_open_id, + String mobileurl,String pcurl) { + String message_ids = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + String bodyData = appendBodyParam(requestid,requestName,create_open_id, + receiver_open_id,title_open_id, + mobileurl, pcurl); + + log.error("feishu-todo:{}",bodyData); + + String message = doSendPost(bodyData,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("message_id")){ + String message_id = dataJson.getString("message_id"); + message_ids += StringUtils.isBlank(message_ids) ? message_id : ","+message_id; + } + } + } + } + + } + return message_ids; + } + + + public String doSendPost(String bodyData, String token){ + String msg = ""; + +// "{\n \"approval_code\": \"5DB33242-4B8B-4D72-A64E-DF030E9D94EA\",\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试\\\":\\\"泛微\\\"}\",\n \"instance_id\": \"t024j0gfn0\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"title\": \"@i18n@1\",\n \"form\": [\n {\n \"name\": \"@i18n@2\",\n \"value\": \"@i18n@3\"\n }\n ],\n \"user_id\": \"ggf9e451\",\n \"user_name\": \"@i18n@9\",\n \"start_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"display_method\": \"BROWSER\",\n \"update_mode\": \"UPDATE\",\n \"task_list\": [\n {\n \"task_id\": \"1154324404224876544\",\n \"user_id\": \"ggf9e451\",\n \"title\": \"@i18n@4\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试2\\\":\\\"范围2\\\"}\",\n \"create_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"action_context\": \"1154324404224876544\",\n \"action_configs\": [\n {\n \"action_type\": \"APPROVE\",\n \"action_name\": \"@i18n@5\",\n \"is_need_reason\": false,\n \"is_reason_required\": false,\n \"is_need_attachment\": false\n }\n ],\n \"display_method\": \"BROWSER\",\n \"exclude_statistics\": false\n \n }\n ],\n \"i18n_resources\": [\n {\n \"locale\": \"zh-CN\",\n \"texts\": [\n {\n \"key\": \"@i18n@1\",\n \"value\": \"招聘需求申请流程\"\n },\n {\n \"key\": \"@i18n@2\",\n \"value\": \"创建人\"\n },\n {\n \"key\": \"@i18n@3\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@4\",\n \"value\": \"招聘需求申请流程--sysadmin\"\n },{\n \"key\": \"@i18n@5\",\n \"value\": \"批准\"\n },\n {\n \"key\": \"@i18n@9\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@10\",\n \"value\": \"运营支持部\"\n },\n {\n \"key\": \"@i18n@name\",\n \"value\": \"部门经理审批\"\n }\n ],\n \"is_default\": true\n }\n ]\n}" + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); +// https://open.feishu.cn/open-apis/approval/v1/message/send +// RequestBody body = RequestBody.create(mediaType, "{\n \"template_id\":\"1008\",\n \"open_id\":\"ou_8ff7816cfa8cda57643cac2a06fbdc7e\",\n \n \"approval_name\":\"@i18n@1\",\n \"comment\":\"@i18n@2\",\n \"title_user_id\":\"ou_22e2ad302f4570359ea371f553648d3b\",\n \"title_user_id_type\":\"open_id\",\n\n \"content\":{\n \"user_id\":\"ou_22e2ad302f4570359ea371f553648d3b\",\n \t\"user_id_type\": \"open_id\",\n \n \"summaries\":[\n {\n \"summary\":\"@i18n@3\"\n }\n ]\n },\n \"note\":\"@i18n@4\",\n \"actions\":[\n {\n \"action_name\":\"DETAIL\",\n \"url\":\"https://hrtest.chabaidao.com/sp/workflow/flowpage/view/1159530626260205576\",\n \"android_url\":\"https://hrtest.chabaidao.com/sp/workflow/flowpage/view/1159530626260205576\",\n \"ios_url\":\"https://hrtest.chabaidao.com/sp/workflow/flowpage/view/1159530626260205576\",\n \"pc_url\":\"https://hrtest.chabaidao.com/sp/workflow/flowpage/view/1159530626260205576\"\n }\n ], \n \n \n \"i18n_resources\":[\n {\n \"locale\":\"zh-CN\",\n \"is_default\":true,\n \"texts\":{\n \"@i18n@1\":\"编制测试-sysadmin-2025-07-22\",\n \"@i18n@2\":\"测试33\",\n \"@i18n@3\":\"项目经理审批\",\n \"@i18n@4\":\"从人力资源系统审批\",\n \"@i18n@5\":\"取消\"\n }\n }\n ]\n \n \n\n}"); + + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.sendBotUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public String appendBodyParam(String requestid, + String requestName, + String create_open_id, + String receiver_open_id, + String title_open_id, + String mobileurl, + String pcurl + ){ + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("template_id",Constants.botTemplateId); + bodyJson.put("open_id",receiver_open_id); + bodyJson.put("approval_name","@i18n@title"); + bodyJson.put("title_user_id",title_open_id); + bodyJson.put("title_user_id_type","open_id"); + + JSONArray summariesArray = new JSONArray(); + JSONObject summariesObject = new JSONObject(); + summariesObject.put("summary","@i18n@summary"); + summariesArray.add(summariesObject); + + summariesObject = new JSONObject(); + summariesObject.put("summary","@i18n@requestid"); + summariesArray.add(summariesObject); + + JSONObject contentJson = new JSONObject(); + contentJson.put("user_id",create_open_id); + contentJson.put("user_id_type","open_id"); + contentJson.put("summaries",summariesArray); + bodyJson.put("content",contentJson); + JSONArray actionsArray = new JSONArray(); + JSONObject actionsObject = new JSONObject(); + actionsObject.put("action_name","DETAIL"); + actionsObject.put("url",Constants.HrmHost+mobileurl); + actionsObject.put("android_url",Constants.HrmHost+mobileurl); + actionsObject.put("ios_url",Constants.HrmHost+mobileurl); + actionsObject.put("pc_url",Constants.HrmHost+pcurl); + actionsArray.add(actionsObject); + bodyJson.put("actions",actionsArray); + + JSONObject i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("@i18n@title",requestName); + i18nResourcesTextsJson.put("@i18n@summary",requestName); + i18nResourcesTextsJson.put("@i18n@requestid",requestid); + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",i18nResourcesTextsJson); + i18nResourcesJson.put("is_default",true); + + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + bodyJson.put("i18n_resources",i18nResourcesArray); + + return bodyJson.toJSONString(); + } + + public long convertTimeStamp(String date) { + + if(StringUtils.isNotBlank(date)){ + if(date.contains("T")){ + date = date.replace("T"," "); + } + } + System.out.println("date:"+date); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = 0L; + try{ + if(StringUtils.isNotBlank(date)){ + System.out.println("date:"+date.length()); + if(date.length() == 10){ + date = date + " 00:00:00"; + }else if(date.length() == 16){ + date = date + ":00"; + } + if(date.length() == 19){ + try { + timestamp = sdf.parse(date).getTime(); + } catch (ParseException e) { + log.error("e:{}",e); + } + } + log.error("timestamp:{}",timestamp); + System.out.println(timestamp); + System.out.println(String.valueOf(System.currentTimeMillis())); + } + }catch (Exception e){ + log.error("e:{}",e); + } + return timestamp; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotDeleteTodoUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotDeleteTodoUtil.java new file mode 100644 index 0000000..9cb52c8 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotDeleteTodoUtil.java @@ -0,0 +1,87 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class Esb2FeishuBotDeleteTodoUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotDeleteTodoUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public String deleteBotTodoMessage(String status,String message_id) { + String update_message_id = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + JSONObject bodyJson = new JSONObject(); + bodyJson.put("message_id",message_id); + bodyJson.put("status",status); + + JSONObject textsJson = new JSONObject(); + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",textsJson); + i18nResourcesJson.put("is_default","true"); + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + bodyJson.put("i18n_resources",i18nResourcesArray); + + String message = doSendPost(bodyJson.toJSONString(),token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("message_id")){ + update_message_id = dataJson.getString("message_id"); + } + } + } + } + } + return update_message_id; + } + + + public String doSendPost(String bodyData, String token){ + String msg = ""; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + +// RequestBody body = RequestBody.create(mediaType, "{\n \"message_id\":\"7530608640169000988\",\n \"status\":\"PROCESSED\",\n \"i18n_resources\":[\n {\n \"locale\":\"zh-CN\",\n \"is_default\":true,\n \"texts\":{\n \n \n }\n }\n ]\n}"); + + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.updateBotUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotUpdateTodoUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotUpdateTodoUtil.java new file mode 100644 index 0000000..43ce505 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuBotUpdateTodoUtil.java @@ -0,0 +1,88 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +@Component +public class Esb2FeishuBotUpdateTodoUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuBotUpdateTodoUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public String updateBotTodoMessage(String status,String message_id) { + String update_message_id = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + JSONObject bodyJson = new JSONObject(); + bodyJson.put("message_id",message_id); + bodyJson.put("status",status); + + JSONObject textsJson = new JSONObject(); + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",textsJson); + i18nResourcesJson.put("is_default","true"); + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + bodyJson.put("i18n_resources",i18nResourcesArray); + + String message = doSendPost(bodyJson.toJSONString(),token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("message_id")){ + update_message_id = dataJson.getString("message_id"); + } + } + } + } + } + return update_message_id; + } + + + public String doSendPost(String bodyData, String token){ + String msg = ""; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + +// RequestBody body = RequestBody.create(mediaType, "{\n \"message_id\":\"7530608640169000988\",\n \"status\":\"PROCESSED\",\n \"i18n_resources\":[\n {\n \"locale\":\"zh-CN\",\n \"is_default\":true,\n \"texts\":{\n \n \n }\n }\n ]\n}"); + + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.updateBotUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarAttendeesUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarAttendeesUtil.java new file mode 100644 index 0000000..4fd24ac --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuCalendarAttendeesUtil.java @@ -0,0 +1,96 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +@Component +public class Esb2FeishuCalendarAttendeesUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuCalendarAttendeesUtil.class); + + @Autowired + Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public String sendUserCalendarEvents(String user_id,String calendar_id,String event_id) { + String attendee_id = ""; + Map messageMap = new HashMap(); + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + JSONArray attendeesArray = new JSONArray(); + JSONObject attendeesJson = new JSONObject(); + attendeesJson.put("type","user"); + attendeesJson.put("user_id",user_id); + attendeesArray.add(attendeesJson); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("attendees",attendeesArray); + bodyJson.put("need_notification",Constants.need_notification); + log.error("bodyJson:"+bodyJson.toJSONString()); + + String calendarAttendeesUrl = String.format(Constants.calendarAttendeesUrl, calendar_id,event_id); + log.error("calendarAttendeesUrl:"+calendarAttendeesUrl); + + String message = doHttpPost(bodyJson.toJSONString(),token,calendarAttendeesUrl); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + + JSONArray attendeesList = dataJson.getJSONArray("attendees"); + for(int i=0;i syncHrmAvatarByEmployee(String open_id,Long avatar ) { + + Map dataMap = new HashMap(); + String avatarKey = esb2FeishuUploadImageUtil.uploadImage(avatar); + + log.error("avatarKeyr:{}",avatarKey); + + String avatar_origin = ""; + if(StringUtils.isNotBlank(avatarKey)){ + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + String message = doHttpPostByToken(avatarKey,open_id,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("user")){ + JSONObject userJson = dataJson.getJSONObject("user"); + log.error("userJson:{}",userJson.toJSONString()); + if(userJson.containsKey("avatar")){ + JSONObject avatarJson = userJson.getJSONObject("avatar"); + if(avatarJson.containsKey("avatar_origin")){ + avatar_origin = avatarJson.getString("avatar_origin"); + log.error("avatar_origin:{}",avatar_origin); + } + } + } + } + } + } + } + } + dataMap.put("avatarOrigin",avatar_origin); + dataMap.put("avatarKey",avatarKey); + return dataMap; + } + + /** + * + * @param token + * @return + */ + public String doHttpPostByToken(String avatar_key,String open_id,String token){ + String msg = ""; + log.error("avatar_key:{}",avatar_key); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject bodyData = new JSONObject(); + bodyData.put("avatar_key",avatar_key); + RequestBody body = RequestBody.create(mediaType, bodyData.toJSONString()); + log.error("update-avatar:{}",bodyData.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.profileUrl+"/"+open_id+"?user_id_type=open_id") + .method("PATCH", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuOpenIdUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuOpenIdUtil.java new file mode 100644 index 0000000..c67f90d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuOpenIdUtil.java @@ -0,0 +1,171 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.dao.HrmQueryOpenIdDao; +import com.weaver.teams.domain.user.SimpleEmployee; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2FeishuOpenIdUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuOpenIdUtil.class); + + @Autowired + Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + + @Autowired + HrmQueryOpenIdDao hrmQueryOpenIdDao; + + @Autowired + CommonUtil commonUtil; + + @Autowired + private HrmCommonUtil hrmCommonUtil; + public String queryFeishuOpenId(String employeeid) { + log.error("employeeid:{}",employeeid); + String openId = ""; + try { + if(StringUtils.isNotBlank(employeeid)){ + openId = hrmQueryOpenIdDao.queryHrmOpenId(employeeid); + log.error("openId1:{}",openId); + if(StringUtils.isBlank(openId)){ + Long employeeId = commonUtil.convertStringToLong(employeeid); + if(employeeId > 0L){ + SimpleEmployee creatorEmployee = hrmCommonUtil.getSimpleEmployee(employeeId); + String creatorMobile = creatorEmployee.getMobile(); + + if(StringUtils.isNotBlank(creatorMobile)) { + Map creatorMap = queryFeishuOpenIdByMobiles(creatorMobile); + openId = String.valueOf(creatorMap.get(creatorMobile)); + log.error("openId2:{}",openId); + } + } + } + } + }catch (Exception e){ + log.error("e:{}",e); + } + + return openId; + } + + public Map queryFeishuOpenIdByMobiles(String mobile) { + Map userMap = new HashMap(); + String searchType = "mobiles"; + String token = esb2FeishuTokenUtil.getToken(); + if(StringUtils.isNotBlank(token)){ + List mobiles = new ArrayList(); + mobiles.add(mobile); + String message = doHttpPost(mobiles,searchType,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + + JSONArray userList = dataJson.getJSONArray("user_list"); + for(int i=0;i queryFeishuOpenIdByEmails(String email,String calendar_id,String event_id) { + log.error("queryFeishuOpenIdByEmails start"); + String searchType = "emails"; + Map userMap = new HashMap(); + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + List emails = new ArrayList(); + emails.add(email); + String message = doHttpPost(emails,searchType,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + + JSONArray userList = dataJson.getJSONArray("user_list"); + for(int i=0;i dataList, String searchType, String token){ + String msg = ""; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + + String[] dataArray = new String[dataList.size()]; + for(int i=0;i syncHrmAvatarByFull() { + + List> avatarList = hrmUserAvatarDao.queryHrmAvatarList(); + log.error("avatarList:{}",avatarList.size()); + Map messageMap = new HashMap(); + + int successTotal = 0; + for(int i=0;i avatarMap = avatarList.get(i); + String open_id = String.valueOf(avatarMap.get("open_id")); + String mobile = String.valueOf(avatarMap.get("mobile")); + log.error("open_id1:{}",open_id); + log.error("mobile:{}",mobile); + if(StringUtils.isBlank(open_id)){ + if(StringUtils.isNotBlank(mobile)){ + open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(mobile); + } + } + log.error("open_id2:{}",open_id); + + Long p1 = Long.valueOf(String.valueOf(avatarMap.get("p1"))); + Long p2 = Long.valueOf(String.valueOf(avatarMap.get("p2"))); + Long p3 = Long.valueOf(String.valueOf(avatarMap.get("p3"))); + log.error("p1:{}",p1); + log.error("p2:{}",p2); + log.error("open_id:{}",open_id); + + String avatarKey = ""; + if(p1 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p1); + }else if(p2 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p2); + }else if(p3 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p3); + } + + log.error("avatarKeyr:{}",avatarKey); + + if(StringUtils.isNotBlank(avatarKey)){ + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + String message = doHttpPostByToken(avatarKey,open_id,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + successTotal++; + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("user")){ + JSONObject userJson = dataJson.getJSONObject("user"); + log.error("userJson:{}",userJson.toJSONString()); + } + } + } + } + } + } + } + + messageMap.put("total",avatarList.size()); + messageMap.put("success",successTotal); + return messageMap; + } + + /** + * + * @param token + * @return + */ + public String doHttpPostByToken(String avatar_key,String open_id,String token){ + String msg = ""; + log.error("avatar_key:{}",avatar_key); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + JSONObject bodyData = new JSONObject(); + bodyData.put("avatar_key",avatar_key); + RequestBody body = RequestBody.create(mediaType, bodyData.toJSONString()); + log.error("update-avatar:{}",bodyData.toJSONString()); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.profileUrl+"/"+open_id+"?user_id_type=open_id") + .method("PATCH", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + + public Map syncHrmAvatarByDate(int days) { + + List> avatarList = hrmUserAvatarDao.queryHrmAvatarByDate(days); + log.error("avatarList:{}",avatarList.size()); + Map messageMap = new HashMap(); + int successTotal = 0; + for(int i=0;i avatarMap = avatarList.get(i); + String open_id = String.valueOf(avatarMap.get("open_id")); + log.error("open_id1:{}",open_id); + String mobile = String.valueOf(avatarMap.get("mobile")); + log.error("mobile:{}",mobile); + + if(StringUtils.isBlank(open_id)){ + if(StringUtils.isNotBlank(mobile)){ + open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(mobile); + } + } + log.error("open_id2:{}",open_id); + + Long p1 = Long.valueOf(String.valueOf(avatarMap.get("p1"))); + Long p2 = Long.valueOf(String.valueOf(avatarMap.get("p2"))); + Long p3 = Long.valueOf(String.valueOf(avatarMap.get("p3"))); + log.error("p1:{}",p1); + log.error("p2:{}",p2); + log.error("open_id:{}",open_id); + + String avatarKey = ""; + if(p1 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p1); + }else if(p2 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p2); + }else if(p3 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p3); + } + + log.error("avatarKeyr:{}",avatarKey); + + if(StringUtils.isNotBlank(avatarKey)){ + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + String message = doHttpPostByToken(avatarKey,open_id,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + successTotal++; + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("user")){ + JSONObject userJson = dataJson.getJSONObject("user"); + log.error("userJson:{}",userJson.toJSONString()); + } + } + } + } + } + } + } + + messageMap.put("total",avatarList.size()); + messageMap.put("success",successTotal); + return messageMap; + } + + + + public Map syncHrmAvatarByAvatarList(List> avatarList) { + + log.error("avatarList:{}",avatarList.size()); + Map messageMap = new HashMap(); + int successTotal = 0; + for(int i=0;i avatarMap = avatarList.get(i); + String open_id = String.valueOf(avatarMap.get("open_id")); + log.error("open_id1:{}",open_id); + String mobile = String.valueOf(avatarMap.get("mobile")); + log.error("mobile:{}",mobile); + if(StringUtils.isBlank(open_id)){ + if(StringUtils.isNotBlank(mobile)){ + open_id = esb2FeishuOpenIdUtil.queryFeishuOpenId(mobile); + } + } + log.error("open_id2:{}",open_id); + Long p1 = Long.valueOf(String.valueOf(avatarMap.get("p1"))); + Long p2 = Long.valueOf(String.valueOf(avatarMap.get("p2"))); + Long p3 = Long.valueOf(String.valueOf(avatarMap.get("p3"))); + log.error("p1:{}",p1); + log.error("p2:{}",p2); + log.error("open_id:{}",open_id); + + String avatarKey = ""; + if(p1 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p1); + }else if(p2 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p2); + }else if(p3 > 0){ + avatarKey = esb2FeishuUploadImageUtil.uploadImage(p3); + } + + log.error("avatarKeyr:{}",avatarKey); + + if(StringUtils.isNotBlank(avatarKey)){ + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + String message = doHttpPostByToken(avatarKey,open_id,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + successTotal++; + JSONObject dataJson = returnData.getJSONObject("data"); + if(dataJson.containsKey("user")){ + JSONObject userJson = dataJson.getJSONObject("user"); + log.error("userJson:{}",userJson.toJSONString()); + } + } + } + } + } + } + } + + messageMap.put("total",avatarList.size()); + messageMap.put("success",successTotal); + return messageMap; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDeleteUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDeleteUtil.java new file mode 100644 index 0000000..f96185b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDeleteUtil.java @@ -0,0 +1,391 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowDegreeLevelDao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2FeishuSendDeleteUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendDeleteUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + @Autowired + private WorkflowDegreeLevelDao workflowDegreeLevelDao; + + public String senTodoMessage(String requestid,String requestName,String requestmark, + String creatorName, String createTime, + String nodeId, String nodeName, String archivingTime, + String degree,String mobileurl,String pcurl, + String create_open_id,String operator_open_id, + String recepttime,String status,String cid + ) { + log.error("senTodoMessage start"); + String code = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + String department_id = ""; + String department_name = ""; + String createTimeStamp = "0"; + if(StringUtils.isNotBlank(createTime)){ + createTimeStamp = String.valueOf(convertTimeStamp(createTime)); + } + + String archivingTimeStamp = "0"; + if(StringUtils.isNotBlank(archivingTime)){ + archivingTimeStamp = String.valueOf(convertTimeStamp(archivingTime)); + } + String receptTimeStamp = "0"; + if(StringUtils.isNotBlank(recepttime)){ + receptTimeStamp = String.valueOf(convertTimeStamp(recepttime)); + } + + List> formList = new ArrayList>(); + if(StringUtils.isNotBlank(creatorName)){ + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value",creatorName); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(degree)){ + Map degreeMap = workflowDegreeLevelDao.queryDegreeLevel(); + if(degreeMap.containsKey(degree)){ + String degreeName = String.valueOf(degreeMap.get(degree)); + Map formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value",degreeName); + formList.add(formMap); + } + } + + if(StringUtils.isNotBlank(requestmark)){ + Map formMap = new HashMap(); + formMap.put("name","流程编号"); + formMap.put("value",requestmark); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","流程ID"); + formMap.put("value",requestid); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","接收时间"); + formMap.put("value",recepttime); + formList.add(formMap); + } + + + if(StringUtils.isNotBlank(create_open_id)){ + String bodyData = appendBodyParam(requestid,requestName,create_open_id, + department_id,department_name, + createTimeStamp,archivingTimeStamp, + formList,nodeId,nodeName,operator_open_id, + mobileurl, pcurl,receptTimeStamp,status,cid); + + log.error("feishu-delete:{}",bodyData); + + String message = doPostSendMessage(bodyData,token); + log.error("feishu-delete-message:{}",message); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + code = returnData.getString("code"); + } + } + } + } + return code; + } + + + public String doPostSendMessage(String bodyData, + String token){ + String msg = ""; + +// "{\n \"approval_code\": \"5DB33242-4B8B-4D72-A64E-DF030E9D94EA\",\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试\\\":\\\"泛微\\\"}\",\n \"instance_id\": \"t024j0gfn0\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"title\": \"@i18n@1\",\n \"form\": [\n {\n \"name\": \"@i18n@2\",\n \"value\": \"@i18n@3\"\n }\n ],\n \"user_id\": \"ggf9e451\",\n \"user_name\": \"@i18n@9\",\n \"start_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"display_method\": \"BROWSER\",\n \"update_mode\": \"UPDATE\",\n \"task_list\": [\n {\n \"task_id\": \"1154324404224876544\",\n \"user_id\": \"ggf9e451\",\n \"title\": \"@i18n@4\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试2\\\":\\\"范围2\\\"}\",\n \"create_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"action_context\": \"1154324404224876544\",\n \"action_configs\": [\n {\n \"action_type\": \"APPROVE\",\n \"action_name\": \"@i18n@5\",\n \"is_need_reason\": false,\n \"is_reason_required\": false,\n \"is_need_attachment\": false\n }\n ],\n \"display_method\": \"BROWSER\",\n \"exclude_statistics\": false\n \n }\n ],\n \"i18n_resources\": [\n {\n \"locale\": \"zh-CN\",\n \"texts\": [\n {\n \"key\": \"@i18n@1\",\n \"value\": \"招聘需求申请流程\"\n },\n {\n \"key\": \"@i18n@2\",\n \"value\": \"创建人\"\n },\n {\n \"key\": \"@i18n@3\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@4\",\n \"value\": \"招聘需求申请流程--sysadmin\"\n },{\n \"key\": \"@i18n@5\",\n \"value\": \"批准\"\n },\n {\n \"key\": \"@i18n@9\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@10\",\n \"value\": \"运营支持部\"\n },\n {\n \"key\": \"@i18n@name\",\n \"value\": \"部门经理审批\"\n }\n ],\n \"is_default\": true\n }\n ]\n}" + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.workflowApproveUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public String appendBodyParam(String requestid, + String requestName, + String create_open_id, + String department_id, + String department_name, + String createTimeStamp, + String archivingTimeStamp, + List> formList, + String node_id, + String nodeName, + String task_open_id, + String mobileurl, + String pcurl, + String receptTimeStamp, + String status, + String cid + ){ + + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("approval_code",Constants.approvalCode); + bodyJson.put("status",status); +// JSONObject extraJson = new JSONObject(); +// extraJson.put("测试","测试"); +// bodyJson.put("extra",extraJson.toJSONString()); + bodyJson.put("instance_id",requestid); + JSONObject linksJson = new JSONObject(); + linksJson.put("pc_link",Constants.HrmHost+pcurl); + linksJson.put("mobile_link",Constants.HrmHost+mobileurl); + bodyJson.put("links",linksJson); + bodyJson.put("title","@i18n@title"); + + +// bodyJson.put("user_id",Constants.SysUserId); +// bodyJson.put("user_name","@i18n@9"); + bodyJson.put("open_id",create_open_id); +// bodyJson.put("department_id",department_id); + + bodyJson.put("start_time",createTimeStamp); + bodyJson.put("end_time",archivingTimeStamp); + bodyJson.put("update_time",String.valueOf(System.currentTimeMillis())); + + bodyJson.put("display_method",Constants.browser); + bodyJson.put("update_mode",Constants.updateMode); + + log.error("update_time:{}",String.valueOf(System.currentTimeMillis())); + + JSONArray taskListArray = new JSONArray(); + + log.error("task_open_id:"+task_open_id); + JSONObject taskListJson = new JSONObject(); + + // "weaver_"+requestid+"_"+task_open_id+"_"+cid + + taskListJson.put("task_id","weaver_"+requestid+"_"+cid); + taskListJson.put("open_id",task_open_id); + taskListJson.put("title","@i18n@title"); + taskListJson.put("links",linksJson); + taskListJson.put("status",status); + taskListJson.put("create_time",receptTimeStamp); + + taskListJson.put("end_time",archivingTimeStamp); + taskListJson.put("update_time",String.valueOf(System.currentTimeMillis())); + taskListJson.put("display_method",Constants.browser); + taskListJson.put("exclude_statistics",Constants.excludeStatistics); + +// JSONArray actionConfigsArray = new JSONArray(); +// JSONObject actionConfigsJson = new JSONObject(); +// actionConfigsJson.put("action_type","APPROVE"); +// actionConfigsJson.put("action_name","@i18n@5"); +// actionConfigsJson.put("is_need_reason",false); +// actionConfigsJson.put("is_need_approve_reason",false); +// actionConfigsJson.put("is_need_comment",false); +// actionConfigsArray.add(actionConfigsJson); +// taskListJson.put("action_configs",actionConfigsArray); + + taskListJson.put("node_id",node_id); + taskListJson.put("node_name","@i18n@node"); + taskListArray.add(taskListJson); + bodyJson.put("task_list",taskListArray); + + + JSONArray i18nResourcesTextsArray = new JSONArray(); + + JSONObject i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@title"); + i18nResourcesTextsJson.put("value",requestName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@node"); + i18nResourcesTextsJson.put("value",nodeName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + if(StringUtils.isNotBlank(department_id)){ + bodyJson.put("department_id",department_id); + }else if(StringUtils.isNotBlank(department_name)){ + String key = "@i18n@departmentname"; + bodyJson.put("department_name",key); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key); + i18nResourcesTextsJson.put("value",department_name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + + JSONArray formArray = new JSONArray(); + for(int i=0;i formMap = formList.get(i); + String name = formMap.get("name").toString(); + String value = formMap.get("value").toString(); + + String key_key = "@i18n@k"+i; + String val_key = "@i18n@v"+i; + + JSONObject formJson = new JSONObject(); + formJson.put("name",key_key); + formJson.put("value",val_key); + formArray.add(formJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key_key); + i18nResourcesTextsJson.put("value",name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",val_key); + i18nResourcesTextsJson.put("value",value); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + bodyJson.put("form",formArray); + +// Iterator> entries = textsMap.entrySet().iterator(); +// while (entries.hasNext()) { +// Map.Entry entry = entries.next(); +// String key = entry.getKey(); +// String value = String.valueOf(entry.getValue()); +// JSONObject i18nResourcesTextsJson = new JSONObject(); +// i18nResourcesTextsJson.put("key",key); +// i18nResourcesTextsJson.put("value",value); +// i18nResourcesTextsArray.add(i18nResourcesTextsJson); +// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); +// } + + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",i18nResourcesTextsArray); + i18nResourcesJson.put("is_default","true"); + + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + + bodyJson.put("i18n_resources",i18nResourcesArray); + + return bodyJson.toJSONString(); + } + + public static void main(String[] args) { + + Esb2FeishuSendDeleteUtil esb2FeishuSendTodoUtil = new Esb2FeishuSendDeleteUtil(); + + String requestid = "1154744413522714631"; + String requestName = "督导奖励申请流程-石磊-2025-07-09"; + + String create_open_id = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + String department_id = ""; + String department_name = ""; + String start_time = String.valueOf(System.currentTimeMillis()); + String end_time = String.valueOf(System.currentTimeMillis()); + + Map textsMap = new HashMap(); + + List> taskList = new ArrayList>(); + Map taskMap = new HashMap(); + taskMap.put("open_id",create_open_id); + taskList.add(taskMap); + + + + List> formList = new ArrayList>(); + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value","石磊"); + formList.add(formMap); + formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value","紧急"); + formList.add(formMap); + String node_id = "1151724772346716177"; + String nodeName = "1级审批"; + +// String data = esb2FeishuSendTodoUtil.appendBodyParam(requestid, +// requestName,create_open_id,department_id,department_name,start_time,end_time, +// formList,node_id,nodeName,new ArrayList(),"","",""); +// System.out.println(data); + + String date = "2025-07-17 21:07:48"; + + esb2FeishuSendTodoUtil.convertTimeStamp(date); + } + + + public long convertTimeStamp(String date) { + + if(StringUtils.isNotBlank(date)){ + if(date.contains("T")){ + date = date.replace("T"," "); + } + } + System.out.println("date:"+date); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = 0L; + try{ + if(StringUtils.isNotBlank(date)){ + System.out.println("date:"+date.length()); + if(date.length() == 10){ + date = date + " 00:00:00"; + }else if(date.length() == 16){ + date = date + ":00"; + } + if(date.length() == 19){ + try { + timestamp = sdf.parse(date).getTime(); + } catch (ParseException e) { + log.error("e:{}",e); + } + } + log.error("timestamp:{}",timestamp); + System.out.println(timestamp); + System.out.println(String.valueOf(System.currentTimeMillis())); + } + }catch (Exception e){ + log.error("e:{}",e); + } + return timestamp; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDoneUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDoneUtil.java new file mode 100644 index 0000000..4b80614 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendDoneUtil.java @@ -0,0 +1,393 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowDegreeLevelDao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2FeishuSendDoneUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendDoneUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + @Autowired + private WorkflowDegreeLevelDao workflowDegreeLevelDao; + + public String senTodoMessage(String requestid,String requestName,String requestmark, + String creatorName, String createTime, + String nodeId, String nodeName, String archivingTime, + String degree,String mobileurl,String pcurl, + String create_open_id,String operator_open_id, + String recepttime,String status,String cid + ) { + log.error("senTodoMessage start"); + String code = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + String department_id = ""; + String department_name = ""; + String createTimeStamp = "0"; + if(StringUtils.isNotBlank(createTime)){ + createTimeStamp = String.valueOf(convertTimeStamp(createTime)); + } + + String archivingTimeStamp = "0"; + if(StringUtils.isNotBlank(archivingTime)){ + archivingTimeStamp = String.valueOf(convertTimeStamp(archivingTime)); + } + String receptTimeStamp = "0"; + if(StringUtils.isNotBlank(recepttime)){ + receptTimeStamp = String.valueOf(convertTimeStamp(recepttime)); + } + + log.error("createTimeStamp:{}",createTimeStamp); + log.error("archivingTimeStamp:{}",archivingTimeStamp); + log.error("receptTimeStamp:{}",receptTimeStamp); + + List> formList = new ArrayList>(); + if(StringUtils.isNotBlank(creatorName)){ + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value",creatorName); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(degree)){ + Map degreeMap = workflowDegreeLevelDao.queryDegreeLevel(); + if(degreeMap.containsKey(degree)){ + String degreeName = String.valueOf(degreeMap.get(degree)); + Map formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value",degreeName); + formList.add(formMap); + } + } + + if(StringUtils.isNotBlank(requestmark)){ + Map formMap = new HashMap(); + formMap.put("name","流程编号"); + formMap.put("value",requestmark); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","流程ID"); + formMap.put("value",requestid); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","接收时间"); + formMap.put("value",recepttime); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(create_open_id)){ + String bodyData = appendBodyParam(requestid,requestName,create_open_id, + department_id,department_name, + createTimeStamp,archivingTimeStamp, + formList,nodeId,nodeName,operator_open_id, + mobileurl, pcurl,receptTimeStamp,status,cid); + + log.error("feishu-done:{}",bodyData); + + String message = doPostSendMessage(bodyData,token); + log.error("feishu-done-message:{}",message); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + code = returnData.getString("code"); + } + } + } + } + return code; + } + + + public String doPostSendMessage(String bodyData, + String token){ + String msg = ""; + +// "{\n \"approval_code\": \"5DB33242-4B8B-4D72-A64E-DF030E9D94EA\",\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试\\\":\\\"泛微\\\"}\",\n \"instance_id\": \"t024j0gfn0\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"title\": \"@i18n@1\",\n \"form\": [\n {\n \"name\": \"@i18n@2\",\n \"value\": \"@i18n@3\"\n }\n ],\n \"user_id\": \"ggf9e451\",\n \"user_name\": \"@i18n@9\",\n \"start_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"display_method\": \"BROWSER\",\n \"update_mode\": \"UPDATE\",\n \"task_list\": [\n {\n \"task_id\": \"1154324404224876544\",\n \"user_id\": \"ggf9e451\",\n \"title\": \"@i18n@4\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试2\\\":\\\"范围2\\\"}\",\n \"create_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"action_context\": \"1154324404224876544\",\n \"action_configs\": [\n {\n \"action_type\": \"APPROVE\",\n \"action_name\": \"@i18n@5\",\n \"is_need_reason\": false,\n \"is_reason_required\": false,\n \"is_need_attachment\": false\n }\n ],\n \"display_method\": \"BROWSER\",\n \"exclude_statistics\": false\n \n }\n ],\n \"i18n_resources\": [\n {\n \"locale\": \"zh-CN\",\n \"texts\": [\n {\n \"key\": \"@i18n@1\",\n \"value\": \"招聘需求申请流程\"\n },\n {\n \"key\": \"@i18n@2\",\n \"value\": \"创建人\"\n },\n {\n \"key\": \"@i18n@3\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@4\",\n \"value\": \"招聘需求申请流程--sysadmin\"\n },{\n \"key\": \"@i18n@5\",\n \"value\": \"批准\"\n },\n {\n \"key\": \"@i18n@9\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@10\",\n \"value\": \"运营支持部\"\n },\n {\n \"key\": \"@i18n@name\",\n \"value\": \"部门经理审批\"\n }\n ],\n \"is_default\": true\n }\n ]\n}" + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.workflowApproveUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public String appendBodyParam(String requestid, + String requestName, + String create_open_id, + String department_id, + String department_name, + String createTimeStamp, + String archivingTimeStamp, + List> formList, + String node_id, + String nodeName, + String task_open_id, + String mobileurl, + String pcurl, + String receptTimeStamp, + String status, + String cid + ){ + + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("approval_code",Constants.approvalCode); + bodyJson.put("status",status); +// JSONObject extraJson = new JSONObject(); +// extraJson.put("测试","测试"); +// bodyJson.put("extra",extraJson.toJSONString()); + bodyJson.put("instance_id",requestid); + JSONObject linksJson = new JSONObject(); + linksJson.put("pc_link",Constants.HrmHost+pcurl); + linksJson.put("mobile_link",Constants.HrmHost+mobileurl); + bodyJson.put("links",linksJson); + bodyJson.put("title","@i18n@title"); + + +// bodyJson.put("user_id",Constants.SysUserId); +// bodyJson.put("user_name","@i18n@9"); + bodyJson.put("open_id",create_open_id); +// bodyJson.put("department_id",department_id); + + bodyJson.put("start_time",createTimeStamp); + bodyJson.put("end_time",archivingTimeStamp); + bodyJson.put("update_time",String.valueOf(System.currentTimeMillis())); + + bodyJson.put("display_method",Constants.browser); + bodyJson.put("update_mode",Constants.updateMode); + + log.error("update_time:{}",String.valueOf(System.currentTimeMillis())); + + JSONArray taskListArray = new JSONArray(); + log.error("task_open_id:"+task_open_id); + JSONObject taskListJson = new JSONObject(); + + // "weaver_"+requestid+"_"+task_open_id+"_"+cid + + taskListJson.put("task_id","weaver_"+requestid+"_"+cid); + taskListJson.put("open_id",task_open_id); + taskListJson.put("title","@i18n@title"); + taskListJson.put("links",linksJson); + taskListJson.put("status",status); + taskListJson.put("create_time",receptTimeStamp); + + taskListJson.put("end_time",archivingTimeStamp); + taskListJson.put("update_time",String.valueOf(System.currentTimeMillis())); + taskListJson.put("display_method",Constants.browser); + taskListJson.put("exclude_statistics",Constants.excludeStatistics); + +// JSONArray actionConfigsArray = new JSONArray(); +// JSONObject actionConfigsJson = new JSONObject(); +// actionConfigsJson.put("action_type","APPROVE"); +// actionConfigsJson.put("action_name","@i18n@5"); +// actionConfigsJson.put("is_need_reason",false); +// actionConfigsJson.put("is_need_approve_reason",false); +// actionConfigsJson.put("is_need_comment",false); +// actionConfigsArray.add(actionConfigsJson); +// taskListJson.put("action_configs",actionConfigsArray); + + taskListJson.put("node_id",node_id); + taskListJson.put("node_name","@i18n@node"); + taskListArray.add(taskListJson); + bodyJson.put("task_list",taskListArray); + + + JSONArray i18nResourcesTextsArray = new JSONArray(); + + JSONObject i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@title"); + i18nResourcesTextsJson.put("value",requestName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@node"); + i18nResourcesTextsJson.put("value",nodeName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + if(StringUtils.isNotBlank(department_id)){ + bodyJson.put("department_id",department_id); + }else if(StringUtils.isNotBlank(department_name)){ + String key = "@i18n@departmentname"; + bodyJson.put("department_name",key); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key); + i18nResourcesTextsJson.put("value",department_name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + + JSONArray formArray = new JSONArray(); + for(int i=0;i formMap = formList.get(i); + String name = formMap.get("name").toString(); + String value = formMap.get("value").toString(); + + String key_key = "@i18n@k"+i; + String val_key = "@i18n@v"+i; + + JSONObject formJson = new JSONObject(); + formJson.put("name",key_key); + formJson.put("value",val_key); + formArray.add(formJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key_key); + i18nResourcesTextsJson.put("value",name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",val_key); + i18nResourcesTextsJson.put("value",value); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + bodyJson.put("form",formArray); + +// Iterator> entries = textsMap.entrySet().iterator(); +// while (entries.hasNext()) { +// Map.Entry entry = entries.next(); +// String key = entry.getKey(); +// String value = String.valueOf(entry.getValue()); +// JSONObject i18nResourcesTextsJson = new JSONObject(); +// i18nResourcesTextsJson.put("key",key); +// i18nResourcesTextsJson.put("value",value); +// i18nResourcesTextsArray.add(i18nResourcesTextsJson); +// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); +// } + + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",i18nResourcesTextsArray); + i18nResourcesJson.put("is_default","true"); + + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + + bodyJson.put("i18n_resources",i18nResourcesArray); + + return bodyJson.toJSONString(); + } + + public static void main(String[] args) { + + Esb2FeishuSendDoneUtil esb2FeishuSendTodoUtil = new Esb2FeishuSendDoneUtil(); + + String requestid = "1154744413522714631"; + String requestName = "督导奖励申请流程-石磊-2025-07-09"; + + String create_open_id = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + String department_id = ""; + String department_name = ""; + String start_time = String.valueOf(System.currentTimeMillis()); + String end_time = String.valueOf(System.currentTimeMillis()); + + Map textsMap = new HashMap(); + + List> taskList = new ArrayList>(); + Map taskMap = new HashMap(); + taskMap.put("open_id",create_open_id); + taskList.add(taskMap); + + + + List> formList = new ArrayList>(); + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value","石磊"); + formList.add(formMap); + formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value","紧急"); + formList.add(formMap); + String node_id = "1151724772346716177"; + String nodeName = "1级审批"; + +// String data = esb2FeishuSendTodoUtil.appendBodyParam(requestid, +// requestName,create_open_id,department_id,department_name,start_time,end_time, +// formList,node_id,nodeName,new ArrayList(),"","",""); +// System.out.println(data); + + String date = "2025-07-17 21:07:48"; + + esb2FeishuSendTodoUtil.convertTimeStamp(date); + } + + + public long convertTimeStamp(String date) { + + if(StringUtils.isNotBlank(date)){ + if(date.contains("T")){ + date = date.replace("T"," "); + } + } + System.out.println("date:"+date); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = 0L; + try{ + if(StringUtils.isNotBlank(date)){ + System.out.println("date:"+date.length()); + if(date.length() == 10){ + date = date + " 00:00:00"; + }else if(date.length() == 16){ + date = date + ":00"; + } + if(date.length() == 19){ + try { + timestamp = sdf.parse(date).getTime(); + } catch (ParseException e) { + log.error("e:{}",e); + } + } + log.error("timestamp:{}",timestamp); + System.out.println(timestamp); + System.out.println(String.valueOf(System.currentTimeMillis())); + } + }catch (Exception e){ + log.error("e:{}",e); + } + return timestamp; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendFinishUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendFinishUtil.java new file mode 100644 index 0000000..fba9297 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendFinishUtil.java @@ -0,0 +1,391 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowDegreeLevelDao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Component +public class Esb2FeishuSendFinishUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendFinishUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + @Autowired + private WorkflowDegreeLevelDao workflowDegreeLevelDao; + + public String senTodoMessage(String requestid,String requestName,String requestmark, + String creatorName, String createTime, + String nodeId, String nodeName, String archivingTime, + String degree,String mobileurl,String pcurl, + String create_open_id,String operator_open_id, + String recepttime,String status,String cid + ) { + log.error("senTodoMessage start"); + String code = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + String department_id = ""; + String department_name = ""; + String createTimeStamp = "0"; + if(StringUtils.isNotBlank(createTime)){ + createTimeStamp = String.valueOf(convertTimeStamp(createTime)); + } + + String archivingTimeStamp = "0"; + if(StringUtils.isNotBlank(archivingTime)){ + archivingTimeStamp = String.valueOf(convertTimeStamp(archivingTime)); + } + String receptTimeStamp = "0"; + if(StringUtils.isNotBlank(recepttime)){ + receptTimeStamp = String.valueOf(convertTimeStamp(recepttime)); + } + + List> formList = new ArrayList>(); + if(StringUtils.isNotBlank(creatorName)){ + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value",creatorName); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(degree)){ + Map degreeMap = workflowDegreeLevelDao.queryDegreeLevel(); + if(degreeMap.containsKey(degree)){ + String degreeName = String.valueOf(degreeMap.get(degree)); + Map formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value",degreeName); + formList.add(formMap); + } + } + + if(StringUtils.isNotBlank(requestmark)){ + Map formMap = new HashMap(); + formMap.put("name","流程编号"); + formMap.put("value",requestmark); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","流程ID"); + formMap.put("value",requestid); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","接收时间"); + formMap.put("value",recepttime); + formList.add(formMap); + } + + + + + if(StringUtils.isNotBlank(create_open_id)){ + String bodyData = appendBodyParam(requestid,requestName,create_open_id, + department_id,department_name, + createTimeStamp,archivingTimeStamp, + formList,nodeId,nodeName,operator_open_id, + mobileurl, pcurl,receptTimeStamp,status,cid); + + log.error("feishu-finish:{}",bodyData); + + String message = doPostSendMessage(bodyData,token); + log.error("feishu-finish-message:{}",message); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + code = returnData.getString("code"); + } + } + } + } + return code; + } + + + public String doPostSendMessage(String bodyData, + String token){ + String msg = ""; + +// "{\n \"approval_code\": \"5DB33242-4B8B-4D72-A64E-DF030E9D94EA\",\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试\\\":\\\"泛微\\\"}\",\n \"instance_id\": \"t024j0gfn0\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"title\": \"@i18n@1\",\n \"form\": [\n {\n \"name\": \"@i18n@2\",\n \"value\": \"@i18n@3\"\n }\n ],\n \"user_id\": \"ggf9e451\",\n \"user_name\": \"@i18n@9\",\n \"start_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"display_method\": \"BROWSER\",\n \"update_mode\": \"UPDATE\",\n \"task_list\": [\n {\n \"task_id\": \"1154324404224876544\",\n \"user_id\": \"ggf9e451\",\n \"title\": \"@i18n@4\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试2\\\":\\\"范围2\\\"}\",\n \"create_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"action_context\": \"1154324404224876544\",\n \"action_configs\": [\n {\n \"action_type\": \"APPROVE\",\n \"action_name\": \"@i18n@5\",\n \"is_need_reason\": false,\n \"is_reason_required\": false,\n \"is_need_attachment\": false\n }\n ],\n \"display_method\": \"BROWSER\",\n \"exclude_statistics\": false\n \n }\n ],\n \"i18n_resources\": [\n {\n \"locale\": \"zh-CN\",\n \"texts\": [\n {\n \"key\": \"@i18n@1\",\n \"value\": \"招聘需求申请流程\"\n },\n {\n \"key\": \"@i18n@2\",\n \"value\": \"创建人\"\n },\n {\n \"key\": \"@i18n@3\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@4\",\n \"value\": \"招聘需求申请流程--sysadmin\"\n },{\n \"key\": \"@i18n@5\",\n \"value\": \"批准\"\n },\n {\n \"key\": \"@i18n@9\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@10\",\n \"value\": \"运营支持部\"\n },\n {\n \"key\": \"@i18n@name\",\n \"value\": \"部门经理审批\"\n }\n ],\n \"is_default\": true\n }\n ]\n}" + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.workflowApproveUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public String appendBodyParam(String requestid, + String requestName, + String create_open_id, + String department_id, + String department_name, + String createTimeStamp, + String archivingTimeStamp, + List> formList, + String node_id, + String nodeName, + String task_open_id, + String mobileurl, + String pcurl, + String receptTimeStamp, + String status, + String cid + ){ + + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("approval_code",Constants.approvalCode); + bodyJson.put("status",status); +// JSONObject extraJson = new JSONObject(); +// extraJson.put("测试","测试"); +// bodyJson.put("extra",extraJson.toJSONString()); + bodyJson.put("instance_id",requestid); + JSONObject linksJson = new JSONObject(); + linksJson.put("pc_link",Constants.HrmHost+pcurl); + linksJson.put("mobile_link",Constants.HrmHost+mobileurl); + bodyJson.put("links",linksJson); + bodyJson.put("title","@i18n@title"); + + +// bodyJson.put("user_id",Constants.SysUserId); +// bodyJson.put("user_name","@i18n@9"); + bodyJson.put("open_id",create_open_id); +// bodyJson.put("department_id",department_id); + + bodyJson.put("start_time",createTimeStamp); + bodyJson.put("end_time",archivingTimeStamp); + bodyJson.put("update_time",String.valueOf(System.currentTimeMillis())); + + bodyJson.put("display_method",Constants.browser); + bodyJson.put("update_mode",Constants.updateMode); + + log.error("update_time:{}",String.valueOf(System.currentTimeMillis())); + + JSONArray taskListArray = new JSONArray(); + log.error("task_open_id:"+task_open_id); + JSONObject taskListJson = new JSONObject(); + // "weaver_"+requestid+"_"+task_open_id+"_"+cid + taskListJson.put("task_id","weaver_"+requestid+"_"+cid); + taskListJson.put("open_id",task_open_id); + taskListJson.put("title","@i18n@title"); + taskListJson.put("links",linksJson); + taskListJson.put("status",status); + taskListJson.put("create_time",receptTimeStamp); + + taskListJson.put("end_time",archivingTimeStamp); + taskListJson.put("update_time",String.valueOf(System.currentTimeMillis())); + taskListJson.put("display_method",Constants.browser); + taskListJson.put("exclude_statistics",Constants.excludeStatistics); + +// JSONArray actionConfigsArray = new JSONArray(); +// JSONObject actionConfigsJson = new JSONObject(); +// actionConfigsJson.put("action_type","APPROVE"); +// actionConfigsJson.put("action_name","@i18n@5"); +// actionConfigsJson.put("is_need_reason",false); +// actionConfigsJson.put("is_need_approve_reason",false); +// actionConfigsJson.put("is_need_comment",false); +// actionConfigsArray.add(actionConfigsJson); +// taskListJson.put("action_configs",actionConfigsArray); + + taskListJson.put("node_id",node_id); + taskListJson.put("node_name","@i18n@node"); + taskListArray.add(taskListJson); + + bodyJson.put("task_list",taskListArray); + + + JSONArray i18nResourcesTextsArray = new JSONArray(); + + JSONObject i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@title"); + i18nResourcesTextsJson.put("value",requestName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@node"); + i18nResourcesTextsJson.put("value",nodeName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + if(StringUtils.isNotBlank(department_id)){ + bodyJson.put("department_id",department_id); + }else if(StringUtils.isNotBlank(department_name)){ + String key = "@i18n@departmentname"; + bodyJson.put("department_name",key); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key); + i18nResourcesTextsJson.put("value",department_name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + + JSONArray formArray = new JSONArray(); + for(int i=0;i formMap = formList.get(i); + String name = formMap.get("name").toString(); + String value = formMap.get("value").toString(); + + String key_key = "@i18n@k"+i; + String val_key = "@i18n@v"+i; + + JSONObject formJson = new JSONObject(); + formJson.put("name",key_key); + formJson.put("value",val_key); + formArray.add(formJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key_key); + i18nResourcesTextsJson.put("value",name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",val_key); + i18nResourcesTextsJson.put("value",value); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + bodyJson.put("form",formArray); + +// Iterator> entries = textsMap.entrySet().iterator(); +// while (entries.hasNext()) { +// Map.Entry entry = entries.next(); +// String key = entry.getKey(); +// String value = String.valueOf(entry.getValue()); +// JSONObject i18nResourcesTextsJson = new JSONObject(); +// i18nResourcesTextsJson.put("key",key); +// i18nResourcesTextsJson.put("value",value); +// i18nResourcesTextsArray.add(i18nResourcesTextsJson); +// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); +// } + + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",i18nResourcesTextsArray); + i18nResourcesJson.put("is_default","true"); + + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + + bodyJson.put("i18n_resources",i18nResourcesArray); + + return bodyJson.toJSONString(); + } + + public static void main(String[] args) { + + Esb2FeishuSendFinishUtil esb2FeishuSendTodoUtil = new Esb2FeishuSendFinishUtil(); + + String requestid = "1154744413522714631"; + String requestName = "督导奖励申请流程-石磊-2025-07-09"; + + String create_open_id = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + String department_id = ""; + String department_name = ""; + String start_time = String.valueOf(System.currentTimeMillis()); + String end_time = String.valueOf(System.currentTimeMillis()); + + Map textsMap = new HashMap(); + + List> taskList = new ArrayList>(); + Map taskMap = new HashMap(); + taskMap.put("open_id",create_open_id); + taskList.add(taskMap); + + + + List> formList = new ArrayList>(); + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value","石磊"); + formList.add(formMap); + formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value","紧急"); + formList.add(formMap); + String node_id = "1151724772346716177"; + String nodeName = "1级审批"; + +// String data = esb2FeishuSendTodoUtil.appendBodyParam(requestid, +// requestName,create_open_id,department_id,department_name,start_time,end_time, +// formList,node_id,nodeName,new ArrayList(),"","",""); +// System.out.println(data); + + String date = "2025-07-17 21:07:48"; + + esb2FeishuSendTodoUtil.convertTimeStamp(date); + } + + + public long convertTimeStamp(String date) { + + if(StringUtils.isNotBlank(date)){ + if(date.contains("T")){ + date = date.replace("T"," "); + } + } + System.out.println("date:"+date); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = 0L; + try{ + if(StringUtils.isNotBlank(date)){ + System.out.println("date:"+date.length()); + if(date.length() == 10){ + date = date + " 00:00:00"; + }else if(date.length() == 16){ + date = date + ":00"; + } + if(date.length() == 19){ + try { + timestamp = sdf.parse(date).getTime(); + } catch (ParseException e) { + log.error("e:{}",e); + } + } + log.error("timestamp:{}",timestamp); + System.out.println(timestamp); + System.out.println(String.valueOf(System.currentTimeMillis())); + } + }catch (Exception e){ + log.error("e:{}",e); + } + return timestamp; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendMessageUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendMessageUtil.java new file mode 100644 index 0000000..2a4089b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendMessageUtil.java @@ -0,0 +1,292 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; + + +@Component +public class Esb2FeishuSendMessageUtil{ + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendMessageUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public Map senCardMessage(String template_id,String template_version_name,String openId, Map paraMap) { + Map messageMap = new HashMap(); + + + List defaultList = new ArrayList(); + defaultList.add("templateId"); + defaultList.add("templateVersionName"); + defaultList.add("receiveId"); + + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + SimpleDateFormat sdf = new SimpleDateFormat("MM-dd"); + JSONObject templateVariable = new JSONObject(); + + Iterator> iterator = paraMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + String key = entry.getKey(); + String value = entry.getValue().toString(); + log.error("Key: " + entry.getKey() + ", Value: " + entry.getValue()); + if(!defaultList.contains(key)){ + templateVariable.put(key,value); + } + } + +// templateVariable.put("name,","石磊"); +// templateVariable.put("current_date,",sdf.format(new Date())); + + JSONObject data_Json = new JSONObject(); + data_Json.put("template_id",template_id); + data_Json.put("template_version_name",template_version_name); + data_Json.put("template_variable",templateVariable); + + JSONObject contentJson = new JSONObject(); + contentJson.put("type","template"); + contentJson.put("data",data_Json); + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("receive_id",openId); + bodyJson.put("msg_type","interactive"); + bodyJson.put("content", contentJson.toJSONString()); + String uuid = UUID.randomUUID().toString(); + bodyJson.put("uuid", uuid); + + log.error("bodyJson:{}",bodyJson.toJSONString()); + + String message= doPostSendMessage(bodyJson.toJSONString(),token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + String chat_id = dataJson.getString("chat_id"); + String msg_type = dataJson.getString("msg_type"); + String message_id = dataJson.getString("message_id"); + String create_time = dataJson.getString("create_time"); + + messageMap.put("chat_id",chat_id); + messageMap.put("msg_type",msg_type); + messageMap.put("message_id",message_id); + messageMap.put("create_time",create_time); + } + } + } + } + return messageMap; + } + + + + + public Map senTextMessage(String content,String openId) { + log.error("senCardMessage start"); + Map messageMap = new HashMap(); + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + JSONObject contentJson = new JSONObject(); + contentJson.put("text",content); + + String uuid = UUID.randomUUID().toString(); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("receive_id",openId); + bodyJson.put("msg_type","text"); + bodyJson.put("content", contentJson.toJSONString()); + bodyJson.put("uuid", uuid); + + System.out.println("bodyJson:"+bodyJson.toJSONString()); + + String message= doPostSendMessage(bodyJson.toJSONString(),token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + String chat_id = dataJson.getString("chat_id"); + String msg_type = dataJson.getString("msg_type"); + String message_id = dataJson.getString("message_id"); + String create_time = dataJson.getString("create_time"); + + messageMap.put("chat_id",chat_id); + messageMap.put("msg_type",msg_type); + messageMap.put("message_id",message_id); + messageMap.put("create_time",create_time); + + } + } + } + } + return messageMap; + } + + + public String doPostSendMessage(String bodyData,String token){ + String msg = ""; + + // https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id + // t-g1046ofDRKNCIEO3YKB42MQCDBZCYZGWAROROPGJ + +// bodyData = "{\n \"receive_id\": \"ou_f2ee4ea6545e537c426fa058c31bab88\",\n \"msg_type\": \"interactive\",\n \"content\": \"{\\\"type\\\":\\\"template\\\",\\\"data\\\":{\\\"template_id\\\":\\\"AAqIMF4quXR02\\\",\\\"template_version_name\\\":\\\"1.0.1\\\",\\\"template_variable\\\":{\\\"name\\\":\\\"王文猛\\\",\\\"current_date\\\":\\\"06-24\\\"}}}\"\n}" ; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.messageUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:{}",msg); + } catch (IOException e) { + log.error("e:{}",e); + throw new RuntimeException(e); + } + return msg; + } + +// +// /** +// * 获取token +// * +// * @return +// */ +// public String getToken() { +// String token = (String) baseCache.get(FeishuTokenModuleKey.FENSHUTOKEN_DATACENTER, FeishuTokenCacheKey.FEISHU_TOKEN); +// log.error("token:{}",token); +// if (StringUtils.isBlank(token)) { +// JSONObject returnData = getAccessToken(); +// if(returnData.containsKey("tenantAccessToken")){ +// token = returnData.getString("tenantAccessToken"); +// int expire = returnData.getInteger("expire"); +// +// log.error("token:{}",token); +// log.error("expire:{}",expire); +// +// if(expire > 0){ +// baseCache.set(FeishuTokenModuleKey.FENSHUTOKEN_DATACENTER, FeishuTokenCacheKey.FEISHU_TOKEN, token, expire); +// } +// } +// } +// return token; +// } +// +// +// public String getToken2() { +// String token = ""; +// JSONObject returnData = getAccessToken(); +// if(returnData.containsKey("tenantAccessToken")){ +// token = returnData.getString("tenantAccessToken"); +// } +// System.out.println("token:"+token); +// return token; +// } +// +// /** +// * +// * @return +// */ +// public JSONObject getAccessToken() { +// +// // https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal +// JSONObject returnData = new JSONObject(); +// JSONObject dataJson = new JSONObject(); +// dataJson.put("app_id", Constants.app_id); +// dataJson.put("app_secret", Constants.app_secret); +// +// log.error("dataJson:{}",dataJson.toJSONString()); +//// dataJson.put("app_id", "cli_a8d0ee6b667dd00e"); +//// dataJson.put("app_secret", "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"); +// +// try { +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); +// RequestBody body = RequestBody.create(mediaType, dataJson.toJSONString()); +// Request request = new Request.Builder() +// .url(Constants.feishuHost+Constants.tokenUrl) +// .method("POST", body) +// .addHeader("Content-Type", "application/json; charset=utf-8") +// .build(); +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// String msg = response.body().string(); +// +// log.error("code:{}",code); +// log.error("msg:{}",msg); +// +// if(code == 200){ +// if(StringUtils.isNotBlank(msg)){ +// JSONObject returnJson = JSONObject.parseObject(msg); +// if(returnJson.containsKey("code")){ +// String dataCode = returnJson.getString("code"); +// if("0".equals(dataCode)){ +// String tenantAccessToken = returnJson.getString("tenant_access_token"); +// int expire = returnJson.getInteger("expire"); +// +// log.error("tenantAccessToken:{}",tenantAccessToken); +// log.error("expire:{}",expire); +// +// returnData.put("tenantAccessToken",tenantAccessToken); +// returnData.put("expire",expire - earlySecond); +// } +// } +// } +// }else{ +// log.error("msg:{}",msg); +// } +// } catch (Exception e) { +// log.error("msg:{}",e.getMessage()); +// e.printStackTrace(); +// } +// return returnData; +// } +// +// +// /** +// * +// * @param bodyData +// * @param token +// * @return +// */ + +// +// public static void main(String[] args) { +// +// String feishuHost = "https://open.feishu.cn"; +// String tokenUrl = "/open-apis/auth/v3/tenant_access_token/internal"; +// String feishuUrl = "/open-apis/im/v1/messages?receive_id_type=open_id"; +// String app_id = "cli_a8d0ee6b667dd00e"; +// String app_secret = "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"; +// String template_id = "AAqIMF4quXR02" ; +// String template_version_name = "1.0.1"; +// String receiveId = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; +// +// Esb2FeishuSendMessageUtil esb2FeishuSendMessageUtil = new Esb2FeishuSendMessageUtil(); +// esb2FeishuSendMessageUtil.senCardMessage(template_id, template_version_name,receiveId); +// } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendTodoUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendTodoUtil.java new file mode 100644 index 0000000..5724473 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuSendTodoUtil.java @@ -0,0 +1,378 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.dao.WorkflowDegreeLevelDao; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + + +@Component +public class Esb2FeishuSendTodoUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuSendTodoUtil.class); + + @Autowired + private Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + @Autowired + private WorkflowDegreeLevelDao workflowDegreeLevelDao; + + public String senTodoMessage(String requestid,String requestName,String requestmark, + String creatorName, String createTime, + String nodeId, String nodeName, String archivingTime, + String degree,String mobileurl,String pcurl, + String create_open_id,String operator_open_id, + String recepttime,String status,String cid + ) { + String code = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + String department_id = ""; + String department_name = ""; + String createTimeStamp = "0"; + if(StringUtils.isNotBlank(createTime)){ + createTimeStamp = String.valueOf(convertTimeStamp(createTime)); + } + + String archivingTimeStamp = "0"; + if(StringUtils.isNotBlank(archivingTime)){ + archivingTimeStamp = String.valueOf(convertTimeStamp(archivingTime)); + } + String receptTimeStamp = "0"; + if(StringUtils.isNotBlank(recepttime)){ + receptTimeStamp = String.valueOf(convertTimeStamp(recepttime)); + } + + List> formList = new ArrayList>(); + + if(StringUtils.isNotBlank(degree)){ + Map degreeMap = workflowDegreeLevelDao.queryDegreeLevel(); + if(degreeMap.containsKey(degree)){ + String degreeName = String.valueOf(degreeMap.get(degree)); + Map formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value",degreeName); + formList.add(formMap); + } + } + + if(StringUtils.isNotBlank(requestmark)){ + Map formMap = new HashMap(); + formMap.put("name","流程编号"); + formMap.put("value",requestmark); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","流程ID"); + formMap.put("value",requestid); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(requestid)){ + Map formMap = new HashMap(); + formMap.put("name","接收时间"); + formMap.put("value",recepttime); + formList.add(formMap); + } + + if(StringUtils.isNotBlank(creatorName)){ + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value",creatorName); + formList.add(formMap); + } + + + if(StringUtils.isNotBlank(create_open_id)){ + String bodyData = appendBodyParam(requestid,requestName,create_open_id, + department_id,department_name, + createTimeStamp,archivingTimeStamp, + formList,nodeId,nodeName,operator_open_id, + mobileurl, pcurl,receptTimeStamp,status,cid); + + log.error("feishu-todo:{}",bodyData); + + String message = doPostSendMessage(bodyData,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + code = returnData.getString("code"); + } + } + } + } + return code; + } + + + public String doPostSendMessage(String bodyData, + String token){ + String msg = ""; + +// "{\n \"approval_code\": \"5DB33242-4B8B-4D72-A64E-DF030E9D94EA\",\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试\\\":\\\"泛微\\\"}\",\n \"instance_id\": \"t024j0gfn0\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"title\": \"@i18n@1\",\n \"form\": [\n {\n \"name\": \"@i18n@2\",\n \"value\": \"@i18n@3\"\n }\n ],\n \"user_id\": \"ggf9e451\",\n \"user_name\": \"@i18n@9\",\n \"start_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"display_method\": \"BROWSER\",\n \"update_mode\": \"UPDATE\",\n \"task_list\": [\n {\n \"task_id\": \"1154324404224876544\",\n \"user_id\": \"ggf9e451\",\n \"title\": \"@i18n@4\",\n \"links\": {\n \"pc_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\",\n \"mobile_link\": \"http://10.60.4.124:30609/sp/workflow/flowpage/view/1154324404224876544\"\n },\n \"status\": \"PENDING\",\n \"extra\": \"{\\\"测试2\\\":\\\"范围2\\\"}\",\n \"create_time\": \"1752221889000\",\n \"end_time\": \"1752221889000\",\n \"update_time\": \"1752221889000\",\n \"action_context\": \"1154324404224876544\",\n \"action_configs\": [\n {\n \"action_type\": \"APPROVE\",\n \"action_name\": \"@i18n@5\",\n \"is_need_reason\": false,\n \"is_reason_required\": false,\n \"is_need_attachment\": false\n }\n ],\n \"display_method\": \"BROWSER\",\n \"exclude_statistics\": false\n \n }\n ],\n \"i18n_resources\": [\n {\n \"locale\": \"zh-CN\",\n \"texts\": [\n {\n \"key\": \"@i18n@1\",\n \"value\": \"招聘需求申请流程\"\n },\n {\n \"key\": \"@i18n@2\",\n \"value\": \"创建人\"\n },\n {\n \"key\": \"@i18n@3\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@4\",\n \"value\": \"招聘需求申请流程--sysadmin\"\n },{\n \"key\": \"@i18n@5\",\n \"value\": \"批准\"\n },\n {\n \"key\": \"@i18n@9\",\n \"value\": \"石磊\"\n },\n {\n \"key\": \"@i18n@10\",\n \"value\": \"运营支持部\"\n },\n {\n \"key\": \"@i18n@name\",\n \"value\": \"部门经理审批\"\n }\n ],\n \"is_default\": true\n }\n ]\n}" + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, bodyData); + try { + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.workflowApproveUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("todo-code:{}",code); + msg = response.body().string(); + log.error("todo-msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public String appendBodyParam(String requestid, + String requestName, + String create_open_id, + String department_id, + String department_name, + String createTimeStamp, + String archivingTimeStamp, + List> formList, + String node_id, + String nodeName, + String task_open_id, + String mobileurl, + String pcurl, + String receptTimeStamp, + String status, + String cid + ){ + + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("approval_code",Constants.approvalCode); + bodyJson.put("status",status); +// JSONObject extraJson = new JSONObject(); +// extraJson.put("测试","测试"); +// bodyJson.put("extra",extraJson.toJSONString()); + bodyJson.put("instance_id",requestid); + JSONObject linksJson = new JSONObject(); + linksJson.put("pc_link",Constants.HrmHost+pcurl); + linksJson.put("mobile_link",Constants.HrmHost+mobileurl); + bodyJson.put("links",linksJson); + bodyJson.put("title","@i18n@title"); + + +// bodyJson.put("user_id",Constants.SysUserId); +// bodyJson.put("user_name","@i18n@9"); + bodyJson.put("open_id",create_open_id); +// bodyJson.put("department_id",department_id); + + bodyJson.put("start_time",createTimeStamp); + bodyJson.put("end_time",archivingTimeStamp); + bodyJson.put("update_time",String.valueOf(System.currentTimeMillis())); + + bodyJson.put("display_method",Constants.browser); + bodyJson.put("update_mode",Constants.updateMode); + + log.error("update_time:{}",String.valueOf(System.currentTimeMillis())); + + JSONArray taskListArray = new JSONArray(); + log.error("task_open_id:"+task_open_id); + JSONObject taskListJson = new JSONObject(); + taskListJson.put("task_id","weaver_"+requestid+"_"+cid); + taskListJson.put("open_id",task_open_id); + taskListJson.put("title","@i18n@title"); + taskListJson.put("links",linksJson); + taskListJson.put("status",status); + taskListJson.put("create_time",receptTimeStamp); + + taskListJson.put("end_time",archivingTimeStamp); + taskListJson.put("update_time",String.valueOf(System.currentTimeMillis())); + taskListJson.put("display_method",Constants.browser); + taskListJson.put("exclude_statistics",Constants.excludeStatistics); + +// JSONArray actionConfigsArray = new JSONArray(); +// JSONObject actionConfigsJson = new JSONObject(); +// actionConfigsJson.put("action_type","APPROVE"); +// actionConfigsJson.put("action_name","@i18n@5"); +// actionConfigsJson.put("is_need_reason",false); +// actionConfigsJson.put("is_need_approve_reason",false); +// actionConfigsJson.put("is_need_comment",false); +// actionConfigsArray.add(actionConfigsJson); +// taskListJson.put("action_configs",actionConfigsArray); + + taskListJson.put("node_id",node_id); + taskListJson.put("node_name","@i18n@node"); + taskListArray.add(taskListJson); + bodyJson.put("task_list",taskListArray); + + + JSONArray i18nResourcesTextsArray = new JSONArray(); + + JSONObject i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@title"); + i18nResourcesTextsJson.put("value",requestName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key","@i18n@node"); + i18nResourcesTextsJson.put("value",nodeName); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + if(StringUtils.isNotBlank(department_id)){ + bodyJson.put("department_id",department_id); + }else if(StringUtils.isNotBlank(department_name)){ + String key = "@i18n@departmentname"; + bodyJson.put("department_name",key); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key); + i18nResourcesTextsJson.put("value",department_name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + + JSONArray formArray = new JSONArray(); + for(int i=0;i formMap = formList.get(i); + String name = formMap.get("name").toString(); + String value = formMap.get("value").toString(); + + String key_key = "@i18n@k"+i; + String val_key = "@i18n@v"+i; + + JSONObject formJson = new JSONObject(); + formJson.put("name",key_key); + formJson.put("value",val_key); + formArray.add(formJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",key_key); + i18nResourcesTextsJson.put("value",name); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + + i18nResourcesTextsJson = new JSONObject(); + i18nResourcesTextsJson.put("key",val_key); + i18nResourcesTextsJson.put("value",value); + i18nResourcesTextsArray.add(i18nResourcesTextsJson); + } + bodyJson.put("form",formArray); + +// Iterator> entries = textsMap.entrySet().iterator(); +// while (entries.hasNext()) { +// Map.Entry entry = entries.next(); +// String key = entry.getKey(); +// String value = String.valueOf(entry.getValue()); +// JSONObject i18nResourcesTextsJson = new JSONObject(); +// i18nResourcesTextsJson.put("key",key); +// i18nResourcesTextsJson.put("value",value); +// i18nResourcesTextsArray.add(i18nResourcesTextsJson); +// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); +// } + + JSONObject i18nResourcesJson = new JSONObject(); + i18nResourcesJson.put("locale","zh-CN"); + i18nResourcesJson.put("texts",i18nResourcesTextsArray); + i18nResourcesJson.put("is_default","true"); + + JSONArray i18nResourcesArray = new JSONArray(); + i18nResourcesArray.add(i18nResourcesJson); + + bodyJson.put("i18n_resources",i18nResourcesArray); + + return bodyJson.toJSONString(); + } + + public static void main(String[] args) { + + Esb2FeishuSendTodoUtil esb2FeishuSendTodoUtil = new Esb2FeishuSendTodoUtil(); + + String requestid = "1154744413522714631"; + String requestName = "督导奖励申请流程-石磊-2025-07-09"; + + String create_open_id = "ou_8ff7816cfa8cda57643cac2a06fbdc7e"; + String department_id = ""; + String department_name = ""; + String start_time = String.valueOf(System.currentTimeMillis()); + String end_time = String.valueOf(System.currentTimeMillis()); + + Map textsMap = new HashMap(); + + List> taskList = new ArrayList>(); + Map taskMap = new HashMap(); + taskMap.put("open_id",create_open_id); + taskList.add(taskMap); + + + + List> formList = new ArrayList>(); + Map formMap = new HashMap(); + formMap.put("name","创建人"); + formMap.put("value","石磊"); + formList.add(formMap); + formMap = new HashMap(); + formMap.put("name","紧急程度"); + formMap.put("value","紧急"); + formList.add(formMap); + String node_id = "1151724772346716177"; + String nodeName = "1级审批"; + +// String data = esb2FeishuSendTodoUtil.appendBodyParam(requestid, +// requestName,create_open_id,department_id,department_name,start_time,end_time, +// formList,node_id,nodeName,new ArrayList(),"","",""); +// System.out.println(data); + + String date = "2025-07-17 21:07:48"; + + esb2FeishuSendTodoUtil.convertTimeStamp(date); + } + + + public long convertTimeStamp(String date) { + + if(StringUtils.isNotBlank(date)){ + if(date.contains("T")){ + date = date.replace("T"," "); + } + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long timestamp = 0L; + try{ + if(StringUtils.isNotBlank(date)){ + System.out.println("date:"+date.length()); + if(date.length() == 10){ + date = date + " 00:00:00"; + }else if(date.length() == 16){ + date = date + ":00"; + } + if(date.length() == 19){ + try { + timestamp = sdf.parse(date).getTime(); + } catch (ParseException e) { + log.error("e:{}",e); + } + } + } + }catch (Exception e){ + log.error("e:{}",e); + } + return timestamp; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuTokenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuTokenUtil.java new file mode 100644 index 0000000..07cdbd6 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuTokenUtil.java @@ -0,0 +1,88 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.cache.base.BaseCache; +import com.weaver.seconddev.chapanda.feishu.cache.FeishuTokenCacheKey; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import com.weaver.seconddev.chapanda.feishu.module.FeishuTokenModuleKey; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Esb2FeishuTokenUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuTokenUtil.class); + + @Autowired + private BaseCache baseCache; + + public int earlySecond = 120; + + public String getToken() { + String token = (String) baseCache.get(FeishuTokenModuleKey.FENSHUTOKEN_DATACENTER, FeishuTokenCacheKey.FEISHU_TOKEN); + if (StringUtils.isBlank(token)) { + JSONObject returnData = getAccessToken(); + if(returnData.containsKey("tenantAccessToken")){ + token = returnData.getString("tenantAccessToken"); + int expire = returnData.getInteger("expire"); + if(expire > 0){ + baseCache.set(FeishuTokenModuleKey.FENSHUTOKEN_DATACENTER, FeishuTokenCacheKey.FEISHU_TOKEN, token, expire); + } + } + } + return token; + } + + public JSONObject getAccessToken() { + + // https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal + JSONObject returnData = new JSONObject(); + JSONObject dataJson = new JSONObject(); + dataJson.put("app_id", Constants.app_id); + dataJson.put("app_secret", Constants.app_secret); + +// dataJson.put("app_id", "cli_a8d0ee6b667dd00e"); +// dataJson.put("app_secret", "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"); + + try { + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); + RequestBody body = RequestBody.create(mediaType, dataJson.toJSONString()); + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.tokenUrl) + .method("POST", body) + .addHeader("Content-Type", "application/json; charset=utf-8") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + String msg = response.body().string(); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("code")){ + String dataCode = returnJson.getString("code"); + if("0".equals(dataCode)){ + String tenantAccessToken = returnJson.getString("tenant_access_token"); + int expire = returnJson.getInteger("expire"); + + returnData.put("tenantAccessToken",tenantAccessToken); + returnData.put("expire",expire - earlySecond); + } + } + } + }else{ + log.error("msg:{}",msg); + } + } catch (Exception e) { + log.error("e:{}",e.getMessage()); + e.printStackTrace(); + } + return returnData; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuUploadImageUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuUploadImageUtil.java new file mode 100644 index 0000000..0c7a87a --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/feishu/util/Esb2FeishuUploadImageUtil.java @@ -0,0 +1,198 @@ +package com.weaver.seconddev.chapanda.feishu.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.eteams.file.client.file.FileData; +import com.weaver.file.ud.api.FileDownloadService; +import com.weaver.seconddev.chapanda.feishu.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + + +@Component +public class Esb2FeishuUploadImageUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2FeishuUploadImageUtil.class); + + @Autowired + private FileDownloadService fileDownloadService; + + @Autowired + Esb2FeishuTokenUtil esb2FeishuTokenUtil; + + public String uploadImage(Long pvalue) { + log.error("esb2feishuuploadimageutil start"); + String imageKey = ""; + String token = esb2FeishuTokenUtil.getToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + InputStream fileInputStream = null; + try { + FileData fileData = fileDownloadService.downloadFile(pvalue); + String fileName = fileData.getFileObj().getName(); + fileInputStream = fileData.getInputStream(); + if(fileInputStream.available() > 0) { + byte[] fileByte = convertInputStreamToBytes(fileInputStream); + if(fileByte.length >0){ + String encodedFileName = URLEncoder.encode(fileName, "UTF-8"); + String message = uploadImageByte(fileByte,encodedFileName,token); + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("code")){ + String code = returnData.getString("code"); + if("0".equals(code)){ + JSONObject dataJson = returnData.getJSONObject("data"); + imageKey = dataJson.getString("image_key"); + } + } + } + + } + } + fileInputStream.close(); + }catch (Exception e){ + log.error("e:{}",e); + }finally { + try { + if(fileInputStream != null){ + fileInputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return imageKey; + } + + +// public String getToken2() { +// String token = ""; +// JSONObject returnData = getAccessToken(); +// if(returnData.containsKey("tenantAccessToken")){ +// token = returnData.getString("tenantAccessToken"); +// } +// System.out.println("token:"+token); +// return token; +// } + + /** + * + * @return + */ +// public JSONObject getAccessToken() { +// +// JSONObject returnData = new JSONObject(); +// JSONObject dataJson = new JSONObject(); +// dataJson.put("app_id", Constants.app_id); +// dataJson.put("app_secret", Constants.app_secret); +// +// log.error("dataJson:{}",dataJson.toJSONString()); +//// dataJson.put("app_id", "cli_a8d0ee6b667dd00e"); +//// dataJson.put("app_secret", "UjShC4eY7vCgHsQvFWZZleVdCqSEWGD0"); +// +// try { +// OkHttpClient client = new OkHttpClient().newBuilder() +// .build(); +// MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); +// RequestBody body = RequestBody.create(mediaType, dataJson.toJSONString()); +// Request request = new Request.Builder() +// .url(Constants.feishuHost+Constants.tokenUrl) +// .method("POST", body) +// .addHeader("Content-Type", "application/json; charset=utf-8") +// .build(); +// Response response = client.newCall(request).execute(); +// int code = response.code(); +// String msg = response.body().string(); +// +// log.error("code:{}",code); +// log.error("msg:{}",msg); +// +// if(code == 200){ +// if(StringUtils.isNotBlank(msg)){ +// JSONObject returnJson = JSONObject.parseObject(msg); +// if(returnJson.containsKey("code")){ +// String dataCode = returnJson.getString("code"); +// if("0".equals(dataCode)){ +// String tenantAccessToken = returnJson.getString("tenant_access_token"); +// int expire = returnJson.getInteger("expire"); +// +// log.error("tenantAccessToken:{}",tenantAccessToken); +// log.error("expire:{}",expire); +// +// returnData.put("tenantAccessToken",tenantAccessToken); +// } +// } +// } +// }else{ +// log.error("msg:{}",msg); +// } +// } catch (Exception e) { +// log.error("msg:{}",e.getMessage()); +// e.printStackTrace(); +// } +// return returnData; +// } + + + /** + * + + * @param token + * @return + */ + public String uploadImageByte(byte[] imageData,String imageName,String token){ + String msg = ""; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + try { +// "toux.jpg" + RequestBody body = new MultipartBody.Builder().setType(MediaType.get("multipart/form-data;charset=utf-8")) + .addFormDataPart("image_type","avatar") + .addFormDataPart("image",imageName, + RequestBody.create(MediaType.parse("application/octet-stream"), + imageData)) + .build(); + Request request = new Request.Builder() + .url(Constants.feishuHost+Constants.imageUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + public byte[] convertInputStreamToBytes(InputStream inputStream) throws IOException { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + log.error("inputStream2:{}",inputStream.available()); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + byteStream.write(buffer, 0, bytesRead); + } + log.error("byteStream:{}",byteStream.toByteArray().length); + + return byteStream.toByteArray(); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/constant/Constants.java new file mode 100644 index 0000000..387b063 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/constant/Constants.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.chapanda.kaixinyi.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + + public static String HrmHost = "https://hrtest.chabaidao.com"; + + public static String OPENVER = "v1"; + public static String OPENTRANSCODE = "IFWAE003"; + + public static String OPENMERCODE = "CITICIFOP9999999"; + + public static String OPENMERNAME = "京东天天利"; + + public static String OPENBUSITYPE = "999"; + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/esb/Esb2KaixinyAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/esb/Esb2KaixinyAction.java new file mode 100644 index 0000000..746c079 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/esb/Esb2KaixinyAction.java @@ -0,0 +1,70 @@ +package com.weaver.seconddev.chapanda.kaixinyi.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.kaixinyi.constant.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; + +import java.util.*; + +@Service("Esb2KaixinyAction") +public class Esb2KaixinyAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2KaixinyAction.class); + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2DmpGetGmvCron start"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("HHmmss"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String uuid = UUID.randomUUID().toString().replace("-", ""); + + JSONObject dataJson = new JSONObject(); + dataJson.put("OPENVER", Constants.OPENVER); + dataJson.put("OPENTRANSCODE", Constants.OPENTRANSCODE); + dataJson.put("OPENMERNAME", Constants.OPENMERNAME); + dataJson.put("OPENBUSITYPE", Constants.OPENBUSITYPE); + dataJson.put("OPENLAUNCHDATE", sdf.format(new Date())); + dataJson.put("OPENLAUNCHTIME", sdf1.format(new Date())); + dataJson.put("OPENMERFLOWID", "IFOPH5SIMULATOR" + sdf2.format(new Date())); + + dataJson.put("USER_ID", "1399999999"); + dataJson.put("CORP_ID", "1399999999"); + dataJson.put("PAY_NAME", "2025年06月薪酬发放"); + dataJson.put("PAY_FLAG", "1"); + dataJson.put("SETT_ACC", "1"); + dataJson.put("PAY_CNY", "001"); + dataJson.put("FLOW_ID", "001"); + + + JSONArray payDetail = new JSONArray(); + JSONObject payDetailJson = new JSONObject(); + payDetailJson.put("NUM",""); + payDetailJson.put("EMP_NAM",""); + payDetailJson.put("ID_TYP",""); + payDetailJson.put("ID_NO",""); + payDetailJson.put("CARD_NO",""); + payDetailJson.put("BANK_NO",""); + payDetailJson.put("PAY_AMT",""); + payDetailJson.put("CNY",""); + payDetailJson.put("CYFG",""); + payDetailJson.put("PAY_TYPE",""); + payDetailJson.put("TRN_ABS",""); + payDetailJson.put("TAX_ID",""); + payDetailJson.put("OTHER_BANK_MOB",""); + payDetail.add(payDetail); + dataJson.put("LIST", payDetail); + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2DmpGetGmvCron"); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/AESUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/AESUtil.java new file mode 100644 index 0000000..4a77941 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/AESUtil.java @@ -0,0 +1,81 @@ +package com.weaver.seconddev.chapanda.kaixinyi.util; + +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Random; + +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +public class AESUtil { + + private static int KeySizeAES128 = 16; + + private static Cipher getCipher(int mode, String key) { + // mode =Cipher.DECRYPT_MODE or Cipher.ENCRYPT_MODE + Cipher mCipher; + byte[] keyPtr = new byte[KeySizeAES128]; + IvParameterSpec ivParam = new IvParameterSpec(keyPtr); + byte[] passPtr = key.getBytes(); + try { + mCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + for (int i = 0; i < KeySizeAES128; i++) { + if (i < passPtr.length) + keyPtr[i] = passPtr[i]; + else + keyPtr[i] = 0; + } + SecretKeySpec keySpec = new SecretKeySpec(keyPtr, "AES"); + mCipher.init(mode, keySpec, ivParam); + return mCipher; + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + return null; + } + + public static byte[] encrypt(String content, String password) { + try { + Cipher cipher = getCipher(Cipher.ENCRYPT_MODE, password);// 创建密码器 + byte[] result = cipher.doFinal(content.getBytes("UTF-8"));// 加密 + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static byte[] decrypt(byte[] content, String password) { + try { + Cipher cipher = getCipher(Cipher.DECRYPT_MODE, password);// 创建密码器 + byte[] result = cipher.doFinal(content); + return result; // 明文 + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getRandomAESKey() { + int $aes_ken_len = 16; + String aes_key_str = ""; + char[] e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + .toCharArray(); + int index = 0; + Random r = new Random(); + for (int i = 0; i < $aes_ken_len; i++) { + index = r.nextInt(64); + aes_key_str += e[index]; + } + return aes_key_str; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/DecryptUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/DecryptUtil.java new file mode 100644 index 0000000..83f7bc7 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/DecryptUtil.java @@ -0,0 +1,4 @@ +package com.weaver.seconddev.chapanda.kaixinyi.util; + +public class DecryptUtil { +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/EncryptionUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/EncryptionUtil.java new file mode 100644 index 0000000..966c59b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/EncryptionUtil.java @@ -0,0 +1,65 @@ +package com.weaver.seconddev.chapanda.kaixinyi.util; + +//import com.lsy.baselib.crypto.util.Base64; +//import com.lsy.baselib.crypto.util.CryptUtil; +import org.springframework.stereotype.Component; +//import javax.crypto.Cipher; +//import java.io.ByteArrayOutputStream; +//import java.security.Key; +//import java.security.PublicKey; +//import java.security.cert.X509Certificate; +//import java.security.interfaces.RSAKey; + + +@Component +public class EncryptionUtil { + +// private String encryptBusiness(String business) throws Exception { +// String encryptKey = AESUtil.getRandomAESKey(); +// byte[] encryptBusinessDataByte = AESUtil.encrypt(business, encryptKey); +// +// String encryptBusiness = new String( +// Base64.encode(encryptBusinessDataByte), "UTF-8"); +// +// String publicKey = "MIIDQTCCAimgAwIBAgIBMDANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJDTjENMAsGA1UECwwEQ05DQjEcMBoGA1UEAwwTYjJjLmJhbmsuZWNpdGljLmNvbTAgFw0xODEwMjIwMjU0MjZaGA8yMTE4MDkyODAyNTQyNlowOjELMAkGA1UEBhMCQ04xDTALBgNVBAsMBENOQ0IxHDAaBgNVBAMME2IyYy5iYW5rLmVjaXRpYy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCJe5k8J5oxkRbfrNHHbN8MEce9lkV/HWrKtpEtknRICpyT24Rx3xiCkyFfC2Zn0sYofJAcAvKElDupIIuYJHMvwWgakYHVHAbsp8XfGDToDeZdabCPSaV/tC+pbcZjnF+Zdlmy/TL9Yzxe/lSqhAnjk2wIeBQUy27CpcOKO7GXMVFE9TgogqDND+hYYzyaj+8gh73DRu2xSAq+ZTvJuW+bPvuALEOK/Ex8MO9u0oV1nn3OwkPkE/98jSs8BWBRDDGuh9OaZrUoNsF7II/e10Ad93lPf7UTEAiosO7ZiyJ+MBGy+cbkCwjpe5OOrkFr+9GNI6pjcDYul2KgI6XXdX0bAgMBAAGjUDBOMB0GA1UdDgQWBBTFTb+SBCIKxAdjuaOlferd/wKWYTAfBgNVHSMEGDAWgBTFTb+SBCIKxAdjuaOlferd/wKWYTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQA4zYjdRonussCKJGAK+KKI1Ov8ptG9lxuUEjDFCYGG0hgyDfUxuNAIWI3GaDIxfreR/YMXPEOzEl4yORzFEu/ekh5gQvNT674x29BaA1iOKW1w5OJ7N1msJ76J66V4o1FQuFxZFO3U5nIx10eMe1VUezBIRrVO0YXMnCwA4Ckc9m1+5vEWhB78oLLSLgNhUcIwDyXyyb48TjeUO9TGCDECaadLLPsKSEiQ/fp5Nbo2VFrrx3IUMBJDxu6LiXAEZwQ8/cc8O//sT7t5ezu4joLNKGU8Sl6MSW5k2cee76g52MaA0Zt1x3G2viAMtkj5w1hJs8rsMA7+aty6tnbELWZe"; +// byte[] base64EncodedSenderCert = publicKey.getBytes("UTF-8"); +// +// X509Certificate signerCertificate = CryptUtil +// .generateX509Certificate(com.lsy.baselib.crypto.util.Base64 +// .decode(base64EncodedSenderCert)); +// PublicKey signpublicKey = signerCertificate.getPublicKey(); +// +// byte[] encryptKeyByte = encrypt((RSAKey) signpublicKey, +// encryptKey.getBytes("UTF-8")); +// String encryptKeyString = new String(Base64.encode(encryptKeyByte), +// "UTF-8"); +// +// encryptBusiness = encryptBusiness + "@@" + encryptKeyString; +// +// return encryptBusiness; +// } +// +// private byte[] encrypt(RSAKey key, byte[] data) { +// try { +// Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding", "BC"); +// cipher.init(1, (Key) key); +// int step = key.getModulus().bitLength() / 8; +// int n = data.length / step; +// if (n > 0) { +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// for (int i = 0; i < n; i++) { +// baos.write(cipher.doFinal(data, i * step, step)); +// } +// if ((n = data.length % step) != 0) { +// baos.write(cipher.doFinal(data, data.length - n, n)); +// } +// return baos.toByteArray(); +// } +// return cipher.doFinal(data); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/SignatureUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/SignatureUtil.java new file mode 100644 index 0000000..35573f0 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/SignatureUtil.java @@ -0,0 +1,118 @@ +package com.weaver.seconddev.chapanda.kaixinyi.util; + +//import com.alibaba.fastjson.JSONArray; +//import com.alibaba.fastjson.JSONObject; +//import com.lsy.baselib.crypto.util.Base64; +//import com.lsy.baselib.crypto.util.CryptUtil; +//import com.lsy.baselib.crypto.util.FileUtil; +import org.springframework.stereotype.Component; +//import java.io.UnsupportedEncodingException; +//import java.security.PrivateKey; +//import java.security.Signature; +//import java.util.*; + +@Component +public class SignatureUtil { + +// private String signData(String data,String redirectURL) { +// try { +// String reSbf = data; +// if(redirectURL.indexOf("/pay")==-1){ +// data = data.replace("\r|\n", ""); +// JSONObject jsonObject = JSONObject.parseObject(data); +// //对报文中的key字段进行ASCII排序 +// StringBuffer sbf = formaturlMap(jsonObject); +// reSbf = sbf.toString().replaceAll("\\}\\{", "\\},\\{"); +// } +// +// byte[] msg = reSbf.getBytes("UTF-8"); +// +// //签名数据 +// PrivateKey privateKey = getPrivateKey(); +// Signature signature = Signature.getInstance("SHA1WithRSA"); +// signature.initSign(privateKey); +// signature.update(msg); +// byte[] bytarr = signature.sign(); +// +// String signData = new String(Base64.encode(bytarr), "UTF-8"); +// signData = signData.replace("\r|\n", ""); +// return signData; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } +// +// +// private PrivateKey getPrivateKey() throws Exception { +// //私钥文件路径 +// String keyfile = SignatureUtil.class.getClassLoader().getResource("signkey/server_sign.key") +// .getPath(); +// byte[] base64EncodedPrivatekey = FileUtil.read4file(keyfile); +// +// //私钥密码文件路径 +// String pwdfile = SignatureUtil.class.getClassLoader().getResource("signkey/server_sign.pwd") +// .getPath(); +// byte[] base64EncodedPrivatekeyPass = FileUtil.read4file(pwdfile); +// +// char[] keyPassword = new String(base64EncodedPrivatekeyPass, "UTF-8").toCharArray(); +// +// PrivateKey signerPrivatekey = CryptUtil.decryptPrivateKey( +// Base64.decode(base64EncodedPrivatekey), keyPassword); +// return signerPrivatekey; +// } +// +// private StringBuffer formaturlMap(JSONObject jsonObject) +// throws UnsupportedEncodingException { +// +// if (jsonObject == null) { +// return null; +// } +// +// StringBuffer plain = new StringBuffer(); +// List> infolds = new ArrayList>( +// jsonObject.entrySet()); +// +// //ASCII 排序(字典序) +// Collections.sort(infolds, new Comparator>() { +// public int compare(Map.Entry o1, Map.Entry o2) { +// return (o1.getKey().compareTo(o2.getKey())); +// } +// }); +// +// plain.append("{"); +// for (Map.Entry item : infolds) { +// String key = item.getKey(); +// if ("commonDataList".equalsIgnoreCase(key)) { +// continue; +// } +// plain.append("\"" + key + "\""); +// plain.append(":"); +// Object val = item.getValue(); +// if (val instanceof JSONObject) { +// StringBuffer str = formaturlMap((JSONObject) val); +// plain.append(str); +// } else if (val instanceof String) { +// plain.append("\"" + val + "\""); +// } else if (val instanceof JSONArray) { +// plain.append("["); +// JSONArray arr = (JSONArray) val; +// for (int i = 0; i < arr.size(); i++) { +// StringBuffer tempstr = new StringBuffer(); +// Object obj = arr.get(i); +// if (obj instanceof JSONObject) { +// tempstr = formaturlMap((JSONObject) obj); +// } +// plain.append(tempstr); +// } +// plain.append("]"); +// } +// plain.append(","); +// } +// plain.delete(plain.length() - 1, plain.length()); +// if (plain.length() > 0) { +// plain.append("}"); +// } +// return plain; +// } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/VerificationUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/VerificationUtil.java new file mode 100644 index 0000000..6e80cfc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/kaixinyi/util/VerificationUtil.java @@ -0,0 +1,4 @@ +package com.weaver.seconddev.chapanda.kaixinyi.util; + +public class VerificationUtil { +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/constant/Constants.java new file mode 100644 index 0000000..869b187 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/constant/Constants.java @@ -0,0 +1,58 @@ +package com.weaver.seconddev.chapanda.qunjie.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; + public static String qunjieHost = "http://110.185.172.132:9242"; + + public static String tokenUrl = "/api/token/getToken"; + + public static String restname = "apiadmin"; + public static String password = "cbd@12345"; + + public static String querySealUrl = "/api/seal/queryAllSealBase"; + + public static String applyUrl = "/api/item/sealAuthorize"; + + public static String finishUrl = "/api/item/finishWorkflowApply"; + + public static String sealTable = "uf_yzgl"; + + public static String applyerUserName = "admin"; + + public static String ocr = "1"; + + public static String preventOcrCompare = "1"; + + public static String watermark = "1"; + + public static String preventWaterMark = "1"; + + public static String preventPower = "1"; + + public static String prevent = "1"; + + public static String plaintextMarkSwitch = "1"; + + public static String remoteMonitoringSwitch = "1"; + + public static String preventWatermarkModel = "1"; + + public static String oneCodeOneUseSwitch = "1"; + + public static String classifiedSwitch = "1"; + + public static String compound = "1"; + + public static String deviceCommonVideo = "0"; + + public static String consoleCommonVideo = "0"; + + public static String consoleCrossVideo = "0"; + + public static String consoleViolationVideo = "0"; + + public static String cosCenterTable = "uf_cos_center"; + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/FormFieldDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/FormFieldDao.java new file mode 100644 index 0000000..9619adc --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/FormFieldDao.java @@ -0,0 +1,135 @@ +package com.weaver.seconddev.chapanda.qunjie.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.qunjie.constant.Constants; +import com.weaver.seconddev.chapanda.qunjie.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class FormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(FormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/SealsManageDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/SealsManageDao.java new file mode 100644 index 0000000..6297a10 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/dao/SealsManageDao.java @@ -0,0 +1,86 @@ +package com.weaver.seconddev.chapanda.qunjie.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.qunjie.constant.Constants; +import com.weaver.seconddev.chapanda.qunjie.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class SealsManageDao { + + private final static Logger log = LoggerFactory.getLogger(SealsManageDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @param sealid + * @return + */ + public String querySealsDataBySealId(String sealid){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select id from " + Constants.sealTable+ + " where sealid = ? and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(sealid); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + if(recordList.size() > 0){ + dataid = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return dataid; + } + + + public List> querySealsDetailByRequestid(String requestid){ + String groupId = "weaver-workflow-report-serviceworkflowreport"; + String sourceType = "LOGIC"; + List> recordList = new ArrayList>(); + try{ + String dataSql =" select l.ykyyzid,l.yz,l.yysl,l.qfzcs \n" + + " from ft_jjbc k\n" + + " inner join ft_jjbc_mxb2 l on l.form_data_id = k.form_data_id \n" + + " where k.id = ? " + + " and k.tenant_key=? " + + " and k.delete_type=0 " + + " and l.tenant_key=? " + + " and l.delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(requestid); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}", recordList.size()); + + }catch (Exception e){ + log.error("e:{}" , e); + } + return recordList; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieCreateSealApplyAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieCreateSealApplyAction.java new file mode 100644 index 0000000..3fc6afa --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieCreateSealApplyAction.java @@ -0,0 +1,98 @@ +package com.weaver.seconddev.chapanda.qunjie.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.qunjie.util.Esb2QunjieCreateApplySealUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2QunjieCreateSealApplyAction") +public class Esb2QunjieCreateSealApplyAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieCreateSealApplyAction.class); + + @Autowired + Esb2QunjieCreateApplySealUtil esb2QunjieCreateApplySealUtil; + @Override + public WeaResult> execute(Map params) { + + String requestName = (String) params.get("requestName"); + String sealId = (String) params.get("sealId"); + String applyCount = (String) params.get("applyCount"); + String applyCrossPageSealCount = (String) params.get("applyCrossPageSealCount"); + log.error("requestName:{}",requestName); + log.error("sealId:{}",sealId); + log.error("applyCount:{}",applyCount); + log.error("applyCrossPageSealCount:{}",applyCrossPageSealCount); + + String fileid = (String) params.get("fileid"); + + log.error("fileid:{}",fileid); + + if(StringUtils.isBlank(sealId)){ + return WeaResult.fail(500,"获取印章信息为空"); + } + + if(StringUtils.isBlank(fileid)){ + return WeaResult.fail(500,"用印文件为空"); + } + Long longFileId = 0L; + try{ + longFileId = Long.valueOf(fileid); + }catch (Exception e){ + log.error("e:{}",e); + } + + if(longFileId <=0){ + return WeaResult.fail(500,"用印文件ID转换失败"); + } + + if(StringUtils.isBlank(applyCount) && StringUtils.isBlank(applyCrossPageSealCount)){ + return WeaResult.fail(500,"用印次数和骑缝章次数不能同时为空"); + } + + int applyCountInt = 0; + if(StringUtils.isNotBlank(applyCount)){ + applyCountInt = Integer.valueOf(applyCount); + } + int applyCrossPageSealCountInt = 0; + if(StringUtils.isNotBlank(applyCrossPageSealCount)){ + applyCrossPageSealCountInt = Integer.valueOf(applyCrossPageSealCount); + } + if(applyCountInt <=0 && applyCrossPageSealCountInt <=0){ + return WeaResult.fail(500,"用印次数和骑缝章次数不能同时小等于0"); + } + + Map dataMap = esb2QunjieCreateApplySealUtil.applySealRequest(requestName,sealId,applyCount,applyCrossPageSealCount,longFileId); + + String applyId = String.valueOf(dataMap.get("applyId")); + String workflowBaseId = String.valueOf(dataMap.get("workflowBaseId")); + String formId = String.valueOf(dataMap.get("formId")); + String applyNo = String.valueOf(dataMap.get("applyNo")); + String safeCode = String.valueOf(dataMap.get("safeCode")); + String vrCode = String.valueOf(dataMap.get("vrCode")); + String status = String.valueOf(dataMap.get("status")); + + if(StringUtils.isBlank(safeCode)){ + return WeaResult.fail(500,"用印申请流程创建失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","申请成功"); + actionMap.put("applyid",applyId); + actionMap.put("workflowbaseid",workflowBaseId); + actionMap.put("formid",formId); + actionMap.put("applyno",applyNo); + actionMap.put("safecode",safeCode); + actionMap.put("vrcode",vrCode); + actionMap.put("status",status); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieEconomicCompensationAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieEconomicCompensationAction.java new file mode 100644 index 0000000..05b40e8 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieEconomicCompensationAction.java @@ -0,0 +1,111 @@ +package com.weaver.seconddev.chapanda.qunjie.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.qunjie.util.Esb2QunjieEconomicCompensationUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + + +/** + * 经济补偿 + */ + +@Service("Esb2QunjieEconomicCompensationAction") +public class Esb2QunjieEconomicCompensationAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieEconomicCompensationAction.class); + + @Autowired + Esb2QunjieEconomicCompensationUtil esb2QunjieEconomicCompensationUtil; + @Override + public WeaResult> execute(Map params) { + + String requestName = (String) params.get("requestname"); + String requestid = (String) params.get("requestid"); + log.error("requestid:{}",requestid); + log.error("requestName:{}",requestName); + +// String sealId = (String) params.get("sealId"); +// String applyCount = (String) params.get("applyCount"); +// String applyCrossPageSealCount = (String) params.get("applyCrossPageSealCount"); +// log.error("requestName:{}",requestName); +// log.error("sealId:{}",sealId); +// log.error("applyCount:{}",applyCount); +// log.error("applyCrossPageSealCount:{}",applyCrossPageSealCount); + + String fileids = (String) params.get("fileid"); + log.error("fileids:{}",fileids); + +// if(StringUtils.isBlank(sealId)){ +// return WeaResult.fail(500,"获取印章信息为空"); +// } + +// if(StringUtils.isBlank(fileid)){ +// return WeaResult.fail(500,"用印文件为空"); +// } +// Long longFileId = 0L; +// try{ +// longFileId = Long.valueOf(fileid); +// }catch (Exception e){ +// log.error("e:{}",e); +// } +// +// if(longFileId <=0){ +// return WeaResult.fail(500,"用印文件ID转换失败"); +// } + +// if(StringUtils.isBlank(applyCount) && StringUtils.isBlank(applyCrossPageSealCount)){ +// return WeaResult.fail(500,"用印次数和骑缝章次数不能同时为空"); +// } + +// int applyCountInt = 0; +// if(StringUtils.isNotBlank(applyCount)){ +// applyCountInt = Integer.parseInt(applyCount); +// } +// int applyCrossPageSealCountInt = 0; +// if(StringUtils.isNotBlank(applyCrossPageSealCount)){ +// applyCrossPageSealCountInt = Integer.parseInt(applyCrossPageSealCount); +// } +// if(applyCountInt <=0 && applyCrossPageSealCountInt <=0){ +// return WeaResult.fail(500,"用印次数和骑缝章次数不能同时小等于0"); +// } + + Map dataMap = esb2QunjieEconomicCompensationUtil.applySealRequest(requestid,requestName,fileids); + + String status = String.valueOf(dataMap.get("status")); + if(!"0".equals(status)){ + String data = String.valueOf(dataMap.get("data")); + return WeaResult.fail(500,data); + } + String applyId = String.valueOf(dataMap.get("applyId")); + String workflowBaseId = String.valueOf(dataMap.get("workflowBaseId")); + String formId = String.valueOf(dataMap.get("formId")); + String applyNo = String.valueOf(dataMap.get("applyNo")); + String safeCode = String.valueOf(dataMap.get("safeCode")); + String vrCode = String.valueOf(dataMap.get("vrCode")); + + if(StringUtils.isBlank(applyId)){ + return WeaResult.fail(500,"用印申请流程创建失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","申请成功"); + actionMap.put("applyid",applyId); + actionMap.put("workflowbaseid",workflowBaseId); + actionMap.put("formid",formId); + actionMap.put("applyno",applyNo); + actionMap.put("safecode",safeCode); + actionMap.put("vrcode",vrCode); + actionMap.put("status",status); + actionMap.put("requestid",requestid); + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieFinshSealApplyAction.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieFinshSealApplyAction.java new file mode 100644 index 0000000..cb42fd1 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieFinshSealApplyAction.java @@ -0,0 +1,51 @@ +package com.weaver.seconddev.chapanda.qunjie.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.qunjie.util.Esb2QunjieFinshSealApplyUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2QunjieFinshSealApplyAction") +public class Esb2QunjieFinshSealApplyAction implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieFinshSealApplyAction.class); + + @Autowired + Esb2QunjieFinshSealApplyUtil esb2QunjieFinshSealApplyUtil; + @Override + public WeaResult> execute(Map params) { + log.error("Esb2QunjieFinshSealApplyAction start"); + + String applyId = (String) params.get("applyId"); +// String sealId = (String) params.get("sealId"); + log.error("applyId:{}",applyId); +// log.error("sealId:{}",sealId); + + if(StringUtils.isBlank(applyId)){ + return WeaResult.fail(500,"用印申请流程获取失败"); + } + +// if(StringUtils.isBlank(sealId)){ +// return WeaResult.fail(500,"印章信息获取失败"); +// } + + String message = esb2QunjieFinshSealApplyUtil.finshApplyRquest(applyId); + if(StringUtils.isBlank(message)){ + return WeaResult.fail(500,"关闭授权失败"); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","关闭授权成功"); + actionMap.put("data",message); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieQuerySealBaseCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieQuerySealBaseCron.java new file mode 100644 index 0000000..862161b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieQuerySealBaseCron.java @@ -0,0 +1,43 @@ +package com.weaver.seconddev.chapanda.qunjie.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.qunjie.util.Esb2QunjieQuerySealUtil; +import com.weaver.seconddev.chapanda.qunjie.util.Esb2QunjieTokenUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("Esb2QunjieQuerySealBaseCron") +public class Esb2QunjieQuerySealBaseCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieQuerySealBaseCron.class); + + @Autowired + Esb2QunjieTokenUtil esb2QunjieTokenUtil; + + @Autowired + Esb2QunjieQuerySealUtil esb2QunjieQuerySealUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2QunjieQuerySealBaseCron start"); + + String accessToken = esb2QunjieTokenUtil.getAccessToken(); + if(StringUtils.isNotBlank(accessToken)){ + List ebList = esb2QunjieQuerySealUtil.querySealBaseList(accessToken); + log.error("ebList:{}",ebList.size()); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2QunjieQuerySealBaseCron"); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieTestAttachmentCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieTestAttachmentCron.java new file mode 100644 index 0000000..38a244b --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/esb/Esb2QunjieTestAttachmentCron.java @@ -0,0 +1,113 @@ +package com.weaver.seconddev.chapanda.qunjie.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.eteams.file.client.file.FileData; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.file.ud.api.FileDownloadService; +import com.weaver.seconddev.chapanda.prop.util.ParamConfigUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2QunjieTestAttachmentCron") +public class Esb2QunjieTestAttachmentCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieTestAttachmentCron.class); + + @Autowired + private FileDownloadService fileDownloadService; + + @Autowired + private ParamConfigUtil paramConfigUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2QunjieTestAttachmentCron"); + + String value = paramConfigUtil.queryEnvironmentValue("rzlc.esgine.test"); + log.error("value:{}",value); + + + try { + InetAddress inetAddress = InetAddress.getLocalHost(); + String ip = inetAddress.getHostAddress(); + log.error("ip:{}",ip); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + + try { + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface networkInterface = interfaces.nextElement(); + // 过滤掉loopback接口(通常是127.0.0.1) + if (networkInterface.isLoopback() || !networkInterface.isUp()) { + continue; + } + Enumeration addresses = networkInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + log.error("IP Address: " + addr.getHostAddress()); + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + +// String fileId = String.valueOf(params.get("fileId")); +// log.error("fileId:{}",fileId); +// // 获取文件的输入流 +// InputStream inputStream = null; +// log.error("22222"); +// try{ +// +// FileData fileData = fileDownloadService.downloadFile(Long.valueOf(fileId)); +// log.error("33333"); +// FileObj fileObj = fileData.getFileObj(); +// Long docid = fileObj.getDocId(); +// String name = fileObj.getName(); +// String loadUrl = fileData.getLoadUrl(); +// +// log.error("docid:{}",docid); +// log.error("name:{}",name); +// log.error("loadUrl:{}",loadUrl); +// +// inputStream = fileData.getInputStream(); +// log.error("inputStream:{}",inputStream.available()); +// if(inputStream.available() >0 ){ +// +// } +// +// inputStream.close(); +// }catch (IOException e) { +// log.error("e:{}",e); +// }finally { +// if(inputStream !=null){ +// try { +// inputStream.close(); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// } +// } + + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","Esb2QunjieQuerySealBaseCron"); + + return WeaResult.success(actionMap); + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/DatabaseUtils.java new file mode 100644 index 0000000..66b93ec --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/DatabaseUtils.java @@ -0,0 +1,367 @@ +package com.weaver.seconddev.chapanda.qunjie.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import com.weaver.seconddev.chapanda.beisen.util.CommonUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/EbuilderOperateUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/EbuilderOperateUtils.java new file mode 100644 index 0000000..b330b98 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/EbuilderOperateUtils.java @@ -0,0 +1,194 @@ +package com.weaver.seconddev.chapanda.qunjie.util; + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.qunjie.constant.Constants; +import com.weaver.seconddev.chapanda.qunjie.dao.FormFieldDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + +@Component +public class EbuilderOperateUtils { + + private final static Logger log = LoggerFactory.getLogger(EbuilderOperateUtils.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + @RpcReference(group = "ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + + public EBDataChangeResult bacthInsertEbForm(String formTable,List datas) { + + log.error("bacthInsertDbForm"); + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + Map recordMap= formFieldDao.queryTableFormId(formTable); + + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n datas = new ArrayList<>(); +// // 第一个数据项 +// EBDataReqDto ebDataReqDto1 = new EBDataReqDto(); +// List mainDatas1 = new ArrayList<>(); +// // 主表数据组装 +// mainDatas1.add(new EBDataReqDetailDto("id", mainid, false)); +// ebDataReqDto1.setMainDatas(mainDatas1); +// +// /****************** 设置明细操作方式 - 不做覆盖 需要追加 ******************/ +// Map detailDatas = new HashMap<>(); +// EBDataReqOperationInfo detailOperation = new EBDataReqOperationInfo(); +// detailOperation.setCover(false); +// detailOperation.setNeedAdd(true); +// detailDatas.put(1120080376580644874L, detailOperation); +// ebDataReqOperation.setDetailDatas(detailDatas); +// +// // 明细行数据组装 +// Map>> detailDatas1 = new HashMap<>(); +// List> detailDataList1 = new ArrayList<>(); +// List detailData1 = new ArrayList(); +// // 第一个明细表 第一条数据 +// detailData1.add(new EBDataReqDetailDto("1120167723322155008", rcid, false)); +// detailData1.add(new EBDataReqDetailDto("1120080728843460609", String.valueOf(points), false)); +// detailDataList1.add(detailData1); +// detailDatas1.put(1120080376580644874L, detailDataList1); +// ebDataReqDto1.setDetailDatas(detailDatas1); +// datas.add(ebDataReqDto1); +// +// ebDataChangeReqDto.setOperation(ebDataReqOperation); +// +// // 设置数据 +// ebDataChangeReqDto.setDatas(datas); +// EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); +// +// return ebDataChangeResult; +// } + + public EBDataChangeResult bacthEditEbForm(String formTable,List datas) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + Map recordMap= formFieldDao.queryTableFormId(formTable); + + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + + if (StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)) { + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + /** + * 直接通过id更新数据, 即update table set a = '11' where id = 1 + */ + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + ebDataReqOperation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + // 数据没有找到的时候是否新增数据 + EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); + ebDataReqOperationInfo.setNeedAdd(true); + ebDataReqOperation.setMainData(ebDataReqOperationInfo); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + ebDataChangeReqDto.setDatas(datas); + ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + } + return ebDataChangeResult; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieCreateApplySealUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieCreateApplySealUtil.java new file mode 100644 index 0000000..1ea9740 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieCreateApplySealUtil.java @@ -0,0 +1,333 @@ +package com.weaver.seconddev.chapanda.qunjie.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.eteams.file.client.file.FileData; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.file.ud.api.FileDownloadService; +import com.weaver.seconddev.chapanda.qunjie.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.Header; +import org.apache.http.HttpStatus; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntity; +import org.apache.http.entity.mime.content.FileBody; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.message.BasicHeader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import java.util.Base64; +import java.nio.charset.Charset ; + +@Component +public class Esb2QunjieCreateApplySealUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieCreateApplySealUtil.class); + + @Autowired + private Esb2QunjieTokenUtil esb2QunjieTokenUtil; + + @Autowired + private FileDownloadService fileDownloadService; + + public Map applySealRequest(String requestName,String sealId,String applyCount,String applyCrossPageSealCount,Long fileid) { + log.error("applySealRequest start"); + Map messageMap = new HashMap(); + + FileData fileData = fileDownloadService.downloadFile(fileid); + FileObj fileObj = fileData.getFileObj(); + String fileName = fileObj.getName(); + log.error("fileName:{}",fileName); + InputStream fileInputStream = null; + try{ + fileInputStream = fileData.getInputStream(); + + if(fileInputStream.available() > 0) { + + byte[] fileByte = convertInputStreamToBytes(fileInputStream); + log.error("fileByte:{}",fileByte.length); + + if(fileByte.length > 0){ + String token = esb2QunjieTokenUtil.getAccessToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ + + +// { +// "title": "测试20250704", +// "applyerUserName": "admin", +// "callBackUrl": "baidu.com", +// "usedSealParamList": [ +// { +// "sealId": "4e22398d-0ab1-4226-8546-7f65f6f8622d", +// "takeOut": "0", +// "applyCount": "1" +// } +// ], +// "option": { +// "watermark": "1", +// "preventWaterMark": "1" +// } +// } + + + JSONArray usedSealParamList = new JSONArray(); + JSONObject usedSealParam = new JSONObject(); + usedSealParam.put("sealId",sealId); + usedSealParam.put("takeOut","0"); + usedSealParam.put("applyCount",applyCount); + usedSealParam.put("applyCrossPageSealCount",applyCrossPageSealCount); + usedSealParamList.add(usedSealParam); + + JSONObject optionJson = new JSONObject(); + optionJson.put("ocr",Constants.ocr); + optionJson.put("preventOcrCompare",Constants.preventOcrCompare); + optionJson.put("watermark",Constants.watermark); + optionJson.put("preventWaterMark",Constants.preventWaterMark); + optionJson.put("preventPower",Constants.preventPower); + optionJson.put("prevent",Constants.prevent); + optionJson.put("remoteMonitoringSwitch",Constants.remoteMonitoringSwitch); + optionJson.put("oneCodeOneUseSwitch",Constants.oneCodeOneUseSwitch); + optionJson.put("compound",Constants.compound); + JSONObject bodyJson = new JSONObject(); + bodyJson.put("title",requestName); + bodyJson.put("applyerUserName",Constants.applyerUserName); + bodyJson.put("usedSealParamList",usedSealParamList); + bodyJson.put("option",optionJson); + + log.error("bodyJson:"+bodyJson.toJSONString()); + + String message= doFormDataPost(bodyJson.toJSONString(),token,fileName,fileByte); +// String message= doPostReqeustByOkHttp(bodyJson.toJSONString(),token,fileName,fileByte); + log.error("message:{}",message); + messageMap = convertBodyDataToMap(message); + } + } + } + + fileInputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + }finally { + if(fileInputStream !=null){ + try { + fileInputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + + return messageMap; + } + + public String doPostReqeustByOkHttp(String bodyData,String token,String fileName,byte[] fileByte){ + String msg = ""; + + log.error("fileByte:{}",fileByte.length); + log.error("fileName:{}",fileName); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + + + +// { +// "title": "测试20250704", +// "applyerUserName": "admin", +// "callBackUrl": "baidu.com", +// "usedSealParamList": [ +// { +// "sealId": "5021257c-1002-491a-b111-6618914123f4", +// "takeOut": "0", +// "applyCount": "1" +// } +// ], +// "option": { +// "watermark": "1", +// "preventWaterMark": "1" +// } +// } + + try { + String encodedFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + RequestBody body = new MultipartBody.Builder().setType(MediaType.get("multipart/form-data;charset=utf-8")) + .addFormDataPart("workflowApplyParam",bodyData) + .addFormDataPart("file",encodedFileName, RequestBody.create(MediaType.parse("application/octet-stream"),fileByte)) + .build(); + Request request = new Request.Builder() + .url(Constants.qunjieHost+ Constants.applyUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (Exception e) { + log.error("e:"+e); + } + return msg; + } + + public byte[] convertInputStreamToBytes(InputStream inputStream) throws IOException { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + log.error("inputStream2:{}",inputStream.available()); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + byteStream.write(buffer, 0, bytesRead); + } + log.error("byteStream:{}",byteStream.toByteArray().length); + + return byteStream.toByteArray(); + } + + + public Map convertBodyDataToMap(String message) { + Map messageMap = new HashMap(); + + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("status")){ + String status = returnData.getString("status"); + log.error("status:"+status); + if("0".equals(status)){ + JSONObject dataJson = returnData.getJSONObject("data"); + String applyId = dataJson.getString("applyId"); + String workflowBaseId = dataJson.getString("workflowBaseId"); + String formId = dataJson.getString("formId"); + String applyNo = dataJson.getString("applyNo"); + String safeCode = dataJson.getString("safeCode"); + String applyStatus = dataJson.getString("status"); + + log.error("applyId:{}",applyId); + log.error("workflowBaseId:{}",workflowBaseId); + log.error("formId:{}",formId); + log.error("applyNo:{}",applyNo); + log.error("safeCode:{}",safeCode); + log.error("applyStatus:{}",applyStatus); + if("null".equals(applyStatus)){ + applyStatus = ""; + } + + String vrCode = ""; + if(dataJson.containsKey("usedSealParamList")){ + JSONArray usedSealParamArray = dataJson.getJSONArray("usedSealParamList"); + log.error("usedSealParamArray:{}",usedSealParamArray.size()); + for(int i=0;i applySealRequest(String requestid,String requestName,String fileids) { + Map messageMap = new HashMap(); + +// MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder().setType(MediaType.get("multipart/form-data;charset=utf-8")); + + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + builder.setCharset(StandardCharsets.UTF_8);//设置编码,解决中文乱码问题 + builder.setMode(HttpMultipartMode.RFC6532); + + InputStream inputStream = null; + try { + String[] fileidArray = fileids.split(","); + for(int i=0;i 0) { + byte[] fileByte = convertInputStreamToBytes(inputStream); + log.error("fileByte:{}", fileByte.length); + if (fileByte.length > 0) { +// multipartBodyBuilder.addFormDataPart("file",encodedFileName, RequestBody.create(MediaType.parse("application/octet-stream"),fileByte)); + builder.addBinaryBody("file", fileByte, ContentType.MULTIPART_FORM_DATA,fileName); + } + } + } + inputStream.close(); + }catch (IOException e){ + log.error("e:{}",e); + }finally { + if(inputStream !=null){ + try { + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + JSONObject bodyJson = new JSONObject(); + JSONArray usedSealParamList = new JSONArray(); + List> userSealList = sealsManageDao.querySealsDetailByRequestid(requestid); + log.error("userSealList:{}",userSealList.size()); + if(userSealList.size() > 0){ + for(int i=0;i sealMap = userSealList.get(i); + String sealId = String.valueOf(sealMap.get("ykyyzid")); + String applyCount = String.valueOf(sealMap.get("yysl")); + String applyCrossPageSealCount = String.valueOf(sealMap.get("qfzcs")); + + log.error("sealId:{}",sealId); + log.error("applyCount:{}",applyCount); + log.error("applyCrossPageSealCount:{}",applyCrossPageSealCount); + + JSONObject usedSealParam = new JSONObject(); + usedSealParam.put("sealId",sealId); + usedSealParam.put("takeOut","0"); + usedSealParam.put("applyCount",applyCount); + usedSealParam.put("applyCrossPageSealCount",applyCrossPageSealCount); + usedSealParamList.add(usedSealParam); + } + log.error("usedSealParamList:{}",usedSealParamList.size()); + + JSONObject optionJson = new JSONObject(); + optionJson.put("ocr",Constants.ocr); + optionJson.put("preventOcrCompare",Constants.preventOcrCompare); + optionJson.put("watermark",Constants.watermark); + optionJson.put("preventWaterMark",Constants.preventWaterMark); + optionJson.put("preventPower",Constants.preventPower); + optionJson.put("prevent",Constants.prevent); + optionJson.put("remoteMonitoringSwitch",Constants.remoteMonitoringSwitch); + optionJson.put("oneCodeOneUseSwitch",Constants.oneCodeOneUseSwitch); + optionJson.put("compound",Constants.compound); + + bodyJson.put("title",requestName); + bodyJson.put("applyerUserName",Constants.applyerUserName); + bodyJson.put("usedSealParamList",usedSealParamList); + bodyJson.put("option",optionJson); + } + log.error("bodyJson:"+bodyJson.toJSONString()); + + String token = esb2QunjieTokenUtil.getAccessToken(); + log.error("token:"+token); + if(StringUtils.isNotBlank(token)){ +// multipartBodyBuilder.addFormDataPart("workflowApplyParam",bodyJson.toJSONString()); +// RequestBody body = multipartBodyBuilder.build(); +// String message= doFormDataPost(bodyJson.toJSONString(),token,body); + + builder.addTextBody("workflowApplyParam", bodyJson.toJSONString(),ContentType.create("multipart/form-data", Charset.forName("UTF-8"))); + String message= doFormDataPost(bodyJson.toJSONString(),token,builder); + + log.error("message:{}",message); + messageMap = convertBodyDataToMap(message); + } + return messageMap; + } + + public String doPostReqeustByOkHttp(String bodyData,String token,RequestBody body){ + String msg = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + + + try { + Request request = new Request.Builder() + .url(Constants.qunjieHost+ Constants.applyUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (Exception e) { + log.error("e:"+e); + } + return msg; + } + + public byte[] convertInputStreamToBytes(InputStream inputStream) throws IOException { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + log.error("inputStream2:{}",inputStream.available()); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + byteStream.write(buffer, 0, bytesRead); + } + log.error("byteStream:{}",byteStream.toByteArray().length); + + return byteStream.toByteArray(); + } + + + public Map convertBodyDataToMap(String message) { + Map messageMap = new HashMap(); + + if(StringUtils.isNotBlank(message)){ + JSONObject returnData = JSONObject.parseObject(message); + if(returnData.containsKey("status")){ + String status = returnData.getString("status"); + log.error("status:"+status); + if("0".equals(status)){ + JSONObject dataJson = returnData.getJSONObject("data"); + String applyId = dataJson.getString("applyId"); + String workflowBaseId = dataJson.getString("workflowBaseId"); + String formId = dataJson.getString("formId"); + String applyNo = dataJson.getString("applyNo"); + String safeCode = dataJson.getString("safeCode"); + String applyStatus = dataJson.getString("status"); + + log.error("applyId:{}",applyId); + log.error("workflowBaseId:{}",workflowBaseId); + log.error("formId:{}",formId); + log.error("applyNo:{}",applyNo); + log.error("safeCode:{}",safeCode); + log.error("applyStatus:{}",applyStatus); + if("null".equals(applyStatus)){ + applyStatus = ""; + } + + String vrCode = ""; + if(dataJson.containsKey("usedSealParamList")){ + JSONArray usedSealParamArray = dataJson.getJSONArray("usedSealParamList"); + log.error("usedSealParamArray:{}",usedSealParamArray.size()); + for(int i=0;i querySealBaseList(String token){ + List ebList = new ArrayList(); + + List> sealList = new ArrayList>(); + + List fieldList = new ArrayList(); + fieldList.add("sealid"); + fieldList.add("orgNo"); + fieldList.add("sealName"); + fieldList.add("sealStatus"); + fieldList.add("sealType"); + fieldList.add("sealNo"); + fieldList.add("yzzl"); + try { + String msg = doPostReqeustByOkHttp(token); + log.error("msg:"+msg); + if(StringUtils.isNotBlank(msg)){ + JSONObject msgJson = JSONObject.parseObject(msg); + if(msgJson.containsKey("status")){ + String status = msgJson.getString("status"); + if("0".equals(status)){ + JSONArray dataArray = msgJson.getJSONArray("data"); + for (int i = 0; i < dataArray.size(); i++) { + JSONObject dataJson = dataArray.getJSONObject(i); + + String id = dataJson.getString("id"); + String sealName = dataJson.getString("sealName"); + String sealStatus = dataJson.getString("sealStatus"); + String sealShape = dataJson.getString("sealShape"); + String sealMaterial = dataJson.getString("sealMaterial"); + String sealType = dataJson.getString("sealType"); + String createDate = dataJson.getString("createDate"); + String picId = dataJson.getString("picId"); + String sealCategory = dataJson.getString("sealCategory"); + String sealCategoryNew = dataJson.getString("sealCategoryNew"); + String adminId = dataJson.getString("adminId"); + String addressStatus = dataJson.getString("addressStatus"); + String imgHeader = dataJson.getString("imgHeader"); + String sealNo = dataJson.getString("sealNo"); + String sealSurroundWord = dataJson.getString("sealSurroundWord"); + + + String orgNo = dataJson.getString("orgNo"); + + JSONObject deviceJson = dataJson.getJSONObject("device"); + String blueNo = deviceJson.getString("blueNo"); + String deviceTypeValue = deviceJson.getString("deviceTypeValue"); + String isWarning = deviceJson.getString("isWarning"); + String isBind = deviceJson.getString("isBind"); + String warningTime = deviceJson.getString("warningTime"); + + Map sealMap = new HashMap(); + sealMap.put("sealid",id); + sealMap.put("sealName",sealName); + sealMap.put("sealStatus",sealStatus); + sealMap.put("sealShape",sealShape); + sealMap.put("sealMaterial",sealMaterial); + sealMap.put("sealType",sealType); + sealMap.put("createDate",createDate); + sealMap.put("picId",picId); + sealMap.put("sealCategory",sealCategory); + sealMap.put("sealCategoryNew",sealCategoryNew); + sealMap.put("adminId",adminId); + sealMap.put("addressStatus",addressStatus); + sealMap.put("imgHeader",imgHeader); + sealMap.put("sealNo",sealNo); + sealMap.put("sealSurroundWord",sealSurroundWord); + sealMap.put("orgNo",orgNo); + sealMap.put("blueNo",blueNo); + sealMap.put("deviceTypeValue",deviceTypeValue); + sealMap.put("isWarning",isWarning); + sealMap.put("isBind",isBind); + sealMap.put("warningTime",warningTime); + sealList.add(sealMap); + } + } + } + } + + log.error("sealList:"+sealList.size()); + + if(sealList.size()>0){ + Map fieldMap = formFieldDao.queryFromTableField(Constants.sealTable,fieldList); + + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + + for(int i=0;i dataMap = sealList.get(i); + EBDataReqDto ebDataReqDto = new EBDataReqDto(); + List mainData = new ArrayList(); + + String sealid = String.valueOf(dataMap.get("sealid")); + String ufId = sealsManageDao.querySealsDataBySealId(sealid); + + if(StringUtils.isNotBlank(ufId)) { + log.error("修改"); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertEbForm(Constants.sealTable,addDatas); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(Constants.sealTable,updateDatas); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + + } + + } + } catch (Exception e) { + log.error("e:"+e); + } + return ebList; + } + + + public String doPostReqeustByOkHttp(String token){ + String msg = ""; + + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, "{}"); + + try { + Request request = new Request.Builder() + .url(Constants.qunjieHost+Constants.querySealUrl) + .method("POST", body) + .addHeader("Authorization", "Bearer "+token) + .addHeader("Content-Type", "application/json") + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + } catch (IOException e) { + log.error("e:"+e); + throw new RuntimeException(e); + } + return msg; + } + + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieTokenUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieTokenUtil.java new file mode 100644 index 0000000..20c7b9e --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/qunjie/util/Esb2QunjieTokenUtil.java @@ -0,0 +1,61 @@ +package com.weaver.seconddev.chapanda.qunjie.util; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.seconddev.chapanda.qunjie.constant.Constants; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +@Component +public class Esb2QunjieTokenUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2QunjieTokenUtil.class); + + public String getAccessToken() { + + String accessToken = ""; + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); + + try { + RequestBody body = RequestBody.create(mediaType, "restname="+Constants.restname+"&password="+Constants.password); + Request request = new Request.Builder() + .url(Constants.qunjieHost+Constants.tokenUrl) + .method("POST", body) + .addHeader("Content-Type", "application/x-www-form-urlencoded") + .build(); + Response response = client.newCall(request).execute(); + + int code = response.code(); + String msg = response.body().string(); + + log.error("code:{}",code); + log.error("msg:{}",msg); + + if(code == 200){ + if(StringUtils.isNotBlank(msg)){ + JSONObject returnJson = JSONObject.parseObject(msg); + if(returnJson.containsKey("status")){ + String status = returnJson.getString("status"); + if("0".equals(status)){ + if(returnJson.containsKey("data")){ + JSONObject dataJson = returnJson.getJSONObject("data"); + if(dataJson.containsKey("token")){ + accessToken = dataJson.getString("token"); + } + } + } + } + } + } + } catch (Exception e) { + log.error("e:{}",e.getMessage()); + e.printStackTrace(); + } + return accessToken; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/constant/Constants.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/constant/Constants.java new file mode 100644 index 0000000..c0d44aa --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/constant/Constants.java @@ -0,0 +1,21 @@ +package com.weaver.seconddev.chapanda.sap.constant; + + +public class Constants { + public static String TENANT_KEY = "t024j0gfn0"; + public static String SysUserId = "1167276462243069953"; + + public static String cosCenterTable = "uf_cos_center"; + + public static String sapHost = "http://10.10.7.237:50000"; + + public static String queryIF311 = "/RESTAdapter/OA/IF311"; + + public static String hrmDepartmentCustomTable = "ft_1154218872715993098"; + + public static String hrmLegalEntity = "uf_legal_entity"; + + public static String Username = "POQ_EHR"; + + public static String Password = "P@ss123456"; +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/Esb2SapUpdateIncorporatedDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/Esb2SapUpdateIncorporatedDao.java new file mode 100644 index 0000000..1874c21 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/Esb2SapUpdateIncorporatedDao.java @@ -0,0 +1,171 @@ +package com.weaver.seconddev.chapanda.sap.dao; + +import com.alibaba.fastjson.JSON; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.sap.util.DatabaseUtils; +import com.weaver.seconddev.chapanda.sap.constant.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.*; + +@Component +public class Esb2SapUpdateIncorporatedDao { + + private final static Logger log = LoggerFactory.getLogger(Esb2SapUpdateIncorporatedDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /*** + * + * @return + */ + public Map updateIncorporatedCompany(String BUKRS_T,String BUKRS){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update "+Constants.hrmLegalEntity+" set sapbm = '"+BUKRS+"' " + + " where delete_type = 0\n" + + " and mc ='"+BUKRS_T+"' and tenant_key = '"+Constants.TENANT_KEY+"'" ; + + log.error("dataSql:" + dataSql); + result = databaseUtils.execute(sourceType, groupId, dataSql); + + log.error("result:{}", JSON.toJSONString(result)); + + }catch (Exception e){ + log.error("e:" + e); + } + return result; + } + + + public String queryCostCenterDataId(String KOSTL){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select id from " + Constants.cosCenterTable + + " where bh = ? and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(KOSTL); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}" , recordList.size()); + if(recordList.size() > 0){ + dataid = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return dataid; + } + + + public String queryHrmDepartmentCustomId(String KOSTL){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select form_data_id from eteams." + Constants.hrmDepartmentCustomTable + + " where oid = ? and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(KOSTL); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}" , recordList.size()); + if(recordList.size() > 0){ + dataid = String.valueOf(recordList.get(0).get("form_data_id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return dataid; + } + + + + public String queryHrmIncorporatedCompany(String BUKRS_T){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + String dataid = ""; + try{ + String dataSql =" select id from " + Constants.hrmLegalEntity + + " where mc = ? and tenant_key=? \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + List paramList = new ArrayList<>(100); + paramList.add(BUKRS_T); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}" , recordList.size()); + if(recordList.size() > 0){ + dataid = String.valueOf(recordList.get(0).get("id")); + } + }catch (Exception e){ + log.error("e:{}" , e); + } + return dataid; + } + + public Map updateHrmDepartment(String deptFormDataId,String costCenterId,String companyId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update eteams.ft_1154218872715993098 set frgs='"+companyId+"',cbzx='"+costCenterId+"' " + + " where form_data_id ='"+deptFormDataId+"' and tenant_key='"+Constants.TENANT_KEY+"' \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + result = databaseUtils.execute(sourceType, groupId, dataSql); + + log.error("result:{}", JSON.toJSONString(result)); + + }catch (Exception e){ + log.error("e:{}" , e); + } + return result; + } + + + public Map updateHrmEmployee(String deptFormDataId,String costCenterId,String companyId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map result = new HashMap(); + try{ + String dataSql =" update eteams.ft_1152026012537184302 set frgs='"+companyId+"',cbzx='"+costCenterId+"' " + + " where department in( select id from eteams.department where formdata='"+deptFormDataId+"' and tenant_key='"+Constants.TENANT_KEY+"' and delete_type=0 ) and tenant_key='"+Constants.TENANT_KEY+"' \n" + + " and delete_type=0 " ; + + log.error("dataSql:{}" , dataSql); + result = databaseUtils.execute(sourceType, groupId, dataSql); + log.error("result:{}", JSON.toJSONString(result)); + }catch (Exception e){ + log.error("e:{}" , e); + } + return result; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/FormFieldDao.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/FormFieldDao.java new file mode 100644 index 0000000..60057ea --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/dao/FormFieldDao.java @@ -0,0 +1,135 @@ +package com.weaver.seconddev.chapanda.sap.dao; + +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.seconddev.chapanda.sap.constant.Constants; +import com.weaver.seconddev.chapanda.sap.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class FormFieldDao { + + private final static Logger log = LoggerFactory.getLogger(FormFieldDao.class); + + @Autowired + private DatabaseUtils databaseUtils; + + /** + * + * @param fieldId + * @return + */ + public Map queryFieldOptionByFieldid(String fieldId){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map optionMap = new HashMap(); + try{ + + String dataSql =" select name,value_key from field_option where field_id=? " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(fieldId); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String name = String.valueOf(recordMap.get("name")); + String value_key = String.valueOf(recordMap.get("value_key")); + optionMap.put(value_key,name); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return optionMap; + } + + /*** + * + * @param tableName + * @return + */ + public Map queryTableFormId(String tableName){ + String sourceType = "LOGIC"; + String groupId = "weaver-ebuilder-form-service"; + Map recordMap = new HashMap(); + try{ + String dataSql =" select id,app_id from ebdf_obj where table_name=? and delete_type=0 and tenant_key=?" ; + log.error("dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(tableName); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryTableFormId:"+recordList.size()); + if(recordList.size()>0){ + recordMap = recordList.get(0); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryTableFormId:e:" + e); + } + return recordMap; + } + + + /** + * + * @param dataKeyList + * @return + */ + public Map queryFromTableField(String formTable,List dataKeyList){ + String groupId = "weaver-ebuilder-form-service"; + String sourceType = "LOGIC"; + Map fieldMap = new HashMap(); + try{ + String dataKey = dataKeyList.stream().collect(Collectors.joining(",")); + dataKey = "'"+dataKey.replace(",","','")+"'" ; + + String dataSql =" select id,form_id,title,data_key " + + " from form_field " + + " where form_id in( select form_id from form_table where table_name=? and delete_type=0 and tenant_key=? ) \n" + + " and data_key in("+dataKey+")\n" + + " and sub_form_id is null " + + " and tenant_key=? \n" + + " and delete_type=0" ; + + log.error("queryFromTableField--dataSql:" + dataSql); + List paramList = new ArrayList<>(100); + paramList.add(formTable); + paramList.add(Constants.TENANT_KEY); + paramList.add(Constants.TENANT_KEY); + + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("queryFromTableField:"+recordList.size()); + for(Map recordMap : recordList ) { + String data_key = String.valueOf(recordMap.get("data_key")); + String id = String.valueOf(recordMap.get("id")); + fieldMap.put(data_key,id); + } + }catch (Exception e){ + e.printStackTrace(); + log.error("queryFromTableField:e:" + e); + } + return fieldMap; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/entity/OkHttpDto.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/entity/OkHttpDto.java new file mode 100644 index 0000000..8a46506 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/entity/OkHttpDto.java @@ -0,0 +1,65 @@ +package com.weaver.seconddev.chapanda.sap.entity; + +import com.alibaba.fastjson.JSONObject; +import org.springframework.stereotype.Component; + +/** + * packageName com.weaver.seconddev.chapanda.esign.entity + * + * @ClassName OkHttpDto + * @Author shil + * @Date 2025/8/12 15:37 + * @Description TODO + */ + +@Component +public class OkHttpDto { + + int responseCode; + String responseBody; + + int dataCode; + String dataMsg; + + JSONObject dataJson; + + public int getResponseCode() { + return responseCode; + } + + public void setResponseCode(int responseCode) { + this.responseCode = responseCode; + } + + public String getResponseBody() { + return responseBody; + } + + public void setResponseBody(String responseBody) { + this.responseBody = responseBody; + } + + public int getDataCode() { + return dataCode; + } + + public void setDataCode(int dataCode) { + this.dataCode = dataCode; + } + + public String getDataMsg() { + return dataMsg; + } + + public void setDataMsg(String dataMsg) { + this.dataMsg = dataMsg; + } + + public JSONObject getDataJson() { + return dataJson; + } + + public void setDataJson(JSONObject dataJson) { + this.dataJson = dataJson; + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/esb/Esb2SapIncorporatedCompanyCron.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/esb/Esb2SapIncorporatedCompanyCron.java new file mode 100644 index 0000000..79b7a5a --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/esb/Esb2SapIncorporatedCompanyCron.java @@ -0,0 +1,115 @@ +package com.weaver.seconddev.chapanda.sap.esb; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.sap.entity.OkHttpDto; +import com.weaver.seconddev.chapanda.sap.util.Esb2SapIncorporatedCompanyUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service("Esb2SapIncorporatedCompanyCron") +public class Esb2SapIncorporatedCompanyCron implements EsbServerlessRpcRemoteInterface { + private final static Logger log = LoggerFactory.getLogger(Esb2SapIncorporatedCompanyCron.class); + + @Autowired + Esb2SapIncorporatedCompanyUtil esb2SapIncorporatedCompanyUtil; + + @Override + public WeaResult> execute(Map params) { + log.error("Esb2QunjieTestAttachmentCron"); + OkHttpDto okHttpDto = esb2SapIncorporatedCompanyUtil.queryIF311List(); + log.error("getResponseCode:{}",okHttpDto.getResponseCode()); + if(okHttpDto.getResponseCode() == 200){ + JSONObject dataJson = okHttpDto.getDataJson(); + JSONArray dataList = new JSONArray(); + if(dataJson.containsKey("data")){ + dataList = dataJson.getJSONArray("data"); + } + + log.error("dataList:{}",dataList.size()); + + if(dataList.size()>0){ + /*** + * 更新公司法人 + */ + esb2SapIncorporatedCompanyUtil.updateIncorporatedCompany(dataList); + /** + * 更新成本中心 + */ + esb2SapIncorporatedCompanyUtil.updateCostCenter(dataList); + /** + * 更新部门成本中心、人员成本中心 + */ + esb2SapIncorporatedCompanyUtil.updateDeptEmployeeCostCenter(dataList); + } + else{ + return WeaResult.fail(500,"SAP接口获取为空"); + } + }else{ + return WeaResult.fail(500,okHttpDto.getDataMsg()); + } + + Map actionMap = new HashMap(); + actionMap.put("code",200); + actionMap.put("msg","同步成功"); + + return WeaResult.success(actionMap); + } + + public JSONObject convertData(){ + log.error("convertData"); + JSONArray bodyArray = new JSONArray(); + String reposponseBody = "{\"RETURN\":[{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":836567,\"KOSTL\":\"10EAE15030\",\"KOSTL_T\":\"部门测试1\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":2025659,\"KOSTL\":\"10EAE15041\",\"KOSTL_T\":\"部门测试2\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":2335391,\"KOSTL\":\"10EAE15031\",\"KOSTL_T\":\"部门测试2\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":2025659,\"KOSTL\":\"10EAE15032\",\"KOSTL_T\":\"部门测试3\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":2335391,\"KOSTL\":\"10EAE15033\",\"KOSTL_T\":\"部门测试4\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":836567,\"KOSTL\":\"10EAE15033\",\"KOSTL_T\":\"部门测试4\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":836567,\"KOSTL\":\"10EAE15040\",\"KOSTL_T\":\"部门测试1\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":836567,\"KOSTL\":\"10EAE15041\",\"KOSTL_T\":\"部门测试2\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"},{\"P_ID\":\"28C626567F2311F09C870000005DF48A\",\"BUMEN\":2025659,\"KOSTL\":\"10EAE15033\",\"KOSTL_T\":\"部门测试4\",\"BUKRS\":1000,\"BUKRS_T\":\"四川百茶百道实业股份有限公司\"}]}"; + if(StringUtils.isNotBlank(reposponseBody)){ + JSONObject msgJson = JSONObject.parseObject(reposponseBody); + log.error("msgJson:{}",msgJson.toJSONString()); + if(msgJson.containsKey("RETURN")){ + String returnStr = msgJson.getString("RETURN"); + log.error("returnStr:{}",returnStr); + if(!"[]".equals(returnStr)){ + JSONArray returnArray = msgJson.getJSONArray("RETURN"); + log.error("returnArray:{}",returnArray.size()); + for (int i = 0; i < returnArray.size(); i++) { + JSONObject dataJson = returnArray.getJSONObject(i); + + String P_ID = dataJson.getString("P_ID"); + String BUMEN = dataJson.getString("BUMEN"); + String KOSTL = dataJson.getString("KOSTL"); + String BUKRS = dataJson.getString("BUKRS"); + String KOSTL_T = dataJson.getString("KOSTL_T"); + String BUKRS_T = dataJson.getString("BUKRS_T"); + + log.error("KOSTL:{}",KOSTL); + log.error("BUKRS:{}",BUKRS); + log.error("BUMEN:{}",BUMEN); + log.error("BUKRS_T:{}",BUKRS_T); + + JSONObject dataMap = new JSONObject(); + dataMap.put("P_ID",P_ID); + dataMap.put("BUMEN",BUMEN); + dataMap.put("KOSTL",KOSTL); + dataMap.put("BUKRS",BUKRS); + dataMap.put("KOSTL_T",KOSTL_T); + dataMap.put("BUKRS_T",BUKRS_T); + bodyArray.add(dataMap); + } + } + } + } + + log.error("bodyArray:{}",bodyArray.size()); + JSONObject responseDataJson = new JSONObject(); + responseDataJson.put("data",bodyArray); + return responseDataJson; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/CommonUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/CommonUtils.java new file mode 100644 index 0000000..31cd690 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.sap.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/DatabaseUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/DatabaseUtils.java new file mode 100644 index 0000000..9d47c4d --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.sap.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/EbuilderOperateUtils.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/EbuilderOperateUtils.java new file mode 100644 index 0000000..2b5d511 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/EbuilderOperateUtils.java @@ -0,0 +1,195 @@ +package com.weaver.seconddev.chapanda.sap.util; + +import com.weaver.ebuilder.form.client.entity.data.*; +import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; +import com.weaver.framework.rpc.annotation.RpcReference; +import com.weaver.publishkit.api.util.PublishKitRuntimeUtil; +import com.weaver.seconddev.chapanda.sap.constant.Constants; +import com.weaver.seconddev.chapanda.sap.dao.FormFieldDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public class EbuilderOperateUtils { + + private final static Logger log = LoggerFactory.getLogger(EbuilderOperateUtils.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + private PublishKitRuntimeUtil publishKitRuntimeUtil; + + @RpcReference(group = "ebuilderform") + private RemoteSimpleDataService remoteSimpleDataService; + + public EBDataChangeResult bacthInsertEbForm(String formTable,List datas) { + + log.error("bacthInsertDbForm"); + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + Map recordMap= formFieldDao.queryTableFormId(formTable); + + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + + if(StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)){ + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + + EBDataReqOperation operation = new EBDataReqOperation(); + operation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(operation); + + // 主表数据参数 +// Map fieldMap = formFieldDao.queryFromTableField(formTable,fieldList); +// if("uf_yzgl".equals(formTable)){ +// for(int i=0;i dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n dataMap = dataList.get(i); +// EBDataReqDto ebDataReqDto = new EBDataReqDto(); +// List mainData = new ArrayList(); +// for(int n=0;n datas = new ArrayList<>(); +// // 第一个数据项 +// EBDataReqDto ebDataReqDto1 = new EBDataReqDto(); +// List mainDatas1 = new ArrayList<>(); +// // 主表数据组装 +// mainDatas1.add(new EBDataReqDetailDto("id", mainid, false)); +// ebDataReqDto1.setMainDatas(mainDatas1); +// +// /****************** 设置明细操作方式 - 不做覆盖 需要追加 ******************/ +// Map detailDatas = new HashMap<>(); +// EBDataReqOperationInfo detailOperation = new EBDataReqOperationInfo(); +// detailOperation.setCover(false); +// detailOperation.setNeedAdd(true); +// detailDatas.put(1120080376580644874L, detailOperation); +// ebDataReqOperation.setDetailDatas(detailDatas); +// +// // 明细行数据组装 +// Map>> detailDatas1 = new HashMap<>(); +// List> detailDataList1 = new ArrayList<>(); +// List detailData1 = new ArrayList(); +// // 第一个明细表 第一条数据 +// detailData1.add(new EBDataReqDetailDto("1120167723322155008", rcid, false)); +// detailData1.add(new EBDataReqDetailDto("1120080728843460609", String.valueOf(points), false)); +// detailDataList1.add(detailData1); +// detailDatas1.put(1120080376580644874L, detailDataList1); +// ebDataReqDto1.setDetailDatas(detailDatas1); +// datas.add(ebDataReqDto1); +// +// ebDataChangeReqDto.setOperation(ebDataReqOperation); +// +// // 设置数据 +// ebDataChangeReqDto.setDatas(datas); +// EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); +// +// return ebDataChangeResult; +// } + + public EBDataChangeResult bacthEditEbForm(String formTable,List datas) { + + EBDataChangeResult ebDataChangeResult = new EBDataChangeResult(); + + Map recordMap= formFieldDao.queryTableFormId(formTable); + + String formId = recordMap.get("id").toString(); + String appId = recordMap.get("app_id").toString(); + log.error("formId:{}",formId); + log.error("appId:{}",appId); + + if (StringUtils.isNotBlank(formId) && StringUtils.isNotBlank(appId)) { + + RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId); + + /** + * 直接通过id更新数据, 即update table set a = '11' where id = 1 + */ + EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); + // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 + ebDataChangeReqDto.setHeader(new EBDataReqHeader(formId, Constants.SysUserId, Constants.TENANT_KEY)); + // 请求操作信息 + EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); + ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); + // 若数据写入后就要从前台看到数据或者立即操作本次写入的数据, 需要调整后置处理为同步 权限处理完成再返回 + ebDataReqOperation.setAsyncPostProcess(false); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + // 数据没有找到的时候是否新增数据 + EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); + ebDataReqOperationInfo.setNeedAdd(true); + ebDataReqOperation.setMainData(ebDataReqOperationInfo); + ebDataChangeReqDto.setOperation(ebDataReqOperation); + ebDataChangeReqDto.setDatas(datas); + ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); + } + return ebDataChangeResult; + } + + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/Esb2SapIncorporatedCompanyUtil.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/Esb2SapIncorporatedCompanyUtil.java new file mode 100644 index 0000000..4eccf70 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/sap/util/Esb2SapIncorporatedCompanyUtil.java @@ -0,0 +1,332 @@ +package com.weaver.seconddev.chapanda.sap.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.form.client.entity.data.EBDataChangeResult; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDetailDto; +import com.weaver.ebuilder.form.client.entity.data.EBDataReqDto; +import com.weaver.seconddev.chapanda.sap.constant.Constants; +import com.weaver.seconddev.chapanda.sap.dao.Esb2SapUpdateIncorporatedDao; +import com.weaver.seconddev.chapanda.sap.dao.FormFieldDao; +import com.weaver.seconddev.chapanda.sap.entity.OkHttpDto; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.*; + + +@Component +public class Esb2SapIncorporatedCompanyUtil { + private final static Logger log = LoggerFactory.getLogger(Esb2SapIncorporatedCompanyUtil.class); + + @Autowired + FormFieldDao formFieldDao; + + @Autowired + EbuilderOperateUtils ebuilderOperateUtils; + + @Autowired + Esb2SapUpdateIncorporatedDao esb2SapUpdateIncorporatedDao; + + /** + * + * @return + */ + public OkHttpDto queryIF311List(){ + OkHttpDto okHttpDto = doPostReqeustByOkHttp(); + return okHttpDto; + } + + public OkHttpDto doPostReqeustByOkHttp(){ + String msg = ""; + OkHttpDto okHttpDto = new OkHttpDto(); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); +// JSONObject bodyJson = new JSONObject(); +// JSONObject dataJson = new JSONObject(); +// dataJson.put("DATA",BUMEN); +// bodyJson.put("data",dataJson); + + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, "{}"); + String authorization = Base64.getUrlEncoder().encodeToString((Constants.Username + ":" + Constants.Password).getBytes()); + try { + log.error(Constants.sapHost+Constants.queryIF311); + Request request = new Request.Builder() + .url(Constants.sapHost+Constants.queryIF311) + .method("POST", body) + .addHeader("Content-Type", "application/json") + .addHeader("Authorization", "Basic "+authorization) + .build(); + Response response = client.newCall(request).execute(); + int code = response.code(); + log.error("code:{}",code); + msg = response.body().string(); + log.error("msg:"+msg); + + okHttpDto.setResponseCode(code); + okHttpDto.setResponseBody(msg); + convertData(msg,okHttpDto); + + } catch (IOException e) { + okHttpDto.setResponseCode(500); + okHttpDto.setDataMsg("请求异常:"+e.getMessage()); + log.error("e:"+e); + } + return okHttpDto; + } + + + public void convertData(String reposponseBody, OkHttpDto okHttpDto){ + JSONArray bodyArray = new JSONArray(); + + if(StringUtils.isNotBlank(reposponseBody)){ + JSONObject msgJson = JSONObject.parseObject(reposponseBody); + if(msgJson.containsKey("RETURN")){ + String returnStr = msgJson.getString("RETURN"); + if(!"[]".equals(returnStr)){ + JSONArray returnArray = msgJson.getJSONArray("RETURN"); + for (int i = 0; i < returnArray.size(); i++) { + JSONObject dataJson = returnArray.getJSONObject(i); + + String P_ID = dataJson.getString("P_ID"); + String BUMEN = dataJson.getString("BUMEN"); + String KOSTL = dataJson.getString("KOSTL"); + String BUKRS = dataJson.getString("BUKRS"); + String KOSTL_T = dataJson.getString("KOSTL_T"); + String BUKRS_T = dataJson.getString("BUKRS_T"); + + log.error("KOSTL:{}",KOSTL); + log.error("BUKRS:{}",BUKRS); + log.error("BUMEN:{}",BUMEN); + log.error("BUKRS_T:{}",BUKRS_T); + + JSONObject dataMap = new JSONObject(); + dataMap.put("P_ID",P_ID); + dataMap.put("BUMEN",BUMEN); + dataMap.put("KOSTL",KOSTL); + dataMap.put("BUKRS",BUKRS); + dataMap.put("KOSTL_T",KOSTL_T); + dataMap.put("BUKRS_T",BUKRS_T); + bodyArray.add(dataMap); + } + } + } + } + + log.error("bodyArray:{}",bodyArray.size()); + JSONObject responseDataJson = new JSONObject(); + responseDataJson.put("data",bodyArray); + okHttpDto.setDataJson(responseDataJson); + } + + + /*** + * 批量更新法人代表 + * @param costCenterList + */ + public void updateIncorporatedCompany(JSONArray costCenterList){ + log.error("costCenterList:{}",costCenterList.size()); + for(int i=0;i updateCostCenter(JSONArray costCenterList){ + List ebList = new ArrayList(); + + List fieldList = new ArrayList(); + fieldList.add("bh"); + fieldList.add("mc"); + try { + log.error("costCenterList:"+costCenterList.size()); + if(costCenterList.size()>0){ + JSONArray costCenterArray = convertData2CostCenter(costCenterList); + Map fieldMap = formFieldDao.queryFromTableField(Constants.cosCenterTable,fieldList); + List addDatas = new ArrayList(); + List updateDatas = new ArrayList(); + + for(int i=0;i mainData = new ArrayList(); + + String KOSTL = String.valueOf(dataMap.getString("KOSTL")); + String ufId = esb2SapUpdateIncorporatedDao.queryCostCenterDataId(KOSTL); + log.error("ufId:{}",ufId); + + if(StringUtils.isNotBlank(ufId)) { + log.error("修改"); + mainData.add(new EBDataReqDetailDto("id", ufId)); + for(int n=0;n 0){ + EBDataChangeResult addEbDataChangeResult = ebuilderOperateUtils.bacthInsertEbForm(Constants.cosCenterTable,addDatas); + boolean isTrue = addEbDataChangeResult.getStatus(); + log.error("message:{}",addEbDataChangeResult.getMessage()); + log.error("isTrue1:{}",isTrue); + if(isTrue){ + ebList.addAll(addEbDataChangeResult.getDataIds()); + } + } + + if(updateDatas.size() > 0){ + + EBDataChangeResult updateEbDataChangeResult = ebuilderOperateUtils.bacthEditEbForm(Constants.cosCenterTable,updateDatas); + boolean isTrue = updateEbDataChangeResult.getStatus(); + log.error("isTrue2:{}",isTrue); + log.error("message2:{}",updateEbDataChangeResult.getMessage()); + if(isTrue){ + ebList.addAll(updateEbDataChangeResult.getDataIds()); + } + } + } + } catch (Exception e) { + log.error("e:"+e); + } + return ebList; + } + + + /*** + * 批量更新部门成本中心 + * @param costCenterList + * @return + */ + public void updateDeptEmployeeCostCenter(JSONArray costCenterList){ + try { + log.error("costCenterList:"+costCenterList.size()); + if(costCenterList.size()>0){ + for(int i=0;i> costCenterList){ +// try { +// log.error("costCenterList:"+costCenterList.size()); +// if(costCenterList.size()>0){ +// for(int i=0;i dataMap = costCenterList.get(i); +// String BUMEN = String.valueOf(dataMap.get("BUMEN")); //oId +// String KOSTL = String.valueOf(dataMap.get("KOSTL")); +// String BUKRS_T = String.valueOf(dataMap.get("BUKRS_T")); +// String deptFormDataId = ""; +// if(StringUtils.isNotBlank(BUMEN)){ +// deptFormDataId = esb2SapUpdateIncorporatedDao.queryHrmDepartmentCustomId(BUMEN); +// } +// String costCenterId = ""; +// if(StringUtils.isNotBlank(KOSTL)){ +// costCenterId = esb2SapUpdateIncorporatedDao.queryCostCenterDataId(KOSTL); +// } +// String companyId = ""; +// if(StringUtils.isNotBlank(BUKRS_T)){ +// companyId = esb2SapUpdateIncorporatedDao.queryHrmIncorporatedCompany(BUKRS_T); +// } +// log.error("deptFormDataId:{},costCenterId:{},companyId:{}",deptFormDataId,costCenterId,companyId); +// if(StringUtils.isNotBlank(deptFormDataId)){ +// esb2SapUpdateIncorporatedDao.updateHrmEmployee(deptFormDataId,costCenterId,companyId); +// } +// } +// } +// } catch (Exception e) { +// log.error("e:"+e); +// } +// } + + + public JSONArray convertData2CostCenter(JSONArray costCenterList){ + JSONArray dataArray = new JSONArray(); + + for(int i=0;i headers = new TreeMap<>(); + // body参数对应的字节数组,请求参数在元数据中显示"in":"body"或"in": "formData",表示参数放在body中 + byte[] body; + // query参数,请求参数在元数据中显示"in":"query",表示参数拼接在请求URL上 + TreeMap queryParam = new TreeMap<>(); + + public SignatureRequest(String httpMethod, String canonicalUri, String host, String xAcsAction, String xAcsVersion) { + this.httpMethod = httpMethod; + this.canonicalUri = canonicalUri; + this.host = host; + this.xAcsAction = xAcsAction; + this.xAcsVersion = xAcsVersion; + initHeader(); + } + + // init headers + private void initHeader() { + headers.put("host", host); + headers.put("x-acs-action", xAcsAction); + headers.put("x-acs-version", xAcsVersion); + SDF.setTimeZone(new SimpleTimeZone(0, "GMT")); // 设置日期格式化时区为GMT + headers.put("x-acs-date", SDF.format(new Date())); + headers.put("x-acs-signature-nonce", UUID.randomUUID().toString()); + } + } + + /** + * System.getenv()表示通过环境变量获取Access Key ID和Access Key Secret。 + */ + private final static String ACCESS_KEY_ID = System.getenv("LTAI5tC2WxpLdtEdg1wLaaYp"); + private final static String ACCESS_KEY_SECRET = System.getenv("iPXi2unHR643PcKRkT89jg8aNrocPD"); + + /** + * 签名协议 + */ + private static final String ALGORITHM = "ACS3-HMAC-SHA256"; + + /** + * 签名示例,您需要根据实际情况替换main方法中的示例参数。 + * ROA接口和RPC接口只有canonicalUri取值逻辑是完全不同,其余内容都是相似的。 + *

+ * 通过API元数据获取请求方法(methods)、请求参数名称(name)、请求参数类型(type)、请求参数位置(in),并将参数封装到SignatureRequest中。 + * 1. 请求参数在元数据中显示"in":"query",通过queryParam传参。 + * 2. 请求参数在元数据中显示"in": "body",通过body传参。 + * 3. 请求参数在元数据中显示"in": "formData",通过body传参。 + */ + public static void main(String[] args) throws IOException { + // RPC接口请求示例一:请求参数"in":"query" + String httpMethod = "POST"; // 请求方式,从元数据中可以获取,建议使用POST。 + String canonicalUri = "/"; // RPC接口无资源路径,故使用正斜杠(/)作为CanonicalURI + String host = "ecs.cn-hangzhou.aliyuncs.com"; // 云产品服务接入点 + String xAcsAction = "DescribeInstanceStatus"; // API名称 + String xAcsVersion = "2014-05-26"; // API版本号 + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion); + // DescribeInstanceStatus请求参数如下: + // RegionId在元数据中显示的类型是String,"in":"query",必填 + signatureRequest.queryParam.put("RegionId", "cn-hangzhou"); + // InstanceId的在元数据中显示的类型是array,"in":"query",非必填 + // String[] instanceIds = {"i-bp10igfmnyttXXXXXXXX", "i-bp1incuofvzxXXXXXXXX", "i-bp1incuofvzxXXXXXXXX"}; + // signatureRequest.queryParam.put("InstanceId", Arrays.asList(instanceIds)); + + /*// RPC接口请求示例二:请求参数"in":"body" + String httpMethod = "POST"; + String canonicalUri = "/"; + String host = "ocr-api.cn-hangzhou.aliyuncs.com"; + String xAcsAction = "RecognizeGeneral"; + String xAcsVersion = "2021-07-07"; + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion); + // 请求参数在元数据中显示"in": "body",通过body传参。 + signatureRequest.body = Files.readAllBytes(Paths.get("D:\\test.png")); + signatureRequest.headers.put("content-type", "application/octet-stream");*/ + + /*// RPC接口请求示例三:请求参数"in": "formData" + String httpMethod = "POST"; + String canonicalUri = "/"; + String host = "mt.aliyuncs.com"; + String xAcsAction = "TranslateGeneral"; + String xAcsVersion = "2018-10-12"; + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion); + // TranslateGeneral请求参数如下: + // Context在元数据中显示的类型是String,"in":"query",非必填 + signatureRequest.queryParam.put("Context", "早上"); + // FormatType、SourceLanguage、TargetLanguage等参数,在元数据中显示"in":"formData" + Map body = new HashMap<>(); + body.put("FormatType", "text"); + body.put("SourceLanguage", "zh"); + body.put("TargetLanguage", "en"); + body.put("SourceText", "你好"); + body.put("Scene", "general"); + String formDataToString = formDataToString(body); + signatureRequest.body = formDataToString.getBytes(StandardCharsets.UTF_8); + signatureRequest.headers.put("content-type", "application/x-www-form-urlencoded");*/ + + /*// ROA接口POST请求 + String httpMethod = "POST"; + String canonicalUri = "/clusters"; // 从元数据中获取:"path": "/clusters" + String host = "cs.cn-beijing.aliyuncs.com"; // endpoint + String xAcsAction= "CreateCluster"; // API名称 + String xAcsVersion= "2015-12-15"; // API版本号 + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion); + // 调用API所需要的参数,请求参数在元数据中显示"in": "body",表示参数放在body中 + TreeMap body = new TreeMap<>(); + body.put("name", "测试"); + body.put("region_id", "cn-beijing"); + body.put("cluster_type", "ExternalKubernetes"); + body.put("vpcid", "vpc-2zeou1uod4ylaXXXXXXXX"); + body.put("container_cidr","10.0.0.0/8"); + body.put("service_cidr", "10.2.0.0/24"); + body.put("security_group_id", "sg-2ze1a0rlgeo7XXXXXXXX"); + body.put("vswitch_ids", Collections.singletonList( + "vsw-2zei30dhfldu8XXXXXXXX" + )); + Gson gson = (new GsonBuilder()).disableHtmlEscaping().create(); + signatureRequest.body = gson.toJson(body).getBytes(StandardCharsets.UTF_8); + signatureRequest.headers.put("content-type", "application/json");*/ + + /*// ROA接口GET请求 + String httpMethod = "GET"; + // canonicalUri如果存在path参数,需要对path参数encode,percentCode({path参数}) + String canonicalUri = "/clusters/" + percentCode("cdb14b4f85130407da748fd3fXXXXXXXX") + "/resources"; + String host = "cs.cn-beijing.aliyuncs.com"; // endpoint + String xAcsAction = "DescribeClusterResources"; // API名称 + String xAcsVersion = "2015-12-15"; // API版本号 + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion); + signatureRequest.queryParam.put("with_addon_resources", true);*/ + + /*// ROA接口DELETE请求 + String httpMethod = "DELETE"; + String canonicalUri = "/clusters/" + percentCode("cdb14b4f85130407da748fd3fXXXXXXXX"); + String host = "cs.cn-beijing.aliyuncs.com"; + String xAcsAction = "DeleteCluster"; + String xAcsVersion = "2015-12-15"; + SignatureRequest signatureRequest = new SignatureRequest(httpMethod, canonicalUri, host, xAcsAction, xAcsVersion);*/ + + // 签名过程 + getAuthorization(signatureRequest); + // 调用API + callApi(signatureRequest); + } + + private static void callApi(SignatureRequest signatureRequest) { + try { + // 通过HttpClient发送请求 + String url = "https://" + signatureRequest.host + signatureRequest.canonicalUri; + URIBuilder uriBuilder = new URIBuilder(url); + // 添加请求参数 + for (Map.Entry entry : signatureRequest.queryParam.entrySet()) { + uriBuilder.addParameter(entry.getKey(), String.valueOf(entry.getValue())); + } + System.out.println(uriBuilder.build()); + HttpUriRequest httpRequest; + switch (signatureRequest.httpMethod) { + case "GET": + httpRequest = new HttpGet(uriBuilder.build()); + break; + case "POST": + HttpPost httpPost = new HttpPost(uriBuilder.build()); + if (signatureRequest.body != null) { + httpPost.setEntity(new ByteArrayEntity(signatureRequest.body, ContentType.create(signatureRequest.headers.get("content-type")))); + } + httpRequest = httpPost; + break; + case "DELETE": + httpRequest = new HttpDelete(uriBuilder.build()); + break; + default: + System.out.println("Unsupported HTTP method: " + signatureRequest.httpMethod); + throw new IllegalArgumentException("Unsupported HTTP method"); + } + + // 添加http请求头 + for (Map.Entry entry : signatureRequest.headers.entrySet()) { + httpRequest.addHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + // 发送请求 + try (CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(httpRequest)) { + String result = EntityUtils.toString(response.getEntity(), "UTF-8"); + System.out.println(result); + } catch (IOException e) { + // 异常处理 + System.out.println("Failed to send request"); + e.printStackTrace(); + } + } catch (URISyntaxException e) { + // 异常处理 + System.out.println("Invalid URI syntax"); + e.printStackTrace(); + } + } + + /** + * 该方法用于根据传入的HTTP请求方法、规范化的URI、查询参数等,计算并生成授权信息。 + */ + private static void getAuthorization(SignatureRequest signatureRequest) { + try { + // 处理queryParam中参数值为List、Map类型的参数,将参数平铺 + TreeMap newQueryParam = new TreeMap<>(); + processObject(newQueryParam, "", signatureRequest.queryParam); + signatureRequest.queryParam = newQueryParam; + // 步骤 1:拼接规范请求串 + // 请求参数,当请求的查询字符串为空时,使用空字符串作为规范化查询字符串 + StringBuilder canonicalQueryString = new StringBuilder(); + signatureRequest.queryParam.entrySet().stream().map(entry -> percentCode(entry.getKey()) + "=" + + percentCode(String.valueOf(entry.getValue()))).forEachOrdered(queryPart -> { + // 如果canonicalQueryString已经不是空的,则在查询参数前添加"&" + if (canonicalQueryString.length() > 0) { + canonicalQueryString.append("&"); + } + canonicalQueryString.append(queryPart); + }); + + // 计算请求体的哈希值 + String requestPayload = ""; // 请求体,当请求正文为空时,比如GET请求,RequestPayload固定为空字符串 + String hashedRequestPayload = signatureRequest.body != null ? sha256Hex(signatureRequest.body) : sha256Hex(requestPayload.getBytes(StandardCharsets.UTF_8)); + signatureRequest.headers.put("x-acs-content-sha256", hashedRequestPayload); + // 构造请求头,多个规范化消息头,按照消息头名称(小写)的字符代码顺序以升序排列后拼接在一起 + StringBuilder canonicalHeaders = new StringBuilder(); + // 已签名消息头列表,多个请求头名称(小写)按首字母升序排列并以英文分号(;)分隔 + StringBuilder signedHeadersSb = new StringBuilder(); + signatureRequest.headers.entrySet().stream().filter(entry -> entry.getKey().toLowerCase().startsWith("x-acs-") || "host".equalsIgnoreCase(entry.getKey()) || "content-type".equalsIgnoreCase(entry.getKey())).sorted(Map.Entry.comparingByKey()).forEach(entry -> { + String lowerKey = entry.getKey().toLowerCase(); + String value = String.valueOf(entry.getValue()).trim(); + canonicalHeaders.append(lowerKey).append(":").append(value).append("\n"); + signedHeadersSb.append(lowerKey).append(";"); + }); + String signedHeaders = signedHeadersSb.substring(0, signedHeadersSb.length() - 1); + String canonicalRequest = signatureRequest.httpMethod + "\n" + signatureRequest.canonicalUri + "\n" + canonicalQueryString + "\n" + canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload; + System.out.println("canonicalRequest=========>\n" + canonicalRequest); + + // 步骤 2:拼接待签名字符串 + String hashedCanonicalRequest = sha256Hex(canonicalRequest.getBytes(StandardCharsets.UTF_8)); // 计算规范化请求的哈希值 + String stringToSign = ALGORITHM + "\n" + hashedCanonicalRequest; + System.out.println("stringToSign=========>\n" + stringToSign); + + // 步骤 3:计算签名 + String signature = DatatypeConverter.printHexBinary(hmac256(ACCESS_KEY_SECRET.getBytes(StandardCharsets.UTF_8), stringToSign)).toLowerCase(); + System.out.println("signature=========>" + signature); + + // 步骤 4:拼接 Authorization + String authorization = ALGORITHM + " " + "Credential=" + ACCESS_KEY_ID + ",SignedHeaders=" + signedHeaders + ",Signature=" + signature; + System.out.println("authorization=========>" + authorization); + signatureRequest.headers.put("Authorization", authorization); + } catch (Exception e) { + // 异常处理 + System.out.println("Failed to get authorization"); + e.printStackTrace(); + } + } + + /** + * 处理请求参数类型为formData的参数。 + * + * @param formData formData类型参数 + * @return String + */ + private static String formDataToString(Map formData) { + Map tileMap = new HashMap<>(); + processObject(tileMap, "", formData); + StringBuilder result = new StringBuilder(); + boolean first = true; + String symbol = "&"; + for (Map.Entry entry : tileMap.entrySet()) { + String value = String.valueOf(entry.getValue()); + if (value != null && !value.isEmpty()) { + if (first) { + first = false; + } else { + result.append(symbol); + } + result.append(percentCode(entry.getKey())); + result.append("="); + result.append(percentCode(value)); + } + } + + return result.toString(); + } + + /** + * 递归处理对象,将复杂对象(如Map和List)展开为平面的键值对 + * + * @param map 原始的键值对集合,将被递归地更新 + * @param key 当前处理的键,随着递归的深入,键会带有嵌套路径信息 + * @param value 对应于键的值,可以是嵌套的Map、List或其他类型 + */ + private static void processObject(Map map, String key, Object value) { + // 如果值为空,则无需进一步处理 + if (value == null) { + return; + } + if (key == null) { + key = ""; + } + // 当值为List类型时,遍历List中的每个元素,并递归处理 + if (value instanceof List) { + List list = (List) value; + for (int i = 0; i < list.size(); ++i) { + processObject(map, key + "." + (i + 1), list.get(i)); + } + } else if (value instanceof Map) { + // 当值为Map类型时,遍历Map中的每个键值对,并递归处理 + Map subMap = (Map) value; + for (Map.Entry entry : subMap.entrySet()) { + processObject(map, key + "." + entry.getKey().toString(), entry.getValue()); + } + } else { + // 对于以"."开头的键,移除开头的"."以保持键的连续性 + if (key.startsWith(".")) { + key = key.substring(1); + } + // 对于byte[]类型的值,将其转换为UTF-8编码的字符串 + if (value instanceof byte[]) { + map.put(key, new String((byte[]) value, StandardCharsets.UTF_8)); + } else { + // 对于其他类型的值,直接转换为字符串 + map.put(key, String.valueOf(value)); + } + } + } + + /** + * 使用HmacSHA256算法生成消息认证码(MAC)。 + * + * @param secretKey 密钥,用于生成MAC的密钥,必须保密。 + * @param str 需要进行MAC认证的消息。 + * @return 返回使用HmacSHA256算法计算出的消息认证码。 + * @throws Exception 如果初始化MAC或计算MAC过程中遇到错误,则抛出异常。 + */ + public static byte[] hmac256(byte[] secretKey, String str) throws Exception { + // 实例化HmacSHA256消息认证码生成器 + Mac mac = Mac.getInstance("HmacSHA256"); + // 创建密钥规范,用于初始化MAC生成器 + SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey, mac.getAlgorithm()); + // 初始化MAC生成器 + mac.init(secretKeySpec); + // 计算消息认证码并返回 + return mac.doFinal(str.getBytes(StandardCharsets.UTF_8)); + } + + /** + * 使用SHA-256算法计算字符串的哈希值并以十六进制字符串形式返回。 + * + * @param input 需要进行SHA-256哈希计算的字节数组。 + * @return 计算结果为小写十六进制字符串。 + * @throws Exception 如果在获取SHA-256消息摘要实例时发生错误。 + */ + public static String sha256Hex(byte[] input) throws Exception { + // 获取SHA-256消息摘要实例 + MessageDigest md = MessageDigest.getInstance("SHA-256"); + // 计算字符串s的SHA-256哈希值 + byte[] d = md.digest(input); + // 将哈希值转换为小写十六进制字符串并返回 + return DatatypeConverter.printHexBinary(d).toLowerCase(); + } + + /** + * 对指定的字符串进行URL编码。 + * 使用UTF-8编码字符集对字符串进行编码,并对特定的字符进行替换,以符合URL编码规范。 + * + * @param str 需要进行URL编码的字符串。 + * @return 编码后的字符串。其中,加号"+"被替换为"%20",星号"*"被替换为"%2A",波浪号"%7E"被替换为"~"。 + */ + public static String percentCode(String str) { + if (str == null) { + throw new IllegalArgumentException("输入字符串不可为null"); + } + try { + return URLEncoder.encode(str, "UTF-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8编码不被支持", e); + } + } +} \ No newline at end of file diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test88.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test88.java new file mode 100644 index 0000000..563ed49 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test88.java @@ -0,0 +1,140 @@ +package com.weaver.seconddev.chapanda.test; + + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDepartmentDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffDto; +import com.weaver.seconddev.chapanda.beisen.entity.BeisenStaffPositionDto; +import org.apache.commons.lang3.StringUtils; + +public class Test88 { + + public static void main(String[] args) { + String bodyData = "{\"total\":1,\"code\":200,\"message\":\"操作成功\",\"sortCursor\":null,\"lastData\":false,\"items\":[{\"staffDto\":{\"avatar\":null,\"departmentId\":836572,\"departmentName\":\"人力资源中心\",\"employedDate\":\"2022-02-17T00:00:00.0000\",\"jobCode\":\"\",\"lineManagerId\":0,\"staffCode\":\"1000003111\",\"staffStatus\":0,\"isDelete\":0,\"allowLogin\":0,\"userId\":404156367,\"tenantId\":431582,\"email\":\"testwangbo@chabaidao.com\",\"userType\":3,\"userStatus\":0,\"origin\":8,\"originalId\":\"404156367\",\"name\":\"测试王波\",\"englishName\":\"\",\"sex\":\"\",\"educationBackground\":\"\",\"mobile\":\"\",\"workPhone\":\"\",\"homePhone\":\"\",\"idCardType\":\"\",\"idCardNumber\":\"\",\"maritalStatus\":\"\",\"nation\":\"\",\"backupMail\":\"\",\"address\":\"\",\"nativePlace\":\"\",\"personalHomePage\":\"\",\"politicalStatus\":\"\",\"speciality\":\"\",\"graduateFrom\":\"\",\"major\":\"\",\"positionCategory\":\"\",\"msn\":\"\",\"qq\":\"\",\"skype\":\"\",\"blog\":\"\",\"gTalk\":\"\",\"aboutMe\":\"\",\"bindMsn\":\"\",\"officeLocation\":\"\",\"bizTitleId\":\"00000000-0000-0000-0000-000000000000\",\"weChat\":\"\",\"modifiedBy\":10000,\"createBy\":402172443,\"bu\":0,\"version\":0},\"departmentDto\":{\"id\":836572,\"name\":\"人力资源中心\",\"code\":\"07\",\"description\":null,\"abbreviation\":\"人力资源中心\",\"parentId\":836553,\"path\":\"/1676228/836553/836572\",\"level\":3,\"status\":1,\"originalId\":\"428102\",\"staffNumber\":4,\"isDelete\":0,\"orderId\":12,\"orgLeaders\":[{\"lids\":[404155397],\"type\":1}],\"modifiedTime\":\"2025-07-10T07:27:41.4690\",\"createTime\":\"2022-07-01T01:44:57.0500\",\"modifiedBy\":10000,\"createBy\":10000,\"languageDic\":{\"name_srp\":\"\",\"shortName_zh_TW\":\"\",\"name_ru\":\"\",\"name_in\":\"\",\"name_en_US\":\"\",\"shortName_bn\":\"\",\"shortName_ko\":\"\",\"name_de\":\"\",\"shortName_it\":\"\",\"shortName_ru\":\"\",\"shortName_km\":\"\",\"shortName_tr\":\"\",\"name_bur\":\"\",\"name_zh_TW\":\"\",\"name_lo\":\"\",\"shortName_pl\":\"\",\"name_ja\":\"\",\"name_km\":\"\",\"name_fr\":\"\",\"shortName_tl\":\"\",\"shortName_fr\":\"\",\"name_tl\":\"\",\"name_it\":\"\",\"shortName_de\":\"\",\"shortName_en_US\":\"\",\"name_pl\":\"\",\"shortName_pt\":\"\",\"name_ko\":\"\",\"shortName_lo\":\"\",\"shortName_ms\":\"\",\"name_tr\":\"\",\"name_es\":\"\",\"name_bn\":\"\",\"shortName_th\":\"\",\"name_th\":\"\",\"name_ms\":\"\",\"name_vi\":\"\",\"shortName_bur\":\"\",\"name_pt\":\"\",\"shortName_vi\":\"\",\"shortName_in\":\"\",\"shortName_srp\":\"\",\"shortName_es\":\"\",\"shortName_ja\":\"\"},\"version\":2},\"positionDto\":{\"status\":null,\"isDelete\":0,\"setID\":null,\"version\":0},\"reportings\":[]}]}"; + + BeisenStaffDto beisenStaffDto = new BeisenStaffDto(); + + if(StringUtils.isNotBlank(bodyData)){ + JSONObject bodyJson = new JSONObject(bodyData); + if(bodyJson.containsKey("code")){ + String code = bodyJson.getStr("code"); + System.out.println("code:{}"+code); + if("200".equals(code)){ + JSONArray itemsArray = bodyJson.getJSONArray("items"); + System.out.println("itemsArray:{}"+itemsArray.size()); + if(!itemsArray.isEmpty()){ + + JSONObject itemObject = itemsArray.getJSONObject(0); + System.out.println(("itemObject:{}"+itemObject.size())); + + if(itemObject.containsKey("staffDto")){ + JSONObject staffDto = itemObject.getJSONObject("staffDto"); + System.out.println("staffDto:{}"+staffDto.size()); + beisenStaffDto.setDepartmentId(staffDto.getStr("departmentId")); + beisenStaffDto.setDepartmentName(staffDto.getStr("departmentName")); + String employedDate = staffDto.getStr("employedDate"); + System.out.println("employedDate:{}"+employedDate); + + if(employedDate !=null && !"".equals(employedDate) && !"null".equals(employedDate)){ + if(employedDate.contains("T")){ + employedDate = employedDate.substring(0,employedDate.indexOf("T")); + } + } + + System.out.println("employedDate:{}"+employedDate); + + beisenStaffDto.setEmployedDate(employedDate); + + beisenStaffDto.setJobCode(staffDto.getStr("jobCode")); + beisenStaffDto.setPositionName(staffDto.getStr("positionName")); + beisenStaffDto.setLineManagerId(staffDto.getStr("lineManagerId")); + beisenStaffDto.setStaffCode(staffDto.getStr("staffCode")); + beisenStaffDto.setStaffStatus(staffDto.getStr("staffStatus")); + + System.out.println("staffStatus:{}"+staffDto.getStr("staffStatus")); + + beisenStaffDto.setIsDelete(staffDto.getStr("isDelete")); +// beisenStaffDto.setUserId(staffDto.getStr("userId")); + beisenStaffDto.setTenantId(staffDto.getStr("tenantId")); + beisenStaffDto.setEmail(staffDto.getStr("email")); + beisenStaffDto.setUserType(staffDto.getStr("userType")); + beisenStaffDto.setUserStatus(staffDto.getStr("userStatus")); + System.out.println("userStatus:{}"+staffDto.getStr("userStatus")); + beisenStaffDto.setOrigin(staffDto.getStr("origin")); + beisenStaffDto.setOriginalId(staffDto.getStr("originalId")); + beisenStaffDto.setName(staffDto.getStr("name")); + beisenStaffDto.setEnglishName(staffDto.getStr("englishName")); + beisenStaffDto.setSex(staffDto.getStr("sex")); + String birthday = staffDto.getStr("birthday"); + System.out.println("birthday:{}"+staffDto.getStr("birthday")); + + if(!"null".equals(birthday) && birthday !=null ){ + if(birthday.contains("T")){ + birthday = birthday.substring(0,birthday.indexOf("T")); + } + } + + System.out.println("birthday:{}"+staffDto.getStr("birthday")); + beisenStaffDto.setBirthday(birthday); + beisenStaffDto.setMobile(staffDto.getStr("mobile")); + beisenStaffDto.setIdCardType(staffDto.getStr("idCardType")); + + String graduateDate = staffDto.getStr("graduateDate"); + + if(!"null".equals(graduateDate) && graduateDate !=null ){ + if(graduateDate.contains("T")){ + graduateDate = graduateDate.substring(0,graduateDate.indexOf("T")); + } + } + + + System.out.println("graduateDate:{}"+graduateDate); + beisenStaffDto.setGraduateDate(graduateDate); + + beisenStaffDto.setNativePlace(staffDto.getStr("nativePlace")); + String beganWorkDate = staffDto.getStr("beganWorkDate"); + if(!"null".equals(beganWorkDate) && beganWorkDate !=null ){ + if(beganWorkDate.contains("T")){ + beganWorkDate = beganWorkDate.substring(0,beganWorkDate.indexOf("T")); + } + } + System.out.println("graduateDate:{}"+graduateDate); + beisenStaffDto.setBeganWorkDate(beganWorkDate); + beisenStaffDto.setGraduateFrom(staffDto.getStr("graduateFrom")); + beisenStaffDto.setMajor(staffDto.getStr("major")); + beisenStaffDto.setPositionCategory(staffDto.getStr("positionCategory")); + } + + BeisenStaffDepartmentDto beisenStaffDepartmentDto = new BeisenStaffDepartmentDto(); + if(itemObject.containsKey("departmentDto")){ + JSONObject departmentDto = itemObject.getJSONObject("departmentDto"); + beisenStaffDepartmentDto.setId(departmentDto.getStr("id")); + beisenStaffDepartmentDto.setName(departmentDto.getStr("name")); + beisenStaffDepartmentDto.setCode(departmentDto.getStr("code")); + beisenStaffDepartmentDto.setAbbreviation(departmentDto.getStr("abbreviation")); + beisenStaffDepartmentDto.setParentId(departmentDto.getStr("parentId")); + beisenStaffDepartmentDto.setLevel(departmentDto.getStr("level")); + beisenStaffDepartmentDto.setStatus(departmentDto.getStr("status")); + beisenStaffDepartmentDto.setIsDelete(departmentDto.getStr("isDelete")); + beisenStaffDepartmentDto.setOriginalId(departmentDto.getStr("originalId")); + } + beisenStaffDto.setBeisenStaffDepartmentDto(beisenStaffDepartmentDto); + + BeisenStaffPositionDto beisenStaffPositionDto = new BeisenStaffPositionDto(); + if(itemObject.containsKey("positionDto")){ + JSONObject positionDto = itemObject.getJSONObject("positionDto"); + + beisenStaffPositionDto.setId(positionDto.getStr("id")); + beisenStaffPositionDto.setName(positionDto.getStr("name")); + beisenStaffPositionDto.setCode(positionDto.getStr("code")); + beisenStaffPositionDto.setStatus(positionDto.getStr("status")); + beisenStaffPositionDto.setIsDelete(positionDto.getStr("isDelete")); + } + beisenStaffDto.setBeisenStaffPositionDto(beisenStaffPositionDto); + } + } + } + } + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test99.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test99.java new file mode 100644 index 0000000..f457fd6 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/Test99.java @@ -0,0 +1,141 @@ +package com.weaver.seconddev.chapanda.test; + +import org.apache.commons.net.util.Base64; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.stream.Collectors; + +public class Test99 { + private static final String HMAC_SHA1 = "HmacSHA1"; + + + public static void main(String[] args) throws Exception { + String url = "http://api.beisenapp.com/Assess/431582/activity/testee/invite"; + + // ?beisen_account=jiekou@test-chabaidao.com&emails=798989044@qq.com&format=json + + String oauth_consumer_secret = "8460bf7be9fb4db29a263681fc0e4583"; + String oauth_token_secret = "dbe6fbf7a60243d4a05838b739fb2730"; + String key = oauth_consumer_secret+"&"+oauth_token_secret ; + + String oauth_consumer_key = "cb6c411bd5ff46f4b5e12d0853de8dcb"; + + System.out.println("oauth_consumer_key:"+oauth_consumer_key); + String oauth_nonce = "avKKMm2tuGi"; +// String oauth_nonce = UUID.randomUUID().toString(); + System.out.println("oauth_nonce:"+oauth_nonce); + + String oauth_signature_method = "HMAC-SHA1"; + System.out.println("oauth_signature_method:"+oauth_signature_method); + + long oauth_timestamp = 1754363166L; + + +// long oauth_timestamp = System.currentTimeMillis()/1000; + System.out.println("oauth_timestamp:"+oauth_timestamp); + + String oauth_token = "6e8cce92d2474f808d0c5a662a81dcdb"; + System.out.println("oauth_token:"+oauth_token); + String oauth_version = "1.0"; + System.out.println("oauth_version:"+oauth_version); + + String beisen_account = "jiekou@test-chabaidao.com"; + String data6 = URLEncoder.encode(beisen_account, "UTF-8"); + System.out.println("data6:"+data6); + String emails = "yemintest@chabaidao.com"; + String format = "json"; + + String data3 = "beisen_account="+URLEncoder.encode(beisen_account, "UTF-8")+"&emails="+URLEncoder.encode(emails, "UTF-8")+"&format="+URLEncoder.encode(format, "UTF-8")+"&oauth_consumer_key="+URLEncoder.encode(oauth_consumer_key, "UTF-8")+"&oauth_nonce="+URLEncoder.encode(oauth_nonce, "UTF-8")+"&oauth_signature_method="+URLEncoder.encode(oauth_signature_method, "UTF-8")+"&oauth_timestamp="+URLEncoder.encode(oauth_timestamp+"", "UTF-8")+"&oauth_token="+URLEncoder.encode(oauth_token, "UTF-8")+"&oauth_version="+URLEncoder.encode(oauth_version, "UTF-8"); + System.out.println("data3:"+data3); +// String data4 = "beisen_account="+beisen_account+"&emails="+emails+"&format="+format+"&oauth_consumer_key="+oauth_consumer_key+"&oauth_nonce="+oauth_nonce+"&oauth_signature_method="+oauth_signature_method+"&oauth_timestamp="+oauth_timestamp+"&oauth_token="+oauth_token+"&oauth_version="+oauth_version; + + String data5 = URLEncoder.encode(data3, "UTF-8"); + System.out.println("data5:"+data5); + + String data2 = "POST&"+URLEncoder.encode(url, "UTF-8")+"&"+data5; + System.out.println("data2:"+data2); +// String message = URLEncoder.encode(data2, "UTF-8"); +// System.out.println("message:"+message); + System.out.println("key:"+key); + String hmac = hmacSha1(key, data2); + System.out.println("hmac:"+hmac); + String encodedStr = URLEncoder.encode(hmac, "UTF-8"); + System.out.println("Encoded String: " + encodedStr); + + } + + public static String hmacSha1(String key, String message) { + try { + Mac mac = Mac.getInstance("HmacSHA1"); + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "HmacSHA1"); + mac.init(secretKeySpec); + byte[] digest = mac.doFinal(message.getBytes()); + return java.util.Base64.getEncoder().encodeToString(digest); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + e.printStackTrace(); + return null; + } + } + + + + /** + * 生成签名数据 + * + * @param data 待加密的数据 + * @param key 加密使用的key + */ + public static String getSignature(String data,String key) throws Exception{ + byte[] keyBytes=key.getBytes(); + SecretKeySpec signingKey = new SecretKeySpec(keyBytes, HMAC_SHA1); + Mac mac = Mac.getInstance(HMAC_SHA1); + mac.init(signingKey); + + +// byte[] text = data.getBytes("UTF-8"); +// byte[] text2 = mac.doFinal(text); +//// byte[] rawHmac = mac.doFinal(data.getBytes()); +// StringBuilder sb=new StringBuilder(); +// for(byte b:rawHmac){ +// sb.append(byteToHexString(b)); +// } + + byte[] encryptedBytes = mac.doFinal(); + return Base64.encodeBase64String(encryptedBytes); + + } + + private static String byteToHexString(byte ib){ + char[] Digit={ + '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' + }; + char[] ob=new char[2]; + ob[0]=Digit[(ib>>>4)& 0X0f]; + ob[1]=Digit[ib & 0X0F]; + String s=new String(ob); + return s; + } + + + public Map sortMap(Map paraMap){ + Map unSortMap = new HashMap(); + // 使用TreeMap并提供一个Comparator用于排序key + Map sortedMap = new TreeMap<>(new Comparator() { + @Override + public int compare(String k1, String k2) { + // 对于字符串key升序排序 + return k1.compareTo(k2); + // 若需要降序排序,则可以改为 + // return k2.compareTo(k1); + } + }); + sortedMap.putAll(unSortMap ); + return sortedMap; + } + +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/TestMain.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/TestMain.java new file mode 100644 index 0000000..4712d23 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/TestMain.java @@ -0,0 +1,229 @@ +package com.weaver.seconddev.chapanda.test; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +public class TestMain { + + public static void main(String[] args) { + StringBuilder data = new StringBuilder(); + JSONArray totalArray = new JSONArray(); + data.append("[[\"1\",\"全国\"],[\"2\",\"国外\",[[\"201\",\"阿根廷\"],[\"202\",\"澳大利亚\"],[\"203\",\"奥地利\"],[\"204\",\"白俄罗斯\"],[\"205\",\"比利时\"],[\"206\",\"巴西\"],[\"207\",\"保加利亚\"],[\"208\",\"加拿大\"],[\"209\",\"塞浦路斯\"],[\"210\",\"捷克\"],[\"211\",\"丹麦\"],[\"212\",\"埃及\"],[\"213\",\"芬兰\"],[\"214\",\"法国\"],[\"215\",\"德国\"],[\"216\",\"希腊\"],[\"217\",\"匈牙利\"],[\"218\",\"冰岛\"],[\"219\",\"印度\"],[\"220\",\"印度尼西亚\"],[\"221\",\"爱尔兰\"],[\"222\",\"以色列\"],[\"223\",\"意大利\"],[\"224\",\"日本\"],[\"225\",\"韩国\"],[\"226\",\"科威特\"],[\"227\",\"马来西亚\"],[\"228\",\"荷兰\"],[\"229\",\"新西兰\"],[\"230\",\"挪威\"],[\"231\",\"巴基斯坦\"],[\"232\",\"波兰\"],[\"233\",\"葡萄牙\"],[\"234\",\"俄罗斯联邦\"],[\"235\",\"沙特阿拉伯\"],[\"236\",\"新加坡\"],[\"237\",\"南非\"],[\"238\",\"西班牙\"],[\"239\",\"瑞典\"],[\"240\",\"瑞士\"],[\"241\",\"泰国\"],[\"242\",\"土耳其\"],[\"243\",\"乌克兰\"],[\"244\",\"阿联酋\"],[\"245\",\"英国\"],[\"246\",\"美国\"],[\"247\",\"越南\"],[\"248\",\"安哥拉\"],[\"249\",\"加纳\"],[\"250\",\"尼日利亚\"],[\"251\",\"坦桑尼亚\"],[\"252\",\"乌干达\"],[\"253\",\"阿尔及利亚\"],[\"254\",\"塞内加尔\"],[\"255\",\"阿尔巴尼亚\",[[\"25501\",\"爱尔巴桑\"],[\"25502\",\"迪勃拉\"],[\"25504\",\"都拉斯\"],[\"25506\",\"费里\"],[\"25507\",\"吉诺卡斯特\"],[\"25511\",\"培拉特\"],[\"246181174\",\"地拉那州\",[[\"25503\",\"地拉那\"]]],[\"246181175\",\"发罗拉州\",[[\"25505\",\"发罗拉\"]]],[\"246181176\",\"科尔察州\",[[\"25508\",\"科尔察\"]]],[\"246181177\",\"库克斯州\",[[\"25509\",\"库克斯\"]]],[\"246181178\",\"莱什州\",[[\"25510\",\"莱什\"]]],[\"246181179\",\"斯库台州\",[[\"25512\",\"斯库台\"]]]]],[\"246180220\",\"黑山\"]]],[\"1100\",\"北京市\",[[\"1199\",\"亦庄开发区\"],[\"1101\",\"东城区\"],[\"1102\",\"西城区\"],[\"1103\",\"海淀区\"],[\"1104\",\"朝阳区\"],[\"1105\",\"丰台区\"],[\"1106\",\"石景山区\"],[\"1107\",\"通州区\"],[\"1108\",\"顺义区\"],[\"1109\",\"房山区\"],[\"1110\",\"大兴区\"],[\"1111\",\"昌平区\"],[\"1112\",\"怀柔区\"],[\"1113\",\"平谷区\"],[\"1114\",\"门头沟区\"],[\"1115\",\"密云区\"],[\"1116\",\"延庆区\"]]],[\"1200\",\"天津市\",[[\"1201\",\"和平区\"],[\"1202\",\"河东区\"],[\"1203\",\"河西区\"],[\"1204\",\"南开区\"],[\"1205\",\"河北区\"],[\"1206\",\"红桥区\"],[\"1207\",\"滨海新区\"],[\"1208\",\"东丽区\"],[\"1209\",\"西青区\"],[\"1210\",\"津南区\"],[\"1211\",\"北辰区\"],[\"1212\",\"武清区\"],[\"1213\",\"宝坻区\"],[\"1214\",\"静海区\"],[\"1215\",\"宁河区\"],[\"1216\",\"蓟州区\"]]],[\"1300\",\"河北省\",[[\"1301\",\"石家庄市\",[[\"130101\",\"长安区\"],[\"130103\",\"桥西区\"],[\"130104\",\"新华区\"],[\"130105\",\"裕华区\"],[\"130106\",\"东开发区\"],[\"130107\",\"井陉矿区\"],[\"130108\",\"辛集市\"],[\"130109\",\"藁城区\"],[\"130110\",\"晋州市\"],[\"130111\",\"新乐市\"],[\"130112\",\"鹿泉区\"],[\"130113\",\"正定县\"],[\"130114\",\"平山县\"],[\"130115\",\"元氏县\"],[\"130116\",\"栾城区\"],[\"130117\",\"行唐县\"],[\"130118\",\"灵寿县\"],[\"130119\",\"深泽县\"],[\"130120\",\"无极县\"],[\"130121\",\"赵县\"],[\"130122\",\"高邑县\"],[\"130123\",\"赞皇县\"],[\"130124\",\"井陉县\"]]],[\"1302\",\"唐山市\",[[\"130201\",\"遵化市\"],[\"130202\",\"路南区\"],[\"130203\",\"路北区\"],[\"130204\",\"古冶区\"],[\"130205\",\"开平区\"],[\"130206\",\"丰南区\"],[\"130207\",\"丰润区\"],[\"130208\",\"曹妃甸区\"],[\"130209\",\"滦州市\"],[\"130210\",\"滦南县\"],[\"130211\",\"乐亭县\"],[\"130212\",\"迁西县\"],[\"130213\",\"玉田县\"],[\"130214\",\"迁安市\"]]],[\"1303\",\"秦皇岛市\",[[\"130301\",\"海港区\"],[\"130302\",\"山海关区\"],[\"130303\",\"北戴河区\"],[\"130304\",\"青龙满族自治县\"],[\"130305\",\"昌黎县\"],[\"130306\",\"抚宁区\"],[\"130307\",\"卢龙县\"],[\"130399\",\"北戴河新区\"]]],[\"1304\",\"邯郸市\",[[\"130401\",\"邯山区\"],[\"130402\",\"丛台区\"],[\"130403\",\"复兴区\"],[\"130404\",\"峰峰矿区\"],[\"130406\",\"临漳县\"],[\"130407\",\"成安县\"],[\"130408\",\"大名县\"],[\"130409\",\"涉县\"],[\"130410\",\"磁县\"],[\"130411\",\"肥乡区\"],[\"130412\",\"永年区\"],[\"130413\",\"邱县\"],[\"130414\",\"鸡泽县\"],[\"130415\",\"广平县\"],[\"130416\",\"馆陶县\"],[\"130417\",\"魏县\"],[\"130418\",\"曲周县\"],[\"130419\",\"武安市\"],[\"246180771\",\"冀南新区\"],[\"246180772\",\"邯郸经济技术开发区\"]]],[\"1305\",\"邢台市\",[[\"130501\",\"襄都区\"],[\"130502\",\"信都区\"],[\"130504\",\"临城县\"],[\"130505\",\"内丘县\"],[\"130506\",\"柏乡县\"],[\"130507\",\"隆尧县\"],[\"130508\",\"任泽区\"],[\"130509\",\"南和区\"],[\"130510\",\"宁晋县\"],[\"130511\",\"巨鹿县\"],[\"130512\",\"新河县\"],[\"130513\",\"广宗县\"],[\"130514\",\"平乡县\"],[\"130515\",\"威县\"],[\"130516\",\"清河县\"],[\"130517\",\"临西县\"],[\"130518\",\"南宫市\"],[\"130519\",\"沙河市\"]]],[\"1306\",\"保定市\",[[\"1312\",\"定州市\"],[\"130604\",\"满城区\"],[\"130605\",\"清苑区\"],[\"130606\",\"涞水县\"],[\"130607\",\"阜平县\"],[\"130608\",\"徐水区\"],[\"130609\",\"定兴县\"],[\"130610\",\"唐县\"],[\"130611\",\"高阳县\"],[\"130612\",\"容城县\"],[\"130613\",\"涞源县\"],[\"130614\",\"望都县\"],[\"130615\",\"安新县\"],[\"130616\",\"易县\"],[\"130617\",\"曲阳县\"],[\"130618\",\"蠡县\"],[\"130619\",\"顺平县\"],[\"130620\",\"博野县\"],[\"130621\",\"雄县\"],[\"130622\",\"涿州市\"],[\"130624\",\"安国市\"],[\"130625\",\"高碑店市\"],[\"130626\",\"竞秀区\"],[\"130627\",\"莲池区\"]]],[\"1307\",\"张家口市\",[[\"130701\",\"桥东区\"],[\"130702\",\"桥西区\"],[\"130703\",\"宣化区\"],[\"130704\",\"下花园区\"],[\"130706\",\"张北县\"],[\"130707\",\"康保县\"],[\"130708\",\"沽源县\"],[\"130709\",\"尚义县\"],[\"130710\",\"蔚县\"],[\"130711\",\"阳原县\"],[\"130712\",\"怀安县\"],[\"130713\",\"万全区\"],[\"130714\",\"怀来县\"],[\"130715\",\"涿鹿县\"],[\"130716\",\"赤城县\"],[\"130717\",\"崇礼区\"]]],[\"1308\",\"承德市\",[[\"130801\",\"双桥区\"],[\"130802\",\"双滦区\"],[\"130803\",\"鹰手营子矿区\"],[\"130804\",\"承德县\"],[\"130805\",\"兴隆县\"],[\"130806\",\"平泉市\"],[\"130807\",\"滦平县\"],[\"130808\",\"隆化县\"],[\"130809\",\"丰宁满族自治县\"],[\"130810\",\"宽城满族自治县\"],[\"130811\",\"围场满族蒙古族自治县\"]]],[\"1309\",\"沧州市\",[[\"130901\",\"新华区\"],[\"130902\",\"运河区\"],[\"130903\",\"沧县\"],[\"130904\",\"青县\"],[\"130905\",\"东光县\"],[\"130906\",\"海兴县\"],[\"130907\",\"盐山县\"],[\"130908\",\"肃宁县\"],[\"130909\",\"南皮县\"],[\"130910\",\"吴桥县\"],[\"130911\",\"献县\"],[\"130912\",\"孟村回族自治县\"],[\"130913\",\"泊头市\"],[\"130914\",\"任丘市\"],[\"130915\",\"黄骅市\"],[\"130916\",\"河间市\"],[\"130999\",\"渤海新区\"]]],[\"1310\",\"廊坊市\",[[\"131001\",\"香河县\"],[\"131002\",\"三河市\"],[\"131003\",\"固安县\"],[\"131004\",\"安次区\"],[\"131005\",\"广阳区\"],[\"131006\",\"永清县\"],[\"131007\",\"大城县\"],[\"131008\",\"文安县\"],[\"131009\",\"大厂回族自治县\"],[\"131010\",\"霸州市\"]]],[\"1311\",\"衡水市\",[[\"131101\",\"桃城区\"],[\"131102\",\"枣强县\"],[\"131103\",\"武邑县\"],[\"131104\",\"武强县\"],[\"131105\",\"饶阳县\"],[\"131106\",\"安平县\"],[\"131107\",\"故城县\"],[\"131108\",\"景县\"],[\"131109\",\"阜城县\"],[\"131110\",\"冀州区\"],[\"131111\",\"深州市\"]]],[\"246180205\",\"雄安新区\"]]],[\"1400\",\"山西省\",[[\"1401\",\"太原市\",[[\"140101\",\"小店区\"],[\"140102\",\"迎泽区\"],[\"140103\",\"杏花岭区\"],[\"140104\",\"尖草坪区\"],[\"140105\",\"万柏林区\"],[\"140106\",\"晋源区\"],[\"140107\",\"清徐县\"],[\"140108\",\"阳曲县\"],[\"140109\",\"娄烦县\"],[\"140110\",\"古交市\"]]],[\"1402\",\"大同市\",[[\"140204\",\"新荣区\"],[\"140205\",\"阳高县\"],[\"140206\",\"天镇县\"],[\"140207\",\"广灵县\"],[\"140208\",\"灵丘县\"],[\"140209\",\"浑源县\"],[\"140210\",\"左云县\"],[\"140211\",\"云州区\"],[\"140213\",\"平城区\"],[\"140214\",\"云冈区\"]]],[\"1403\",\"阳泉市\",[[\"140301\",\"城区\"],[\"140302\",\"矿区\"],[\"140303\",\"郊区\"],[\"140304\",\"平定县\"],[\"140305\",\"盂县\"]]],[\"1404\",\"长治市\",[[\"140428\",\"潞州区\"],[\"140403\",\"上党区\"],[\"140404\",\"襄垣县\"],[\"140405\",\"屯留区\"],[\"140406\",\"平顺县\"],[\"140407\",\"黎城县\"],[\"140408\",\"壶关县\"],[\"140409\",\"长子县\"],[\"140410\",\"武乡县\"],[\"140411\",\"沁县\"],[\"140412\",\"沁源县\"],[\"140413\",\"潞城区\"]]],[\"1405\",\"晋城市\",[[\"140501\",\"城区\"],[\"140502\",\"沁水县\"],[\"140503\",\"阳城县\"],[\"140504\",\"陵川县\"],[\"140505\",\"泽州县\"],[\"140506\",\"高平市\"]]],[\"1406\",\"朔州市\",[[\"140601\",\"朔城区\"],[\"140602\",\"平鲁区\"],[\"140603\",\"山阴县\"],[\"140604\",\"应县\"],[\"140605\",\"右玉县\"],[\"140606\",\"怀仁市\"]]],[\"1407\",\"晋中市\",[[\"140701\",\"和顺县\"],[\"140702\",\"榆次区\"],[\"140703\",\"榆社县\"],[\"140704\",\"左权县\"],[\"140705\",\"昔阳县\"],[\"140706\",\"寿阳县\"],[\"140707\",\"太谷区\"],[\"140708\",\"祁县\"],[\"140709\",\"平遥县\"],[\"140710\",\"灵石县\"],[\"140711\",\"介休市\"]]],[\"1408\",\"运城市\",[[\"140801\",\"永济市\"],[\"140802\",\"盐湖区\"],[\"140803\",\"临猗县\"],[\"140804\",\"万荣县\"],[\"140805\",\"闻喜县\"],[\"140806\",\"稷山县\"],[\"140807\",\"新绛县\"],[\"140808\",\"绛县\"],[\"140809\",\"垣曲县\"],[\"140810\",\"夏县\"],[\"140811\",\"平陆县\"],[\"140812\",\"芮城县\"],[\"140813\",\"河津市\"]]],[\"1409\",\"忻州市\",[[\"140901\",\"忻府区\"],[\"140902\",\"定襄县\"],[\"140903\",\"五台县\"],[\"140904\",\"代县\"],[\"140905\",\"繁峙县\"],[\"140906\",\"宁武县\"],[\"140907\",\"静乐县\"],[\"140908\",\"神池县\"],[\"140909\",\"五寨县\"],[\"140910\",\"岢岚县\"],[\"140911\",\"河曲县\"],[\"140912\",\"保德县\"],[\"140913\",\"偏关县\"],[\"140914\",\"原平市\"]]],[\"1410\",\"临汾市\",[[\"141001\",\"尧都区\"],[\"141002\",\"曲沃县\"],[\"141003\",\"翼城县\"],[\"141004\",\"襄汾县\"],[\"141005\",\"洪洞县\"],[\"141006\",\"古县\"],[\"141007\",\"安泽县\"],[\"141008\",\"浮山县\"],[\"141009\",\"吉县\"],[\"141010\",\"乡宁县\"],[\"141011\",\"大宁县\"],[\"141012\",\"隰县\"],[\"141013\",\"永和县\"],[\"141014\",\"蒲县\"],[\"141015\",\"汾西县\"],[\"141016\",\"侯马市\"],[\"141017\",\"霍州市\"]]],[\"1411\",\"吕梁市\",[[\"141101\",\"离石区\"],[\"141102\",\"文水县\"],[\"141103\",\"交城县\"],[\"141104\",\"兴县\"],[\"141105\",\"临县\"],[\"141106\",\"柳林县\"],[\"141107\",\"石楼县\"],[\"141108\",\"岚县\"],[\"141109\",\"方山县\"],[\"141110\",\"中阳县\"],[\"141111\",\"交口县\"],[\"141112\",\"孝义市\"],[\"141113\",\"汾阳市\"]]]]],[\"1500\",\"内蒙古自治区\",[[\"1501\",\"呼和浩特市\",[[\"150101\",\"新城区\"],[\"150102\",\"回民区\"],[\"150103\",\"玉泉区\"],[\"150104\",\"赛罕区\"],[\"150105\",\"土默特左旗\"],[\"150106\",\"托克托县\"],[\"150107\",\"和林格尔县\"],[\"150108\",\"清水河县\"],[\"150109\",\"武川县\"]]],[\"1502\",\"包头市\",[[\"150201\",\"东河区\"],[\"150202\",\"昆都仑区\"],[\"150203\",\"青山区\"],[\"150204\",\"石拐区\"],[\"150205\",\"白云鄂博矿区\"],[\"150206\",\"九原区\"],[\"150207\",\"土默特右旗\"],[\"150208\",\"固阳县\"],[\"150209\",\"达尔罕茂明安联合旗\"]]],[\"1503\",\"乌海市\",[[\"150301\",\"海勃湾区\"],[\"150302\",\"海南区\"],[\"150303\",\"乌达区\"]]],[\"1504\",\"赤峰市\",[[\"150401\",\"红山区\"],[\"150402\",\"元宝山区\"],[\"150403\",\"松山区\"],[\"150404\",\"阿鲁科尔沁旗\"],[\"150405\",\"巴林左旗\"],[\"150406\",\"巴林右旗\"],[\"150407\",\"林西县\"],[\"150408\",\"克什克腾旗\"],[\"150409\",\"翁牛特旗\"],[\"150410\",\"喀喇沁旗\"],[\"150411\",\"宁城县\"],[\"150412\",\"敖汉旗\"]]],[\"1505\",\"通辽市\",[[\"150501\",\"科尔沁区\"],[\"150502\",\"科尔沁左翼中旗\"],[\"150503\",\"科尔沁左翼后旗\"],[\"150504\",\"开鲁县\"],[\"150505\",\"库伦旗\"],[\"150506\",\"奈曼旗\"],[\"150507\",\"扎鲁特旗\"],[\"150508\",\"霍林郭勒市\"]]],[\"1506\",\"鄂尔多斯市\",[[\"150601\",\"乌审旗\"],[\"150602\",\"东胜区\"],[\"150603\",\"达拉特旗\"],[\"150628\",\"康巴什区\"],[\"150604\",\"准格尔旗\"],[\"150605\",\"鄂托克前旗\"],[\"150606\",\"鄂托克旗\"],[\"150607\",\"杭锦旗\"],[\"150608\",\"伊金霍洛旗\"]]],[\"1507\",\"呼伦贝尔市\",[[\"150701\",\"海拉尔区\"],[\"150702\",\"阿荣旗\"],[\"150703\",\"莫力达瓦达斡尔族自治旗\"],[\"150704\",\"鄂伦春自治旗\"],[\"150705\",\"鄂温克族自治旗\"],[\"150706\",\"陈巴尔虎旗\"],[\"150707\",\"新巴尔虎左旗\"],[\"150708\",\"新巴尔虎右旗\"],[\"150709\",\"满洲里市\"],[\"150710\",\"牙克石市\"],[\"150711\",\"扎兰屯市\"],[\"150712\",\"额尔古纳市\"],[\"150713\",\"根河市\"],[\"150714\",\"扎赉诺尔区\"]]],[\"1508\",\"巴彦淖尔市\",[[\"150801\",\"临河区\"],[\"150802\",\"五原县\"],[\"150803\",\"磴口县\"],[\"150804\",\"乌拉特前旗\"],[\"150805\",\"乌拉特中旗\"],[\"150806\",\"乌拉特后旗\"],[\"150807\",\"杭锦后旗\"]]],[\"1509\",\"乌兰察布市\",[[\"150901\",\"集宁区\"],[\"150902\",\"卓资县\"],[\"150903\",\"化德县\"],[\"150904\",\"商都县\"],[\"150905\",\"兴和县\"],[\"150906\",\"凉城县\"],[\"150907\",\"察哈尔右翼前旗\"],[\"150908\",\"察哈尔右翼中旗\"],[\"150909\",\"察哈尔右翼后旗\"],[\"150910\",\"四子王旗\"],[\"150911\",\"丰镇市\"]]],[\"1522\",\"兴安盟\",[[\"152201\",\"乌兰浩特市\"],[\"152202\",\"阿尔山市\"],[\"152203\",\"科尔沁右翼前旗\"],[\"152204\",\"科尔沁右翼中旗\"],[\"152205\",\"扎赉特旗\"],[\"152206\",\"突泉县\"]]],[\"1525\",\"锡林郭勒盟\",[[\"152501\",\"二连浩特市\"],[\"152502\",\"锡林浩特市\"],[\"152503\",\"阿巴嘎旗\"],[\"152504\",\"苏尼特左旗\"],[\"152505\",\"苏尼特右旗\"],[\"152506\",\"东乌珠穆沁旗\"],[\"152507\",\"西乌珠穆沁旗\"],[\"152508\",\"太仆寺旗\"],[\"152509\",\"镶黄旗\"],[\"152510\",\"正镶白旗\"],[\"152511\",\"正蓝旗\"],[\"152512\",\"多伦县\"]]],[\"1529\",\"阿拉善盟\",[[\"152901\",\"阿拉善左旗\"],[\"152902\",\"阿拉善右旗\"],[\"152903\",\"额济纳旗\"]]]]],[\"2100\",\"辽宁省\",[[\"2101\",\"沈阳市\",[[\"210101\",\"和平区\"],[\"210102\",\"沈河区\"],[\"210103\",\"皇姑区\"],[\"210104\",\"大东区\"],[\"210105\",\"铁西区\"],[\"210106\",\"浑南区\"],[\"210107\",\"于洪区\"],[\"210108\",\"沈北新区\"],[\"210109\",\"棋盘山开发区\"],[\"210110\",\"新民市\"],[\"210111\",\"辽中区\"],[\"210112\",\"康平县\"],[\"210113\",\"法库县\"],[\"210114\",\"苏家屯区\"]]],[\"2102\",\"大连市\",[[\"210201\",\"西岗区\"],[\"210202\",\"中山区\"],[\"210203\",\"沙河口区\"],[\"210204\",\"甘井子区\"],[\"210205\",\"高新园区\"],[\"210206\",\"开发区\"],[\"210207\",\"旅顺口区\"],[\"210208\",\"金州区\"],[\"210209\",\"普兰店区\"],[\"210210\",\"瓦房店市\"],[\"210211\",\"庄河市\"],[\"210212\",\"长海县\"],[\"210213\",\"长兴岛\"]]],[\"2103\",\"鞍山市\",[[\"210301\",\"海城市\"],[\"210302\",\"铁东区\"],[\"210303\",\"铁西区\"],[\"210304\",\"立山区\"],[\"210305\",\"千山区\"],[\"210306\",\"台安县\"],[\"210307\",\"岫岩满族自治县\"]]],[\"2104\",\"抚顺市\",[[\"210401\",\"新抚区\"],[\"210402\",\"东洲区\"],[\"210403\",\"望花区\"],[\"210404\",\"顺城区\"],[\"210405\",\"抚顺县\"],[\"210406\",\"新宾满族自治县\"],[\"210407\",\"清原满族自治县\"]]],[\"2105\",\"本溪市\",[[\"210501\",\"平山区\"],[\"210502\",\"溪湖区\"],[\"210503\",\"明山区\"],[\"210504\",\"南芬区\"],[\"210505\",\"本溪满族自治县\"],[\"210506\",\"桓仁满族自治县\"]]],[\"2106\",\"丹东市\",[[\"210601\",\"元宝区\"],[\"210602\",\"振兴区\"],[\"210603\",\"振安区\"],[\"210604\",\"宽甸满族自治县\"],[\"210605\",\"东港市\"],[\"210606\",\"凤城市\"]]],[\"2107\",\"锦州市\",[[\"210701\",\"古塔区\"],[\"210702\",\"凌河区\"],[\"210703\",\"太和区\"],[\"210704\",\"黑山县\"],[\"210705\",\"义县\"],[\"210706\",\"凌海市\"],[\"210707\",\"北镇市\"]]],[\"2108\",\"营口市\",[[\"210801\",\"站前区\"],[\"210802\",\"西市区\"],[\"210803\",\"鲅鱼圈区\"],[\"210804\",\"老边区\"],[\"210805\",\"盖州市\"],[\"210806\",\"大石桥市\"]]],[\"2109\",\"阜新市\",[[\"210901\",\"海州区\"],[\"210902\",\"新邱区\"],[\"210903\",\"太平区\"],[\"210904\",\"清河门区\"],[\"210905\",\"细河区\"],[\"210906\",\"阜新蒙古族自治县\"],[\"210907\",\"彰武县\"]]],[\"2110\",\"辽阳市\",[[\"211001\",\"白塔区\"],[\"211002\",\"文圣区\"],[\"211003\",\"宏伟区\"],[\"211004\",\"弓长岭区\"],[\"211005\",\"太子河区\"],[\"211006\",\"辽阳县\"],[\"211007\",\"灯塔市\"]]],[\"2111\",\"盘锦市\",[[\"211101\",\"双台子区\"],[\"211102\",\"兴隆台区\"],[\"211103\",\"大洼区\"],[\"211104\",\"盘山县\"]]],[\"2112\",\"铁岭市\",[[\"211201\",\"昌图县\"],[\"211202\",\"开原市\"],[\"211203\",\"银州区\"],[\"211204\",\"清河区\"],[\"211205\",\"铁岭县\"],[\"211206\",\"西丰县\"],[\"211207\",\"调兵山市\"]]],[\"2113\",\"朝阳市\",[[\"211301\",\"双塔区\"],[\"211302\",\"龙城区\"],[\"211303\",\"朝阳县\"],[\"211304\",\"建平县\"],[\"211305\",\"喀喇沁左翼蒙古族自治县\"],[\"211306\",\"北票市\"],[\"211307\",\"凌源市\"]]],[\"2114\",\"葫芦岛市\",[[\"2115\",\"兴城市\"],[\"211401\",\"连山区\"],[\"211402\",\"龙港区\"],[\"211403\",\"南票区\"],[\"211404\",\"绥中县\"],[\"211405\",\"建昌县\"]]]]],[\"2200\",\"吉林省\",[[\"2201\",\"长春市\",[[\"2209\",\"公主岭市\"],[\"220101\",\"南关区\"],[\"220102\",\"宽城区\"],[\"220103\",\"朝阳区\"],[\"220104\",\"二道区\"],[\"220105\",\"绿园区\"],[\"220106\",\"高新开发区\"],[\"220107\",\"经济开发区\"],[\"220108\",\"汽车产业开发区\"],[\"220109\",\"双阳区\"],[\"220110\",\"榆树市\"],[\"220111\",\"九台区\"],[\"220112\",\"德惠市\"],[\"220113\",\"农安县\"],[\"220114\",\"保税区\"]]],[\"2202\",\"吉林市\",[[\"220201\",\"昌邑区\"],[\"220202\",\"龙潭区\"],[\"220203\",\"船营区\"],[\"220204\",\"丰满区\"],[\"220205\",\"永吉县\"],[\"220206\",\"蛟河市\"],[\"220207\",\"桦甸市\"],[\"220208\",\"舒兰市\"],[\"220209\",\"磐石市\"]]],[\"2203\",\"四平市\",[[\"220301\",\"铁西区\"],[\"220302\",\"铁东区\"],[\"220303\",\"梨树县\"],[\"220304\",\"伊通满族自治县\"],[\"220306\",\"双辽市\"]]],[\"2204\",\"辽源市\",[[\"220401\",\"龙山区\"],[\"220402\",\"西安区\"],[\"220403\",\"东丰县\"],[\"220404\",\"东辽县\"]]],[\"2205\",\"通化市\",[[\"220501\",\"东昌区\"],[\"220502\",\"二道江区\"],[\"220503\",\"通化县\"],[\"220504\",\"辉南县\"],[\"220505\",\"柳河县\"],[\"220506\",\"梅河口市\"],[\"220507\",\"集安市\"]]],[\"2206\",\"白山市\",[[\"220601\",\"浑江区\"],[\"220602\",\"江源区\"],[\"220603\",\"抚松县\"],[\"220604\",\"靖宇县\"],[\"220605\",\"长白朝鲜族自治县\"],[\"220606\",\"临江市\"]]],[\"2207\",\"松原市\",[[\"220701\",\"宁江区\"],[\"220702\",\"前郭尔罗斯蒙古族自治县\"],[\"220703\",\"长岭县\"],[\"220704\",\"乾安县\"],[\"220705\",\"扶余市\"]]],[\"2208\",\"白城市\",[[\"220801\",\"洮北区\"],[\"220802\",\"镇赉县\"],[\"220803\",\"通榆县\"],[\"220804\",\"洮南市\"],[\"220805\",\"大安市\"]]],[\"2224\",\"延边朝鲜族自治州\",[[\"2210\",\"延吉市\"],[\"221001\",\"图们市\"],[\"221002\",\"敦化市\"],[\"221003\",\"珲春市\"],[\"221004\",\"龙井市\"],[\"221005\",\"和龙市\"],[\"221006\",\"汪清县\"],[\"221007\",\"安图县\"]]]]],[\"2300\",\"黑龙江省\",[[\"2301\",\"哈尔滨市\",[[\"230101\",\"道里区\"],[\"230102\",\"道外区\"],[\"230103\",\"香坊区\"],[\"230104\",\"松北区\"],[\"230105\",\"平房区\"],[\"230106\",\"呼兰区\"],[\"230107\",\"阿城区\"],[\"230108\",\"五常市\"],[\"230109\",\"方正县\"],[\"230110\",\"依兰县\"],[\"230111\",\"宾县\"],[\"230112\",\"巴彦县\"],[\"230113\",\"木兰县\"],[\"230114\",\"通河县\"],[\"230115\",\"延寿县\"],[\"230116\",\"双城区\"],[\"230117\",\"尚志市\"],[\"350207\",\"南岗区\"]]],[\"2302\",\"齐齐哈尔市\",[[\"230201\",\"龙沙区\"],[\"230202\",\"建华区\"],[\"230203\",\"铁锋区\"],[\"230204\",\"昂昂溪区\"],[\"230205\",\"富拉尔基区\"],[\"230206\",\"碾子山区\"],[\"230207\",\"梅里斯达斡尔族区\"],[\"230208\",\"龙江县\"],[\"230209\",\"依安县\"],[\"230210\",\"泰来县\"],[\"230211\",\"甘南县\"],[\"230212\",\"富裕县\"],[\"230213\",\"克山县\"],[\"230214\",\"克东县\"],[\"230215\",\"拜泉县\"],[\"230216\",\"讷河市\"]]],[\"2303\",\"鸡西市\",[[\"230301\",\"鸡冠区\"],[\"230302\",\"恒山区\"],[\"230303\",\"滴道区\"],[\"230304\",\"梨树区\"],[\"230305\",\"城子河区\"],[\"230306\",\"麻山区\"],[\"230307\",\"鸡东县\"],[\"230308\",\"虎林市\"],[\"230309\",\"密山市\"]]],[\"2304\",\"鹤岗市\",[[\"230401\",\"向阳区\"],[\"230402\",\"工农区\"],[\"230403\",\"南山区\"],[\"230404\",\"兴安区\"],[\"230405\",\"东山区\"],[\"230406\",\"兴山区\"],[\"230407\",\"萝北县\"],[\"230408\",\"绥滨县\"]]],[\"2305\",\"双鸭山市\",[[\"230501\",\"尖山区\"],[\"230502\",\"岭东区\"],[\"230503\",\"四方台区\"],[\"230504\",\"宝山区\"],[\"230505\",\"集贤县\"],[\"230506\",\"友谊县\"],[\"230507\",\"宝清县\"],[\"230508\",\"饶河县\"]]],[\"2306\",\"大庆市\",[[\"230601\",\"萨尔图区\"],[\"230602\",\"龙凤区\"],[\"230603\",\"让胡路区\"],[\"230604\",\"红岗区\"],[\"230605\",\"大同区\"],[\"230606\",\"肇州县\"],[\"230607\",\"肇源县\"],[\"230608\",\"林甸县\"],[\"230609\",\"杜尔伯特蒙古族自治县\"]]],[\"2307\",\"伊春市\",[[\"230701\",\"伊美区\"],[\"230702\",\"南岔县\"],[\"230703\",\"友好区\"],[\"230708\",\"金林区\"],[\"230710\",\"乌翠区\"],[\"230711\",\"汤旺县\"],[\"230716\",\"嘉荫县\"],[\"230717\",\"铁力市\"],[\"230724\",\"丰林县\"],[\"230725\",\"大箐山县\"]]],[\"2308\",\"佳木斯市\",[[\"230801\",\"向阳区\"],[\"230802\",\"前进区\"],[\"230803\",\"东风区\"],[\"230804\",\"郊区\"],[\"230805\",\"桦南县\"],[\"230806\",\"桦川县\"],[\"230807\",\"汤原县\"],[\"230808\",\"抚远市\"],[\"230809\",\"同江市\"],[\"230810\",\"富锦市\"],[\"230811\",\"建三江\"]]],[\"2309\",\"七台河市\",[[\"230901\",\"新兴区\"],[\"230902\",\"桃山区\"],[\"230903\",\"茄子河区\"],[\"230904\",\"勃利县\"]]],[\"2310\",\"牡丹江市\",[[\"2314\",\"绥芬河市\"],[\"231001\",\"东安区\"],[\"231002\",\"阳明区\"],[\"231003\",\"爱民区\"],[\"231004\",\"西安区\"],[\"231005\",\"东宁市\"],[\"231006\",\"林口县\"],[\"231008\",\"海林市\"],[\"231009\",\"宁安市\"],[\"231010\",\"穆棱市\"]]],[\"2311\",\"黑河市\",[[\"231101\",\"爱辉区\"],[\"231102\",\"嫩江市\"],[\"231103\",\"逊克县\"],[\"231104\",\"孙吴县\"],[\"231105\",\"北安市\"],[\"231106\",\"五大连池市\"]]],[\"2312\",\"绥化市\",[[\"2313\",\"安达市\"],[\"231201\",\"肇东市\"],[\"231202\",\"北林区\"],[\"231203\",\"望奎县\"],[\"231204\",\"兰西县\"],[\"231205\",\"青冈县\"],[\"231206\",\"庆安县\"],[\"231207\",\"明水县\"],[\"231208\",\"绥棱县\"],[\"231209\",\"海伦市\"]]],[\"2327\",\"大兴安岭地区\",[[\"2328\",\"加格达奇区\"],[\"232702\",\"呼玛县\"],[\"232703\",\"塔河县\"],[\"232704\",\"漠河市\"],[\"232707\",\"呼中区\"],[\"232706\",\"新林区\"],[\"232705\",\"松岭区\"]]]]],[\"3100\",\"上海市\",[[\"3101\",\"黄浦区\"],[\"3102\",\"徐汇区\"],[\"3103\",\"长宁区\"],[\"3104\",\"静安区\"],[\"3105\",\"普陀区\"],[\"3107\",\"虹口区\"],[\"3108\",\"杨浦区\"],[\"3109\",\"浦东新区\"],[\"3110\",\"闵行区\"],[\"3111\",\"宝山区\"],[\"3112\",\"嘉定区\"],[\"3113\",\"金山区\"],[\"3114\",\"松江区\"],[\"3115\",\"青浦区\"],[\"3116\",\"奉贤区\"],[\"3117\",\"崇明区\"]]],[\"3200\",\"江苏省\",[[\"3201\",\"南京市\",[[\"320101\",\"玄武区\"],[\"320103\",\"秦淮区\"],[\"320104\",\"建邺区\"],[\"320105\",\"鼓楼区\"],[\"320107\",\"浦口区\"],[\"320108\",\"六合区\"],[\"320109\",\"栖霞区\"],[\"320110\",\"雨花台区\"],[\"320111\",\"江宁区\"],[\"320112\",\"溧水区\"],[\"320113\",\"高淳区\"]]],[\"3202\",\"无锡市\",[[\"320201\",\"宜兴市\"],[\"320202\",\"江阴市\"],[\"320206\",\"滨湖区\"],[\"320207\",\"新吴区\"],[\"320208\",\"惠山区\"],[\"320209\",\"锡山区\"],[\"320210\",\"梁溪区\"]]],[\"3203\",\"徐州市\",[[\"320301\",\"鼓楼区\"],[\"320302\",\"云龙区\"],[\"320304\",\"贾汪区\"],[\"320305\",\"泉山区\"],[\"320306\",\"丰县\"],[\"320307\",\"沛县\"],[\"320308\",\"铜山区\"],[\"320309\",\"睢宁县\"],[\"320310\",\"新沂市\"],[\"320311\",\"邳州市\"]]],[\"3204\",\"常州市\",[[\"320401\",\"溧阳市\"],[\"320402\",\"天宁区\"],[\"320403\",\"钟楼区\"],[\"320405\",\"新北区\"],[\"320406\",\"武进区\"],[\"320407\",\"金坛区\"]]],[\"3205\",\"苏州市\",[[\"320504\",\"虎丘区\"],[\"320505\",\"吴中区\"],[\"320506\",\"相城区\"],[\"320507\",\"工业园区\"],[\"320508\",\"吴江区\"],[\"320509\",\"昆山市\"],[\"320510\",\"常熟市\"],[\"320511\",\"太仓市\"],[\"320512\",\"张家港市\"],[\"320514\",\"姑苏区\"]]],[\"3206\",\"南通市\",[[\"3216\",\"如皋市\"],[\"320601\",\"通州区\"],[\"320602\",\"启东市\"],[\"320603\",\"崇川区\"],[\"320605\",\"海安市\"],[\"320606\",\"如东县\"],[\"320608\",\"海门区\"]]],[\"3207\",\"连云港市\",[[\"320701\",\"连云区\"],[\"320703\",\"海州区\"],[\"320704\",\"赣榆区\"],[\"320705\",\"东海县\"],[\"320706\",\"灌云县\"],[\"320707\",\"灌南县\"]]],[\"3208\",\"淮安市\",[[\"320801\",\"金湖县\"],[\"320802\",\"盱眙县\"],[\"320803\",\"清江浦区\"],[\"320804\",\"淮安区\"],[\"320805\",\"淮阴区\"],[\"320807\",\"涟水县\"],[\"320808\",\"洪泽区\"]]],[\"3209\",\"盐城市\",[[\"320901\",\"亭湖区\"],[\"320902\",\"盐都区\"],[\"320903\",\"响水县\"],[\"320904\",\"滨海县\"],[\"320905\",\"阜宁县\"],[\"320906\",\"射阳县\"],[\"320907\",\"建湖县\"],[\"320908\",\"东台市\"],[\"320909\",\"大丰区\"]]],[\"3210\",\"扬州市\",[[\"321001\",\"高邮市\"],[\"321002\",\"广陵区\"],[\"321003\",\"邗江区\"],[\"321005\",\"宝应县\"],[\"321006\",\"仪征市\"],[\"321007\",\"江都区\"]]],[\"3211\",\"镇江市\",[[\"3215\",\"丹阳市\"],[\"3217\",\"句容市\"],[\"321101\",\"京口区\"],[\"321102\",\"润州区\"],[\"321103\",\"丹徒区\"],[\"321105\",\"扬中市\"]]],[\"3212\",\"泰州市\",[[\"321201\",\"泰兴市\"],[\"321202\",\"靖江市\"],[\"321203\",\"海陵区\"],[\"321204\",\"高港区\"],[\"321205\",\"兴化市\"],[\"321206\",\"姜堰区\"]]],[\"3213\",\"宿迁市\",[[\"321301\",\"宿城区\"],[\"321302\",\"宿豫区\"],[\"321303\",\"沭阳县\"],[\"321304\",\"泗阳县\"],[\"321305\",\"泗洪县\"]]]]],[\"3300\",\"浙江省\",[[\"3301\",\"杭州市\",[[\"330101\",\"上城区\"],[\"330104\",\"拱墅区\"],[\"330105\",\"西湖区\"],[\"330106\",\"滨江区\"],[\"330107\",\"萧山区\"],[\"330108\",\"余杭区\"],[\"330109\",\"桐庐县\"],[\"330110\",\"淳安县\"],[\"330111\",\"建德市\"],[\"330112\",\"富阳区\"],[\"330113\",\"临安区\"],[\"246180212\",\"钱塘区\"],[\"246180213\",\"临平区\"]]],[\"3302\",\"宁波市\",[[\"330114\",\"余姚市\"],[\"330201\",\"象山县\"],[\"330202\",\"宁海县\"],[\"330203\",\"慈溪市\"],[\"330205\",\"海曙区\"],[\"330207\",\"江北区\"],[\"330208\",\"北仑区\"],[\"330209\",\"镇海区\"],[\"330210\",\"鄞州区\"],[\"330211\",\"奉化区\"]]],[\"3303\",\"温州市\",[[\"330301\",\"瑞安市\"],[\"330302\",\"永嘉县\"],[\"330303\",\"乐清市\"],[\"330304\",\"鹿城区\"],[\"330305\",\"龙湾区\"],[\"330306\",\"瓯海区\"],[\"330307\",\"洞头区\"],[\"330308\",\"平阳县\"],[\"330309\",\"苍南县\"],[\"330310\",\"文成县\"],[\"330311\",\"泰顺县\"],[\"330383\",\"龙港市\"]]],[\"3304\",\"嘉兴市\",[[\"330401\",\"海宁市\"],[\"330402\",\"桐乡市\"],[\"330403\",\"平湖市\"],[\"330404\",\"嘉善县\"],[\"330405\",\"南湖区\"],[\"330406\",\"秀洲区\"],[\"330407\",\"海盐县\"]]],[\"3305\",\"湖州市\",[[\"330501\",\"德清县\"],[\"330502\",\"吴兴区\"],[\"330503\",\"南浔区\"],[\"330504\",\"长兴县\"],[\"330505\",\"安吉县\"]]],[\"3306\",\"绍兴市\",[[\"3312\",\"诸暨市\"],[\"330601\",\"上虞区\"],[\"330603\",\"越城区\"],[\"330604\",\"柯桥区\"],[\"330605\",\"新昌县\"],[\"330607\",\"嵊州市\"]]],[\"3307\",\"金华市\",[[\"3313\",\"永康市\"],[\"330701\",\"义乌市\"],[\"330702\",\"东阳市\",[[\"33070201\",\"横店\"]]],[\"330703\",\"婺城区\"],[\"330704\",\"金东区\"],[\"330705\",\"武义县\"],[\"330706\",\"浦江县\"],[\"330707\",\"磐安县\"],[\"330708\",\"兰溪市\"]]],[\"3308\",\"衢州市\",[[\"330801\",\"柯城区\"],[\"330802\",\"衢江区\"],[\"330803\",\"常山县\"],[\"330804\",\"开化县\"],[\"330805\",\"龙游县\"],[\"330806\",\"江山市\"]]],[\"3309\",\"舟山市\",[[\"330901\",\"定海区\"],[\"330902\",\"普陀区\"],[\"330903\",\"岱山县\"],[\"330904\",\"嵊泗县\"]]],[\"3310\",\"台州市\",[[\"331001\",\"三门县\"],[\"331002\",\"温岭市\"],[\"331004\",\"玉环市\"],[\"331005\",\"椒江区\"],[\"331006\",\"黄岩区\"],[\"331007\",\"路桥区\"],[\"331008\",\"天台县\"],[\"331009\",\"仙居县\"],[\"331010\",\"临海市\"]]],[\"3311\",\"丽水市\",[[\"331101\",\"莲都区\"],[\"331102\",\"青田县\"],[\"331103\",\"缙云县\"],[\"331104\",\"遂昌县\"],[\"331105\",\"松阳县\"],[\"331106\",\"云和县\"],[\"331107\",\"庆元县\"],[\"331108\",\"景宁畲族自治县\"],[\"331109\",\"龙泉市\"]]]]],[\"3400\",\"安徽省\",[[\"3401\",\"合肥市\",[[\"3414\",\"巢湖市\"],[\"340101\",\"庐阳区\"],[\"340102\",\"瑶海区\"],[\"340103\",\"蜀山区\"],[\"340104\",\"包河区\"],[\"340105\",\"经济技术开发区\"],[\"340106\",\"滨湖新区\"],[\"340107\",\"新站综合开发试验区\"],[\"340108\",\"高新区\"],[\"340109\",\"政务文化新区\"],[\"340110\",\"北城新区\"],[\"340111\",\"长丰县\"],[\"340112\",\"肥东县\"],[\"340113\",\"肥西县\"],[\"340114\",\"庐江县\"]]],[\"3402\",\"芜湖市\",[[\"340201\",\"镜湖区\"],[\"340202\",\"弋江区\"],[\"340203\",\"鸠江区\"],[\"340205\",\"湾沚区\"],[\"340206\",\"繁昌区\"],[\"340207\",\"南陵县\"],[\"340208\",\"无为市\"]]],[\"3403\",\"蚌埠市\",[[\"340301\",\"龙子湖区\"],[\"340302\",\"蚌山区\"],[\"340303\",\"禹会区\"],[\"340304\",\"淮上区\"],[\"340305\",\"怀远县\"],[\"340306\",\"五河县\"],[\"340307\",\"固镇县\"]]],[\"3404\",\"淮南市\",[[\"340401\",\"大通区\"],[\"340402\",\"田家庵区\"],[\"340403\",\"谢家集区\"],[\"340404\",\"八公山区\"],[\"340405\",\"潘集区\"],[\"340406\",\"凤台县\"],[\"341503\",\"寿县\"]]],[\"3405\",\"马鞍山市\",[[\"340501\",\"花山区\"],[\"340502\",\"雨山区\"],[\"340503\",\"博望区\"],[\"340504\",\"当涂县\"],[\"340505\",\"含山县\"],[\"340506\",\"和县\"]]],[\"3406\",\"淮北市\",[[\"340601\",\"杜集区\"],[\"340602\",\"相山区\"],[\"340603\",\"烈山区\"],[\"340604\",\"濉溪县\"]]],[\"3407\",\"铜陵市\",[[\"340701\",\"铜官区\"],[\"340703\",\"郊区\"],[\"340704\",\"义安区\"],[\"340807\",\"枞阳县\"]]],[\"3408\",\"安庆市\",[[\"340801\",\"宿松县\"],[\"340803\",\"迎江区\"],[\"340804\",\"大观区\"],[\"340805\",\"宜秀区\"],[\"340806\",\"怀宁县\"],[\"340808\",\"潜山市\"],[\"340809\",\"太湖县\"],[\"340810\",\"望江县\"],[\"340811\",\"岳西县\"],[\"340812\",\"桐城市\"]]],[\"3410\",\"黄山市\",[[\"341001\",\"屯溪区\"],[\"341002\",\"黄山区\"],[\"341003\",\"徽州区\"],[\"341004\",\"歙县\"],[\"341005\",\"休宁县\"],[\"341006\",\"黟县\"],[\"341007\",\"祁门县\"]]],[\"3411\",\"滁州市\",[[\"341101\",\"凤阳县\"],[\"341102\",\"琅琊区\"],[\"341103\",\"南谯区\"],[\"341104\",\"来安县\"],[\"341105\",\"全椒县\"],[\"341106\",\"定远县\"],[\"341107\",\"天长市\"],[\"341108\",\"明光市\"]]],[\"3412\",\"阜阳市\",[[\"341201\",\"颍州区\"],[\"341202\",\"颍东区\"],[\"341203\",\"颍泉区\"],[\"341204\",\"临泉县\"],[\"341205\",\"太和县\"],[\"341206\",\"阜南县\"],[\"341207\",\"颍上县\"],[\"341208\",\"界首市\"]]],[\"3413\",\"宿州市\",[[\"341301\",\"埇桥区\"],[\"341302\",\"砀山县\"],[\"341303\",\"萧县\"],[\"341304\",\"灵璧县\"],[\"341305\",\"泗县\"]]],[\"3415\",\"六安市\",[[\"341501\",\"金安区\"],[\"341502\",\"裕安区\"],[\"341504\",\"霍邱县\"],[\"341505\",\"舒城县\"],[\"341506\",\"金寨县\"],[\"341507\",\"霍山县\"],[\"341508\",\"叶集区\"]]],[\"3416\",\"亳州市\",[[\"341601\",\"谯城区\"],[\"341602\",\"涡阳县\"],[\"341603\",\"蒙城县\"],[\"341604\",\"利辛县\"]]],[\"3417\",\"池州市\",[[\"341701\",\"贵池区\"],[\"341702\",\"东至县\"],[\"341703\",\"石台县\"],[\"341704\",\"青阳县\"]]],[\"3418\",\"宣城市\",[[\"341801\",\"广德市\"],[\"341802\",\"宣州区\"],[\"341803\",\"郎溪县\"],[\"341804\",\"泾县\"],[\"341805\",\"绩溪县\"],[\"341806\",\"旌德县\"],[\"341807\",\"宁国市\"]]]]],[\"3500\",\"福建省\",[[\"3501\",\"福州市\",[[\"3510\",\"福清市\"],[\"350101\",\"鼓楼区\"],[\"350102\",\"台江区\"],[\"350103\",\"仓山区\"],[\"350104\",\"马尾区\"],[\"350105\",\"晋安区\"],[\"350106\",\"闽侯县\"],[\"350107\",\"罗源县\"],[\"350108\",\"连江县\",[[\"35010801\",\"南竿\"]]],[\"350109\",\"永泰县\"],[\"350110\",\"闽清县\"],[\"350111\",\"平潭县\"],[\"350112\",\"长乐区\"]]],[\"3502\",\"厦门市\",[[\"350201\",\"思明区\"],[\"350202\",\"湖里区\"],[\"350203\",\"集美区\"],[\"350204\",\"海沧区\"],[\"350205\",\"同安区\"],[\"350206\",\"翔安区\"]]],[\"3503\",\"莆田市\",[[\"350301\",\"城厢区\"],[\"350302\",\"涵江区\"],[\"350303\",\"荔城区\"],[\"350304\",\"秀屿区\"],[\"350305\",\"仙游县\"]]],[\"3504\",\"三明市\",[[\"350402\",\"三元区\"],[\"350403\",\"明溪县\"],[\"350404\",\"清流县\"],[\"350405\",\"宁化县\"],[\"350406\",\"大田县\"],[\"350407\",\"尤溪县\"],[\"350408\",\"沙县区\"],[\"350409\",\"将乐县\"],[\"350410\",\"泰宁县\"],[\"350411\",\"建宁县\"],[\"350412\",\"永安市\"]]],[\"3505\",\"泉州市\",[[\"350501\",\"泉港区\"],[\"350502\",\"晋江市\"],[\"350503\",\"鲤城区\"],[\"350504\",\"丰泽区\"],[\"350505\",\"洛江区\"],[\"350506\",\"惠安县\"],[\"350507\",\"安溪县\"],[\"350508\",\"永春县\"],[\"350509\",\"德化县\"],[\"350510\",\"金门县\"],[\"350511\",\"石狮市\"],[\"350512\",\"南安市\"]]],[\"3506\",\"漳州市\",[[\"350601\",\"芗城区\"],[\"350602\",\"龙文区\"],[\"350603\",\"云霄县\"],[\"350604\",\"漳浦县\"],[\"350605\",\"诏安县\"],[\"350606\",\"长泰区\"],[\"350607\",\"东山县\"],[\"350608\",\"南靖县\"],[\"350609\",\"平和县\"],[\"350610\",\"华安县\"],[\"350611\",\"龙海区\"]]],[\"3507\",\"南平市\",[[\"350701\",\"延平区\"],[\"350702\",\"顺昌县\"],[\"350703\",\"浦城县\"],[\"350704\",\"光泽县\"],[\"350705\",\"松溪县\"],[\"350706\",\"政和县\"],[\"350707\",\"邵武市\"],[\"350708\",\"武夷山市\"],[\"350709\",\"建瓯市\"],[\"350710\",\"建阳区\"]]],[\"3508\",\"龙岩市\",[[\"350801\",\"新罗区\"],[\"350802\",\"长汀县\"],[\"350803\",\"永定区\"],[\"350804\",\"上杭县\"],[\"350805\",\"武平县\"],[\"350806\",\"连城县\"],[\"350807\",\"漳平市\"]]],[\"3509\",\"宁德市\",[[\"350901\",\"福安市\"],[\"350902\",\"蕉城区\"],[\"350903\",\"霞浦县\"],[\"350904\",\"古田县\"],[\"350905\",\"屏南县\"],[\"350906\",\"寿宁县\"],[\"350907\",\"周宁县\"],[\"350908\",\"柘荣县\"],[\"350909\",\"福鼎市\"]]]]],[\"3600\",\"江西省\",[[\"3601\",\"南昌市\",[[\"360101\",\"东湖区\"],[\"360102\",\"西湖区\"],[\"360103\",\"青云谱区\"],[\"360104\",\"青山湖区\"],[\"360106\",\"南昌县\"],[\"360107\",\"新建区\"],[\"360108\",\"进贤县\"],[\"360109\",\"安义县\"],[\"246180206\",\"红谷滩区\"],[\"246180207\",\"高新技术产业开发区\"],[\"246180208\",\"经济技术开发区\"],[\"246180209\",\"南昌综合保税区\"],[\"246180210\",\"临空经济区\"],[\"246180211\",\"小蓝经济技术开发区\"]]],[\"3602\",\"景德镇市\",[[\"360201\",\"昌江区\"],[\"360202\",\"珠山区\"],[\"360203\",\"浮梁县\"],[\"360204\",\"乐平市\"]]],[\"3603\",\"萍乡市\",[[\"360301\",\"安源区\"],[\"360302\",\"湘东区\"],[\"360303\",\"莲花县\"],[\"360304\",\"上栗县\"],[\"360305\",\"芦溪县\"]]],[\"3604\",\"九江市\",[[\"360401\",\"濂溪区\"],[\"360402\",\"浔阳区\"],[\"360403\",\"柴桑区\"],[\"360404\",\"武宁县\"],[\"360405\",\"修水县\"],[\"360406\",\"永修县\"],[\"360407\",\"德安县\"],[\"360408\",\"庐山市\"],[\"360409\",\"都昌县\"],[\"360410\",\"湖口县\"],[\"360411\",\"彭泽县\"],[\"360412\",\"瑞昌市\"],[\"360413\",\"共青城市\"]]],[\"3605\",\"新余市\",[[\"360501\",\"渝水区\"],[\"360502\",\"分宜县\"]]],[\"3606\",\"鹰潭市\",[[\"360601\",\"月湖区\"],[\"360602\",\"余江区\"],[\"360603\",\"贵溪市\"]]],[\"3607\",\"赣州市\",[[\"360701\",\"章贡区\"],[\"360702\",\"赣县区\"],[\"360703\",\"信丰县\"],[\"360704\",\"大余县\"],[\"360705\",\"上犹县\"],[\"360706\",\"崇义县\"],[\"360707\",\"安远县\"],[\"360708\",\"龙南市\"],[\"360709\",\"定南县\"],[\"360710\",\"全南县\"],[\"360711\",\"宁都县\"],[\"360712\",\"于都县\"],[\"360713\",\"兴国县\"],[\"360714\",\"会昌县\"],[\"360715\",\"寻乌县\"],[\"360716\",\"石城县\"],[\"360717\",\"瑞金市\"],[\"360718\",\"南康区\"]]],[\"3608\",\"吉安市\",[[\"360801\",\"吉州区\"],[\"360802\",\"青原区\"],[\"360803\",\"吉安县\"],[\"360804\",\"吉水县\"],[\"360805\",\"峡江县\"],[\"360806\",\"新干县\"],[\"360807\",\"永丰县\"],[\"360808\",\"泰和县\"],[\"360809\",\"遂川县\"],[\"360810\",\"万安县\"],[\"360811\",\"安福县\"],[\"360812\",\"永新县\"],[\"360813\",\"井冈山市\"]]],[\"3609\",\"宜春市\",[[\"360901\",\"袁州区\"],[\"360902\",\"奉新县\"],[\"360903\",\"万载县\"],[\"360904\",\"上高县\"],[\"360905\",\"宜丰县\"],[\"360906\",\"靖安县\"],[\"360907\",\"铜鼓县\"],[\"360908\",\"丰城市\"],[\"360909\",\"樟树市\"],[\"360910\",\"高安市\"]]],[\"3610\",\"抚州市\",[[\"361001\",\"临川区\"],[\"361002\",\"南城县\"],[\"361003\",\"黎川县\"],[\"361004\",\"南丰县\"],[\"361005\",\"崇仁县\"],[\"361006\",\"乐安县\"],[\"361007\",\"宜黄县\"],[\"361008\",\"金溪县\"],[\"361009\",\"资溪县\"],[\"361010\",\"东乡区\"],[\"361011\",\"广昌县\"]]],[\"3611\",\"上饶市\",[[\"361101\",\"信州区\"],[\"361102\",\"广信区\"],[\"361103\",\"广丰区\"],[\"361104\",\"玉山县\"],[\"361105\",\"铅山县\"],[\"361106\",\"横峰县\"],[\"361107\",\"弋阳县\"],[\"361108\",\"余干县\"],[\"361109\",\"鄱阳县\"],[\"361110\",\"万年县\"],[\"361111\",\"婺源县\"],[\"361112\",\"德兴市\"]]]]],[\"3700\",\"山东省\",[[\"3701\",\"济南市\",[[\"3712\",\"莱芜区\"],[\"3718\",\"章丘区\"],[\"370101\",\"市中区\"],[\"370102\",\"历下区\"],[\"370103\",\"天桥区\"],[\"370104\",\"槐荫区\"],[\"370105\",\"历城区\"],[\"370106\",\"长清区\"],[\"370107\",\"平阴县\"],[\"370108\",\"济阳区\"],[\"370109\",\"商河县\"],[\"370110\",\"济南高新区\"],[\"371202\",\"钢城区\"]]],[\"3702\",\"青岛市\",[[\"370201\",\"市南区\"],[\"370202\",\"市北区\"],[\"370204\",\"李沧区\"],[\"370205\",\"黄岛区\"],[\"370206\",\"崂山区\"],[\"370207\",\"城阳区\"],[\"370208\",\"胶州市\"],[\"370209\",\"即墨区\"],[\"370210\",\"平度市\"],[\"370212\",\"莱西市\"],[\"370213\",\"青岛经济技术开发区\"],[\"370214\",\"青岛高新技术产业开发区\"]]],[\"3703\",\"淄博市\",[[\"370301\",\"淄川区\"],[\"370302\",\"张店区\"],[\"370303\",\"博山区\"],[\"370304\",\"临淄区\"],[\"370305\",\"周村区\"],[\"370306\",\"桓台县\"],[\"370307\",\"高青县\"],[\"370308\",\"沂源县\"]]],[\"3704\",\"枣庄市\",[[\"370401\",\"市中区\"],[\"370402\",\"薛城区\"],[\"370403\",\"峄城区\"],[\"370404\",\"台儿庄区\"],[\"370405\",\"山亭区\"],[\"370406\",\"滕州市\"]]],[\"3705\",\"东营市\",[[\"370501\",\"东营区\"],[\"370502\",\"河口区\"],[\"370503\",\"垦利区\"],[\"370504\",\"利津县\"],[\"370505\",\"广饶县\"]]],[\"3706\",\"烟台市\",[[\"370601\",\"海阳市\"],[\"370602\",\"芝罘区\"],[\"370603\",\"福山区\"],[\"370604\",\"牟平区\"],[\"370605\",\"莱山区\"],[\"370607\",\"龙口市\"],[\"370608\",\"莱阳市\"],[\"370609\",\"莱州市\"],[\"370610\",\"蓬莱区\"],[\"370611\",\"招远市\"],[\"370612\",\"栖霞市\"],[\"370613\",\"高新区\"],[\"370614\",\"开发区\"]]],[\"3707\",\"潍坊市\",[[\"370701\",\"潍城区\"],[\"370702\",\"寒亭区\"],[\"370703\",\"坊子区\"],[\"370704\",\"奎文区\"],[\"370705\",\"临朐县\"],[\"370706\",\"昌乐县\"],[\"370707\",\"青州市\"],[\"370708\",\"诸城市\"],[\"370709\",\"寿光市\"],[\"370710\",\"安丘市\"],[\"370711\",\"高密市\"],[\"370712\",\"昌邑市\"]]],[\"3708\",\"济宁市\",[[\"3729\",\"兖州区\"],[\"370802\",\"任城区\"],[\"370803\",\"微山县\"],[\"370804\",\"鱼台县\"],[\"370805\",\"金乡县\"],[\"370806\",\"嘉祥县\"],[\"370807\",\"汶上县\"],[\"370808\",\"泗水县\"],[\"370809\",\"梁山县\"],[\"370810\",\"曲阜市\"],[\"370812\",\"邹城市\"]]],[\"3709\",\"泰安市\",[[\"3721\",\"肥城市\"],[\"370901\",\"泰山区\"],[\"370902\",\"岱岳区\"],[\"370903\",\"宁阳县\"],[\"370904\",\"东平县\"],[\"370905\",\"新泰市\"]]],[\"3710\",\"威海市\",[[\"3719\",\"荣成市\"],[\"3720\",\"乳山市\"],[\"371001\",\"环翠区\"],[\"371002\",\"文登区\"]]],[\"3711\",\"日照市\",[[\"371101\",\"东港区\"],[\"371102\",\"岚山区\"],[\"371103\",\"五莲县\"],[\"371104\",\"莒县\"]]],[\"3713\",\"临沂市\",[[\"371301\",\"兰山区\"],[\"371302\",\"罗庄区\"],[\"371303\",\"河东区\"],[\"371304\",\"沂南县\"],[\"371305\",\"郯城县\"],[\"371306\",\"沂水县\"],[\"371307\",\"兰陵县\"],[\"371308\",\"费县\"],[\"371309\",\"平邑县\"],[\"371310\",\"莒南县\"],[\"371311\",\"蒙阴县\"],[\"371312\",\"临沭县\"]]],[\"3714\",\"德州市\",[[\"371401\",\"德城区\"],[\"371402\",\"陵城区\"],[\"371403\",\"宁津县\"],[\"371404\",\"庆云县\"],[\"371405\",\"临邑县\"],[\"371406\",\"齐河县\"],[\"371407\",\"平原县\"],[\"371408\",\"夏津县\"],[\"371409\",\"武城县\"],[\"371410\",\"乐陵市\"],[\"371411\",\"禹城市\"]]],[\"3715\",\"聊城市\",[[\"371501\",\"东昌府区\"],[\"371502\",\"阳谷县\"],[\"371503\",\"莘县\"],[\"371504\",\"茌平区\"],[\"371505\",\"东阿县\"],[\"371506\",\"冠县\"],[\"371507\",\"高唐县\"],[\"371508\",\"临清市\"]]],[\"3716\",\"滨州市\",[[\"371601\",\"滨城区\"],[\"371602\",\"惠民县\"],[\"371603\",\"阳信县\"],[\"371604\",\"无棣县\"],[\"371606\",\"博兴县\"],[\"371607\",\"邹平市\"],[\"371608\",\"沾化区\"]]],[\"3717\",\"菏泽市\",[[\"371701\",\"牡丹区\"],[\"371702\",\"曹县\"],[\"371703\",\"单县\"],[\"371704\",\"成武县\"],[\"371705\",\"巨野县\"],[\"371706\",\"郓城县\"],[\"371707\",\"鄄城县\"],[\"371708\",\"定陶区\"],[\"371709\",\"东明县\"]]]]],[\"4100\",\"河南省\",[[\"4101\",\"郑州市\",[[\"410101\",\"中原区\"],[\"410102\",\"二七区\"],[\"410103\",\"管城回族区\"],[\"410104\",\"金水区\"],[\"410105\",\"惠济区\"],[\"410106\",\"郑东新区\"],[\"410107\",\"经开区\"],[\"410108\",\"高新区\"],"); + data.append("[\"410109\",\"上街区\"],[\"410110\",\"新郑市\"],[\"410111\",\"登封市\"],[\"410112\",\"新密市\"],[\"410113\",\"荥阳市\"],[\"410114\",\"中牟县\"],[\"410115\",\"巩义市\"],[\"410116\",\"航空港区\"]]],[\"4102\",\"开封市\",[[\"410201\",\"龙亭区\"],[\"410202\",\"顺河回族区\"],[\"410203\",\"鼓楼区\"],[\"410204\",\"禹王台区\"],[\"410206\",\"杞县\"],[\"410207\",\"通许县\"],[\"410208\",\"尉氏县\"],[\"410209\",\"祥符区\"],[\"410210\",\"兰考县\"]]],[\"4103\",\"洛阳市\",[[\"410301\",\"老城区\"],[\"410302\",\"西工区\"],[\"410303\",\"瀍河回族区\"],[\"410304\",\"涧西区\"],[\"410306\",\"洛龙区\"],[\"410307\",\"孟津区\"],[\"410308\",\"新安县\"],[\"410309\",\"栾川县\"],[\"410310\",\"嵩县\"],[\"410311\",\"汝阳县\"],[\"410312\",\"宜阳县\"],[\"410313\",\"洛宁县\"],[\"410314\",\"伊川县\"],[\"410315\",\"偃师区\"]]],[\"4104\",\"平顶山市\",[[\"410401\",\"新华区\"],[\"410402\",\"卫东区\"],[\"410403\",\"石龙区\"],[\"410404\",\"湛河区\"],[\"410405\",\"宝丰县\"],[\"410406\",\"叶县\"],[\"410407\",\"鲁山县\"],[\"410408\",\"郏县\"],[\"410409\",\"舞钢市\"],[\"410410\",\"汝州市\"]]],[\"4105\",\"安阳市\",[[\"410501\",\"文峰区\"],[\"410502\",\"北关区\"],[\"410503\",\"殷都区\"],[\"410504\",\"龙安区\"],[\"410505\",\"安阳县\"],[\"410506\",\"汤阴县\"],[\"410507\",\"滑县\"],[\"410508\",\"内黄县\"],[\"410509\",\"林州市\"]]],[\"4106\",\"鹤壁市\",[[\"410601\",\"鹤山区\"],[\"410602\",\"山城区\"],[\"410603\",\"淇滨区\"],[\"410604\",\"浚县\"],[\"410605\",\"淇县\"]]],[\"4107\",\"新乡市\",[[\"410701\",\"红旗区\"],[\"410702\",\"卫滨区\"],[\"410703\",\"凤泉区\"],[\"410704\",\"牧野区\"],[\"410705\",\"新乡县\"],[\"410706\",\"获嘉县\"],[\"410707\",\"原阳县\"],[\"410708\",\"延津县\"],[\"410709\",\"封丘县\"],[\"410710\",\"长垣市\"],[\"410711\",\"卫辉市\"],[\"410712\",\"辉县市\"]]],[\"4108\",\"焦作市\",[[\"410801\",\"解放区\"],[\"410802\",\"中站区\"],[\"410803\",\"马村区\"],[\"410804\",\"山阳区\"],[\"410805\",\"修武县\"],[\"410806\",\"博爱县\"],[\"410807\",\"武陟县\"],[\"410808\",\"温县\"],[\"410809\",\"沁阳市\"],[\"410810\",\"孟州市\"]]],[\"4109\",\"濮阳市\",[[\"410901\",\"华龙区\"],[\"410902\",\"清丰县\"],[\"410903\",\"南乐县\"],[\"410904\",\"范县\"],[\"410905\",\"台前县\"],[\"410906\",\"濮阳县\"]]],[\"4110\",\"许昌市\",[[\"411001\",\"长葛市\"],[\"411002\",\"魏都区\"],[\"411003\",\"建安区\"],[\"411004\",\"鄢陵县\"],[\"411005\",\"襄城县\"],[\"411006\",\"禹州市\"]]],[\"4111\",\"漯河市\",[[\"411101\",\"源汇区\"],[\"411102\",\"郾城区\"],[\"411103\",\"召陵区\"],[\"411104\",\"舞阳县\"],[\"411105\",\"临颍县\"]]],[\"4112\",\"三门峡市\",[[\"411201\",\"湖滨区\"],[\"411202\",\"渑池县\"],[\"411203\",\"陕州区\"],[\"411204\",\"卢氏县\"],[\"411205\",\"义马市\"],[\"411206\",\"灵宝市\"]]],[\"4113\",\"南阳市\",[[\"411301\",\"宛城区\"],[\"411302\",\"卧龙区\"],[\"411303\",\"南召县\"],[\"411304\",\"方城县\"],[\"411305\",\"西峡县\"],[\"411306\",\"镇平县\"],[\"411307\",\"内乡县\"],[\"411308\",\"淅川县\"],[\"411309\",\"社旗县\"],[\"411310\",\"唐河县\"],[\"411311\",\"新野县\"],[\"411312\",\"桐柏县\"],[\"411313\",\"邓州市\"]]],[\"4114\",\"商丘市\",[[\"411401\",\"梁园区\"],[\"411402\",\"睢阳区\"],[\"411403\",\"民权县\"],[\"411404\",\"睢县\"],[\"411405\",\"宁陵县\"],[\"411406\",\"柘城县\"],[\"411407\",\"虞城县\"],[\"411408\",\"夏邑县\"],[\"411409\",\"永城市\"]]],[\"4115\",\"信阳市\",[[\"411501\",\"浉河区\"],[\"411502\",\"平桥区\"],[\"411503\",\"罗山县\"],[\"411504\",\"光山县\"],[\"411505\",\"新县\"],[\"411506\",\"商城县\"],[\"411507\",\"固始县\"],[\"411508\",\"潢川县\"],[\"411509\",\"淮滨县\"],[\"411510\",\"息县\"]]],[\"4116\",\"周口市\",[[\"411601\",\"川汇区\"],[\"411602\",\"扶沟县\"],[\"411603\",\"西华县\"],[\"411604\",\"商水县\"],[\"411605\",\"沈丘县\"],[\"411606\",\"郸城县\"],[\"411607\",\"淮阳区\"],[\"411608\",\"太康县\"],[\"411609\",\"鹿邑县\"],[\"411610\",\"项城市\"]]],[\"4117\",\"驻马店市\",[[\"411701\",\"西平县\"],[\"411702\",\"驿城区\"],[\"411703\",\"上蔡县\"],[\"411704\",\"平舆县\"],[\"411705\",\"正阳县\"],[\"411706\",\"确山县\"],[\"411707\",\"泌阳县\"],[\"411708\",\"汝南县\"],[\"411709\",\"遂平县\"],[\"411710\",\"新蔡县\"]]],[\"4118\",\"济源市\"]]],[\"4200\",\"湖北省\",[[\"4201\",\"武汉市\",[[\"420101\",\"江岸区\"],[\"420102\",\"江汉区\"],[\"420103\",\"硚口区\"],[\"420104\",\"汉阳区\"],[\"420105\",\"武昌区\"],[\"420106\",\"青山区\"],[\"420107\",\"洪山区\"],[\"420108\",\"蔡甸区\"],[\"420109\",\"东西湖区\"],[\"420110\",\"汉南区\"],[\"420111\",\"江夏区\"],[\"420112\",\"黄陂区\"],[\"420113\",\"新洲区\"],[\"420114\",\"武汉经济技术开发区\"],[\"420115\",\"东湖新技术开发区\"],[\"420116\",\"武汉吴家山经济技术开发区\"],[\"420117\",\"高新技术产业开发区\"],[\"420118\",\"经济技术开发区\"]]],[\"4202\",\"黄石市\",[[\"420201\",\"黄石港区\"],[\"420202\",\"西塞山区\"],[\"420203\",\"下陆区\"],[\"420204\",\"铁山区\"],[\"420205\",\"阳新县\"],[\"420206\",\"大冶市\"]]],[\"4203\",\"十堰市\",[[\"420301\",\"茅箭区\"],[\"420302\",\"张湾区\"],[\"420303\",\"郧阳区\"],[\"420304\",\"郧西县\"],[\"420305\",\"竹山县\"],[\"420306\",\"竹溪县\"],[\"420307\",\"房县\"],[\"420308\",\"丹江口市\"]]],[\"4205\",\"宜昌市\",[[\"420501\",\"西陵区\"],[\"420502\",\"伍家岗区\"],[\"420503\",\"点军区\"],[\"420504\",\"猇亭区\"],[\"420505\",\"夷陵区\"],[\"420506\",\"远安县\"],[\"420507\",\"兴山县\"],[\"420508\",\"秭归县\"],[\"420509\",\"长阳土家族自治县\"],[\"420510\",\"五峰土家族自治县\"],[\"420511\",\"宜都市\"],[\"420512\",\"当阳市\"],[\"420513\",\"枝江市\"]]],[\"4206\",\"襄阳市\",[[\"420601\",\"襄城区\"],[\"420602\",\"樊城区\"],[\"420603\",\"襄州区\"],[\"420604\",\"南漳县\"],[\"420605\",\"谷城县\"],[\"420606\",\"保康县\"],[\"420607\",\"老河口市\"],[\"420608\",\"枣阳市\"],[\"420609\",\"宜城市\"],[\"420699\",\"高新区\"]]],[\"4207\",\"鄂州市\",[[\"420701\",\"梁子湖区\"],[\"420702\",\"华容区\"],[\"420703\",\"鄂城区\"]]],[\"4208\",\"荆门市\",[[\"420801\",\"东宝区\"],[\"420802\",\"掇刀区\"],[\"420803\",\"京山市\"],[\"420804\",\"沙洋县\"],[\"420805\",\"钟祥市\"]]],[\"4209\",\"孝感市\",[[\"420901\",\"孝南区\"],[\"420902\",\"孝昌县\"],[\"420903\",\"大悟县\"],[\"420904\",\"云梦县\"],[\"420905\",\"应城市\"],[\"420906\",\"安陆市\"],[\"420907\",\"汉川市\"]]],[\"4210\",\"荆州市\",[[\"421001\",\"公安县\"],[\"421002\",\"沙市区\"],[\"421003\",\"荆州区\"],[\"421004\",\"监利市\"],[\"421005\",\"江陵县\"],[\"421006\",\"石首市\"],[\"421007\",\"洪湖市\"],[\"421008\",\"松滋市\"]]],[\"4211\",\"黄冈市\",[[\"421101\",\"武穴市\"],[\"421102\",\"黄州区\"],[\"421103\",\"团风县\"],[\"421104\",\"红安县\"],[\"421105\",\"罗田县\"],[\"421106\",\"英山县\"],[\"421107\",\"浠水县\"],[\"421108\",\"蕲春县\"],[\"421109\",\"黄梅县\"],[\"421110\",\"麻城市\"]]],[\"4212\",\"咸宁市\",[[\"421201\",\"咸安区\"],[\"421202\",\"嘉鱼县\"],[\"421203\",\"通城县\"],[\"421204\",\"崇阳县\"],[\"421205\",\"通山县\"],[\"421206\",\"赤壁市\"]]],[\"4213\",\"随州市\",[[\"421301\",\"曾都区\"],[\"421302\",\"随县\"],[\"421303\",\"广水市\"]]],[\"4228\",\"恩施土家族苗族自治州\",[[\"422801\",\"恩施市\"],[\"422802\",\"利川市\"],[\"422803\",\"建始县\"],[\"422804\",\"巴东县\"],[\"422805\",\"宣恩县\"],[\"422806\",\"咸丰县\"],[\"422807\",\"来凤县\"],[\"422808\",\"鹤峰县\"]]],[\"4229\",\"天门市\"],[\"4230\",\"仙桃市\"],[\"4231\",\"潜江市\"],[\"4232\",\"神农架林区\"]]],[\"4300\",\"湖南省\",[[\"4301\",\"长沙市\",[[\"430101\",\"芙蓉区\"],[\"430102\",\"天心区\"],[\"430103\",\"岳麓区\"],[\"430104\",\"开福区\"],[\"430105\",\"雨花区\"],[\"430106\",\"高新区\"],[\"430107\",\"望城区\"],[\"430108\",\"长沙县\"],[\"430109\",\"宁乡市\"],[\"430110\",\"浏阳市\"]]],[\"4302\",\"株洲市\",[[\"430201\",\"荷塘区\"],[\"430202\",\"芦淞区\"],[\"430203\",\"石峰区\"],[\"430204\",\"天元区\"],[\"430205\",\"渌口区\"],[\"430206\",\"攸县\"],[\"430207\",\"茶陵县\"],[\"430208\",\"炎陵县\"],[\"430209\",\"醴陵市\"]]],[\"4303\",\"湘潭市\",[[\"430301\",\"雨湖区\"],[\"430302\",\"岳塘区\"],[\"430303\",\"湘潭县\"],[\"430304\",\"湘乡市\"],[\"430305\",\"韶山市\"]]],[\"4304\",\"衡阳市\",[[\"430401\",\"珠晖区\"],[\"430402\",\"雁峰区\"],[\"430403\",\"石鼓区\"],[\"430404\",\"蒸湘区\"],[\"430405\",\"南岳区\"],[\"430406\",\"衡阳县\"],[\"430407\",\"衡南县\"],[\"430408\",\"衡山县\"],[\"430409\",\"衡东县\"],[\"430410\",\"祁东县\"],[\"430411\",\"耒阳市\"],[\"430412\",\"常宁市\"]]],[\"4305\",\"邵阳市\",[[\"430501\",\"双清区\"],[\"430502\",\"大祥区\"],[\"430503\",\"北塔区\"],[\"430504\",\"邵东市\"],[\"430505\",\"新邵县\"],[\"430506\",\"邵阳县\"],[\"430507\",\"隆回县\"],[\"430508\",\"洞口县\"],[\"430509\",\"绥宁县\"],[\"430510\",\"新宁县\"],[\"430511\",\"城步苗族自治县\"],[\"430512\",\"武冈市\"]]],[\"4306\",\"岳阳市\",[[\"430601\",\"岳阳楼区\"],[\"430602\",\"云溪区\"],[\"430603\",\"君山区\"],[\"430604\",\"岳阳县\"],[\"430605\",\"华容县\"],[\"430606\",\"湘阴县\"],[\"430607\",\"平江县\"],[\"430608\",\"汨罗市\"],[\"430609\",\"临湘市\"]]],[\"4307\",\"常德市\",[[\"430701\",\"武陵区\"],[\"430702\",\"鼎城区\"],[\"430703\",\"安乡县\"],[\"430704\",\"汉寿县\"],[\"430705\",\"澧县\"],[\"430706\",\"临澧县\"],[\"430707\",\"桃源县\"],[\"430708\",\"石门县\"],[\"430709\",\"津市市\"]]],[\"4308\",\"张家界市\",[[\"430801\",\"永定区\"],[\"430802\",\"武陵源区\"],[\"430803\",\"慈利县\"],[\"430804\",\"桑植县\"]]],[\"4309\",\"益阳市\",[[\"430901\",\"资阳区\"],[\"430902\",\"赫山区\"],[\"430903\",\"南县\"],[\"430904\",\"桃江县\"],[\"430905\",\"安化县\"],[\"430906\",\"沅江市\"]]],[\"4310\",\"郴州市\",[[\"431001\",\"北湖区\"],[\"431002\",\"苏仙区\"],[\"431003\",\"桂阳县\"],[\"431004\",\"宜章县\"],[\"431005\",\"永兴县\"],[\"431006\",\"嘉禾县\"],[\"431007\",\"临武县\"],[\"431008\",\"汝城县\"],[\"431009\",\"桂东县\"],[\"431010\",\"安仁县\"],[\"431011\",\"资兴市\"]]],[\"4311\",\"永州市\",[[\"431101\",\"零陵区\"],[\"431102\",\"冷水滩区\"],[\"431103\",\"祁阳市\"],[\"431104\",\"东安县\"],[\"431105\",\"双牌县\"],[\"431106\",\"道县\"],[\"431107\",\"江永县\"],[\"431108\",\"宁远县\"],[\"431109\",\"蓝山县\"],[\"431110\",\"新田县\"],[\"431111\",\"江华瑶族自治县\"]]],[\"4312\",\"怀化市\",[[\"431201\",\"鹤城区\"],[\"431202\",\"中方县\"],[\"431203\",\"沅陵县\"],[\"431204\",\"辰溪县\"],[\"431205\",\"溆浦县\"],[\"431206\",\"会同县\"],[\"431207\",\"麻阳苗族自治县\"],[\"431208\",\"新晃侗族自治县\"],[\"431209\",\"芷江侗族自治县\"],[\"431210\",\"靖州苗族侗族自治县\"],[\"431211\",\"通道侗族自治县\"],[\"431212\",\"洪江市\"]]],[\"4313\",\"娄底市\",[[\"431301\",\"娄星区\"],[\"431302\",\"双峰县\"],[\"431303\",\"新化县\"],[\"431304\",\"冷水江市\"],[\"431305\",\"涟源市\"]]],[\"4331\",\"湘西土家族苗族自治州\",[[\"433101\",\"吉首市\"],[\"433102\",\"泸溪县\"],[\"433103\",\"凤凰县\"],[\"433104\",\"花垣县\"],[\"433105\",\"保靖县\"],[\"433106\",\"古丈县\"],[\"433107\",\"永顺县\"],[\"433108\",\"龙山县\"]]]]],[\"4400\",\"广东省\",[[\"4401\",\"广州市\",[[\"4456\",\"南沙开发区\"],[\"440101\",\"越秀区\"],[\"440102\",\"海珠区\"],[\"440103\",\"荔湾区\"],[\"440104\",\"天河区\"],[\"440105\",\"白云区\"],[\"440106\",\"黄埔区\"],[\"440107\",\"番禺区\"],[\"440108\",\"花都区\"],[\"440110\",\"南沙区\"],[\"440111\",\"增城区\"],[\"440112\",\"从化区\"]]],[\"4402\",\"韶关市\",[[\"440201\",\"武江区\"],[\"440202\",\"浈江区\"],[\"440203\",\"曲江区\"],[\"440204\",\"始兴县\"],[\"440205\",\"仁化县\"],[\"440206\",\"翁源县\"],[\"440207\",\"乳源瑶族自治县\"],[\"440208\",\"新丰县\"],[\"440209\",\"乐昌市\"],[\"440210\",\"南雄市\"]]],[\"4403\",\"深圳市\",[[\"440301\",\"福田区\"],[\"440302\",\"罗湖区\"],[\"440303\",\"南山区\"],[\"440304\",\"盐田区\"],[\"440305\",\"宝安区\"],[\"440306\",\"龙岗区\"],[\"440307\",\"坪山区\"],[\"440308\",\"光明区\"],[\"440309\",\"龙华区\"],[\"440310\",\"大鹏新区\"]]],[\"4404\",\"珠海市\",[[\"440401\",\"香洲区\"],[\"440402\",\"斗门区\"],[\"440403\",\"金湾区\"]]],[\"4405\",\"汕头市\",[[\"440501\",\"龙湖区\"],[\"440502\",\"金平区\"],[\"440503\",\"濠江区\"],[\"440504\",\"潮阳区\"],[\"440505\",\"潮南区\"],[\"440506\",\"澄海区\"],[\"440507\",\"南澳县\"]]],[\"4406\",\"佛山市\",[[\"440601\",\"禅城区\"],[\"440602\",\"三水区\"],[\"440603\",\"高明区\"],[\"440604\",\"南海区\"],[\"440605\",\"顺德区\"]]],[\"4407\",\"江门市\",[[\"440701\",\"台山市\"],[\"440702\",\"开平市\"],[\"440703\",\"鹤山市\"],[\"440704\",\"蓬江区\"],[\"440705\",\"江海区\"],[\"440706\",\"新会区\"],[\"440707\",\"恩平市\"]]],[\"4408\",\"湛江市\",[[\"440801\",\"赤坎区\"],[\"440802\",\"霞山区\"],[\"440803\",\"坡头区\"],[\"440804\",\"麻章区\"],[\"440805\",\"遂溪县\"],[\"440806\",\"徐闻县\"],[\"440807\",\"廉江市\"],[\"440808\",\"雷州市\"],[\"440809\",\"吴川市\"]]],[\"4409\",\"茂名市\",[[\"440901\",\"茂南区\"],[\"440903\",\"电白区\"],[\"440904\",\"高州市\"],[\"440905\",\"化州市\"],[\"440906\",\"信宜市\"]]],[\"4412\",\"肇庆市\",[[\"441201\",\"端州区\"],[\"441202\",\"鼎湖区\"],[\"441203\",\"广宁县\"],[\"441204\",\"怀集县\"],[\"441205\",\"封开县\"],[\"441206\",\"德庆县\"],[\"441207\",\"高要区\"],[\"441208\",\"四会市\"]]],[\"4413\",\"惠州市\",[[\"441301\",\"惠城区\"],[\"441302\",\"惠阳区\"],[\"441303\",\"博罗县\"],[\"441304\",\"惠东县\"],[\"441305\",\"龙门县\"]]],[\"4414\",\"梅州市\",[[\"441401\",\"梅江区\"],[\"441402\",\"梅县区\"],[\"441403\",\"大埔县\"],[\"441404\",\"丰顺县\"],[\"441405\",\"五华县\"],[\"441406\",\"平远县\"],[\"441407\",\"蕉岭县\"],[\"441408\",\"兴宁市\"]]],[\"4415\",\"汕尾市\",[[\"441501\",\"城区\"],[\"441502\",\"海丰县\"],[\"441503\",\"陆河县\"],[\"441504\",\"陆丰市\"]]],[\"4416\",\"河源市\",[[\"441601\",\"龙川县\"],[\"441602\",\"源城区\"],[\"441603\",\"紫金县\"],[\"441604\",\"连平县\"],[\"441605\",\"和平县\"],[\"441606\",\"东源县\"]]],[\"4417\",\"阳江市\",[[\"441701\",\"江城区\"],[\"441702\",\"阳西县\"],[\"441703\",\"阳东区\"],[\"441704\",\"阳春市\"]]],[\"4418\",\"清远市\",[[\"441801\",\"清城区\"],[\"441802\",\"佛冈县\"],[\"441803\",\"阳山县\"],[\"441804\",\"连山壮族瑶族自治县\"],[\"441805\",\"连南瑶族自治县\"],[\"441806\",\"清新区\"],[\"441807\",\"英德市\"],[\"441808\",\"连州市\"]]],[\"4419\",\"东莞市\",[[\"441901\",\"莞城街道\"],[\"441902\",\"南城街道\"],[\"441903\",\"东城街道\"],[\"441904\",\"万江街道\"],[\"441905\",\"石碣镇\"],[\"441906\",\"石龙镇\"],[\"441907\",\"茶山镇\"],[\"441908\",\"石排镇\"],[\"441909\",\"企石镇\"],[\"441910\",\"横沥镇\"],[\"441911\",\"桥头镇\"],[\"441912\",\"谢岗镇\"],[\"441913\",\"东坑镇\"],[\"441914\",\"常平镇\"],[\"441915\",\"寮步镇\"],[\"441916\",\"大朗镇\"],[\"441917\",\"麻涌镇\"],[\"441918\",\"中堂镇\"],[\"441919\",\"高埗镇\"],[\"441920\",\"樟木头镇\"],[\"441921\",\"大岭山镇\"],[\"441922\",\"望牛墩镇\"],[\"441923\",\"黄江镇\"],[\"441924\",\"洪梅镇\"],[\"441925\",\"清溪镇\"],[\"441926\",\"沙田镇\"],[\"441927\",\"道滘镇\"],[\"441928\",\"塘厦镇\"],[\"441929\",\"虎门镇\"],[\"441930\",\"厚街镇\"],[\"441931\",\"凤岗镇\"],[\"441932\",\"长安镇\"],[\"441933\",\"松山湖\"]]],[\"4420\",\"中山市\",[[\"442001\",\"石岐街道\"],[\"442002\",\"东区街道\"],[\"442003\",\"西区街道\"],[\"442004\",\"南区街道\"],[\"442005\",\"五桂山街道\"],[\"442006\",\"火炬开发区街道\"],[\"442007\",\"民众街道\"],[\"442008\",\"南朗街道\"],[\"442009\",\"黄圃镇\"],[\"442010\",\"南头镇\"],[\"442011\",\"东凤镇\"],[\"442012\",\"阜沙镇\"],[\"442013\",\"小榄镇\"],[\"442014\",\"古镇镇\"],[\"442015\",\"横栏镇\"],[\"442016\",\"三角镇\"],[\"442017\",\"港口镇\"],[\"442018\",\"大涌镇\"],[\"442019\",\"沙溪镇\"],[\"442020\",\"三乡镇\"],[\"442021\",\"板芙镇\"],[\"442022\",\"神湾镇\"],[\"442023\",\"坦洲镇\"],[\"442024\",\"中山火炬高技术产业开发区\"],[\"442025\",\"翠亨新区\"]]],[\"4451\",\"潮州市\",[[\"445101\",\"湘桥区\"],[\"445102\",\"潮安区\"],[\"445103\",\"饶平县\"]]],[\"4452\",\"揭阳市\",[[\"445201\",\"普宁市\"],[\"445202\",\"榕城区\"],[\"445203\",\"揭东区\"],[\"445204\",\"揭西县\"],[\"445205\",\"惠来县\"]]],[\"4453\",\"云浮市\",[[\"445301\",\"云城区\"],[\"445302\",\"新兴县\"],[\"445303\",\"郁南县\"],[\"445304\",\"云安区\"],[\"445305\",\"罗定市\"]]],[\"4499\",\"横琴粤澳深度合作区\"]]],[\"4500\",\"广西壮族自治区\",[[\"4501\",\"南宁市\",[[\"450101\",\"兴宁区\"],[\"450102\",\"青秀区\"],[\"450103\",\"江南区\"],[\"450104\",\"西乡塘区\"],[\"450105\",\"良庆区\"],[\"450106\",\"邕宁区\"],[\"450107\",\"武鸣区\"],[\"450108\",\"隆安县\"],[\"450109\",\"马山县\"],[\"450110\",\"上林县\"],[\"450111\",\"宾阳县\"],[\"450112\",\"横州市\"]]],[\"4502\",\"柳州市\",[[\"450201\",\"城中区\"],[\"450202\",\"鱼峰区\"],[\"450203\",\"柳南区\"],[\"450204\",\"柳北区\"],[\"450205\",\"柳江区\"],[\"450206\",\"柳城县\"],[\"450207\",\"鹿寨县\"],[\"450208\",\"融安县\"],[\"450209\",\"融水苗族自治县\"],[\"450210\",\"三江侗族自治县\"]]],[\"4503\",\"桂林市\",[[\"450301\",\"秀峰区\"],[\"450302\",\"叠彩区\"],[\"450303\",\"象山区\"],[\"450304\",\"七星区\"],[\"450305\",\"雁山区\"],[\"450306\",\"阳朔县\"],[\"450307\",\"临桂区\"],[\"450308\",\"灵川县\"],[\"450309\",\"全州县\"],[\"450310\",\"兴安县\"],[\"450311\",\"永福县\"],[\"450312\",\"灌阳县\"],[\"450313\",\"龙胜各族自治县\"],[\"450314\",\"资源县\"],[\"450315\",\"平乐县\"],[\"450316\",\"荔浦市\"],[\"450317\",\"恭城瑶族自治县\"]]],[\"4504\",\"梧州市\",[[\"450401\",\"万秀区\"],[\"450403\",\"长洲区\"],[\"450404\",\"苍梧县\"],[\"450405\",\"藤县\"],[\"450406\",\"蒙山县\"],[\"450407\",\"岑溪市\"],[\"450408\",\"龙圩区\"]]],[\"4505\",\"北海市\",[[\"450501\",\"海城区\"],[\"450502\",\"银海区\"],[\"450503\",\"铁山港区\"],[\"450504\",\"合浦县\"]]],[\"4506\",\"防城港市\",[[\"450601\",\"港口区\"],[\"450602\",\"防城区\"],[\"450603\",\"上思县\"],[\"450604\",\"东兴市\"]]],[\"4507\",\"钦州市\",[[\"450701\",\"钦南区\"],[\"450702\",\"钦北区\"],[\"450703\",\"灵山县\"],[\"450704\",\"浦北县\"]]],[\"4508\",\"贵港市\",[[\"450801\",\"港北区\"],[\"450802\",\"港南区\"],[\"450803\",\"覃塘区\"],[\"450804\",\"平南县\"],[\"450805\",\"桂平市\"]]],[\"4509\",\"玉林市\",[[\"450901\",\"玉州区\"],[\"450902\",\"容县\"],[\"450903\",\"陆川县\"],[\"450904\",\"博白县\"],[\"450905\",\"兴业县\"],[\"450906\",\"北流市\"],[\"450907\",\"福绵区\"]]],[\"4510\",\"百色市\",[[\"451001\",\"右江区\"],[\"451002\",\"田阳区\"],[\"451003\",\"田东县\"],[\"451004\",\"平果市\"],[\"451005\",\"德保县\"],[\"451006\",\"靖西市\"],[\"451007\",\"那坡县\"],[\"451008\",\"凌云县\"],[\"451009\",\"乐业县\"],[\"451010\",\"田林县\"],[\"451011\",\"西林县\"],[\"451012\",\"隆林各族自治县\"]]],[\"4511\",\"贺州市\",[[\"451101\",\"八步区\"],[\"451102\",\"昭平县\"],[\"451103\",\"钟山县\"],[\"451104\",\"富川瑶族自治县\"],[\"451105\",\"平桂区\"]]],[\"4512\",\"河池市\",[[\"451201\",\"金城江区\"],[\"451202\",\"南丹县\"],[\"451203\",\"天峨县\"],[\"451204\",\"凤山县\"],[\"451205\",\"东兰县\"],[\"451206\",\"罗城仫佬族自治县\"],[\"451207\",\"环江毛南族自治县\"],[\"451208\",\"巴马瑶族自治县\"],[\"451209\",\"都安瑶族自治县\"],[\"451210\",\"大化瑶族自治县\"],[\"451211\",\"宜州区\"]]],[\"4513\",\"来宾市\",[[\"451301\",\"兴宾区\"],[\"451302\",\"忻城县\"],[\"451303\",\"象州县\"],[\"451304\",\"武宣县\"],[\"451305\",\"金秀瑶族自治县\"],[\"451306\",\"合山市\"]]],[\"4514\",\"崇左市\",[[\"451401\",\"江州区\"],[\"451402\",\"扶绥县\"],[\"451403\",\"宁明县\"],[\"451404\",\"龙州县\"],[\"451405\",\"大新县\"],[\"451406\",\"天等县\"],[\"451407\",\"凭祥市\"]]]]],[\"4600\",\"海南省\",[[\"4601\",\"海口市\",[[\"460101\",\"秀英区\"],[\"460102\",\"龙华区\"],[\"460103\",\"琼山区\"],[\"460104\",\"美兰区\"]]],[\"4602\",\"三亚市\",[[\"460202\",\"海棠区\"],[\"460203\",\"吉阳区\"],[\"460204\",\"天涯区\"],[\"460205\",\"崖州区\"]]],[\"4603\",\"洋浦经济开发区\"],[\"4604\",\"琼海市\"],[\"4605\",\"儋州市\"],[\"4607\",\"五指山市\"],[\"4608\",\"文昌市\"],[\"4609\",\"万宁市\"],[\"4610\",\"东方市\"],[\"4611\",\"定安县\"],[\"4612\",\"屯昌县\"],[\"4613\",\"澄迈县\"],[\"4614\",\"临高县\"],[\"4615\",\"琼中黎族苗族自治县\"],[\"4616\",\"保亭黎族苗族自治县\"],[\"4617\",\"白沙黎族自治县\"],[\"4618\",\"乐东黎族自治县\"],[\"4619\",\"陵水黎族自治县\"],[\"4620\",\"昌江黎族自治县\"],[\"4621\",\"三沙市\",[[\"460301\",\"西沙区\"],[\"460302\",\"南沙区\"]]]]],[\"5000\",\"重庆市\",[[\"5001\",\"渝中区\"],[\"5002\",\"江北区\"],[\"5003\",\"南岸区\"],[\"5004\",\"沙坪坝区\"],[\"5005\",\"九龙坡区\"],[\"5006\",\"大渡口区\"],[\"5007\",\"渝北区\"],[\"5008\",\"巴南区\"],[\"5009\",\"北碚区\"],[\"5010\",\"万州区\"],[\"5011\",\"黔江区\"],[\"5012\",\"永川区\"],[\"5013\",\"涪陵区\"],[\"5014\",\"长寿区\"],[\"5015\",\"江津区\"],[\"5016\",\"合川区\"],[\"5019\",\"南川区\"],[\"5020\",\"荣昌区\"],[\"5021\",\"大足区\"],[\"5022\",\"璧山区\"],[\"5023\",\"铜梁区\"],[\"5024\",\"潼南区\"],[\"5025\",\"綦江区\"],[\"5026\",\"忠县\"],[\"5027\",\"开州区\"],[\"5028\",\"云阳县\"],[\"5029\",\"梁平区\"],[\"5030\",\"垫江县\"],[\"5031\",\"丰都县\"],[\"5032\",\"奉节县\"],[\"5033\",\"巫山县\"],[\"5034\",\"巫溪县\"],[\"5035\",\"城口县\"],[\"5036\",\"武隆区\"],[\"5042\",\"石柱土家族自治县\"],[\"5043\",\"秀山土家族苗族自治县\"],[\"5044\",\"酉阳土家族苗族自治县\"],[\"5045\",\"彭水苗族土家族自治县\"]]],[\"5100\",\"四川省\",[[\"5101\",\"成都市\",[[\"5137\",\"简阳市\"],[\"510101\",\"青羊区\"],[\"510102\",\"锦江区\"],[\"510103\",\"金牛区\"],[\"510104\",\"武侯区\"],[\"510105\",\"成华区\"],[\"510106\",\"龙泉驿区\"],[\"510107\",\"青白江区\"],[\"510108\",\"新都区\"],[\"510109\",\"温江区\"],[\"510110\",\"双流区\"],[\"510111\",\"郫都区\"],[\"510112\",\"金堂县\"],[\"510113\",\"大邑县\"],[\"510114\",\"蒲江县\"],[\"510115\",\"新津区\"],[\"510116\",\"邛崃市\"],[\"510117\",\"崇州市\"],[\"510118\",\"彭州市\"],[\"510119\",\"都江堰市\"],[\"510120\",\"高新区\"],[\"510121\",\"天府新区\"]]],[\"5103\",\"自贡市\",[[\"510301\",\"自流井区\"],[\"510302\",\"贡井区\"],[\"510303\",\"大安区\"],[\"510304\",\"沿滩区\"],[\"510305\",\"荣县\"],[\"510306\",\"富顺县\"]]],[\"5104\",\"攀枝花市\",[[\"510401\",\"东区\"],[\"510402\",\"西区\"],[\"510403\",\"仁和区\"],[\"510404\",\"米易县\"],[\"510405\",\"盐边县\"]]],[\"5105\",\"泸州市\",[[\"510501\",\"江阳区\"],[\"510502\",\"纳溪区\"],[\"510503\",\"龙马潭区\"],[\"510504\",\"泸县\"],[\"510505\",\"合江县\"],[\"510506\",\"叙永县\"],[\"510507\",\"古蔺县\"]]],[\"5106\",\"德阳市\",[[\"510601\",\"旌阳区\"],[\"510602\",\"中江县\"],[\"510603\",\"罗江区\"],[\"510604\",\"广汉市\"],[\"510605\",\"什邡市\",[[\"51060501\",\"马祖镇\"]]],[\"510606\",\"绵竹市\"]]],[\"5107\",\"绵阳市\",[[\"510701\",\"涪城区\"],[\"510702\",\"游仙区\"],[\"510703\",\"三台县\"],[\"510704\",\"盐亭县\"],[\"510705\",\"安州区\"],[\"510706\",\"梓潼县\"],[\"510707\",\"北川羌族自治县\"],[\"510708\",\"平武县\"],[\"510709\",\"江油市\"]]],[\"5108\",\"广元市\",[[\"510801\",\"利州区\"],[\"510802\",\"昭化区\"],[\"510803\",\"朝天区\"],[\"510804\",\"旺苍县\"],[\"510805\",\"青川县\"],[\"510806\",\"剑阁县\"],[\"510807\",\"苍溪县\"]]],[\"5109\",\"遂宁市\",[[\"510901\",\"船山区\"],[\"510902\",\"安居区\"],[\"510903\",\"蓬溪县\"],[\"510904\",\"射洪市\"],[\"510905\",\"大英县\"]]],[\"5110\",\"内江市\",[[\"511001\",\"市中区\"],[\"511002\",\"东兴区\"],[\"511003\",\"威远县\"],[\"511004\",\"资中县\"],[\"511005\",\"隆昌市\"]]],[\"5111\",\"乐山市\",[[\"5135\",\"峨眉山市\"],[\"511101\",\"市中区\"],[\"511102\",\"沙湾区\"],[\"511103\",\"五通桥区\"],[\"511104\",\"金口河区\"],[\"511105\",\"犍为县\"],[\"511106\",\"井研县\"],[\"511107\",\"夹江县\"],[\"511108\",\"沐川县\"],[\"511109\",\"峨边彝族自治县\"],[\"511110\",\"马边彝族自治县\"]]],[\"5113\",\"南充市\",[[\"511301\",\"顺庆区\"],[\"511302\",\"高坪区\"],[\"511303\",\"嘉陵区\"],[\"511304\",\"南部县\"],[\"511305\",\"营山县\"],[\"511306\",\"蓬安县\"],[\"511307\",\"仪陇县\"],[\"511308\",\"西充县\"],[\"511309\",\"阆中市\"]]],[\"5114\",\"眉山市\",[[\"511401\",\"东坡区\"],[\"511402\",\"仁寿县\"],[\"511403\",\"彭山区\"],[\"511404\",\"洪雅县\"],[\"511405\",\"丹棱县\"],[\"511406\",\"青神县\"]]],[\"5115\",\"宜宾市\",[[\"511501\",\"翠屏区\"],[\"511502\",\"叙州区\"],[\"511503\",\"南溪区\"],[\"511504\",\"江安县\"],[\"511505\",\"长宁县\"],[\"511506\",\"高县\"],[\"511507\",\"珙县\"],[\"511508\",\"筠连县\"],[\"511509\",\"兴文县\"],[\"511510\",\"屏山县\"]]],[\"5116\",\"广安市\",[[\"511601\",\"广安区\"],[\"511602\",\"岳池县\"],[\"511603\",\"武胜县\"],[\"511604\",\"邻水县\"],[\"511605\",\"华蓥市\"],[\"511606\",\"前锋区\"]]],[\"5117\",\"达州市\",[[\"511701\",\"通川区\"],[\"511702\",\"达川区\"],[\"511703\",\"宣汉县\"],[\"511704\",\"开江县\"],[\"511705\",\"大竹县\"],[\"511706\",\"渠县\"],[\"511707\",\"万源市\"]]],[\"5118\",\"雅安市\",[[\"511801\",\"雨城区\"],[\"511802\",\"名山区\"],[\"511803\",\"荥经县\"],[\"511804\",\"汉源县\"],[\"511805\",\"石棉县\"],[\"511806\",\"天全县\"],[\"511807\",\"芦山县\"],[\"511808\",\"宝兴县\"]]],[\"5119\",\"巴中市\",[[\"511901\",\"巴州区\"],[\"511902\",\"通江县\"],[\"511903\",\"南江县\"],[\"511904\",\"平昌县\"],[\"511905\",\"恩阳区\"]]],[\"5120\",\"资阳市\",[[\"512001\",\"雁江区\"],[\"512002\",\"安岳县\"],[\"512003\",\"乐至县\"]]],[\"5132\",\"阿坝藏族羌族自治州\",[[\"513201\",\"汶川县\"],[\"513202\",\"理县\"],[\"513203\",\"茂县\"],[\"513204\",\"松潘县\"],[\"513205\",\"九寨沟县\"],[\"513206\",\"金川县\"],[\"513207\",\"小金县\"],[\"513208\",\"黑水县\"],[\"513209\",\"马尔康市\"],[\"513210\",\"壤塘县\"],[\"513211\",\"阿坝县\"],[\"513212\",\"若尔盖县\"],[\"513213\",\"红原县\"]]],[\"5133\",\"甘孜藏族自治州\",[[\"513301\",\"康定市\"],[\"513302\",\"泸定县\"],[\"513303\",\"丹巴县\"],[\"513304\",\"九龙县\"],[\"513305\",\"雅江县\"],[\"513306\",\"道孚县\"],[\"513307\",\"炉霍县\"],[\"513308\",\"甘孜县\"],[\"513309\",\"新龙县\"],[\"513310\",\"德格县\"],[\"513311\",\"白玉县\"],[\"513312\",\"石渠县\"],[\"513313\",\"色达县\"],[\"513314\",\"理塘县\"],[\"513315\",\"巴塘县\"],[\"513316\",\"乡城县\"],[\"513317\",\"稻城县\"],[\"513318\",\"得荣县\"]]],[\"5134\",\"凉山彝族自治州\",[[\"513401\",\"西昌市\"],[\"513402\",\"木里藏族自治县\"],[\"513403\",\"盐源县\"],[\"513404\",\"德昌县\"],[\"513405\",\"会理市\"],[\"513406\",\"会东县\"],[\"513407\",\"宁南县\"],[\"513408\",\"普格县\"],[\"513409\",\"布拖县\"],[\"513410\",\"金阳县\"],[\"513411\",\"昭觉县\"],[\"513412\",\"喜德县\"],[\"513413\",\"冕宁县\"],[\"513414\",\"越西县\"],[\"513415\",\"甘洛县\"],[\"513416\",\"美姑县\"],[\"513417\",\"雷波县\"]]]]],[\"5200\",\"贵州省\",[[\"5201\",\"贵阳市\",[[\"520101\",\"云岩区\"],[\"520102\",\"南明区\"],[\"520103\",\"花溪区\"],[\"520104\",\"观山湖区\"],[\"520105\",\"乌当区\"],[\"520106\",\"清镇市\"],[\"520107\",\"修文县\"],[\"520108\",\"息烽县\"],[\"520109\",\"开阳县\"],[\"520110\",\"白云区\"]]],[\"5202\",\"六盘水市\",[[\"520201\",\"钟山区\"],[\"520202\",\"六枝特区\"],[\"520203\",\"水城区\"],[\"520204\",\"盘州市\"]]],[\"5203\",\"遵义市\",[[\"520301\",\"红花岗区\"],[\"520302\",\"汇川区\"],[\"520303\",\"播州区\"],[\"520304\",\"桐梓县\"],[\"520305\",\"绥阳县\"],[\"520306\",\"正安县\"],[\"520307\",\"道真仡佬族苗族自治县\"],[\"520308\",\"务川仡佬族苗族自治县\"],[\"520309\",\"凤冈县\"],[\"520310\",\"湄潭县\"],[\"520311\",\"余庆县\"],[\"520312\",\"习水县\"],[\"520313\",\"赤水市\"],[\"520314\",\"仁怀市\",[[\"52031401\",\"茅台镇\"]]]]],[\"5204\",\"安顺市\",[[\"520401\",\"西秀区\"],[\"520402\",\"平坝区\"],[\"520403\",\"普定县\"],[\"520404\",\"镇宁布依族苗族自治县\"],[\"520405\",\"关岭布依族苗族自治县\"],[\"520406\",\"紫云苗族布依族自治县\"]]],[\"5222\",\"铜仁市\",[[\"522202\",\"江口县\"],[\"522203\",\"玉屏侗族自治县\"],[\"522204\",\"石阡县\"],[\"522205\",\"思南县\"],[\"522206\",\"印江土家族苗族自治县\"],[\"522207\",\"德江县\"],[\"522208\",\"沿河土家族自治县\"],[\"522209\",\"松桃苗族自治县\"],[\"522210\",\"万山区\"],[\"522211\",\"碧江区\"]]],[\"5223\",\"黔西南布依族苗族自治州\",[[\"522301\",\"兴义市\"],[\"522302\",\"兴仁市\"],[\"522303\",\"普安县\"],[\"522304\",\"晴隆县\"],[\"522305\",\"贞丰县\"],[\"522306\",\"望谟县\"],[\"522307\",\"册亨县\"],[\"522308\",\"安龙县\"]]],[\"5224\",\"毕节市\",[[\"522402\",\"大方县\"],[\"522403\",\"黔西市\"],[\"522404\",\"金沙县\"],[\"522405\",\"织金县\"],[\"522406\",\"纳雍县\"],[\"522407\",\"威宁彝族回族苗族自治县\"],[\"522408\",\"赫章县\"],[\"522409\",\"七星关区\"]]],[\"5226\",\"黔东南苗族侗族自治州\",[[\"522601\",\"凯里市\"],[\"522602\",\"黄平县\"],[\"522603\",\"施秉县\"],[\"522604\",\"三穗县\"],[\"522605\",\"镇远县\"],[\"522606\",\"岑巩县\"],[\"522607\",\"天柱县\"],[\"522608\",\"锦屏县\"],[\"522609\",\"剑河县\"],[\"522610\",\"台江县\"],[\"522611\",\"黎平县\"],[\"522612\",\"榕江县\"],[\"522613\",\"从江县\"],[\"522614\",\"雷山县\"],[\"522615\",\"麻江县\"],[\"522616\",\"丹寨县\"]]],[\"5227\",\"黔南布依族苗族自治州\",[[\"522701\",\"都匀市\"],[\"522702\",\"福泉市\"],[\"522703\",\"荔波县\"],[\"522704\",\"贵定县\"],[\"522705\",\"瓮安县\"],[\"522706\",\"独山县\"],[\"522707\",\"平塘县\"],[\"522708\",\"罗甸县\"],[\"522709\",\"长顺县\"],[\"522710\",\"龙里县\"],[\"522711\",\"惠水县\"],[\"522712\",\"三都水族自治县\"]]]]],[\"5300\",\"云南省\",[[\"5301\",\"昆明市\",[[\"530101\",\"五华区\"],[\"530102\",\"盘龙区\"],[\"530103\",\"官渡区\"],[\"530104\",\"西山区\"],[\"530105\",\"东川区\"],[\"530106\",\"呈贡区\"],[\"530107\",\"晋宁区\"],[\"530108\",\"富民县\"],[\"530109\",\"宜良县\"],[\"530110\",\"石林彝族自治县\"],[\"530111\",\"嵩明县\"],[\"530112\",\"禄劝彝族苗族自治县\"],[\"530113\",\"寻甸回族彝族自治县\"],[\"530114\",\"安宁市\"]]],[\"5303\",\"曲靖市\",[[\"530301\",\"麒麟区\"],[\"530302\",\"马龙区\"],[\"530303\",\"陆良县\"],[\"530304\",\"师宗县\"],[\"530305\",\"罗平县\"],[\"530306\",\"富源县\"],[\"530307\",\"会泽县\"],[\"530308\",\"沾益区\"],[\"530309\",\"宣威市\"]]],[\"5304\",\"玉溪市\",[[\"530401\",\"红塔区\"],[\"530402\",\"江川区\"],[\"530403\",\"澄江市\"],[\"530404\",\"通海县\"],[\"530405\",\"华宁县\"],[\"530406\",\"易门县\"],[\"530407\",\"峨山彝族自治县\"],[\"530408\",\"新平彝族傣族自治县\"],[\"530409\",\"元江哈尼族彝族傣族自治县\"]]],[\"5305\",\"保山市\",[[\"530501\",\"隆阳区\"],[\"530502\",\"施甸县\"],[\"530503\",\"腾冲市\"],[\"530504\",\"龙陵县\"],[\"530505\",\"昌宁县\"]]],[\"5306\",\"昭通市\",[[\"530601\",\"昭阳区\"],[\"530602\",\"鲁甸县\"],[\"530603\",\"巧家县\"],[\"530604\",\"盐津县\"],[\"530605\",\"大关县\"],[\"530606\",\"永善县\"],[\"530607\",\"绥江县\"],[\"530608\",\"镇雄县\"],[\"530609\",\"彝良县\"],[\"530610\",\"威信县\"],[\"530611\",\"水富市\"]]],[\"5307\",\"丽江市\",[[\"530701\",\"古城区\"],[\"530702\",\"玉龙纳西族自治县\"],[\"530703\",\"永胜县\"],[\"530704\",\"华坪县\"],[\"530705\",\"宁蒗彝族自治县\"]]],[\"5308\",\"普洱市\",[[\"530801\",\"思茅区\"],[\"530802\",\"宁洱哈尼族彝族自治县\"],[\"530803\",\"墨江哈尼族自治县\"],[\"530804\",\"景东彝族自治县\"],[\"530805\",\"景谷傣族彝族自治县\"],[\"530806\",\"镇沅彝族哈尼族拉祜族自治县\"],[\"530807\",\"江城哈尼族彝族自治县\"],[\"530808\",\"孟连傣族拉祜族佤族自治县\"],[\"530809\",\"澜沧拉祜族自治县\"],[\"530810\",\"西盟佤族自治县\"]]],[\"5309\",\"临沧市\",[[\"530901\",\"临翔区\"],[\"530902\",\"凤庆县\"],[\"530903\",\"云县\"],[\"530904\",\"永德县\"],[\"530905\",\"镇康县\"],[\"530906\",\"双江拉祜族佤族布朗族傣族自治县\"],[\"530907\",\"耿马傣族佤族自治县\"],[\"530908\",\"沧源佤族自治县\"]]],[\"5323\",\"楚雄彝族自治州\",[[\"532301\",\"楚雄市\"],[\"532302\",\"双柏县\"],[\"532303\",\"牟定县\"],[\"532304\",\"南华县\"],[\"532305\",\"姚安县\"],[\"532306\",\"大姚县\"],[\"532307\",\"永仁县\"],[\"532308\",\"元谋县\"],[\"532309\",\"武定县\"],[\"532310\",\"禄丰市\"]]],[\"5325\",\"红河哈尼族彝族自治州\",[[\"532501\",\"个旧市\"],[\"532502\",\"开远市\"],[\"532503\",\"蒙自市\"],[\"532504\",\"屏边苗族自治县\"],[\"532505\",\"建水县\"],[\"532506\",\"石屏县\"],[\"532507\",\"弥勒市\"],[\"532508\",\"泸西县\"],[\"532509\",\"元阳县\"],[\"532510\",\"红河县\"],[\"532511\",\"金平苗族瑶族傣族自治县\"],[\"532512\",\"绿春县\"],[\"532513\",\"河口瑶族自治县\"]]],[\"5326\",\"文山壮族苗族自治州\",[[\"532601\",\"文山市\"],[\"532602\",\"砚山县\"],[\"532603\",\"西畴县\"],[\"532604\",\"麻栗坡县\"],[\"532605\",\"马关县\"],[\"532606\",\"丘北县\"],[\"532607\",\"广南县\"],[\"532608\",\"富宁县\"]]],[\"5328\",\"西双版纳傣族自治州\",[[\"532801\",\"景洪市\"],[\"532802\",\"勐海县\"],[\"532803\",\"勐腊县\"]]],[\"5329\",\"大理白族自治州\",[[\"532901\",\"大理市\"],[\"532902\",\"漾濞彝族自治县\"],[\"532903\",\"祥云县\"],[\"532904\",\"宾川县\"],[\"532905\",\"弥渡县\"],[\"532906\",\"南涧彝族自治县\"],[\"532907\",\"巍山彝族回族自治县\"],[\"532908\",\"永平县\"],[\"532909\",\"云龙县\"],[\"532910\",\"洱源县\"],[\"532911\",\"剑川县\"],[\"532912\",\"鹤庆县\"]]],[\"5331\",\"德宏傣族景颇族自治州\",[[\"533101\",\"瑞丽市\"],[\"533103\",\"梁河县\"],[\"533104\",\"盈江县\"],[\"533105\",\"陇川县\"],[\"533106\",\"芒市\"]]],[\"5333\",\"怒江傈僳族自治州\",[[\"533301\",\"泸水市\"],[\"533302\",\"福贡县\"],[\"533303\",\"贡山独龙族怒族自治县\"],[\"533304\",\"兰坪白族普米族自治县\"]]],[\"5334\",\"迪庆藏族自治州\",[[\"533401\",\"香格里拉市\"],[\"533402\",\"德钦县\"],[\"533403\",\"维西傈僳族自治县\"]]]]],[\"5400\",\"西藏自治区\",[[\"5401\",\"拉萨市\",[[\"540101\",\"城关区\"],[\"540102\",\"林周县\"],[\"540103\",\"当雄县\"],[\"540104\",\"尼木县\"],[\"540105\",\"曲水县\"],[\"540106\",\"堆龙德庆区\"],[\"540107\",\"达孜区\"],[\"540108\",\"墨竹工卡县\"]]],[\"5421\",\"昌都市\",[[\"542101\",\"卡若区\"],[\"542102\",\"江达县\"],[\"542103\",\"贡觉县\"],[\"542104\",\"类乌齐县\"],[\"542105\",\"丁青县\"],[\"542106\",\"察雅县\"],[\"542107\",\"八宿县\"],[\"542108\",\"左贡县\"],[\"542109\",\"芒康县\"],[\"542110\",\"洛隆县\"],[\"542111\",\"边坝县\"]]],[\"5422\",\"山南市\",[[\"542201\",\"乃东区\"],[\"542202\",\"扎囊县\"],[\"542203\",\"贡嘎县\"],[\"542204\",\"桑日县\"],[\"542205\",\"琼结县\"],[\"542206\",\"曲松县\"],[\"542207\",\"措美县\"],[\"542208\",\"洛扎县\"],[\"542209\",\"加查县\"],[\"542210\",\"隆子县\"],[\"542211\",\"错那县\"],[\"542212\",\"浪卡子县\"]]],[\"5423\",\"日喀则市\",[[\"542301\",\"桑珠孜区\"],[\"542302\",\"南木林县\"],[\"542303\",\"江孜县\"],[\"542304\",\"定日县\"],[\"542305\",\"萨迦县\"],[\"542306\",\"拉孜县\"],[\"542307\",\"昂仁县\"],[\"542308\",\"谢通门县\"],[\"542309\",\"白朗县\"],[\"542310\",\"仁布县\"],[\"542311\",\"康马县\"],[\"542312\",\"定结县\"],[\"542313\",\"仲巴县\"],[\"542314\",\"亚东县\"],[\"542315\",\"吉隆县\"],[\"542316\",\"聂拉木县\"],[\"542317\",\"萨嘎县\"],[\"542318\",\"岗巴县\"]]],[\"5424\",\"那曲市\",[[\"542401\",\"色尼区\"],[\"542402\",\"嘉黎县\"],[\"542403\",\"比如县\"],[\"542404\",\"聂荣县\"],[\"542405\",\"安多县\"],[\"542406\",\"申扎县\"],[\"542407\",\"索县\"],[\"542408\",\"班戈县\"],[\"542409\",\"巴青县\"],[\"542410\",\"尼玛县\"],[\"542411\",\"双湖县\"]]],[\"5425\",\"阿里地区\",[[\"542501\",\"普兰县\"],[\"542502\",\"札达县\"],[\"542503\",\"噶尔县\"],[\"542504\",\"日土县\"],[\"542505\",\"革吉县\"],[\"542506\",\"改则县\"],[\"542507\",\"措勤县\"]]],[\"5426\",\"林芝市\",[[\"542601\",\"巴宜区\"],[\"542602\",\"工布江达县\"],[\"542603\",\"米林县\"],[\"542604\",\"墨脱县\"],[\"542605\",\"波密县\"],[\"542606\",\"察隅县\"],[\"542607\",\"朗县\"]]]]],[\"6100\",\"陕西省\",[[\"6101\",\"西安市\",[[\"610101\",\"新城区\"],[\"610102\",\"碑林区\"],[\"610103\",\"莲湖区\"],[\"610104\",\"雁塔区\"],[\"610105\",\"未央区\"],[\"610106\",\"灞桥区\"],[\"610107\",\"长安区\"],[\"610108\",\"阎良区\"],[\"610109\",\"临潼区\"],[\"610110\",\"蓝田县\"],[\"610111\",\"周至县\"],[\"610112\",\"鄠邑区\"],[\"610113\",\"高陵区\"],[\"610114\",\"沣渭新区\"],[\"610115\",\"曲江新区\"],[\"610116\",\"浐灞生态区\"],[\"610117\",\"阎良国家航空高新技术产业基地\"],[\"610118\",\"西安国家民用航天产业基地\"],[\"610119\",\"国际港务区\"],[\"610120\",\"高新区\"],[\"610121\",\"经济技术开发区\"]]],[\"6102\",\"铜川市\",[[\"610201\",\"王益区\"],[\"610202\",\"印台区\"],[\"610203\",\"耀州区\"],[\"610204\",\"宜君县\"]]],[\"6103\",\"宝鸡市\",[[\"610301\",\"渭滨区\"],[\"610302\",\"金台区\"],[\"610303\",\"陈仓区\"],[\"610304\",\"凤翔区\"],[\"610305\",\"岐山县\"],[\"610306\",\"扶风县\"],[\"610307\",\"眉县\"],[\"610308\",\"陇县\"],[\"610309\",\"千阳县\"],[\"610310\",\"麟游县\"],[\"610311\",\"凤县\"],[\"610312\",\"太白县\"]]],[\"6104\",\"咸阳市\",[[\"610401\",\"兴平市\"],[\"610402\",\"秦都区\"],[\"610403\",\"渭城区\"],[\"610404\",\"三原县\"],[\"610405\",\"泾阳县\"],[\"610406\",\"乾县\"],[\"610407\",\"礼泉县\"],[\"610408\",\"永寿县\"],[\"610409\",\"彬州市\"],[\"610410\",\"长武县\"],[\"610411\",\"旬邑县\"],[\"610412\",\"淳化县\"],[\"610413\",\"武功县\"],[\"610414\",\"杨陵区\"]]],[\"6105\",\"渭南市\",[[\"610501\",\"临渭区\"],[\"610502\",\"华州区\"],[\"610503\",\"潼关县\"],[\"610504\",\"大荔县\"],[\"610505\",\"合阳县\"],[\"610506\",\"澄城县\"],[\"610507\",\"蒲城县\"],[\"610508\",\"白水县\"],[\"610509\",\"富平县\"],[\"610510\",\"韩城市\"],[\"610511\",\"华阴市\"]]],[\"6106\",\"延安市\",[[\"610601\",\"宝塔区\"],[\"610602\",\"延长县\"],[\"610603\",\"延川县\"],[\"610604\",\"子长市\"],[\"610605\",\"安塞区\"],[\"610606\",\"志丹县\"],[\"610607\",\"吴起县\"],[\"610608\",\"甘泉县\"],[\"610609\",\"富县\"],[\"610610\",\"洛川县\"],[\"610611\",\"宜川县\"],[\"610612\",\"黄龙县\"],[\"610613\",\"黄陵县\"]]],[\"6107\",\"汉中市\",[[\"610701\",\"汉台区\"],[\"610702\",\"南郑区\"],[\"610703\",\"城固县\"],[\"610704\",\"洋县\"],[\"610705\",\"西乡县\"],[\"610706\",\"勉县\"],[\"610707\",\"宁强县\"],[\"610708\",\"略阳县\"],[\"610709\",\"镇巴县\"],[\"610710\",\"留坝县\"],[\"610711\",\"佛坪县\"]]],[\"6108\",\"榆林市\",[[\"610801\",\"榆阳区\"],[\"610802\",\"神木市\"],[\"610803\",\"府谷县\"],[\"610804\",\"横山区\"],[\"610805\",\"靖边县\"],[\"610806\",\"定边县\"],[\"610807\",\"绥德县\"],[\"610808\",\"米脂县\"],[\"610809\",\"佳县\"],[\"610810\",\"吴堡县\"],[\"610811\",\"清涧县\"],[\"610812\",\"子洲县\"]]],[\"6109\",\"安康市\",[[\"610901\",\"汉滨区\"],[\"610902\",\"汉阴县\"],[\"610903\",\"石泉县\"],[\"610904\",\"宁陕县\"],[\"610905\",\"紫阳县\"],[\"610906\",\"岚皋县\"],[\"610907\",\"平利县\"],[\"610908\",\"镇坪县\"],[\"610909\",\"旬阳市\"],[\"610910\",\"白河县\"]]],[\"6110\",\"商洛市\",[[\"611001\",\"商州区\"],[\"611002\",\"洛南县\"],[\"611003\",\"丹凤县\"],[\"611004\",\"商南县\"],[\"611005\",\"山阳县\"],[\"611006\",\"镇安县\"],[\"611007\",\"柞水县\"]]],[\"6112\",\"西咸新区\"]]],[\"6200\",\"甘肃省\",[[\"6201\",\"兰州市\",[[\"620101\",\"城关区\"],[\"620102\",\"七里河区\"],[\"620103\",\"西固区\"],[\"620104\",\"安宁区\"],[\"620105\",\"红古区\"],[\"620106\",\"永登县\"],[\"620107\",\"皋兰县\"],[\"620108\",\"榆中县\"]]],[\"6202\",\"嘉峪关市\"],[\"6203\",\"金昌市\",[[\"620301\",\"金川区\"],[\"620302\",\"永昌县\"]]],[\"6204\",\"白银市\",[[\"620401\",\"白银区\"],[\"620402\",\"平川区\"],[\"620403\",\"靖远县\"],[\"620404\",\"会宁县\"],[\"620405\",\"景泰县\"]]],[\"6205\",\"天水市\",[[\"620501\",\"秦州区\"],[\"620502\",\"麦积区\"],[\"620503\",\"清水县\"],[\"620504\",\"秦安县\"],[\"620505\",\"甘谷县\"],[\"620506\",\"武山县\"],[\"620507\",\"张家川回族自治县\"]]],[\"6206\",\"武威市\",[[\"620601\",\"凉州区\"],[\"620602\",\"民勤县\"],[\"620603\",\"古浪县\"],[\"620604\",\"天祝藏族自治县\"]]],[\"6207\",\"张掖市\",[[\"620701\",\"甘州区\"],[\"620702\",\"肃南裕固族自治县\"],[\"620703\",\"民乐县\"],[\"620704\",\"临泽县\"],[\"620705\",\"高台县\"],[\"620706\",\"山丹县\"]]],[\"6208\",\"平凉市\",[[\"620801\",\"崆峒区\"],[\"620802\",\"泾川县\"],[\"620803\",\"灵台县\"],[\"620804\",\"崇信县\"],[\"620805\",\"华亭市\"],[\"620806\",\"庄浪县\"],[\"620807\",\"静宁县\"]]],[\"6209\",\"酒泉市\",[[\"620901\",\"肃州区\"],[\"620902\",\"金塔县\"],[\"620903\",\"瓜州县\"],[\"620904\",\"肃北蒙古族自治县\"],[\"620905\",\"阿克塞哈萨克族自治县\"],[\"620906\",\"玉门市\"],[\"620907\",\"敦煌市\"]]],[\"6210\",\"庆阳市\",[[\"621001\",\"西峰区\"],[\"621002\",\"庆城县\"],[\"621003\",\"环县\"],[\"621004\",\"华池县\"],[\"621005\",\"合水县\"],[\"621006\",\"正宁县\"],[\"621007\",\"宁县\"],[\"621008\",\"镇原县\"]]],[\"6211\",\"定西市\",[[\"621101\",\"安定区\"],[\"621102\",\"通渭县\"],[\"621103\",\"陇西县\"],[\"621104\",\"渭源县\"],[\"621105\",\"临洮县\"],[\"621106\",\"漳县\"],[\"621107\",\"岷县\"]]],[\"6212\",\"陇南市\",[[\"621201\",\"武都区\"],[\"621202\",\"成县\"],[\"621203\",\"文县\"],[\"621204\",\"宕昌县\"],[\"621205\",\"康县\"],[\"621206\",\"西和县\"],[\"621207\",\"礼县\"],[\"621208\",\"徽县\"],[\"621209\",\"两当县\"]]],[\"6229\",\"临夏回族自治州\",[[\"622901\",\"临夏市\"],[\"622902\",\"临夏县\"],[\"622903\",\"康乐县\"],[\"622904\",\"永靖县\"],[\"622905\",\"广河县\"],[\"622906\",\"和政县\"],[\"622907\",\"东乡族自治县\"],[\"622908\",\"积石山保安族东乡族撒拉族自治县\"]]],[\"6230\",\"甘南藏族自治州\",[[\"623001\",\"合作市\"],[\"623002\",\"临潭县\"],[\"623003\",\"卓尼县\"],[\"623004\",\"舟曲县\"],[\"623005\",\"迭部县\"],[\"623006\",\"玛曲县\"],[\"623007\",\"碌曲县\"],[\"623008\",\"夏河县\"]]]]],[\"6300\",\"青海省\",[[\"6301\",\"西宁市\",[[\"630101\",\"城东区\"],[\"630102\",\"城中区\"],[\"630103\",\"城西区\"],[\"630104\",\"城北区\"],[\"630105\",\"大通回族土族自治县\"],[\"630106\",\"湟中区\"],[\"630107\",\"湟源县\"]]],[\"6321\",\"海东市\",[[\"632101\",\"平安区\"],[\"632102\",\"民和回族土族自治县\"],[\"632103\",\"乐都区\"],[\"632104\",\"互助土族自治县\"],[\"632105\",\"化隆回族自治县\"],[\"632106\",\"循化撒拉族自治县\"]]],[\"6322\",\"海北藏族自治州\",[[\"632201\",\"门源回族自治县\"],[\"632202\",\"祁连县\"],[\"632203\",\"海晏县\"],[\"632204\",\"刚察县\"]]],[\"6323\",\"黄南藏族自治州\",[[\"632301\",\"同仁市\"],[\"632302\",\"尖扎县\"],[\"632303\",\"泽库县\"],[\"632304\",\"河南蒙古族自治县\"]]],[\"6325\",\"海南藏族自治州\",[[\"632501\",\"共和县\"],[\"632502\",\"同德县\"],[\"632503\",\"贵德县\"],[\"632504\",\"兴海县\"],[\"632505\",\"贵南县\"]]],[\"6326\",\"果洛藏族自治州\",[[\"632601\",\"玛沁县\"],[\"632602\",\"班玛县\"],[\"632603\",\"甘德县\"],[\"632604\",\"达日县\"],[\"632605\",\"久治县\"],[\"632606\",\"玛多县\"]]],[\"6327\",\"玉树藏族自治州\",[[\"632701\",\"玉树市\"],[\"632702\",\"杂多县\"],[\"632703\",\"称多县\"],[\"632704\",\"治多县\"],[\"632705\",\"囊谦县\"],[\"632706\",\"曲麻莱县\"]]],[\"6328\",\"海西蒙古族藏族自治州\",[[\"6331\",\"格尔木市\"],[\"632802\",\"德令哈市\"],[\"632803\",\"乌兰县\"],[\"632828\",\"茫崖市\",[[\"63280301\",\"花土沟镇\"]]],[\"632804\",\"都兰县\"],[\"632805\",\"天峻县\"],[\"632825\",\"海西蒙古族藏族自治州直辖\"]]]]],[\"6400\",\"宁夏回族自治区\",[[\"6401\",\"银川市\",[[\"640101\",\"兴庆区\"],[\"640102\",\"西夏区\"],[\"640103\",\"金凤区\"],[\"640104\",\"永宁县\"],[\"640105\",\"贺兰县\"],[\"640106\",\"灵武市\"]]],[\"6402\",\"石嘴山市\",[[\"640201\",\"大武口区\"],[\"640202\",\"惠农区\"],[\"640203\",\"平罗县\"]]],[\"6403\",\"吴忠市\",[[\"640301\",\"利通区\"],[\"640302\",\"红寺堡区\"],[\"640303\",\"盐池县\"],[\"640304\",\"同心县\"],[\"640305\",\"青铜峡市\"]]],[\"6404\",\"固原市\",[[\"640401\",\"原州区\"],[\"640402\",\"西吉县\"],[\"640403\",\"隆德县\"],[\"640404\",\"泾源县\"],[\"640405\",\"彭阳县\"]]],[\"6405\",\"中卫市\",[[\"640501\",\"沙坡头区\"],[\"640502\",\"中宁县\"],[\"640503\",\"海原县\"]]]]],[\"6500\",\"新疆维吾尔自治区\",[[\"6501\",\"乌鲁木齐市\",[[\"650101\",\"天山区\"],[\"650102\",\"沙依巴克区\"],[\"650103\",\"新市区\"],[\"650104\",\"水磨沟区\"],[\"650105\",\"头屯河区\"],[\"650106\",\"达坂城区\"],[\"650107\",\"米东区\"],[\"650108\",\"乌鲁木齐县\"]]],[\"6502\",\"克拉玛依市\",[[\"650201\",\"独山子区\"],[\"650202\",\"克拉玛依区\"],[\"650203\",\"白碱滩区\"],[\"650204\",\"乌尔禾区\"]]],[\"6521\",\"吐鲁番市\",[[\"652102\",\"鄯善县\"],[\"652103\",\"托克逊县\"],[\"652104\",\"高昌区\"]]],[\"6522\",\"哈密市\",[[\"652202\",\"巴里坤哈萨克自治县\"],[\"652203\",\"伊吾县\"],[\"652204\",\"伊州区\"]]],[\"6523\",\"昌吉回族自治州\",[[\"652301\",\"昌吉市\"],[\"652302\",\"阜康市\"],[\"652303\",\"呼图壁县\"],[\"652304\",\"玛纳斯县\"],[\"652305\",\"奇台县\"],[\"652306\",\"吉木萨尔县\"],[\"652307\",\"木垒哈萨克自治县\"]]],[\"6527\",\"博尔塔拉蒙古自治州\",[[\"652701\",\"博乐市\"],[\"652702\",\"精河县\"],[\"652703\",\"温泉县\"],[\"652704\",\"阿拉山口市\"]]],[\"6528\",\"巴音郭楞蒙古自治州\",[[\"652801\",\"库尔勒市\"],[\"652802\",\"轮台县\"],[\"652803\",\"尉犁县\"],[\"652804\",\"若羌县\"],[\"652805\",\"且末县\"],[\"652806\",\"焉耆回族自治县\"],[\"652807\",\"和静县\"],[\"652808\",\"和硕县\"],[\"652809\",\"博湖县\"]]],[\"6529\",\"阿克苏地区\",[[\"652901\",\"阿克苏市\"],[\"652902\",\"温宿县\"],[\"652903\",\"库车市\"],[\"652904\",\"沙雅县\"],[\"652905\",\"新和县\"],[\"652906\",\"拜城县\"],[\"652907\",\"乌什县\"],[\"652908\",\"阿瓦提县\"],[\"652909\",\"柯坪县\"]]],[\"6530\",\"克孜勒苏柯尔克孜自治州\",[[\"653001\",\"阿图什市\"],[\"653002\",\"阿克陶县\"],[\"653003\",\"阿合奇县\"],[\"653004\",\"乌恰县\"]]],[\"6531\",\"喀什地区\",[[\"653101\",\"喀什市\"],[\"653102\",\"疏附县\"],[\"653103\",\"疏勒县\"],[\"653104\",\"英吉沙县\"],[\"653105\",\"泽普县\"],[\"653106\",\"莎车县\"],[\"653107\",\"叶城县\"],[\"653108\",\"麦盖提县\"],[\"653109\",\"岳普湖县\"],[\"653110\",\"伽师县\"],[\"653111\",\"巴楚县\"],[\"653112\",\"塔什库尔干塔吉克自治县\"]]],[\"6532\",\"和田地区\",[[\"653201\",\"和田市\"],[\"653202\",\"和田县\"],[\"653203\",\"墨玉县\"],[\"653204\",\"皮山县\"],[\"653205\",\"洛浦县\"],[\"653206\",\"策勒县\"],[\"653207\",\"于田县\"],[\"653208\",\"民丰县\"]]],[\"6540\",\"伊犁哈萨克自治州\",[[\"654001\",\"奎屯市\"],[\"654003\",\"伊宁市\"],[\"654004\",\"伊宁县\"],[\"654005\",\"察布查尔锡伯自治县\"],[\"654006\",\"霍城县\"],[\"654007\",\"巩留县\"],[\"654008\",\"新源县\"],[\"654009\",\"昭苏县\"],[\"654010\",\"特克斯县\"],[\"654011\",\"尼勒克县\"],[\"654012\",\"霍尔果斯市\"]]],[\"6542\",\"塔城地区\",[[\"654002\",\"乌苏市\"],[\"654201\",\"塔城市\"],[\"654202\",\"额敏县\"],[\"654203\",\"沙湾市\"],[\"654204\",\"托里县\"],[\"654205\",\"裕民县\"],[\"654206\",\"和布克赛尔蒙古自治县\"]]],[\"6543\",\"阿勒泰地区\",[[\"654301\",\"阿勒泰市\"],[\"654302\",\"布尔津县\"],[\"654303\",\"富蕴县\"],[\"654304\",\"福海县\"],[\"654305\",\"哈巴河县\"],[\"654306\",\"青河县\"],[\"654307\",\"吉木乃县\"]]],[\"6544\",\"石河子市\"],[\"6545\",\"阿拉尔市\"],[\"6546\",\"图木舒克市\"],[\"6547\",\"五家渠市\"],[\"6548\",\"北屯市\"],[\"6552\",\"铁门关市\"],[\"659007\",\"双河市\"],[\"659008\",\"可克达拉市\"],[\"659009\",\"昆玉市\"],[\"659010\",\"胡杨河市\"],[\"659011\",\"新星市\"]]],[\"7100\",\"台湾省\",[[\"7101\",\"台北市\"],[\"7102\",\"高雄市\"],[\"7103\",\"基隆市\"],[\"7104\",\"台中市\"],[\"7105\",\"台南市\"],[\"7106\",\"新竹市\"],[\"7107\",\"嘉义市\"],[\"7108\",\"新北市\"],[\"7109\",\"宜兰县\"],[\"7110\",\"桃园市\"],[\"7111\",\"新竹县\"],[\"7112\",\"苗栗县\"],[\"7114\",\"彰化县\"],[\"7115\",\"南投县\"],[\"7116\",\"云林县\"],[\"7117\",\"嘉义县\"],[\"7120\",\"屏东县\"],[\"7121\",\"台东县\"],[\"7122\",\"花莲县\"],[\"7123\",\"澎湖县\"]]],[\"8100\",\"香港特别行政区\",[[\"8101\",\"中西区\"],[\"8102\",\"东区\"],[\"8103\",\"九龙城区\"],[\"8104\",\"观塘区\"],[\"8105\",\"南区\"],[\"8106\",\"深水埗区\"],[\"8107\",\"黄大仙区\"],[\"8108\",\"湾仔区\"],[\"8109\",\"油尖旺区\"],[\"8110\",\"离岛区\"],[\"8111\",\"葵青区\"],[\"8112\",\"北区\"],[\"8113\",\"西贡区\"],[\"8114\",\"沙田区\"],[\"8115\",\"屯门区\"],[\"8116\",\"大埔区\"],[\"8117\",\"荃湾区\"],[\"8118\",\"元朗区\"]]],[\"8200\",\"澳门特别行政区\",[[\"820002\",\"花王堂区\"],[\"820006\",\"嘉模堂区\"],[\"820007\",\"路凼填海区\"],[\"820008\",\"圣方济各堂区\"],[\"8204\",\"望德堂区\"],[\"8201\",\"花地玛堂区\"],[\"8205\",\"风顺堂区\"],[\"8203\",\"大堂区\"]]],[\"9000\",\"其他\"]]"); + try { + JSONArray dataArray = JSONArray.parseArray(data.toString()); + System.out.println(dataArray.size()); + for(int i=0;i defaultList = new ArrayList(); + defaultList.add("templateId"); + defaultList.add("templateVersionName"); + defaultList.add("receiveId"); + JSONObject templateVariable = new JSONObject(); + + Map paraMap = new HashMap(); + paraMap.put("hr_gongsi","百茶百道"); + paraMap.put("hr_zzdate","2025-07-04"); + paraMap.put("hr_name","羊多多5"); + paraMap.put("hr_gongsi1","百茶百道"); + Iterator> iterator = paraMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + String key = entry.getKey(); + String value = entry.getValue().toString(); + if(!defaultList.contains(key)){ + templateVariable.put(key,value); + } + } + +// templateVariable.put("name,","石磊"); +// templateVariable.put("current_date,",sdf.format(new Date())); + + JSONObject data_Json = new JSONObject(); + data_Json.put("template_id",template_id); + data_Json.put("template_version_name",template_version_name); + data_Json.put("template_variable",templateVariable); + + JSONObject contentJson = new JSONObject(); + contentJson.put("type","template"); + contentJson.put("data",data_Json); + + JSONObject bodyJson = new JSONObject(); + bodyJson.put("receive_id",openId); + bodyJson.put("msg_type","interactive"); + bodyJson.put("content", contentJson.toJSONString()); + String uuid = UUID.randomUUID().toString(); + bodyJson.put("uuid", uuid); + + System.out.println("bodyJson:{}"+bodyJson.toJSONString()); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test7.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test7.java new file mode 100644 index 0000000..3b2be28 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test7.java @@ -0,0 +1,40 @@ +package com.weaver.seconddev.chapanda.test; + +import java.io.*; +import java.util.UUID; + +public class test7 { + public static void main(String[] args) { + String uuid = UUID.randomUUID().toString(); + System.out.println("uid:"+uuid); + + String filePath = "/Users/apple/Downloads/20250715/浙文考勤模块开发需求.docx"; // 文件路径 + try { + InputStream inputStream = new FileInputStream(new File(filePath)); + + byte[] data = convertInputStreamToBytes(inputStream); + System.out.println("data:"+data.length); +// 使用 inputStream 进行文件操作 + System.out.println("文件已成功转换为 InputStream"); + inputStream.close(); + } catch (FileNotFoundException e) { + System.err.println("文件未找到: " + e.getMessage()); + } catch (IOException e) { + System.err.println("IO 异常: " + e.getMessage()); + } + + } + + + public static byte[] convertInputStreamToBytes(InputStream inputStream) throws IOException { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + System.out.println("inputStream2:{}"+inputStream.available()); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + byteStream.write(buffer, 0, bytesRead); + } + System.out.println("byteStream:{}"+byteStream.toByteArray().length); + return byteStream.toByteArray(); + } +} diff --git a/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test8.java b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test8.java new file mode 100644 index 0000000..e290c21 --- /dev/null +++ b/茶百道/secondev-chapanda-integration/src/main/java/com/weaver/seconddev/chapanda/test/test8.java @@ -0,0 +1,141 @@ +package com.weaver.seconddev.chapanda.test; + + +import com.lsy.baselib.crypto.util.Base64; +import com.lsy.baselib.crypto.util.CryptUtil; +import com.lsy.baselib.crypto.util.FileUtil; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.PrivateKey; +import java.util.UUID; + +public class test8 { + + public static void main(String[] args) { +// String hiredate = "2024-08-09 00:00:00"; +// if(StringUtils.isNotBlank(hiredate)){ +// hiredate = hiredate.substring(0,10); +// } +// System.out.println(hiredate); +// System.out.println(hiredate); +// +// String lzrq = "2025-08-09"; +// String lznf = "2025"; +// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); +// +// LocalDate rzDate = LocalDate.parse(lznf+"-01-01", formatter); +// LocalDate lzDate = LocalDate.parse(lzrq, formatter); +// long workDays = ChronoUnit.DAYS.between(rzDate,lzDate); +// System.out.println(workDays); + // + +// String jsonStr = "{\"templateId\": \"JMHT-ZXSJ\"}"; +// try { +// String secret = "7f067a08f5c675137e6e72aa298e2c07"; +// String processed = jsonStr +// .replaceAll("\\\\.", Matcher.quoteReplacement("$0")); +// +// System.out.println(processed); +// Mac sha256 = Mac.getInstance("HmacSHA256"); +// sha256.init(new SecretKeySpec(secret.getBytes(), "HmacSHA256")); +// byte[] hash = sha256.doFinal(processed.getBytes()); +// String data = Hex.encodeHexString(hash); +// System.out.println(data); +// } catch (Exception e) { +// throw new RuntimeException("加密失败", e); +// } + +// String date ="2025-06-10"; +// System.out.println(date.length()); + String uuid = UUID.randomUUID().toString(); + System.out.println(uuid); +// +// String message = "{\"code\":0,\"data\":{\"calendars\":[{\"calendar\":{\"calendar_id\":\"feishu.cn_CyZB7DD34hJrcBwosRTtDf@group.calendar.feishu.cn\",\"color\":-11034625,\"description\":\"\",\"permissions\":\"private\",\"role\":\"owner\",\"summary\":\"聚才林HR\",\"summary_alias\":\"\",\"type\":\"primary\"},\"user_id\":\"ou_f102af8c3620c64b37077cc949bcc8fe\"}]},\"msg\":\"success\"}"; +// if(StringUtils.isNotBlank(message)){ +// JSONObject returnData = JSONObject.parseObject(message); +// if(returnData.containsKey("code")){ +// String code = returnData.getString("code"); +// if("0".equals(code)){ +// JSONObject dataJson = returnData.getJSONObject("data"); +// JSONArray calendarsArray = dataJson.getJSONArray("calendars"); +// for(int i=0;i paramList = new ArrayList<>(100); + paramList.add(pkey); + paramList.add(Constants.TENANT_KEY); + List sqlParamList = databaseUtils.querySqlParamEntity(paramList); + Map result = databaseUtils.executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = databaseUtils.getDataSourceList(result); + log.error("recordList:{}",recordList.size()); + if(recordList.size() > 0){ + Map recordMap = recordList.get(0); + value = String.valueOf(recordMap.get(envType+"value")); + } + }catch (Exception e){ + log.error("e:{}", e); + } + return value; + } + +} diff --git a/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/CommonUtils.java b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/CommonUtils.java new file mode 100644 index 0000000..9e0b51a --- /dev/null +++ b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/CommonUtils.java @@ -0,0 +1,422 @@ +package com.weaver.seconddev.chapanda.prop.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } + + public Map requestToMap(HttpServletRequest request) { + Map properties = request.getParameterMap();//把请求参数封装到Map中 + Map returnMap = new HashMap(); + Iterator> iter = properties.entrySet().iterator(); + String name = ""; + String value = ""; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + name = entry.getKey(); + Object valueObj = entry.getValue(); + if (null == valueObj) { + value = ""; + } else if (valueObj instanceof String[]) { + String[] values = (String[]) valueObj; + for (int i = 0; i < values.length; i++) { + value = values[i] + ","; + } + value = value.substring(0, value.length() - 1); + } else { + value = valueObj.toString(); + } + returnMap.put(name, value); + } + return returnMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/DatabaseUtils.java b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/DatabaseUtils.java new file mode 100644 index 0000000..e9addf3 --- /dev/null +++ b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/DatabaseUtils.java @@ -0,0 +1,366 @@ +package com.weaver.seconddev.chapanda.prop.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public Map executeUpdate(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + + } + + /*** + * + * @param sourceType + * @param groupId + * @param sql + * @param sqlparam + * @return + */ + public Map executeForUpdate(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeForUpdate(executeSqlEntity); + } + + /*** + * + * @param sql + * @param pageNo + * @param pageSize + * @return + */ + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + /** + * 获取sql入参 + * @param list + * @return + */ + public List querySqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public List> getSqlList(String sourceType,String groupId,String dataSql,List paramList){ + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + return recordList; + } + + /*** + * + * @param sourceType + * @param groupId + * @param dataSql + * @param paramList + * @return + */ + public Map getSqlMap(String sourceType,String groupId,String dataSql,List paramList){ + Map recordMap = new HashMap(); + List sqlParamList = querySqlParamEntity(paramList); + Map result = executeForQuery(sourceType, groupId, dataSql, sqlParamList); + List> recordList = getDataSourceList(result); + if(recordList.size() > 0){ + recordMap = recordList.get(0); + } + return recordMap; + } + + + +} diff --git a/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/ParamConfigUtil.java b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/ParamConfigUtil.java new file mode 100644 index 0000000..07c07f8 --- /dev/null +++ b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/ParamConfigUtil.java @@ -0,0 +1,36 @@ +package com.weaver.seconddev.chapanda.prop.util; + +import com.weaver.seconddev.chapanda.prop.dao.ParamConfigDao; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ParamConfigUtil { + + private final static Logger log = LoggerFactory.getLogger(ParamConfigUtil.class); + + + + @Autowired + ParamConfigDao paramConfigDao; + /** + * + * @return + */ + public String queryEnvironmentValue(String pkey){ + String value = ""; + if(StringUtils.isNotBlank(pkey)){ + SecDevProperty secDevProperty = new SecDevProperty(); + String envType = secDevProperty.getEvntype(); + log.error("envType:" + envType); + if(StringUtils.isNotBlank(envType)){ + paramConfigDao.queryEnvironmentValue(pkey,envType); + } + } + return value; + } + +} diff --git a/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/SecDevProperty.java b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/SecDevProperty.java new file mode 100644 index 0000000..7eaf96c --- /dev/null +++ b/茶百道/secondev-chapanda-prop/src/main/java/com/weaver/seconddev/chapanda/prop/util/SecDevProperty.java @@ -0,0 +1,35 @@ +package com.weaver.seconddev.chapanda.prop.util; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import javax.ws.rs.GET; + +/** + * packageName com.weaver.seconddev.chapanda.prop.util + * + * @ClassName SecDevProperty + * @Author shil + * @Date 2025/8/13 18:44 + * @Description TODO + */ + + +@Configuration +// 自动刷新配置,不需要重启服务 +@RefreshScope +public class SecDevProperty { + + @Value("${weaver.secondev.chapanda.evntype:prod}") + private String evntype; + + public String getEvntype() { + return evntype; + } + + public void setEvntype(String evntype) { + this.evntype = evntype; + } +}